Ubuntu環境下代碼調試的常用方法
這是最基礎、最快速的調試方式,通過在代碼關鍵位置插入打印語句,輸出變量值、函數調用信息或程序狀態,幫助定位問題。
print()函數輸出變量值或執行流程。def add(a, b):
print(f"Adding {a} and ") # 打印輸入參數
result = a + b
print(f"Result: {result}") # 打印計算結果
return result
std::cout輸出信息。#include <iostream>
void add(int a, int b) {
std::cout << "Adding " << a << " and " << b << std::endl; // 打印輸入參數
int result = a + b;
std::cout << "Result: " << result << std::endl; // 打印計算結果
}
適用場景:小型項目、快速驗證邏輯或臨時調試。
import pdb; pdb.set_trace()設置斷點,進入交互式調試模式。常用命令:
n(next):執行下一行代碼;c(continue):繼續執行至下一個斷點;s(step):進入函數內部;p <變量>:打印變量值;q(quit):退出調試。pip install ipdb
import ipdb; ipdb.set_trace() # 替換pdb.set_trace()
-g選項保留調試信息,然后啟動調試。常用命令:
break <函數名/行號>:設置斷點;run:啟動程序;next(單步跳過函數)、step(單步進入函數);print <變量>:打印變量值;backtrace:查看調用堆棧;quit:退出調試。g++ -g -o my_program my_program.cpp # 編譯時添加-g
gdb ./my_program # 啟動GDB
(gdb) break main # 設置斷點
(gdb) run # 運行程序
適用場景:需要深入分析代碼邏輯、變量狀態或函數調用流程。
IDE提供圖形化界面,簡化調試操作,適合大型項目或需要可視化調試的場景。
.vscode/launch.json配置文件,指定Python解釋器和腳本路徑,按F5啟動調試。{
"version": "0.2.0",
"configurations": [
{
"name": "Python",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
.vscode/tasks.json(編譯任務,添加-g選項)和launch.json(調試配置,關聯tasks),按F5啟動調試。通過日志模塊記錄程序執行過程中的詳細信息,便于后續分析問題,比打印調試更靈活、可維護。
logging模塊,設置日志級別(DEBUG/INFO/WARNING/ERROR)和格式。import logging
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s'
)
logging.debug("This is a debug message") # 輸出調試信息
logging.info("Program started") # 輸出普通信息
用于檢測內存泄漏、越界訪問、非法內存使用等問題,適合C/C++項目。
sudo apt install valgrind
valgrind --leak-check=yes ./my_program # 檢測內存泄漏
追蹤進程的系統調用和信號,幫助分析文件操作、網絡通信等問題。
sudo apt install strace
strace ./my_program # 輸出所有系統調用
追蹤進程的庫函數調用,適合調試依賴外部庫的程序。
sudo apt install ltrace
ltrace ./my_program # 輸出所有庫函數調用
分析程序性能瓶頸(如CPU熱點、函數調用耗時),適合優化性能。
sudo apt install linux-tools-common linux-tools-$(uname -r)
sudo perf record ./my_program # 記錄性能數據
sudo perf report # 查看性能報告
適用場景:性能優化、內存泄漏檢測、系統調用分析。