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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!