目錄
- 【C++】Linux 下的 GDB 程序調試
- 1. 安裝 GDB
- 2. 編譯程序
- 3. 啟動 GDB
- 4. 設置斷點
- 5. 執行程序
- 6. 調試命令
- 7. 調試崩潰
- 8. 結束調試
【C++】Linux 下的 GDB 程序調試
在開發 C++ 程序時,出現 bug 是常見的。調試是找出程序錯誤的關鍵步驟之一。在 Linux 環境下,我們可以使用 GDB (GNU Debugger) 工具來幫助我們進行程序調試。本文將介紹如何在 Linux 下使用 GDB 進行 C++ 程序調試的基本步驟和常用命令。
1. 安裝 GDB
首先,我們需要在 Linux 系統上安裝 GDB。在大多數發行版的軟件倉庫中都可以找到 GDB。在 Ubuntu 上,可以使用以下命令進行安裝:
sudo apt-get install gdb
2. 編譯程序
在進行調試之前,我們需要先用調試符號編譯你的 C++ 程序。在編譯時,使用 -g
參數來生成調試符號信息。例如,假設你的程序文件名為 “program.cpp” ,可以使用以下命令進行編譯:
g++ -g program.cpp -o program
這里如果使用的是cmake:
cmake .. -DCMAKE_BUILD_TYPE=Debug
3. 啟動 GDB
通過在終端中輸入 gdb
命令即可啟動 GDB 調試器,并加載你的程序。例如,假設你的可執行文件名為 “program” ,可以在命令行中輸入:
gdb program
4. 設置斷點
斷點是 GDB 中調試過程中常用的工具之一。通過設置斷點,我們可以在程序執行到特定位置時停下來,以便查看程序狀態。在 GDB 命令提示符下,可以使用 break
或 b
命令來設置斷點。
-
在特定行上設置斷點:
break line_number
例如,要在第 10 行設置斷點,可以輸入:
break 10
-
在特定函數中設置斷點:
break function_name
例如,要在名為 “myFunction” 的函數中設置斷點,可以輸入:
break myFunction
5. 執行程序
調試器已經加載程序并設置好斷點,可以通過 run
或 r
命令來執行程序。
run
執行后,程序將開始運行,直到遇到第一個斷點或程序結束。
6. 調試命令
在程序執行過程中,可以使用以下命令來進行調試:
next
或n
:單步執行程序,將執行到下一行,但不會進入函數。step
或s
:單步執行程序,將執行到下一行,并進入函數。continue
或c
:繼續執行程序,直到遇到下一個斷點或程序結束。print
或p
:打印變量的值。例如,p variable_name
。backtrace
或bt
:顯示當前調用棧。quit
或q
:退出 GDB 調試器。
此外,還有其他許多 GDB 命令可用以幫助進行調試和查看程序的狀態,可以使用 help
命令獲取更多信息。
7. 調試崩潰
如果程序發生崩潰,GDB 可以幫助我們確定問題所在。當程序異常終止時,可以使用 backtrace
命令查看調用棧,并使用 print
命令查看相關變量的值,以了解導致崩潰的原因。如果可用,還可以使用 core
文件進行更深入的分析。
gdb program core
8. 結束調試
當調試完成后,可以使用 quit
命令退出 GDB 調試器。
以上是在 Linux 環境下使用 GDB 調試 C++ 程序的基本步驟和常用命令。掌握了這些基本技巧,可以更高效地診斷和修復程序中的錯誤。希望這篇博客對你在 C++ 程序調試方面有所幫助。
附:如使用vscode的界面化調試,其json為:
{// 使用 IntelliSense 了解相關屬性。 // 懸停以查看現有屬性的描述。// 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "(gdb)start","type": "cppdbg","request": "launch","program": "/home/kylin/work/sophon-stream/sophon-stream/samples/arcfaceDemo/build/arcface_demo","args": [],"stopAtEntry": false,"cwd": "/home/kylin/work/sophon-stream/sophon-stream/samples/arcfaceDemo/build/","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "為 gdb 啟用整齊打印","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "將反匯編風格設置為 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}],"miDebuggerPath": "/usr/bin/gdb"}]
}