C C 除錯技巧

2021-06-20 17:30:54 字數 1143 閱讀 2674

本文源於thinking in c++ chapter 3 和平時寫程式所得,會持續更新

書中3.9除錯技巧 p106

c的assert()巨集

方便的除錯巨集,引數為乙個斷言為真的表示式,如果斷言不為真,則發出乙個錯誤資訊告訴斷言是什麼並且程式終止。

#include #include using namespace std;

int main()

amrzs@ubuntu:cc$ g++ main.cpp

amrzs@ubuntu:cc$ ./a.out 

a.out: main.cpp:11: int main(): assertion `i != 100' failed.

已放棄 (核心已轉儲) 

在#include之前插入

#define ndebug 或者在編譯器命令列中定義ndebug,可以消除巨集產生的**

#include #define ndebug

#include using namespace std;

int main()

amrzs@ubuntu:cc$ g++ main.cpp

amrzs@ubuntu:cc$ ./a.out 

100把變數和表示式轉換為字串

在乙個預處理器的巨集中的引數前面使用乙個#,預處理器會把這個引數轉換成乙個字元陣列。

#define p(a) cout << #a << ": " << (a) << endl;
當不想除錯時,也可以插入乙個#ifdef使得定義的p(a)不起作用。

除錯標記:預處理器除錯標記 和 執行期除錯標記

常用的標記名為debug(不能使用ndebug,是c中的保留字)

#define debug

//...

#ifdef debug

//...debugging code

#endif // debug

c/c++還允許在編譯器的命令列中使用#define和#undef標記,使用可以用乙個單獨的命令重新編譯**並插入除錯資訊

GDB除錯使用技巧 專職C C 部落格

gdb除錯使用技巧 專職c c 部落格 gdb除錯使用技巧 現在的linux下面開發,除錯程式還是gdb好啊!杯具的slickedit,linux下面有不少問題。只好放棄!1 使用tui模式可以很方便的差看 啟動他方式有兩種 第一種是在啟動的時候帶引數 tui,如 a gdb tui 第二種是在gd...

gdb 除錯c c 的一些小技巧

ptype obj class struct 檢視obj class struct的成員,但是會把基類指標指向的派生類識別為基類 set print object on 這個選項可以看到派生物件的真實類名,雖然ptype也可以列印出物件 set print pretty on 以樹形列印物件的成員,...

C C 編碼技巧

宣告 其中有些內容並不是本人原創,而是學習的別人的經驗,或者是從書上看到的總結在此,既然拿出來共享,本人不再區分本人原創部分,而且有些技巧已經是眾所周知,或者已經用了很長時間了,也弄不清出處了,這些對原創者一併給予感謝!1.char str 20 char cp str 2 這樣比使用 char c...