以test.cpp為例:
#include #include int main()
可以檢視某乙個變數的當前值,這個一般在程式單步除錯或者打斷點情況下有效否則為:std::cout下面是gcc/g++常用編譯選項,我們的可執行檔案要能夠被gdb除錯,必須在編譯時加上除錯資訊,也即是加上-g選項
完整命令如下:
g++ -g test.cpp -o test
執行gdb test 進入gdb除錯(種種作用和平時vs中除錯本質上一樣,只是變成了命令列而已)
如上可以看到命令列提示符為(gdb),接著我們就可以在這個gdb的命令列提示符上面輸入各種gdb的除錯命令了(補充:
這裡也可以在shell中輸入gdb,然後回車,這樣直接進入到gdb的除錯命令列
,之後可以通過file test命令來載入待除錯的可執行程式)。
最多顯示10行,按回車鍵看接下來10行,以此類推。
break(簡寫b)命令, 在gdb下新增斷點使用命令break或簡寫 b,有下面幾個常見用法(這裡統一用 b):
b 函式名 b
行號 b 檔名:行號 b
行號 if條件
舉例:第8行新增斷點,b 8
檢視斷點: info break
禁用和解禁斷點: enable/disable 斷點索引
刪除斷點:delete 斷點索引
run簡寫為r
正確:
執行過程中設定為單步執行,n
使用watch 命令可以實現監控變數,使用info watch命令可以檢視監控的變數。同時break所擁有的enable,disable,delete等動詞對於watch依然使用,且用法大同小異。
使用display 命令可以在每一步執行之後列印變數的當前值,如下:
在gdb命令列環境中輸入wi命令,可以讓我們進入視覺化除錯環境,這個環境可以看到源**,所使用的除錯命令與上面講到的一致
這個介面完全就如同vs裡面了,qt也是如此呢
q:g++/gcc是這樣,那麼用cmake編譯程式時如何使得程式支援gdb除錯呢? a:
解決方法如下所述
修改cmakelists.txt檔案,如我修改如下:
# version 2.4 might work, but it won't find static libraries with odd names
cmake_minimum_required(version 2.8)
set(cmake_build_type "debug")
set(cmake_cxx_flags_debug "$env -o0 -wall -g2 -ggdb")
set(cmake_cxx_flags_release "$env -o3 -wall")
linux下的gdb除錯
如果編譯時,增加了引數 g,就會生成帶源 除錯符號的可執行檔案。增加的除錯符號一般會使檔案變的大一點。gcc o xx xx.c g 進一步地,就可以執行下面的指令啟動除錯工具進入除錯環境對程式進行除錯了。gdb xx 在除錯環境下,可以輸入下列指令來控制除錯。l n第乙個字母是小寫的l,列出第n行...
linux下安裝gdb除錯
1 arm linux gcc 每一種硬體都有其對應的最好的編譯工具,並不是最新的最好。其實思想很簡單,就是在宿主機 pc 上編譯目標板子上執行的程式。所以工具鏈要用目標板的,這樣去編譯生成可執行的二進位制檔案。這裡有乙個工具製作工具鏈,雖然它可以自動下,還是先下好吧自己,那個速度,呵呵。2 arm...
linux下的gdb除錯
在看gdb除錯多執行緒多程序之前,我們先來回顧一下gdb除錯的一些基本命令 首先vim乙個檔案,然後進行編譯用命令 gcc o test 所要生成的檔案 test1 你剛剛寫的檔案 g 檢查沒有問題後,再gdb test對你寫的檔案進行除錯。進入gdb後,有這些命令可以用 b 行號 表示在哪一行打了...