如何在 Mac OSX El Capitan 中安装 gdb(调试器)?

How to install gdb (debugger) in Mac OSX El Capitan?

如何在 Mac OSX El Capitan 中安装 gdb(调试器)?我试过安装 gdb 但失败了几次。

我正在关注这个 URL:http://ntraft.com/installing-gdb-on-os-x-mavericks/,MAC 不允许安装 Mac 端口。

谁能在这方面帮助我。

看来 MacPorts 现在可以安装在 El Capitan 中了: https://www.macports.org/install.php 然后你可能可以通过你提到的link安装gdb。

安装 gdb 的 macports 版本后,您需要禁用 SIP 才能对 /System/Library/LaunchDaemons/com.apple.taskgated.plist 进行正确的编辑。要禁用SIP,您需要以恢复模式重新启动并执行以下命令:

csrutil disable

然后重启。然后你需要像这样编辑 com.apple.taskgated.plist 的底部:

<array>
        <string>/usr/libexec/taskgated</string>
        <string>-sp</string>
</array>

然后您必须重新启动才能使更改生效。然后您应该重新启用 SIP。 macports 安装的 gdb 命令实际上是 ggdb。您需要按照此处的说明对 ggdb 进行代码签名:

https://gcc.gnu.org/onlinedocs/gcc-4.8.1/gnat_ugn_unw/Codesigning-the-Debugger.html

我能够让代码签名工作的唯一方法是 运行 ggdbsudo。祝你好运!

请注意,此答案是为 Mac OS El Capitan 编写的。对于较新的版本,请注意它可能不再适用。特别是,遗留选项很可能已被弃用。

这个问题有两种解决方案,在这个问题和 How to get gdb to work using macports under OSX 10.11 El Capitan? 的其他答案中都提到了它们,但为了澄清一些混乱,我的总结是(作为答案,因为它得到了评论有点长):

我想哪种选择更安全归结为在 1) 信任自签名证书和 2) 给用户更多特权之间的选择。

备选方案 1:签署二进制文件

如果使用替代签名,则不需要禁用 SIP 以将 -p 选项添加到 taskgated

但是,请注意,使用此替代方案时,调试仅允许 _developer .

使用 codesign 使用名为 gdb-cert 的证书进行签名:

codesign -s gdb-cert /opt/local/bin/ggdb

(使用MacPorts标准路径,必要时采用)

有关详细的代码签名方法(包括证书创建),请参阅: https://gcc.gnu.org/onlinedocs/gcc-4.8.1/gnat_ugn_unw/Codesigning-the-Debugger.htmlhttps://sourceware.org/gdb/wiki/BuildingOnDarwin

请注意,您需要在该过程期间和之后重新启动钥匙串应用程序和任务化服务(最简单的方法是重新启动)。

备选方案 2:使用任务门的旧选项

根据@user14241 的回答,禁用 SIP 并将 -p 选项添加到 taskgated 是一个选项。请注意,如果使用此选项,不需要签署二进制文件,并且它还会绕过用于验证开发人员工具组成员身份的对话框 (_developer)。

在将 -p 选项(允许组 procmod 和 procview)添加到任务后,您还需要将应该允许使用 gdb 的用户添加到 procmod 组

食谱是:

  1. 以恢复模式重新启动,打开终端并运行 csrutil disable

  2. 重新启动机器并编辑 /System/Library/LaunchDaemons/com.apple.taskgated.plist,添加 -p 选项:

    <array>
        <string>/usr/libexec/taskgated</string>
        <string>-sp</string>
    </array>
    
  3. 以恢复模式重启以重新启用 SIP (csrutil enable)

  4. 重新启动计算机并将用户 USERNAME 添加到组 procmod

    sudo dseditgroup -o edit -a USERNAME -t user procmod

    不涉及将用户添加到组的替代方法制作可执行文件 setgid procmod,因为这也使 procmod 成为任何执行 setgid 二进制文件的用户的有效组 ID(在 https://apple.stackexchange.com/a/112132 中建议)

    sudo chgrp procmod /path/to/gdb
    sudo chmod g+s /path/to/gdb 
    

这不一定能解决问题,但如果您使用的是 Mac OS X,那么您可能可以使用 lldb LLDB Homepage 。它与 gdb 非常相似,甚至提供了使用您将在 gdb 上使用的命令的指南。

首先安装 Homebrew:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

然后 运行 这个:brew install gdb

这里有一篇博客post解释得很好:

http://panks.me/posts/2013/11/install-gdb-on-os-x-mavericks-from-source/

以及我的工作方式:

  1. 通过 KeyChain Access 创建编码签名证书:

    1.1 从菜单中,select KeyChain Access > Certificate Assistant > Create a Certificate...

    1.2 按照向导创建一个证书,我们命名为gdb-cert,身份类型为Self Signed Root,证书类型为代码签名和select让我覆盖默认值。

    1.3 多次单击“继续”,直到出现“为证书指定位置”屏幕,然后将 Keychain 设置为 系统.

  2. 通过 Homebrew 安装 gdb:brew install gdb

  3. 重启taskgatedsudo killall taskgated && exit

  4. 重新打开终端 window 并输入 sudo codesign -vfs gdb-cert /usr/local/bin/gdb

在我的 Mac OS X El Capitan 上,我使用自制软件安装 gdb:

brew install gdb

然后我按照此处的说明进行操作:https://sourceware.org/gdb/wiki/BuildingOnDarwin,在 2.1 部分。 Mac OS X 10.5 (Leopard) 及更高版本.

的方法

刚刚花了好几天时间试图让它在 High Sierra 10.13.1 上运行。无论我如何尝试,来自自制软件的 gdb 8.1 版本都无法正常工作。最终通过 macports 安装了 gdb 8.0.1,这奇迹般地起作用了(在跳过与代码签名等相关的所有其他必要步骤之后)。

另一个问题是,在 Eclipse 中,您会在所有程序参数周围使用无关的单引号,这可以通过在 .gdbinit 中提供参数来解决。