C++ &引用;请检查gdb是否进行了代码签名-请参阅taskgated(8)";-如何安装带有签名的自制代码的gdb?
我在osx 10.8.4下,已经用自制软件安装了gdb 7.5.1(我得到了一个新的gdb,它有一些新特性,比如--with python等等)C++ &引用;请检查gdb是否进行了代码签名-请参阅taskgated(8)";-如何安装带有签名的自制代码的gdb?,c++,eclipse,macos,gdb,homebrew,C++,Eclipse,Macos,Gdb,Homebrew,我在osx 10.8.4下,已经用自制软件安装了gdb 7.5.1(我得到了一个新的gdb,它有一些新特性,比如--with python等等) 长篇短,当我在C++ Eclipse项目中运行调试时,我得到: 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 pr
长篇短,当我在C++ Eclipse项目中运行调试时,我得到:
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))
我遵循了关于代码签名的各种建议
- 部分是各种各样的调整
Pelle我让gdb在OSX 10.9上工作,但没有以这种方式进行代码签名(如下所述):
sudo nano/System/Library/LaunchDaemons/com.apple.taskgated.plist
将第22行第27列的选项字符串从-s
更改为-sp
ggdb
命令。或在配置文件中创建别名:别名gdb='ggdb'
然后使用“gdb”命令。我想知道中的全局更改是否有一些意外的后果 taskgated并没有启用旧的Tiger约定,而是允许运行签名代码。因此,最好只获得gdb的签名证书,类似于
在此之后,我能够
sudo
使用gdb。如果您需要使用不带sudo的gdb,那么也许,恕我直言,我还没有尝试过,因为现在使用sudo
是一个不错的解决方案。
我在Mac OS X 10.8.5(又名山狮)下运行。
我使用的是GDB版本7.7.1
我使用以下命令编译了测试程序:
g++ -o gdb-sample.out -g gdb-sample.cpp
如果我输入命令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))"
但是,此错误消息是一条令人费解的消息
我发现对我有效的解决方案是使用超级用户帐户调用GDB:
sudo gdb sample.out.
这对我来说很好
从那时起,我可以不使用sudo运行GDB example.out
希望这对其他人有帮助。
如果没有,请回复 发生此错误是因为OSX实现了pid访问策略,该策略要求二进制文件具有数字签名才能访问其他进程pid。为了使gdb能够访问其他进程,我们必须首先对二进制文件进行编码签名。此签名取决于用户必须创建并向系统注册的特定证书 要创建代码签名证书,请打开密钥链访问应用程序。选择菜单Keychain Access->Certificate Assistant->创建证书 选择证书的名称(例如gdb证书),将标识类型设置为自签名根,将证书类型设置为代码签名,然后选择“让我覆盖默认值”。在“继续”上单击几次,直到进入“指定证书位置”屏幕,然后将Keychain设置为“系统” 双击证书,打开信任部分,并将代码签名设置为始终信任。退出钥匙链访问应用程序 重新启动taskgated服务,并对二进制文件进行签名
$ sudo killall taskgated
$ codesign -fs gdb-cert "$(which gdb)"
来源
在macOS 10.12(Sierra)及更高版本上,您还必须
使用gdb 7.12.1或更高版本
另外,防止gdb使用shell启动要调试的程序。您可以使用以下命令在gdb内部执行此操作:
set startup-with-shell off
您还可以将最后一个命令放在主目录中名为.gdbinit的文件中,在这种情况下,每次启动gdb时都会自动应用该命令
echo "set startup-with-shell off" >> ~/.gdbinit
资料来源:
对于任何使用Sierra 10.12.6(及以上)和自制软件的人,
/usr/local/bin/gdb
是指向/usr/local/ceral/gdb/8.0/bin/gdb
(或任何版本,例如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安装coreutils
安装):
所有这些对我都不起作用,我不得不长期坚持下去。 下面是我为使其工作所做的全部步骤列表
Unknown Error=-2147414007
,这非常有用,所以我不得不采取一种变通方法。
KeyChain助手->创建证书->
选择登录
,gdb证书
,代码签名
将证书复制/移动到系统密钥链(输入密码)
gdb cert
)单击Get info
->Trust Always
启动
在外壳关闭时设置启动
记住配置:
echo“关闭外壳设置启动”>~/。gdbinit
系统首选项->用户和组->解锁->登录选项->网络帐户服务器->加入->解锁->编辑(菜单)->启用根用户
sudo killall taskgated
最后签署gdb
codesign-fs-gdb证书“$(哪个gdb)”
禁用根用户(步骤4)
如果仍然不工作,请重新启动。(如果其他方法都不起作用,很可能它已经起作用了)
最后我使用了lldb
,因为它可以正常工作()这可能没有关系。您可以在macos上使用lldb而不是gdb。安装gdb不需要这些麻烦
def已安装lldb()
codesign -fs gdb-cert $(which gdb)
codesign -fs gdb-cert $(greadlink -f $(which gdb))
codesign --entitlements gdb.xml -fs gdb-cert /usr/local/bin/gdb
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.cs.disable-executable-page-protection</key>
<true/>
<key>com.apple.security.cs.debugger</key>
<true/>
<key>com.apple.security.get-task-allow</key>
<true/>
</dict>
</plist>
codesign --entitlements gdb.xml -fs gdb-cert /usr/local/bin/gdb
○ → sw_vers -productVersion
10.13.6
○ → gdb ./a.out
GNU gdb (GDB) 9.2
...
Thread 3 hit Breakpoint 1, main () at main.c:14
14 data_t d = {0};
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.cs.disable-executable-page-protection</key>
<true/>
<key>com.apple.security.cs.debugger</key>
<true/>
<key>com.apple.security.get-task-allow</key>
<true/>
</dict>
</plist>
'''