gdb调试器(一)
在默認(rèn)情況下,gcc在編譯時(shí)不會把調(diào)試符號插入到最終生成的二進(jìn)制代碼(機(jī)器代碼)中,因?yàn)檫@樣會急劇增加可執(zhí)行程序的大小。如果需要在編譯時(shí)生成調(diào)試符號的信息,則可以采用-g或-ggdb參數(shù)。
gcc在產(chǎn)生調(diào)試信息時(shí),同樣采用了分級的思路(-g1,-g2,-g3),默認(rèn)的級別是-g2,此時(shí)產(chǎn)生的調(diào)試信息包括擴(kuò)展的符號表、行號、局部或外部變量信息。級別-g3包含級別-g2的信息,另外還有源代碼中定義的宏。級別-g1不包含局部變量和與行號有關(guān)的調(diào)試信息,只能用來回溯跟蹤和堆棧轉(zhuǎn)儲。回溯跟蹤指的是監(jiān)視程序在運(yùn)行過程中的函數(shù)調(diào)用歷史;堆棧轉(zhuǎn)儲則是一種以原始的十六進(jìn)制格式保存程序執(zhí)行環(huán)境的方法,兩者都是經(jīng)常用到的調(diào)試手段。
gcc產(chǎn)生的調(diào)試符號具有普遍的適應(yīng)性,可以被許多調(diào)試器加以利用,但如果使用的是gdb調(diào)試器,還可以通過-ggdb參數(shù)來向最終的二進(jìn)制代碼中增加gdb專用的調(diào)試信息,從而可以方便gdb調(diào)試器的工作,但缺點(diǎn)是可能會引起其它調(diào)試器無法工作。-ggdb能夠接受的調(diào)試級別與-g是一樣的,它們對輸出的調(diào)試符號具有相同的影響。
注意:任何一個(gè)調(diào)試選項(xiàng)都會使最終生成的二進(jìn)制代碼文件的體積急劇增大,同時(shí)增加程序在執(zhí)行時(shí)的開銷,因此調(diào)試選項(xiàng)通常僅在軟件的開發(fā)和調(diào)試階段中使用,最終的產(chǎn)品中不包括調(diào)試信息。
[root@localhost work]# gcc -o hello hello.c
[root@localhost work]# ls -l hello
-rwxr-xr-x. 1 root root 8511 Oct 14 08:10 hello //8511 Byte(字節(jié))
[root@localhost work]# gcc -o hello1 -g hello.c
[root@localhost work]# ls -l hello1
-rwxr-xr-x. 1 root root 9503 Oct 14 08:11 hello1? //9503 Byte(字節(jié))
[root@localhost work]# gcc -o hello2 -g3 hello.c
[root@localhost work]# ls -l hello2
-rwxr-xr-x. 1 root root 28919 Oct 14 08:12 hello2??? //28919 Byte(字節(jié))
總結(jié)
- 上一篇: 成都欢乐谷身份证掉了怎么办
- 下一篇: gdb调试器(二)