gdb必须安装并加入path,构建命令需含-g参数且通过独立终端启动gdb;windows用start cmd /k,macos需codesign并推荐gdb 8.0,linux用gnome-terminal;fork程序需设follow-fork-mode child。

GDB 必须已安装且能从终端直接调用,否则 Sublime 的任何构建变体都静默失败——不报错、不弹窗、不响应。
确认 gdb 是否就位
打开系统终端(Windows 用 PowerShell 或 cmd,macOS/Linux 用 Terminal),执行:
gdb --version
如果返回类似 GNU gdb (GDB) 13.2 的信息,说明可用;若提示 command not found 或 'gdb' is not recognized,则必须先装好 GDB 并确保其路径已加入 PATH:
- Windows:装 MinGW-w64(非旧版 MinGW),勾选
gdb组件,把mingw64/bin加进系统环境变量 - macOS:用
brew install gdb安装后,必须手动codesign,否则 Apple 安全机制会拦截 - Linux(如 Ubuntu):
sudo apt install gdb即可
构建系统中必须含 -g + 独立终端启动
只写 "cmd": ["gcc", "${file}", "-o", "${file_base_name}"] 是编译,不是调试。真正触发 GDB 的是 variants 里的一个变体,且需同时满足两个硬条件:
- 编译命令中必须带
-g参数,否则生成的二进制不含调试符号,gdb进去看不到源码、设不了断点 - 必须用
start cmd /c(Windows)、gnome-terminal -e(Linux)或open -a Terminal(macOS)新开终端运行gdb,否则 Sublime 底部面板无法接收交互输入(比如run、next、print i)
示例(Windows):
"variants": [
{
"name": "GDB_C",
"cmd": ["cmd", "/c", "gcc", "-g", "${file}", "-o", "${file_path}/${file_base_name}", "&&", "start", "cmd", "/k", "gdb", "${file_path}/${file_base_name}"]
}
]
不同平台的终端启动方式差异大
同一份 .sublime-build 文件跨平台基本不可用,必须按系统区分写法:
- Windows:
start cmd /k gdb xxx.exe——/k保证窗口不退出,方便后续输入命令 - macOS:
open -a Terminal --args gdb ${file_path}/${file_base_name},但注意 macOS 13+ 对gdb有签名强制要求,gdb 8.1+在某些版本会卡住,实测gdb 8.0更稳 - Linux(GNOME):
gnome-terminal -- bash -c "gdb '${file_path}/${file_base_name}'; exec bash",末尾exec bash防止终端闪退
别省略引号——文件名含空格时,${file_path}/${file_base_name} 不加引号会导致 gdb 找不到可执行文件。
调试时 fork 后子进程默认不被跟踪
如果你的程序用了 fork()(比如服务器模型、多进程测试),默认 gdb 只跟父进程。想让子进程也被调试,得在 gdb 启动后手动执行:
set follow-fork-mode child
或者更稳妥地,在启动前加命令:
gdb -ex "set follow-fork-mode child" -ex run --args ${file_path}/${file_base_name}
这个细节几乎没人提,但一遇到 fork 就卡死——你看到父进程停了,子进程却在后台狂跑,gdb 根本没 attach 上。











