Sublime Text 的“本地调试”实为构建系统调用外部工具并传入调试参数实现,如 Node.js 用 --inspect-brk=localhost:9229,Python 推荐 debugpy 而非 pdb(因输出面板不支持 stdin),Ruby 用 pry,PHP 依赖 Xdebug;调试失败主因是端口配置、Chrome 配置或版本不兼容。

Sublime Text 本身不带调试器,所谓“本地调试”其实是靠构建系统(Build System)+ 外部工具(如 node、python、ruby 自带的调试参数)配合实现的。它不能像 VS Code 那样点一下就进断点,但对脚本类语言足够轻量高效。
怎么让 Ctrl+B 运行时自动进入调试模式
关键不是“启动调试”,而是让构建命令带上调试参数。不同语言行为差异大,不能套用同一套配置:
-
node:v14+ 推荐用--inspect-brk,例如:["node", "--inspect-brk=localhost:9229", "$file"];旧版用--debug-brk(已弃用) -
python:标准库没内置调试 CLI,得靠ptvsd或debugpy,但更常用的是python -m pdb $file—— 它只支持单步和断点命令,不图形化 -
ruby:原生无调试标志,必须加pry或byebug,构建系统里写成["ruby", "-r", "pry", "$file"],再在代码里写binding.pry - PHP:必须依赖 Xdebug,构建系统只负责运行
php,调试靠浏览器或 IDE 连接localhost:9003(Xdebug 3 默认端口)
注意:$file 是 Sublime 的占位符,代表当前打开的文件路径;--inspect-brk 会让 Node.js 启动后立刻暂停,等 Chrome 或 VS Code 连上才继续执行。
为什么 chrome://inspect 看不到你的 Node.js 进程
常见原因就三个,按优先级排查:
- Node.js 版本低于 v6.3 ——
--inspect系列参数不支持,降级用--debug(v0.12~v6.2),但 Chrome 已废弃对该协议的支持 - 构建系统里没加
localhost:,比如写了--inspect-brk=9229而不是--inspect-brk=localhost:9229;Node.js v14+ 默认绑定127.0.0.1,不监听0.0.0.0,所以省略 host 会失败 - Chrome 没开启 Discover network targets:访问
chrome://inspect→ 点右上角 “Configure…” → 加入localhost:9229(端口要和构建命令一致)
别信网上抄来的“全局启用 remote debugging”,Sublime 启动的进程是独立终端会话,不受系统级 Node 设置影响。
Python 构建系统里加 -m pdb 为啥总卡住不动
因为 pdb 是交互式调试器,Sublime 的输出面板不支持 stdin 输入 —— 你看到光标停在那儿,其实是等待你敲 n(next)、c(continue)等命令,但面板不响应键盘输入。
- 正确做法:用
SublimeREPL插件,在 Sublime 内开一个真正的终端式 REPL,再运行python -m pdb script.py - 替代方案:改用
debugpy,构建命令写成["python", "-m", "debugpy", "--listen", "127.0.0.1:5678", "$file"],然后用 VS Code 远程 attach(端口保持开放) - 简单场景:直接用
print()或logging.debug()+sys.stdout.flush(),比折腾 pdb 更快
Sublime 的构建系统本质是 shell 命令封装,它不接管子进程的 stdin/stdout/tty 控制权 —— 这是设计使然,不是 bug。
调试时变量值看不清?输出面板太窄怎么办
Sublime 默认输出面板宽度固定,长 JSON 或 traceback 会被截断。两个低成本解法:
- 在构建系统里加
"target": "exec"和"quiet": false,并把"cmd"改成数组形式(避免 shell 解析错误),例如:["python", "-u", "$file"]中的-u强制未缓冲输出,减少换行错乱 - 启用
output_to_new_tab:在插件设置(如 SublimeText-Nodejs)里设为true,输出会新开一个 tab,支持横向滚动和复制整段内容 - 终极方案:别在 Sublime 里看大日志,用
error_log('msg', 'path/to/log.txt')(PHP)、logging.basicConfig(filename='debug.log')(Python)把关键信息导出到文件,用 Sublime 直接打开该文件查看
输出面板不是终端模拟器,它只是个带滚动条的文本框。想获得完整交互体验,就得接受它和真正终端之间的边界。


















