الگوریتم اول

لطفا صبر کنید...

تست و اشکال‌زدایی (Debugging) در#C

تست و اشکال‌زدایی (Debugging) در #C

اشکال‌زدایی (Debugging) فرآیندی است که در آن برنامه‌نویس خطاها و باگ‌های موجود در کد را پیدا کرده و برطرف می‌کند. در #C و محیط Visual Studio ابزارهای مختلفی برای دیباگ کردن برنامه‌ها وجود دارد که به شما کمک می‌کنند کد خود را تحلیل کرده و مشکلات را شناسایی کنید.

۱. انواع خطاها در #C

قبل از بررسی ابزارهای اشکال‌زدایی، ابتدا باید انواع خطاها را بشناسیم:

  1. خطاهای نحوی (Syntax Errors)

    • خطاهایی که به دلیل نقض قوانین زبان برنامه‌نویسی رخ می‌دهند.
    • مثال: فراموش کردن سمی‌کالن ; در انتهای یک دستور.
  2. خطاهای زمان اجرا (Runtime Errors)

    • این خطاها در زمان اجرای برنامه رخ می‌دهند، مانند تقسیم بر صفر یا دسترسی به یک متغیر null.
    • مثال:
      int x = 10;
      int y = 0;
      int result = x / y; // خطای تقسیم بر صفر
  3. خطاهای منطقی (Logical Errors)

    • این خطاها باعث می‌شوند برنامه به درستی اجرا شود اما نتیجه‌ای اشتباه تولید کند.
    • مثال: محاسبه نادرست یک میانگین.

۲. استفاده از Breakpoint در Visual Studio

Breakpoint یکی از قوی‌ترین ابزارهای اشکال‌زدایی در #C است که به شما امکان می‌دهد اجرای برنامه را در یک نقطه خاص متوقف کنید و مقدار متغیرها را بررسی کنید.

 نحوه تنظیم Breakpoint:

  1. در Visual Studio کد خود را باز کنید.
  2. روی خطی که می‌خواهید متوقف شود، کلیک کرده و دکمه F9 را فشار دهید یا روی نوار کناری (gutter) کلیک کنید.
  3. اجرای برنامه را با F5 شروع کنید. برنامه تا رسیدن به Breakpoint اجرا شده و متوقف می‌شود.
  4. از پنجره Locals یا Watch برای بررسی مقدار متغیرها استفاده کنید.

۳. استفاده از ابزارهای Debugging در Visual Studio

 Watch Window

  • این پنجره به شما اجازه می‌دهد مقدار متغیرهای دلخواه را بررسی کنید.
  • برای باز کردن آن، پس از رسیدن به Breakpoint از منوی Debug → Windows → Watch استفاده کنید.

 Immediate Window

  • این ابزار برای اجرای دستورات #C در هنگام اشکال‌زدایی استفاده می‌شود.
  • باز کردن: Debug → Windows → Immediate

 Call Stack

  • مسیر اجرای برنامه را نشان می‌دهد و کمک می‌کند بفهمید کدام متد‌ها اجرا شده‌اند.
  • باز کردن: Debug → Windows → Call Stack

 Exception Handling

  • در صورت وقوع استثناها (Exceptions)، Visual Studio خطای مربوطه را نمایش می‌دهد و امکان دیباگ را فراهم می‌کند.

۴. مدیریت استثناها برای اشکال‌زدایی بهتر

یکی از روش‌های جلوگیری از کرش کردن برنامه، استفاده از بلوک try-catch است.

 مثال مدیریت خطاها در #C

using System;

class Program
{
    static void Main()
    {
        try
        {
            int x = 10;
            int y = 0;
            int result = x / y; // ایجاد خطای تقسیم بر صفر
        }
        catch (DivideByZeroException ex)
        {
            Console.WriteLine("خطا: تقسیم بر صفر مجاز نیست!");
            Console.WriteLine("جزئیات خطا: " + ex.Message);
        }
        catch (Exception ex)
        {
            Console.WriteLine("یک خطای غیرمنتظره رخ داد: " + ex.Message);
        }
    }
}

 استفاده از try-catch از کرش کردن برنامه جلوگیری می‌کند و پیام مناسبی نمایش می‌دهد.

۵. ثبت لاگ (Logging) برای اشکال‌زدایی بهتر

برای ردیابی خطاها در برنامه‌های واقعی، می‌توان از System.Diagnostics یا کتابخانه‌های لاگ‌گیری مانند Serilog استفاده کرد.

مثال لاگ‌گیری با System.Diagnostics

using System;
using System.Diagnostics;

class Program
{
    static void Main()
    {
        Debug.WriteLine("برنامه شروع شد.");

        try
        {
            int x = 10;
            int y = 0;
            int result = x / y;
        }
        catch (Exception ex)
        {
            Debug.WriteLine("خطا رخ داد: " + ex.Message);
        }

        Debug.WriteLine("برنامه به پایان رسید.");
    }
}

🔹 ("پیام")Debug.WriteLine پیام را در پنجره Output در Visual Studio نمایش می‌دهد.

۶. تست واحد (Unit Testing) در #C

برای جلوگیری از خطاهای منطقی می‌توان از تست واحد استفاده کرد. یکی از محبوب‌ترین فریمورک‌های تست در #C، xUnit و MSTest است.

نصب xUnit در Visual Studio

  1. در Solution Explorer، روی پروژه راست‌کلیک کنید و Manage NuGet Packages را باز کنید.
  2. پکیج xUnit را نصب کنید.

نمونه تست واحد با xUnit

using Xunit;

public class MathTests
{
    [Fact]
    public void Add_TwoNumbers_ReturnsSum()
    {
        // Arrange
        int a = 5, b = 10;

        // Act
        int result = a + b;

        // Assert
        Assert.Equal(15, result);
    }
}

🔹 Assert.Equal(15, result); بررسی می‌کند که مقدار result برابر ۱۵ باشد.

جمع‌بندی

Breakpoint به شما اجازه می‌دهد اجرای برنامه را متوقف کنید و مقدار متغیرها را بررسی کنید.
✅ استفاده از try-catch از کرش کردن برنامه جلوگیری می‌کند.
✅ با استفاده از Immediate Window، Watch، Call Stack می‌توان برنامه را به دقت بررسی کرد.
لاگ‌گیری (Logging) کمک می‌کند تا خطاها در محیط واقعی شناسایی شوند.
تست واحد (Unit Testing) از بروز خطاهای منطقی در برنامه جلوگیری می‌کند.