Skip to content
Go back

用控制台调试各种语言

Edit

命令行调试更轻、更适合 SSH / 无头环境 / 远程机。现代 IDE 图形调试很强,但服务器上往往只有终端。下文对比各语言常用 CLI 调试器,并给出最小可用示例。

调试器对比

语言调试器安装代码内断点步入 / 步过打印变量备注
Pythonpdb / ipdb内置 / pip install ipdbbreakpoint()s / np expripdb 体验更好
JavaScript (Node)node inspect内置debugger;step / nextrepl 模式也可用 --inspect-brk + Chrome
JavajdbJDK 内置命令行 stop atstep / nextprint varjavac -g
C / C++gdb系统包break file:lines / np varbt 看调用栈
Godlv (Delve)go install .../dlv@latestbreak main.go:10s / np var支持 goroutine
PHPXdebug 3+pecl / 包管理器环境变量触发依赖客户端依赖客户端纯 CLI 需 dbgp 客户端
Rubydebug / byebug内置 / gembinding.break / byebugstep / nextp varRuby 3+ 推荐 debug
Rustrust-gdb / rust-lldb工具链break main.rs:10s / np var用 wrapper 打印类型更友好

推荐

常用命令速查

操作Python (pdb)Node (inspect)gdb / dlvjdb
继续ccontc / continuecont
下一行nnextn / nextnext
步入ssteps / stepstep
打印p exprrepl 后输入p varprint var
退出qCtrl+C 两次qexit

Python — pdb / ipdb

def add(x, y):
    breakpoint()  # Python 3.7+,等同 pdb.set_trace()
    return x + y

add(1, 2)
python script.py
# 或:python -m pdb script.py

常用:n 下一行、s 步入、c 继续、p expr 打印、l 列代码、q 退出。


JavaScript (Node) — node inspect

function add(x, y) {
  debugger;
  return x + y;
}
add(1, 2);
node inspect script.js

暂停后用 repl 查变量(Ctrl+C 退出 REPL)。图形化:node --inspect-brk script.js,Chrome 打开 chrome://inspect


Java — jdb

javac -g Main.java
jdb Main
# (jdb) stop at Main:6
# (jdb) run

常用:contnextstepprint <var>


C++ — gdb

g++ -g main.cpp -o main
gdb main
# (gdb) break main.cpp:10
# (gdb) run

常用:n / s / c / p var / bt(栈回溯)。


Go — dlv

go install github.com/go-delve/delve/cmd/dlv@latest
dlv debug main.go
# (dlv) break main.go:10
# (dlv) continue

常用:b 断点、c 继续、n / sp 打印;goroutines 看协程。


PHP — Xdebug

php.ini 示例(Xdebug 3+):

zend_extension=xdebug
xdebug.mode=debug
xdebug.client_host=127.0.0.1
xdebug.client_port=9003
xdebug.start_with_request=yes
php -d xdebug.mode=debug script.php

纯终端需配合 dbgp 客户端或 IDE 监听;CLI 场景不如其他语言顺手。


Ruby — debug / byebug

def add(x, y)
  binding.break  # Ruby 3+;或 byebug
  x + y
end

常用:nextstepcontinuep var


Rust — rust-gdb / rust-lldb

cargo build
rust-gdb target/debug/your_program   # Linux 常用
# macOS: rust-lldb target/debug/your_program
# (gdb) break main.rs:10
# (gdb) run

命令与 gdb/lldb 一致;wrapper 能更好显示 Rust 类型。

参考文档

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


Edit
Share this post on:

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