如何在Eclipse CDT中配置调试器?Mac下GDB断点失效及报错求助
Mac 平台 Eclipse C 开发GDB调试异常解决方案
故障根因
你遇到的../../gdb/thread.c:95: internal-error: struct thread_info *inferior_thread(): Assertion 'current_thread_ != nullptr' failed报错,是macOS权限管控下GDB 10.1的典型问题——Homebrew安装的GDB没有获得系统级的任务端口控制权限,根本无法接管被调试的C程序进程,既会触发GDB内部的空指针断言,也会导致所有断点失效、程序直接跑完不暂停。你当前使用的macOS 11.1、GDB 10.1、Eclipse 4.18.0组合下,90%的同类问题都是未完成GDB代码签名授权导致的。
解决操作步骤
- 完成GDB代码签名(核心必做步骤)
- 打开系统自带的「钥匙串访问」应用,从顶部菜单栏进入「证书助手 > 创建证书」
- 自定义证书名称(比如记为
gdb-cert),身份类型选「代码签名」,证书类型选「外部实体」,走完创建流程后,在系统钥匙串中找到刚生成的证书,右键打开简介面板,在「信任」栏的代码签名选项中设置为「始终信任」 - 打开终端执行签名命令:
codesign --force --deep -s gdb-cert $(which gdb),将命令中的证书名替换为你实际创建的证书名称 - 完全退出并重启Eclipse,让系统权限配置生效
- 修正Eclipse端调试与编译配置
- 打开Eclipse偏好设置,进入
C/C++ > Debug > GDB页面,确认GDB可执行文件路径指向完成签名的Homebrew GDB路径(Intel芯片Mac一般为/usr/local/bin/gdb,Apple Silicon芯片为/opt/homebrew/bin/gdb),避免调用系统自带的旧版GDB - 打开对应C项目的调试配置页面,切换到「调试器」标签页:
- 给GDB启动命令追加参数
-nx,避免加载Homebrew默认的.gdbinit配置和Eclipse的调试逻辑冲突 - 取消勾选「启动时自动加载用户GDB初始化文件」选项
- 给GDB启动命令追加参数
- 进入项目编译设置,确认编译参数包含
-g调试符号,且没有开启-s(剥离符号表)、strip等会删除调试信息的选项
- 打开Eclipse偏好设置,进入
- 功能验证
清理项目全量重编译后,在代码可执行行打断点启动调试,若弹出系统权限请求弹窗,需要允许GDB获得控制其他进程的权限,断点即可正常触发暂停。
补充排查提示:如果完成配置后仍报错,可以在终端执行
gdb --version核对版本,确保Eclipse调用的GDB路径和终端输出的版本完全一致,避免多版本GDB路径混淆导致的权限失效。
内容的提问来源于stack exchange,提问作者Shyam Tanna
相关产品推荐
相关产品推荐

