Gdb 如何debug宏定義

gcc默認編譯的時候,gdb調試過程當中是不能看到宏定義的,"p 宏名" 會顯示錯誤,以下:bash

(gdb) p CLIENT6_BEGIN_FLG
No symbol "CLIENT6_BEGIN_FLG" in current context.

這樣gdb調試過程當中就很不直觀,尤爲是不少大型程序的宏定義比較複雜。函數

要使gdb能查看宏定義,gcc編譯的時候要加上-g3和-gdwarf-2兩個選項。debug

gdb的debug一共有4個等級,默認使用第2個等級。調試

----第0個等級表示不使用任何的debug信息,但-g0和-g是不同的code

----第1個等級包含最少的信息,但對於查看堆棧來講已經足夠了,它包含了一些函數描述和外部變量,但不包含局部變量和行號編譯

----第3個等級包含額外的信息,例如宏定義,要使用選項-g3class

-gdwarf-2不能再接受一個緊密鏈接的debug等級,這是由於gcc過去支持一個選項-gdwarf,這個選項要以DWARF的1號版本格式來產生debug信息(這個版本和2號版本是大相徑庭的),若是那麼作就會讓人很困惑。這種debug格式太長了,可是這個選項又不能變,因此改用選項-glevel來爲DWARF改變debug等級。test

加上相關參數後,編譯:變量

gcc -gdwarf-2 -g3 test.c

gdb a.out後就可以使用 "p 宏名" 輸出宏的內容了gcc

(gdb) p CLIENT6_BEGIN_FLG
$1 = "<Client6>"

須要查看宏定義是如何被展開的,可使用以下的命令:

macro expand macro_name
相關文章
相關標籤/搜索