股票

(please check gdb is codesigned – see taskgated(8))

文章目录

今天使用GDB调试C++程序的时候出现了这个错误,

(please check gdb is codesigned - see taskgated(8)), 上网一查发现是签名的问题。 参考一篇文章进行修改:

在OS X Mavericks上安装gdb

安装

brew install gdb

开启调试编译选项

希望gdb调试时输出行号与堆栈等详细信息需要gcc编译的时候使用-g选项

gcc -o course_test -g -rdynamic course_test.c

注意 homebrew安装的gnu版本的gcc在macox上不支持-rdynamic选项,此处使用的是xcode提供的gcc

调试

bash$ gdb course_test gdb>run .... The GDB command: „-exec-run“ returned the error: „,msg=„Unable to find Mach task port for process-id 62593: (os/kern) failure (0x5). (please check gdb is codesigned - see taskgated(8))““

不出意外将会遇到上述错误。这是由于macos的安全策略,homebrew安装的gdb没有签名导致。

签名gdb

  1. 打开 “钥匙串访问”,位于/Applications/Utilities/Keychain Access.app
  2. 打开菜单 /钥匙串访问/证书助理/创建证书…
  3. 在”创建您的证书”窗口设置如下
    • 名称: gdb-cert
    • 身份类型: 自签名根证书
    • 证书类型: 代码签名
    • 勾选”让我覆盖这些默认值”
  4. 点击”继续”,将”有效期(天数)”设置为: 3650
  5. 点击若干次”继续”,指导出现”指定用于该证书的位置””
    • 钥匙串: 系统
  6. 点击”创建”,会弹出用户名密码输入框,输入密码,点击”修改钥匙串”
  7. 在“系统”钥匙串找到刚才创建的”gdbc”证书,右键”显示简介”,在“信任”分类下找到“代码签名”,指定为“总是信任”。(第一次操作的时候忘了选择这个,后来发现在 get info里面有选项,忘掉也没关系,可以修改
  8. 退出“钥匙串访问”

要让刚刚添加的证书生效需要重启taskgated服务或者重启系统(我系统来回重启了好几遍终于搞定,丢三落四的

sudo killall taskgated

证书准备好了,接下来给gdb签名

sudo codesign -fs gdb-cert $(which gdb)

lldb

即使给签名gdb以后,在执行gdb调试仍然无法显示行号(行号显示为 ??),新版本的macox已经和gdb不兼容了,lldb是gdb的替代者。使用lldb调试可以显示错误发生位置的行号。

 

打赏
原文链接:,转发请注明来源!

发表评论