linux下用命令編譯 除錯C 程式

2021-08-31 08:37:09 字數 1681 閱讀 3122

先安裝gcc :

sudo apt-get install gcc
寫乙個c++的程式,然後用下面的命令編譯:

g++  test.cpp  -g
當然你要找到你寫的那個cpp檔案的路徑。編譯後會產生乙個檔案:a.out,這就是編譯後的結果。在window中,這個檔案是a.exe。這個檔名也可以自己手動指定,如:

g++  test.cpp  -g -o test.out
之後,我們換用另乙個命令:gdb來執行除錯:

gdb a.out
這就進入了gdb的命令之中

在(gdb)後面可以輸入幾個引數來進行執行和除錯:

(gdb) l
當然,這個l可以寫成小寫

這個命令把這個程式的**列印出來,如果太長,比如超過10行,那再輸入一次這個引數,就會再打10行……

(gdb)b 11
b是break的縮寫,後面的11 表示在第11行設乙個斷點:

設定好斷點後,我們用r來run執行:

(gdb)r
執行中遇到斷點就會停下來,用c命令來continue繼續執行

(gdb)c
同樣的,執行到下乙個斷點時就會再停下來,如果想要一步一步執行,就用n或s(分別表示next和step)

(gdb)n     //這個命令在有函式呼叫時,把它作為乙個整體,作為一步
(gdb)s    //這個命令在有函式呼叫時,進入函式內部,一步一步執行
u這個引數則表示執行到某一行停下來,它是until的縮寫

(gdb)u
p這個引數也是很重要的乙個引數,它用來檢視變數的當前值

(gdb)p a
如果想檢視當前所有的區域性變數呢?

這裡介紹乙個引數,i,這是information的縮寫

(gdb)i lo   //檢視本地變數,local
同樣的道理,如果想檢視當前的所有斷點的資訊:

(gdb)i b
disp引數也很實用,把乙個表示式設定為display,當程式每次停下時,都會顯示其值。

(gdb)disp a > b
到這裡,可能你會想到乙個指令:

(gdb)i disp
沒錯,就就是用來顯示所有display的表示式

最後,再介紹一些gdb的高階功能,在除錯的時候很有用:

1、

(gdb)ig  1  6
ig是ignore的縮寫,這個命令表示,對於編號為1的斷點,之後的6次到達後才停下來。

其中斷點的編號 如果不清楚,可以用(gdb)i b來查

2、

(gdb)cond  1  b > 15
cond是condition的縮寫,意思就是在執行到條件滿足時,才停下來。上面這句表示:編號為1的斷點 在執行到b的值大於15時才停下來,前幾次經過這個斷點都不會停。

3、

(gdb)wa  a
這個命令表示在變數a的值被改變時就會停下來。wa是watch的縮寫

類似的命令還有:(gdb)aw a 表示a在被讀寫時都會停下來,而(gdb)rw a 表示變數在被讀時才會停下來。

當然gdb還有很多強大的功能,讀者有興趣可以自己去網上找找資料,好好研究研究,gdb對程式的除錯功能比很多整合的ide還強大很多

LINUX下彙編的編譯,除錯命令

linux下彙編的編譯 na f elf hello.a 生成hello.o ld o hello hello.o 生成可執行的elf格式檔案hello,通過.hello執行 如果輸入na hello.a 得到二進位制可執行檔案hello linux下彙編的除錯 除錯主要是用的ald assembl...

Linux下編譯常用命令(包括多文件編譯)

一.常用編譯命令選項 假設源程式檔名為test.c。1.無選項編譯鏈結 用法 gcc test.c 作用 將test.c預處理 彙編 編譯並鏈結形成可執行檔案。這裡未指定輸出檔案,預設輸出為a.out。2.選項 o 用法 gcc test.c o test 作用 將test.c預處理 彙編 編譯並鏈...

Linux下C 程式常用編譯命令

2010 9 4 kagula 文中涉及的命令在 ubuntu8.04.1 中測試通過,本文的目的是為了以後要用的時候,只要看一下本文就馬上能回憶起這此命令怎麼用。生成目標檔案 gcc c 可以有多個 cpp檔案 編譯靜態庫 arcr 可以有多個 o檔案 目標檔案 靜態庫名的命名方式應該是 lib ...