Linux下GDB調試C++代碼?

Tags: 代碼, 環境,

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

工具/原料

Centos6.4版本環境

方法/步驟

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

Linux下GDB調試C++代碼

編寫好代碼後,我們需要生成一個可執行文件去運行程序。

g++ -g test.cpp -o main

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

Linux下GDB調試C++代碼

然後我可以運行一下代碼看下結果:

Linux下GDB調試C++代碼

接著進行代碼的調試,在命令行輸入gdb,然後進入了gdb的環境下。

Linux下GDB調試C++代碼

然後輸入file main

這樣我們就告訴gdb我們要調試main工程

Linux下GDB調試C++代碼

然後我們輸入l,就可以羅列出當前代碼的信息

Linux下GDB調試C++代碼

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

Linux下GDB調試C++代碼

ok,加下來輸入r,我們開始運行代碼,然後代碼就停止到設置的斷點處

Linux下GDB調試C++代碼

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

Linux下GDB調試C++代碼

然後我們可以輸入n,進行單步的調試

Linux下GDB調試C++代碼

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

Linux下GDB調試C++代碼

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

Linux下GDB調試C++代碼

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

Linux下GDB調試C++代碼

OK,這樣我們的整個調試就結束了。

一些調試指令

1、file <文件名>

加載被調試的可執行程序文件。因為一般都在被調試程序所在目錄下執行GDB,因而文本名不需要帶路徑。

示例:(gdb) file gdb-sample

2、r

Run的簡寫,運行被調試的程序。如果此前沒有下過斷點,則執行完整個程序;如果有斷點,則程序暫停在第一個可用斷點處。

示例:(gdb) r

3、c

Continue的簡寫,繼續執行被調試程序,直至下一個斷點或程序結束。

示例:(gdb) c

4、b <行號>

b <函數名稱>

b * <函數名稱>

b * <代碼地址>

b: Breakpoint的簡寫,設置斷點。兩可以使用“行號”“函數名稱”“執行地址”等方式指定斷點位置。

其中在函數名稱前面加“*”符號表示將斷點設置在“由編譯器生成的prolog代碼處”。如果不瞭解彙編,可以不予理會此用法。

5、set args [parameter]

gdb調試的時候,設置命令行參數。

6、bt

bt可以去查看堆棧信息。down和up和一個一個打印堆棧信息。bt直接打印全部堆棧信息。

7、n

單步調試

8、s

單步進入

注意事項

調試的時候一定要注意斷點的設置,否則就沒有意義

相關問題答案