首頁 > 網際網路

Linux下GDB偵錯C++程式碼

2019-12-18 01:29:03

Linux環境在跨平台中程式設計中被大家廣泛使用,大家可以在Linux上做一些Windows上的C++的程式碼的程式設計,但是由於環境不相同,所以程式碼的偵錯可能存在很大的區別,下面講下Linux下的gdb工具偵錯C++程式碼的一些步驟。

1

首先,先去建立一個簡單的C++程式碼。實現的功能很簡單。就是初始化一個變數num=1,然後在做一個num+=2的操作。


2

編寫好程式碼後,我們需要生成一個可執行檔案去執行程式。

g++ -g test.cpp -o main

如上指令,我們通過g++去編譯test.cpp,並生成可執行檔案main


3

然後我可以執行一下程式碼看下結果:


4

接著進行程式碼的偵錯,在命令列輸入gdb,然後進入了gdb的環境下。


5

然後輸入file main

這樣我們就告訴gdb我們要偵錯main工程


6

然後我們輸入l,就可以羅列出當前程式碼的資訊


7

我們看到了main函數,然後通過輸入b main在main函數入口處加一個斷點


8

ok,加下來輸入r,我們開始執行程式碼,然後程式碼就停止到設定的斷點處


9

然後我們看到了print函數,然後輸入s,單步進入函數體


10

然後我們可以輸入n,進行單步的偵錯


11

我們會看到一個變數num的值,然後我們輸入print num,參看變數值


12

然後n單步偵錯後,這時候程式進行了num+=2的操作,我們通過print num可以參看變數值發生了變化


13

然後我們需要看的已經結束了,那麼輸入c,程式繼續執行,由於沒有設定其他斷點,這時候程式執行結束,並且輸出一些資訊。


14

OK,這樣我們的整個偵錯就結束了。

1

1、file <檔名>載入被偵錯的可執行程式檔案。因為一般都在被偵錯程式所在目錄下執行GDB,因而文字名不需要帶路徑。範例:(gdb) file gdb-sample2、rRun的簡寫,執行被偵錯的程式。如果此前沒有下過斷點,則執行完整個程式;如果有斷點,則程式暫停在第一個可用斷點處。範例:(gdb) r3、cContinue的簡寫,繼續執行被偵錯程式,直至下一個斷點或程式結束。範例:(gdb) c4、b <行號>? ?b <函數名稱>? ?b *<函數名稱>? ?b *<程式碼地址>b: Brea
kpoint的簡寫,設定斷點。兩可以使用「行號」「函數名稱」「執行地址」等方式指定斷點位置。其中在函數名稱前面加「*」符號表示將斷點設定在「由編譯器生成的prolog程式碼處」。如果不了解組合,可以不予理會此用法。5、set args [parameter]gdb偵錯的時候,設定命令列引數。6、btbt可以去檢視堆疊資訊。down和up和一個一個列印堆疊資訊。bt直接列印全部堆疊資訊。7、n單步偵錯8、s單步進入
去檢視堆疊資訊。down和up和一個一個列印堆疊資訊。bt直接列印全部堆疊資訊。7、n單步偵錯8、s單步進入

IT145.com E-mail:sddin#qq.com