Skip to content
Go back

用控制台调试各种语言

Edit

命令行调试是一种高效的工具,能帮助开发者深入理解代码执行流程,快速定位隐藏的错误。即使现代 IDE 提供了丰富的图形化调试功能,命令行调试依然备受青睐,因为它更轻量、灵活,且在服务器、无头环境或远程调试中无可替代。

本文介绍几种主流编程语言的命令行调试方法,重点聚焦纯命令行工具(避免依赖图形化 IDE)。

Python — pdb / ipdb

Python 内置 pdb 模块,是最简单的命令行调试器。推荐使用 ipdb(需 pip install ipdb)以获得更好体验。

常用命令:

使用方法

推荐现代方式:在代码中使用 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 提示符下):

使用方法

在代码中添加 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)进行命令行调试。

使用方法

  1. 编译时带调试信息:javac -g Main.java
  2. 启动:jdb Main
  3. 在 jdb 中设置断点:stop at Main:6(行号)
  4. 运行:run

常用命令:

示例类同原博客,jdb 不支持代码内断点语句,主要通过命令设置。

C++ — gdb

C++ 标准命令行调试器是 gdb

使用方法

  1. 编译:g++ -g main.cpp -o main
  2. 启动:gdb main
  3. 设置断点:break main.cpp:10break add
  4. 运行:run

常用命令:

推荐使用 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

常用命令:

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

运行脚本即进入调试器。

常用命令:nextstepcontinuep <var>

Ruby 3+ 可使用 binding.break(类似 breakpoint())。

Rust — gdb / lldb

Rust 使用 gdb(Linux)或 lldb(macOS),推荐 wrapper:rust-gdbrust-lldb(更好打印 Rust 类型)。

使用方法

  1. 构建:cargo build(debug 模式默认带符号)
  2. 启动:rust-gdb target/debug/your_program
  3. 设置断点:break main.rs:10
  4. run

常用命令同 gdb/lldb。

参考文档

如何使用 dlv 结合 Goland 进行程序 debug 调试


Edit
Share this post on:

Previous Post
Java 框架生成 REST 接口对比
Next Post
本地启动静态文件服务器