命令行调试是一种高效的工具,能帮助开发者深入理解代码执行流程,快速定位隐藏的错误。即使现代 IDE 提供了丰富的图形化调试功能,命令行调试依然备受青睐,因为它更轻量、灵活,且在服务器、无头环境或远程调试中无可替代。
本文介绍几种主流编程语言的命令行调试方法,重点聚焦纯命令行工具(避免依赖图形化 IDE)。
Python — pdb / ipdb
Python 内置 pdb 模块,是最简单的命令行调试器。推荐使用 ipdb(需 pip install ipdb)以获得更好体验。
常用命令:
n(next):执行下一行。s(step):步入函数。c(continue):继续直到下一个断点。p <expr>:打印表达式值。l(list):显示当前代码。q(quit):退出。
使用方法:
推荐现代方式:在代码中使用 breakpoint()(Python 3.7+ 内置,等同于 pdb.set_trace())。
def add(x, y):
breakpoint() # 这里暂停
return x + y
result = add(1, 2)
print(result)
运行 python script.py,程序会在断点处暂停,进入 (Pdb) 提示符。
或者命令行启动:python -m pdb script.py,然后用 c 继续。
JavaScript (Node.js) — built-in inspector
Node.js 内置 V8 inspector,支持命令行调试。推荐使用 node inspect 或 --inspect + Chrome DevTools,但纯命令行可用 node inspect。
常用命令(在 inspector 提示符下):
cont或c:继续执行。next或n:下一行。step或s:步入。repl:进入 REPL 交互模式(推荐用于变量检查)。
使用方法:
在代码中添加 debugger; 语句。
function add(x, y) {
debugger;
return x + y;
}
let result = add(1, 2);
console.log(result);
运行:node inspect script.js
程序暂停后,使用 repl 检查变量:ctrl + C 退出 REPL。
更现代方式:node --inspect-brk script.js,然后用 Chrome 打开 chrome://inspect 进行图形化调试(但仍可命令行)。
Java — jdb
Java 使用 jdb(Java Debugger)进行命令行调试。
使用方法:
- 编译时带调试信息:
javac -g Main.java - 启动:
jdb Main - 在 jdb 中设置断点:
stop at Main:6(行号) - 运行:
run
常用命令:
cont:继续。next:下一行。step:步入。print <var>:打印变量。
示例类同原博客,jdb 不支持代码内断点语句,主要通过命令设置。
C++ — gdb
C++ 标准命令行调试器是 gdb。
使用方法:
- 编译:
g++ -g main.cpp -o main - 启动:
gdb main - 设置断点:
break main.cpp:10或break add - 运行:
run
常用命令:
next或n:下一行(不步入)。step或s:步入。continue或c:继续。print <var>或p <var>:打印。backtrace或bt:栈追踪。
推荐使用 rust-gdb 类似 wrapper,但 C++ 无需。
Go — dlv (Delve)
Go 推荐使用 dlv(Delve),比 gdb 更友好(gdb 也可,但 dlv 更好支持 Go 特性)。
安装:go install github.com/go-delve/delve/cmd/dlv@latest
使用方法:
dlv debug main.go
常用命令:
break main.go:10或b main.go:10:设置断点。continue或c:继续。next或n:下一行。step或s:步入。print <var>或p <var>:打印。
dlv 支持 goroutine 检查:goroutines。
PHP — Xdebug (命令行模式)
PHP 命令行调试主要依赖 Xdebug,但纯命令行需额外工具(如 dbgpClient)或环境变量触发 IDE。
纯命令行推荐:安装 Xdebug 后,使用 php -d xdebug.mode=debug -d xdebug.start_with_request=yes script.php(Xdebug 3+),然后连接 dbgpClient(Xdebug 自带命令行客户端)。
更简单:使用第三方如 xdebug-cli(需安装)。
配置 php.ini:
zend_extension=xdebug
xdebug.mode=debug
xdebug.client_host=127.0.0.1
xdebug.client_port=9003
xdebug.start_with_request=yes
运行脚本会自动触发调试(需监听客户端)。
Ruby — ruby/debug 或 byebug
Ruby 2.7+ 推荐内置 debug.rb,更现代。byebug 仍流行。
使用 byebug:
Gemfile 添加 gem 'byebug',然后:
def add(x, y)
byebug # 暂停
x + y
end
运行脚本即进入调试器。
常用命令:next、step、continue、p <var>。
Ruby 3+ 可使用 binding.break(类似 breakpoint())。
Rust — gdb / lldb
Rust 使用 gdb(Linux)或 lldb(macOS),推荐 wrapper:rust-gdb 或 rust-lldb(更好打印 Rust 类型)。
使用方法:
- 构建:
cargo build(debug 模式默认带符号) - 启动:
rust-gdb target/debug/your_program - 设置断点:
break main.rs:10 run
常用命令同 gdb/lldb。