先安裝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 11b是break的縮寫,後面的11 表示在第11行設乙個斷點:
設定好斷點後,我們用r來run執行:
(gdb)r執行中遇到斷點就會停下來,用c命令來continue繼續執行
(gdb)c同樣的,執行到下乙個斷點時就會再停下來,如果想要一步一步執行,就用n或s(分別表示next和step)
(gdb)n //這個命令在有函式呼叫時,把它作為乙個整體,作為一步
(gdb)s //這個命令在有函式呼叫時,進入函式內部,一步一步執行u這個引數則表示執行到某一行停下來,它是until的縮寫
(gdb)up這個引數也是很重要的乙個引數,它用來檢視變數的當前值
(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 > 15cond是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 ...