منبع اصلی نوشتار زیر در این لینک قرار دارد

اشکال زدایی با تابع ()assert

debugging اشکال زدایی با تابع ()assert

سلام دوستان

اشکال زدایی برنامه، برای داشتن یک برنامه کامپیوتری کارا و بدون نقص لازم است. در زمان کامپایل/اجرا، اشکالات مختلفی می تواند در حین نوشتن برنامه به وجود بیاید؛ یکی از دسته های این اشکلات، اشکالات منطقی است. برطرف کردن این نوع اشکالات گاهی می تواند بسیار اعصاب خورد کن و زمان بر باشد. در این پست، می خواهیم نکاتی درباره تابعی از قبل آماده شده در زبان C و ++C بیان کنیم که با استفاده از آن می توانید در صورتی که قسمتی از برنامه، نتیجه ای برخلاف نتیجه مطلوب شما داشت متوجه آن بشوید.

فرم تعریف تابع:

#include <assert.h> //or <cassert>
void assert (int expression);

اگر مقدار آرگومان (expression)، مقدار عددی ۰ و یا مقدار بولین false باشد، این تابع ابتدا متنی با شکل و محتوای زیر روی دستگاه خروجی خطای استاندارد، می نویسد و سپس به اجرای برنامه، به طور ناتمام  خاتمه می دهد.

Assertion failed: <expression>, file <filename>, line <line number>

 خوب تا اینجا، شما به عنوان یک برنامه نویس، خط کد و عبارت آن را که نتیجه ای خلاف انتظار دارد و اشکال منطقی برنامه شما را به وجود می آورد، شناختید.

بعد از دیدن یک مثال بسیار ساده، با ذکر دو نکته معرفی تابع ()assert را به اتمام می رسانیم. البته یافتن دلیل اشکال منطقی برنامه مثالی را به عهده خواننده باهوش و کاردان می گذاریم!

/* assert example */
#include <stdio.h>      /* printf */
#include <assert.h>     /* assert */

void print_number(int* myInt) {
  assert (myInt!=NULL);
  printf ("%dn",*myInt);
}

int main ()
{
  int a=10;
  int * b = NULL;
  int * c = NULL;

  b=&a;

  print_number (b);
  print_number (c);

  return 0;
}

و اما نتیجه :

Result اشکال زدایی با تابع ()assert

نکته اول:

هنگامی که برنامه شما از این دست مشکلات خالی شد و یا آماده بودید که برنامه را به سفارش دهنده تحویل بدهید، استفاده از ماکروی زیر می تواند موجب شود کامپایلر در کامپایل بعدی تمام دستورات assert را نادیده بگیرد. اما توجه داشته باشید که حتماً این ماکرو باید قبل از هدر فایلِ assert.h یا cassert تعریف شده باشد، در غیر این صورت بی استفاده خواهد بود.

#define NDEBUG

نکته دوم:

نکته دوم ربط محسوسی به نکته اول دارد. در نکته اول گفتیم تمام دستورات assert می تواند با تعریف ماکروی مذکور نادیده گرفته بشوند؛ پس وابسته کردن برنامه به اجرای حتمی دستور assert اشتباهی بزرگ است. مثال های زیر منظور را واضح تر ارائه خواهد داد.

// BAD
assert(x++);

// GOOD
assert(x);    
x++;

// Watch out! Depends on the function:
assert(foo());

// Here's a safer way:
int ret = foo();
assert(ret);

 

digg اشکال زدایی با تابع ()assert  reddit اشکال زدایی با تابع ()assert  stumbleupon اشکال زدایی با تابع ()assert  yahoo buzz اشکال زدایی با تابع ()assert  dzone اشکال زدایی با تابع ()assert  facebook اشکال زدایی با تابع ()assert  delicious اشکال زدایی با تابع ()assert  dotnetkicks اشکال زدایی با تابع ()assert  dotnetshoutout اشکال زدایی با تابع ()assert  linkedin اشکال زدایی با تابع ()assert  technorati اشکال زدایی با تابع ()assert  twitter اشکال زدایی با تابع ()assert  google buzz اشکال زدایی با تابع ()assert  



برچسب ها :