Linux環境在跨平臺中編程中被大家廣泛使用,大家可以在Linux上做一些Windows上的C++的代碼的編程,但是由於環境不相同,所以代碼的調試可能存在很大的區別,下面講下Linux下的gdb工具調試C++代碼的一些步驟。
工具/原料
Centos6.4版本環境
方法/步驟
首先,先去創建一個簡單的C++代碼。實現的功能很簡單。就是初始化一個變量num=1,然後在做一個num+=2的操作。
編寫好代碼後,我們需要生成一個可執行文件去運行程序。
g++ -g test.cpp -o main
如上指令,我們通過g++去編譯test.cpp,並生成可執行文件main
然後我可以運行一下代碼看下結果:
接著進行代碼的調試,在命令行輸入gdb,然後進入了gdb的環境下。
然後輸入file main
這樣我們就告訴gdb我們要調試main工程
然後我們輸入l,就可以羅列出當前代碼的信息
我們看到了main函數,然後通過輸入b main在main函數入口處加一個斷點
ok,加下來輸入r,我們開始運行代碼,然後代碼就停止到設置的斷點處
然後我們看到了print函數,然後輸入s,單步進入函數體
然後我們可以輸入n,進行單步的調試
我們會看到一個變量num的值,然後我們輸入print num,參看變量值
然後n單步調試後,這時候程序進行了num+=2的操作,我們通過print num可以參看變量值發生了變化
然後我們需要看的已經結束了,那麼輸入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
單步進入
注意事項
調試的時候一定要注意斷點的設置,否則就沒有意義