我试图在Mac OSX High Sierra上使用gdb。我使用brew安装了8.01版本(实际上是最新的版本8.1 has a separate, unrelated error),并且我遇到了代码签名步骤的问题。我跟随instructions at the page suggested by brew。
在Keychain Access中,我使用" codesign"创建证书。选项,并覆盖默认值,然后单击直到它询问证书的位置,我选择" keychain:system"。但是,之后我立即收到了一条神秘的信息:
An Error Occurred
Unknown Error = -2,147,414,007
此消息also occurred in a previous thread,但唯一的答案是质量低,没有用,问题似乎没有得到很多活动/关注。我也尝试进入恢复模式并执行csrutil disable
,但我仍然遇到-2,147,414,007
错误。回到Keychain Access窗口,在" System"下,我获得了刚刚创建的证书的公共和私有RSA密钥,但证书本身并不存在。
如果我重复所有这些但是在"登录"而不是" System",而这次是创建证书。然后我导出到.cer文件到我的桌面,然后导入到Keychains,但在" System"类别。然后我重新启动计算机,然后执行
codesign -s gdb-cert /usr/local/Cellar/gdb/8.0.1/bin/gdb
但我得到error: The specified item could not be found in the keychain.
。
我当然可以毫无问题地执行sudo gdb
或lldb
,但我希望将gdb
与emacs
一起使用,因此这些不是选项(当然,从技术上讲,我可以做sudo emacs
并且它会起作用,但出于显而易见的原因,我不想使用sudo
)。如何对gdb进行编码以便我可以在不收到mach port
投诉的情况下使用它?
编辑:显示another thread elsewhere有很多人遇到同样的问题。那里似乎没有明确的解决方案;我尝试了一些建议,并继续得到
Unable to find Mach task port for process-id 575: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
答案 0 :(得分:1)
我终于开始工作了。截至本文发表之日,我使用的是最新的High Sierra。首先,我安装了旧版本的gdb,8.0.1,而不是最新的8.1,which seems to be broken:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/9ec9fb27a33698fc7636afce5c1c16787e9ce3f3/Formula/gdb.rb
然后brew pin gdb
。
对于后续步骤,我发现this thread和this other thread很有用。另外,this page。
在Login中而不是System中创建证书,以避免-2,147,414,007
错误。然后,单击挂锁以解锁系统类别,并将证书和密钥拖到系统中。如果此处出现任何问题,您可以尝试File-> Import和File-> Export。目标是获得以下内容:
e.g。证书和密钥都在System
钥匙串下,而不是login
。 (甚至可能没有必要将键拖到系统中,但我这样做只是为了安全)。
然后,非常重要的一步:右键单击证书,转到信息,信任,然后选择始终信任每个类别。如果您不这样做,代码签名将无效,并且即使您进行协同设计,仍会在gdb中收到mach端口错误消息。
(上面链接的两个主题中的一个答案表示暂时启用Directory Utilities中的root帐户,但我不确定这是否真的有必要)。然后,重新启动计算机或执行sudo killall taskgated
。然后是codesign -fs gdb-cert $(which gdb)
。
然后,我不再在gdb中收到mach端口错误消息。我第一次跑,我得到a popup asking for a password。要在将来的运行中禁用它,我根据该线程做了sudo /usr/sbin/DevToolsSecurity --enable
。
另请注意,8.0.1存在一个小问题:您将收到有关unhandled dlyd version
的警告。这在this thread中有所解释。请注意该帖子中的一些帖子说断点不起作用,但我没有看到发生这种情况。