“请检查gdb是signedigned – 请参阅taskgated(8)” – 如何获得与自制代码签署的gdb安装?
我在OSX 10.8.4下,并安装了gdb 7.5.1自制软件(动机获取一个新的特性,例如–with-python等…)
长篇小说,当我在一个c + + Eclipse项目中运行debugging我得到:
Error in final launch sequence Failed to execute MI command: -exec-run Error message from debugger back end: Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5). (please check gdb is codesigned - see taskgated(8)) Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5). (please check gdb is codesigned - see taskgated(8))
我已经遵循了代码签名的各种build议
- https://sourceware.org/gdb/wiki/BuildingOnDarwin
- 部分http://www.noktec.be/archives/1251各种调整
所以我做了:
- 设置证书
- 签署gdb – > codesign -s gdb-cert / usr / local / bin / gdb
当我在Eclipse中重新运行debugging时,得到与上面相同的错误“(请检查gdb是signedigned – 请参阅taskgated(8))”。
如果我将gdb设置回旧的gdb(在Eclipse的gdb首选项中)/ usr / libexec / gdb / gdb-i386-apple-darwin,debugging将按预期运行。
任何解决scheme/提示呢?
谢谢
佩尔
发生此错误是因为OSX实现了一个pid访问策略,该策略需要二进制数字签名来访问其他进程pid。 要启用gdb访问其他进程,我们必须首先对二进制代码进行编码。 该签名取决于用户必须创build并注册到系统的特定证书。
要创build代码签名证书,请打开“钥匙串访问”应用程序。 select菜单钥匙串访问 – >证书助理 – >创build证书…
为证书select名称(例如,gdb-cert),将身份types设置为自签名根,将证书types设置为代码签名,然后select让我覆盖默认值。 在继续上单击几次,直到您到达为证书指定位置屏幕,然后将钥匙串设置为系统。
双击证书,打开“信任”部分,然后将“代码签名”设置为“始终信任”。 退出钥匙串访问应用程序。
重新启动任务门户服务,并签署二进制文件。
$ sudo killall taskgated $ codesign -fs gdb-cert "$(which gdb)"
来源http://andresabino.com/2015/04/14/codesign-gdb-on-mac-os-x-yosemite-10-10-2/
在macOS 10.12(塞拉利昂)和之后,你也必须
使用gdb 7.12.1或更高版本此外,还要防止gdb使用shell来启动要debugging的程序。 你可以在gdb里面使用下面的命令:
set startup-with-shell off
你也可以把这个最后一个命令放在你主目录下的一个名为.gdbinit的文件中,在这种情况下,每次启动gdb的时候都会自动应用它
echo "set startup-with-shell off" >> ~/.gdbinit
来源: https : //sourceware.org/gdb/wiki/BuildingOnDarwin
我做了gdb在OSX 10.9上的工作,没有用这种方式编码( 在这里描述):
-
用macports安装gdb。 (可能是你可以跳过它)
-
sudo nano /System/Library/LaunchDaemons/com.apple.taskgated.plist
在第22行,第27列将选项string从
-s
更改为-sp
。 -
重新启动计算机。
-
使用gdb。 如果你用mac端口安装它,那么你必须使用'ggdb'命令。 或者在你的configuration文件中做了一个别名:
别名gdb ='ggdb'
然后使用'gdb'命令。
我在GDB遇到同样的问题。 我在Mac OS X 10.8.5
又名Mountain Lion下运行。 我正在使用GDB版本7.7.1
。
我用下面的命令编译我的testing程序:
g++ -o gdb-sample.out -g gdb-sample.cpp
如果我input命令gdb sample.out
,我得到相同的隐藏错误消息:
"Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5). (please check gdb is codesigned - see taskgated(8))"
但是这个错误信息是一个红色的鲱鱼。
我发现我的解决scheme是简单地使用超级用户acct调用GDB:
sudo gdb sample.out.
这对我来说很好。
而从那个angular度来说,我可以在不使用sudo的情况下运行GDB example.out。
希望这有助于他人的工作。 RSVP,如果没有。
我想知道在这个最高的投票答案的全球变化是否有一些意想不到的后果。
而不是启用旧的老虎公约,taskgated确实允许签名的代码运行。 所以,最好是获得gdb的签名证书,类似于这里的答案 。
在此之后,我可以sudo
使用gdb。 如果你需要使用gdb w / o sudo,那么也许这个链接会帮助,虽然免责声明,我还没有尝试过,因为现在使用sudo
是一个好的解决scheme。
对于使用Sierra 10.12.6(及以上版本)和Homebrew的用户, /usr/local/bin/gdb
是指向/usr/local/Cellar/gdb/8.0/bin/gdb
(或任何版本,例如8.0.1
)的符号链接8.0.1
)。
您需要对连接和目标进行编码:
codesign -fs gdb-cert /usr/local/bin/gdb codesign -fs gdb-cert "/usr/local/Cellar/gdb/8.0/bin/gdb"
或者,如果你有greadlink
(通过brew install coreutils
):
codesign -fs gdb-cert $(which gdb) codesign -fs gdb-cert $(greadlink -f $(which gdb))