pel*_*olt 93 c++ eclipse macos homebrew gdb
我在osx 10.8.4下并且已经安装了gdb 7.5.1和homebrew(动机获得了一个新的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 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))
Run Code Online (Sandbox Code Playgroud)
我已经遵循了代码签名的各种建议
所以我做了:
当我在Eclipse中重新运行调试时,我得到与上面相同的错误"(请检查gdb是codesigned - 参见taskgated(8))".
如果我将gdb设置回较旧的gdb(在Eclipse的gdb首选项中)/ usr/libexec/gdb/gdb-i386-apple-darwin,则调试按预期运行.
那里有任何解决方案/提示吗?
谢谢
佩尔
小智 127
发生此错误是因为OSX实现了pid访问策略,该策略需要二进制文件的数字签名才能访问其他进程pids.要启用gdb访问其他进程,我们必须首先对二进制文件进行代码签名.此签名取决于特定证书,用户必须创建该证书并向系统注册.
要创建代码签名证书,请打开Keychain Access应用程序.选择菜单Keychain Access - > Certificate Assistant - > Create a Certificate ...
选择证书的名称(例如,gdb-cert),将Identity Type设置为Self Signed Root,将Certificate Type设置为Code Signing并选择Let me override defaults.在"继续"上单击几次,直到进入"为证书指定位置"屏幕,然后将"密钥链"设置为"系统".
双击证书,打开"信任"部分,然后将"代码签名"设置为"始终信任".退出Keychain Access应用程序.
重新启动taskgated服务,并签署二进制文件.
$ sudo killall taskgated
$ codesign -fs gdb-cert "$(which gdb)"
Run Code Online (Sandbox Code Playgroud)
来源http://andresabino.com/2015/04/14/codesign-gdb-on-mac-os-x-yosemite-10-10-2/
在macOS 10.12(Sierra)及更高版本中,您还必须
使用gdb 7.12.1或更高版本另外防止gdb使用shell启动要调试的程序.你可以在gdb里面使用以下命令:
set startup-with-shell off
Run Code Online (Sandbox Code Playgroud)
您还可以将此最后一个命令放在主目录中名为.gdbinit的文件中,在这种情况下,每次启动gdb时都会自动应用它
echo "set startup-with-shell off" >> ~/.gdbinit
Run Code Online (Sandbox Code Playgroud)
消息来源:https: //sourceware.org/gdb/wiki/BuildingOnDarwin
Joh*_*man 54
我升级到gdb 8.3并且无法使事情正常工作。这帮助了我:
codesign --entitlements gdb.xml -fs gdb-cert /usr/local/bin/gdb
Run Code Online (Sandbox Code Playgroud)
其中的内容gdb.xml是:
<?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>
Run Code Online (Sandbox Code Playgroud)
我在这里找到了这个解决方案:https : //timnash.co.uk/getting-gdb-to-semi-reliably-work-on-mojave-macos/
注意:如果没有权利,我gdb只能使用sudo.
klm*_*123 30
我让gdb在OSX 10.9上工作,没有这样的编码方式(这里描述):
用macports安装gdb.(也许你可以跳过它)
sudo nano /System/Library/LaunchDaemons/com.apple.taskgated.plist
从更改选项字符串-s,以-sp在22行,列27.
重启电脑.
使用gdb.如果您使用mac ports安装它,那么您必须使用'ggdb'命令.或者在配置文件中创建别名:
别名gdb ='ggdb'
然后使用'gdb'命令.
小智 24
我在GDB遇到了同样的问题.我在Mac OS X 10.8.5又名Mountain Lion 下奔跑.我正在使用GDB版本7.7.1.
我使用以下命令编译了我的测试程序:
g++ -o gdb-sample.out -g gdb-sample.cpp
Run Code Online (Sandbox Code Playgroud)
如果我输入命令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))"
Run Code Online (Sandbox Code Playgroud)
但是,此错误消息是一个红色的鲱鱼.
我发现对我有用的解决方案是使用超级用户acct简单地调用GDB:
sudo gdb sample.out.
Run Code Online (Sandbox Code Playgroud)
这对我来说很好.
从那时起,我可以在不使用sudo的情况下运行GDB example.out.
希望这有助于并为其他人服务.如果没有,请回复.
这些都不适合我,我不得不长期坚持下去。这是我为使其正常工作所做的步骤的完整列表。
不幸的是,系统证书给了我Unknown Error = -2,147,414,007很大帮助,所以我不得不采取一种解决方法。
KeyChain Assistant -> Create certificate ->
选取login, gdb-cert,Code Signing
将证书复制/移动到系统钥匙串(输入密码)
gdb-cert) 单击Get info->Trust Alwaysstartup-with-shell在控制台输入: set startup-with-shell off
记住配置:
echo "set startup-with-shell off" >> ~/. gdbinit
去System Preferences-> Users & Groups-> Unlock it-> Login Options-> Network Account Server-> Join-> Unlock it-> Edit(菜单) ->Enable Root User
sudo killall taskgatedcodesign -fs gdb-cert "$(which gdb)"
附注。我最终使用了lldb因为它很好用(教程)
对于使用 Sierra 10.12.6(及更高版本)和 Homebrew 的任何人来说,/usr/local/bin/gdb是一个符号链接/usr/local/Cellar/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"
Run Code Online (Sandbox Code Playgroud)
或者,如果您有greadlink(通过 安装brew install coreutils):
codesign -fs gdb-cert $(which gdb)
codesign -fs gdb-cert $(greadlink -f $(which gdb))
Run Code Online (Sandbox Code Playgroud)
小智 5
这可能没有关系。您可以在 macos 上使用 lldb 而不是 gdb。你不需要这个麻烦来安装 gdb。
lldb( http://lldb.llvm.org ) 已经默认安装在 High Sierra 中