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

时间:2015-10-16 04:48:46

标签: macos gdb

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

我关注此网址:http://ntraft.com/installing-gdb-on-os-x-mavericks/,MAC不允许安装MacPorts。

在这方面,有谁可以帮助我。

8 个答案:

答案 0 :(得分:28)

首先安装Homebrew:

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

然后运行:brew install gdb

答案 1 :(得分:27)

请注意,此答案是为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.html或  https://sourceware.org/gdb/wiki/BuildingOnDarwin

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

备选方案2:使用legacygated

的旧版选项

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

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

食谱是:

  1. 在恢复模式下重启,打开终端并运行csrutil disable

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

    <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 ,因为这也会使{{1}执行setgid二进制文件的任何用户的有效组ID(在https://apple.stackexchange.com/a/112132中建议)

    procmod

答案 2 :(得分:12)

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

答案 3 :(得分:11)

这篇博客文章解释得非常好:

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

我开始工作的方式:

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

    1.1从菜单中选择 KeyChain Access&gt;证书助理&gt;创建证书......

    1.2按照向导创建证书,我们将其命名为gdb.cert,身份类型为自签名根,证书类型为代码签名并选择让我覆盖默认值。

    1.3在“继续”上单击几次,直到转到指定证书位置,然后将钥匙串设置为系统。< / p>

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

  3. 重新启动taskgatedsudo killall taskgated && exit

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

答案 4 :(得分:8)

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

brew install gdb

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

答案 5 :(得分:2)

一旦安装了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 install的gdb命令实际上是ggdb。您需要按照此处的说明对代码ggdb进行编码:

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

我能够让代码签名生效的唯一方法是使用ggdb运行sudo。祝你好运!

答案 6 :(得分:0)

似乎MacPorts现在可以安装在El Capitan: https://www.macports.org/install.php 然后你可以通过你提到的链接安装gdb。

答案 7 :(得分:0)

花了好几天试图让它在High Sierra 10.13.1上运行。无论我尝试什么,自制软件的gdb 8.1版本都无法运行。结束了通过macports安装gdb 8.0.1,这奇迹般地工作(在跳过与代码签名等相关的所有其他必要的箍之后)。

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