原文:
用gdb
除錯多程序的程式會遇到困難,gdb
只能跟蹤乙個程序(預設是跟蹤父程序),而不能同時跟蹤多個程序,但可以設定gdb
在fork
之後跟蹤父程序還是子程序。以上面的程式為
#include #include #include #define maxline 80
int main(void)
if ((pid = fork()) < 0)
if (pid > 0) /* parent */
else /* child */
return 0;
}
$ gcc main.c -g
$ gdb a.out
gnu gdb 6.8-debian
license gplv3+: gnu gpl version 3 or later this is free software: you are free to change and redistribute it.
there is no warranty, to the extent permitted by law. type "show copying"
and "show warranty" for details.
this gdb was configured as "i486-linux-gnu"...
(gdb) l
2 #include 3 #include 4 #include 5
6 int main(void)
7 16 if(pid==0) else
int main()
既然需要除錯,那麼生成的可執行檔案就需要包含除錯的資訊,這裡應該怎麼做呢?很簡單,輸入 gcc test.c -g -o test。輸入命令之後,如果沒有編譯和鏈結方面的錯誤,你就可以看到 可執行檔案test了。
除錯的步驟基本如下所示,
(01) 首先,輸入gdb test
(02) 進入到gdb的除錯介面之後,輸入list,即可看到test.c原始檔
(03) 設定斷點,輸入 b main
(04) 啟動test程式,輸入run
(05) 程式在main開始的地方設定了斷點,所以程式在printf處斷住
(06) 這時候,可以單步跟蹤。s單步可以進入到函式,而n單步則越過函式
(07) 如果希望從斷點處繼續執行程式,輸入c
(08) 希望程式執行到函式結束,輸入finish
(09) 檢視斷點資訊,輸入 info break
(10) 如果希望檢視堆疊資訊,輸入bt
(11) 希望檢視記憶體,輸入 x/64xh + 記憶體位址
(12) 刪除斷點,則輸入delete break + 斷點序號
(13) 希望檢視函式區域性變數的數值,可以輸入print + 變數名
(14)希望修改記憶體值,直接輸入 print + *位址 = 數值
(15) 希望實時列印變數的數值,可以輸入display + 變數名
(16) 檢視函式的彙編**,輸入 disassemble + 函式名
(17) 退出除錯輸入quit即可
linux下的C語言開發(gdb除錯)
編寫 過程中少不了除錯。在windows下面,我們有visual studio工具。在linux下面呢,實際上除了gdb工具之外,你沒有別的選擇。那麼,怎麼用gdb進行除錯呢?我們可以一步一步來試試看。cpp view plain copy include int iterate int value...
linux下的C語言開發(gdb除錯)
平凡的程式設計師 編寫 過程中少不了除錯。在windows下面,我們有visual studio工具。在linux下面呢,實際上除了gdb工具之外,你沒有別的選擇。那麼,怎麼用gdb進行除錯呢?我們可以一步一步來試試看。cpp view plain copy include intiterate i...
linux下的C語言開發 gdb除錯
編寫 過程中少不了除錯。在windows下面,我們有visual studio工具。在linux下面呢,實際上除了gdb工具之外,你沒有別的選擇。那麼,怎麼用gdb進行除錯呢?我們可以一步一步來試試看。include int iterate int value int main 既然需要除錯,那麼生...