سطح مقدماتی (Beginner Level)
دیباگینگ (Debugging) به فرآیند پیدا کردن و رفع خطاهای نرمافزاری گفته میشود. هر برنامهنویسی، از مبتدی تا ارشد، با باگها مواجه میشود. تفاوت در این است که چقدر سریع میتوانند آنها را پیدا کنند.
۱. خواندن صحیح Traceback
اولین قدم برای رفع خطا، نترسیدن از پیامهای قرمز رنگ خطا (Traceback) است. پایتون دقیقاً به شما میگوید مشکل کجاست، اما باید زبان آن را یاد بگیرید. همیشه به آخرین خط پیام خطا دقت کنید.
۲. دیباگینگ با Print (Print Debugging)
سادهترین و رایجترین روش برای پیدا کردن خطا، چاپ کردن مقادیر متغیرها در نقاط مختلف کد است تا بفهمیم برنامه در هر مرحله چه وضعیتی دارد.
سطح پیشرفته (Professional Level)
استفاده از print برای پروژههای بزرگ یا کدهایی که روی سرور اجرا میشوند، روشی کثیف و ناکارآمد است. پایتون ابزارهای داخلی قدرتمندی برای توقف کد و بررسی لحظهای آن دارد.
۱. استفاده از breakpoint() و ماژول pdb
پایتون دارای یک دیباگر داخلی به نام pdb (Python Debugger) است. از نسخه ۳.۷ به بعد، تابع داخلی breakpoint() کار را بسیار ساده کرده است. وقتی مفسر به این خط میرسد، اجرای برنامه متوقف شده و شما وارد یک محیط تعاملی میشوید تا متغیرها را بررسی کنید.
(نکته: در محیط وب ممکن است توقف کامل کد قابل مشاهده نباشد، اما در ترمینال بسیار کاربردی است.)
# Example 1: Using breakpoint() (Static Demo)
def process_data(data):
result = []
for item in data:
# Code execution pauses here!
# You can type 'item' inside the debugger to see its value
breakpoint()
result.append(item * 2)
return result
۲. دستورات کلیدی pdb
وقتی وارد محیط دیباگ میشوید، باید با دستورات آن کار کنید.
- n (next): رفتن به خط بعدی.
- c (continue): ادامه اجرای برنامه تا
breakpointبعدی. - l (list): نمایش کدهای اطراف خط فعلی.
- p variable: چاپ مقدار متغیر.
- q (quit): خروج از دیباگر.
# Example 1: A script prepared for debugging
import sys
def logic(a, b):
# Imagine we want to debug this step
val = a + b
return val
# Standard pattern for debuggable scripts
if __name__ == "__main__":
# Usually you run this in terminal: python script.py
print(logic(10, 20))
۳. تفاوت logging و print در دیباگ
حرفهایها به جای print از ماژول logging استفاده میکنند. print همیشه خروجی میدهد، اما logging را میتوان خاموش کرد یا سطح آن را تغییر داد (مثلاً فقط ارورهای بحرانی را نشان دهد).
# Example 2: Logging in a real function (Static)
import logging
def connect_db(url):
logging.info(f"Attempting to connect to {url}")
try:
# connection logic
pass
except Exception as e:
logging.error(f"Connection failed: {e}", exc_info=True)