C\C++調試技巧
在調試代碼時,有時會遇到報錯的的函數是沒問題,而是調用它的函數傳入的參數是異常的,而又沒法通過代碼準確定位到具體調用的位置的情況,特別是對一些基礎函數,往往會出現這種情況,因為工程中調用它們的地方太多,而且有時會漏掉返回值檢測。這里給出一個快速找出調用者是誰的方法。
//filename: tt.h
#include <stdio.h>
int foo(int p);
#define foo(_a) \
do { \
printf("[%s:%d]call foo()\n", __FUNCTION__, __LINE__); \
foo(_a); \
} while (0)
//filename: tt.c
#include "tt.h"
#ifdef foo
#undef foo
#endif
int foo(int p)
{
printf("input = %d\n", p);
return p;
}
//filename: main.c
#include "tt.h"
int main()
{
foo(1024);
return 0;
}
未定義#define foo(_a)宏時執行結果如下(將tt.h中定義foo的那段代碼注釋掉):
$ cc main.c tt.c $ ./a.out >> input = 1024
定義了#define foo(_a)宏之后執行結果如下:
$ cc main.c tt.c $ ./a.out >> [main:5]call foo() >> input = 1024
通過定義與函數一致的宏,調用的時候執行了修改了之后的代碼,這樣我們就可以在其中添加一些我們需要的信息,方便我們調試。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!