Gdb 由于“ Unable to find Mach task port for process-id”错误而失败

我的应用程序运行良好,但 gdb 调试失败,出现以下错误

(gdb) run
Starting program: /path/to/app
Unable to find Mach task port for process-id 83767: (os/kern) failure (0x5).

我在 OS X Lion 上。 GDB 版本是

$ gdb --version
GNU gdb 6.3.50-20050815 (Apple version gdb-1752) (Sat Jan 28 03:02:46 UTC 2012)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin".
136647 次浏览

问题是您没有以 root 用户的身份登录(这是您不想要的)。您需要为 gdb 创建一个允许访问的证书。按照这个教程,你应该是好去..。

Http://sourceware.org/gdb/wiki/buildingondarwin

如果所有其他方法都失败,只需使用: sudo gdb executableFileName

在 Snow Leopard 和以后的 Mac OS 版本中,仅仅共同设计 gdb可执行文件是不够的。

你必须遵循这个指南,使其工作: http://www.opensource.apple.com/source/lldb/lldb-69/docs/code-signing.txt

指南解释了如何为 lldb做这件事,但是对于 gdb,过程是完全相同的。

当我切换到 sudo gdb executableFileName的时候它就工作了! :)

这个链接 有最清晰和最详细的步骤,使这个错误消失对我来说。

在我的例子中,我必须将密钥作为“系统”密钥,否则它就无法工作(并非每个 url 都提到这一点)。

此外,杀死 taskgated是一个可行的(和更快的)替代方案,必须重新启动。

在开始这个过程并使用 brew uninstall gdb卸载当前 gdb 之前,我还使用了 卸载的 MacPorts

我遵循 这个教程,一切都很好。

您需要创建一个证书并签名 gdb:

  • 打开应用程序“ Keychain Access”(/Applications/Utities/Keychain Access.app)
  • 打开菜单/钥匙链访问/证书助理/创建证书..。
  • 选择一个名称(示例中为 gdb-cert) ,将“ Identity Type”设置为“ Self Signed Root”,将“ Securities Type”设置为“ Code Signing”,然后选择“ Let me over default”。点击“继续”。 您可能希望将预定义的365天期限延长到3650天。
  • 在“继续”上单击多次,直到到达“指定证书位置”屏幕,然后设置“系统钥匙链”。
  • 如果不能将证书存储在“ System”密钥链中,请在“ login”密钥链中创建它,然后导出它。然后您可以将其导入到“ System”密钥链中。
  • 在 keychain 中选择“ System”,您应该可以找到您的新证书。使用证书的上下文菜单,选择“获取信息”,打开“信任”项,并将“代码签名”设置为“始终信任”。
  • 您必须退出“ Keychain Access”应用程序才能使用证书,并通过终止当前正在运行的“任务门限”进程来重新启动“任务门限”服务。或者,您可以重新启动计算机。
  • 最后,你可以签署 gdb:

    sudo codesign -s gdb-cert /usr/local/bin/ggdb

    sudo ggdb ./myprog

我需要这个命令才能在酋长岩行动:

sudo security add-trust -d -r trustRoot -p basic -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer

在 MacOSX ldb 上需要进行代码签名。使用名为 lldb _ codesign 的代码签名证书将调试版本和发布版本设置为代码签名。

If you don't have one yet you will need to:
- Launch /Applications/Utilities/Keychain Access.app


- In Keychain Access select the "login" keychain in the "Keychains"
list in the upper left hand corner of the window.


- Select the following menu item:


Keychain Access->Certificate Assistant->Create a Certificate...


- Set the following settings


Name = lldb_codesign
Identity Type = Self Signed Root
Certificate Type = Code Signing


- Click Continue
- Click Continue
- Click Done
- Click on the "My Certificates"
- Double click on your new lldb_codesign certificate
- Turn down the "Trust" disclosure triangle


Change:
When using this certificate: Always Trust


- Enter your login password to confirm and make it trusted


The next steps are necessary on SnowLeopard, but are probably because of a bug
how Keychain Access makes certificates.


- Option-drag the new lldb_codesign certificate from the login keychain to
the System keychain in the Keychains pane of the main Keychain Access window
to make a copy of this certificate in the System keychain.  You'll have to
authorize a few more times, set it to be "Always trusted" when asked.
- Switch to the System keychain, and drag the copy of lldb_codesign you just
made there onto the desktop.
- Switch to Terminal, and run the following:


sudo security add-trust -d -r trustRoot -p basic -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/lldb_codesign.cer


- Right click on the "lldb_codesign" certificate in the "System" keychain (NOT
"login", but the one in "System"), and select "Delete" to delete it from
the "System" keychain.
- Reboot
- Clean and rebuild lldb and you should be able to debug.


That should do it.

[注意:-lldb 在 mac 中用作 gdb。]

这些指令适用于 OSX High Sierra 并避免以 root 用户身份运行 gdb (呸!).我最近从 OSX 10.13.2升级到了10.3。我想这就是 gdb8.0.1(安装 w/home)开始失败的时候。

我很难接受别人的指示。在不同的指示下,一切都是一团糟。所以我重新开始了。我或多或少地遵循了这些 指示

收拾残局:

  1. brew uninstall --force gdb # This deletes _all_ versions of gdb on the machine
  2. Applications-> Utilities-> Keychain Access中,我删除了所有以前的 gdb 证书和密钥(确保您知道自己在这里做什么!).目前还不清楚是否有必要这样做,但由于我一直在尝试使用其他指令创建这些证书和密钥,因此无论如何我都删除了它们。我在登录和系统中都有密钥和证书。

现在重新安装 gdb。

  1. brew install gdb
  2. Keychain Access中,转到菜单 Keychain Access-> Certificate Assistant-> Create a Certificate
  3. 选中“ Let me overdedefault”并设置
Name : gdb-cert
Identity Type: Self Signed Root
Certificate Type : Code Signing


[X] Let me override defaults
  1. 第一证书资料页:
Serial Number : 1
Validity Period (days): 3650
  1. 在证书信息的第2页上,除了已经填写的字段之外,所有字段都是空白的。

  2. 在密钥对信息页面上,我保留了默认值

Key Size : 2048
Algorithm : RSA
  1. 在键使用扩展页面上,我选中了默认值。
[X] Include Key Usage Extension
[X] This extension is critical
Capabilities:
[X] Signature
  1. 在扩展键使用扩展页面上,我选中了默认值。
[X] Include Extended Key Usage Extension
[X] This extension is critical
Capabilities:
[X] Code Signing
  1. 在基本约束扩展页上,未检查任何内容(默认值)。

  2. 在“主题替代名称扩展”页面上,我选中了默认值,没有添加任何其他内容。

[X] Include Subject Alternate Name Extension
  1. 在“为证书页指定位置”上,我设置
Keychain: System
  1. 我单击 Create,系统提示我输入密码。

  2. 回到 Keychain Access应用程序中,我转到 System,右键单击 gdb-cert,在下拉菜单 Trust下,我将所有字段改为 Always Trust

  3. 重启的电脑。

  4. 在终端,我运行 codesign -s gdb-cert /usr/local/bin/gdb。我输入我的密码时提示。

  5. 在航站楼,我运行 echo "set startup-with-shell off" >> ~/.gdbinit

  6. 我在 gdb 控制台中运行 gdb myprogramstart。在这里,我相信,它提示我输入密码。在此之后,所有后续运行,它没有提示我的密码。

这是一个奇怪的方法,但它为我工作(MacOs HighSierra 10.13.3)。安装 CLion。这是国内生产总值的一部分。一旦使用 Terminal 运行 gdb。将 gdb 程序复制到您的 usr/local/bin/。没有问题的签名,sudo 等。

按照这里的说明,在 macOS 上协同设计 gdb似乎在 macOS High Sierra (10.13.3)上解决了这个问题。

这里有一个非常有用的 向导,它解决了我的问题(OSX 10.13.6)。

  1. 开放钥匙链访问
  2. 在菜单中,打开“钥匙链访问”> “证书助理”> “创建证书”
  3. 给它一个名字(例如 gdbc)
    • 标识类型: 自签名根
    • 证书类型: 代码签名
    • 检查: 让我覆盖默认值
  4. 继续,直到它提示您: “为... 指定一个位置”
  5. 将钥匙链位置设置为系统
  6. 创建证书和贴身助手。
  7. 在 System keychain 中查找证书,右键单击它 > get info (或者双击它)
  8. 展开“信任”,将代码签名设置为始终信任
  9. 在终端中重新启动任务门限: 杀死任务门限
  10. 在终端中运行 codesign -fs gdbc /usr/local/bin/gdb: 这会询问 root 密码