所謂gdb,是Linux下一種常見的調試工具,在寫一些簡單的項目的時候還是很有益處的,但是如果項目較大,設計到很多進程之類的,不建議用gdb,而建議用printf函數來檢測問題所在。使用gdb調試,需要在gcc編譯時加上-g,例如gcc file.c -g -o app.下面是gdb的一些常用的快捷鍵,僅供大家參考。
(以下括號內均代表簡稱,若快捷鍵後面沒有跟括號,則代表此快捷鍵暫無簡稱)
help(h), 按模塊列出命令行。
list(l), 顯示代碼,查看當前代碼。
start,開始運行。
run(r), 全速運行。
next(n),下一步,此下一步是指逐過程的下一步,相當於vs裏面的F10快捷鍵,調試時把一個函數當成一步。
step(s), 下一步,此下一步是逐語句的下一步。相當於vs裏面的F11快捷鍵,調試時進入函數一步一步調試,但是僅可以跳進自己寫的函數裏面,不能跳進c標準庫函數 裏面,例如fopen函數等等。
print(p),打印
break(b)+行號/函數名,在gdb裏分配的行號裏設置斷點,此行號不是你自己寫的函數所對應的行號。
info(i),查看gdb內部局部變量的數值。
info breakpoints, 顯示斷點。
enable breakpoints,啓用斷點。
disable breakpoints,禁用斷點,一般都直接退出了,所以很少用。
continue(c),繼續,在斷點前停下來。
breaktrace(bt),顯示函數調用的棧楨和層級關係,(回調函數裏面觀察的最爲明顯)。
frame(f)+棧楨號(此棧楨號通過breaktrace得來),切換函數的棧楨。雖然此時切換了棧楨,但若此時執行下一步,仍然是原來棧楨執行的下一步,而不是切換後的下 一步。
set var n=100.設置變量的值。
Ctrl+p,上翻命令。
quit,結束gdb。
finish,結束當前函數,返回到函數的調用點。
display,設置觀察變量,此後每次下一步都會顯示設置的變量的值。
watch,被設置觀察點上的變量發生修改時,打印顯示。
info(i) watch, 顯示觀察點。
undisplay+編號,取消觀察變量。
x,查看內存。
core文件,可以看到程序斷之前執行到哪兒了,進而找出出錯的原因。但是Ubuntu裏面默認的core文件大小爲0,所以無法往裏面寫東西,如果想要打開它,只需要用
ulimit -c 1024(給文件設置大小)開啓core文件即可,調試時用gdb app core.
在fork()中,既有父進程又有子進程時,用set follow_fork_mode child來跟蹤子進程,用set follow_fork_mode parent來跟蹤父進程,但是這種在多進程裏面不是很好 用,如果程序裏面是一個死循環的話,可能會導致無法結束,這時只能用kill來殺死進程號可以解決。