C++ Debugging

در C++، Debugging (رفع خطا و اشکال‌زدایی) به معنای پیدا کردن و اصلاح مشکلات کد است تا برنامه درست اجرا شود. Debugging شامل شناسایی Compile-time Errors، Runtime Errors، Logical Errors و بررسی جریان برنامه است.

🔹 1️⃣ روش‌های معمول Debugging

1. چاپ مقادیر (Print Debugging)

ساده‌ترین روش، استفاده از cout برای بررسی مقدار متغیرها یا رسیدن به یک نقطه از برنامه است.

#include <iostream> using namespace std; int main() { int sum = 0; for(int i = 1; i <= 5; i++) { sum += i; cout << "i = " << i << ", sum = " << sum << endl; // Debug } cout << "Total sum: " << sum << endl; return 0; }

📌 این روش برای برنامه‌های کوچک و سریع مفید است.

2. استفاده از assert

تابع assert بررسی می‌کند یک شرط درست باشد و در صورت نادرست بودن، برنامه متوقف می‌شود.

#include <iostream> #include <cassert> using namespace std; int divide(int a, int b) { assert(b != 0); // اگر b صفر باشد برنامه متوقف می‌شود return a / b; } int main() { cout << divide(10, 2) << endl; // خروجی: 5 cout << divide(10, 0) << endl; // ❌ متوقف می‌شود return 0; }

3. Debugger

Debugger ابزار پیشرفته‌ای است که با IDE یا ترمینال استفاده می‌شود:

  • Breakpoint: توقف برنامه در خط خاص برای بررسی مقادیر متغیرها.

  • Step Over: اجرای خط به خط بدون وارد شدن به توابع.

  • Step Into: ورود به توابع برای بررسی دقیق‌تر.

  • Watch Variables: مشاهدهٔ مقدار متغیرها در زمان اجرا.

📌 مثال IDE: Visual Studio, CLion, Code::Blocks, gdb.

4. بررسی Runtime Errors با try-catch

استفاده از Exception Handling کمک می‌کند خطاهای زمان اجرا کنترل شوند و برنامه کرش نکند.

#include <iostream> using namespace std; int main() { int a = 10, b = 0; try { if (b == 0) throw "Division by zero!"; cout << a / b << endl; } catch (const char* msg) { cout << "Error: " << msg << endl; } return 0; }

5. استفاده از Valgrind (Linux)

  • برای شناسایی Memory Leak و Pointer Errors.

  • دستور مثال:

valgrind ./program

6. ترکیب تکنیک‌ها

  • ابتدا Compile-time Errors را اصلاح کنید.

  • سپس Runtime Errors را با assert یا try-catch مدیریت کنید.

  • در نهایت Logical Errors را با print/debugger بررسی کنید.

🔹 نکات کلیدی Debugging

  • Breakpoints بهترین ابزار برای برنامه‌های بزرگ هستند.

  • Print Debugging سریع و ساده است ولی برای برنامه‌های پیچیده محدودیت دارد.

  • همیشه حافظه و منابع را بررسی کنید تا Memory Leak نداشته باشید.

  • Exception Handling باعث اجرای امن برنامه می‌شود.

💡 خلاصه:
Debugging در C++ ترکیبی از Print Statements، Assert، Try-Catch، Debugger، ابزارهای مدیریت حافظه است و هدف آن پیدا کردن و رفع Compile-time, Runtime, Logical Errors است تا برنامه قابل اعتماد و بدون کرش باشد.