如何在 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
我能够让代码签名工作的唯一方法是 运行 ggdb
和 sudo
。祝你好运!
请注意,此答案是为 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:使用任务门的旧选项
根据@user14241 的回答,禁用 SIP 并将 -p 选项添加到 taskgated
是一个选项。请注意,如果使用此选项,不需要签署二进制文件,并且它还会绕过用于验证开发人员工具组成员身份的对话框 (_developer
)。
在将 -p 选项(允许组 procmod 和 procview)添加到任务后,您还需要将应该允许使用 gdb 的用户添加到 procmod 组。
食谱是:
以恢复模式重新启动,打开终端并运行 csrutil disable
重新启动机器并编辑 /System/Library/LaunchDaemons/com.apple.taskgated.plist
,添加
-p
选项:
<array>
<string>/usr/libexec/taskgated</string>
<string>-sp</string>
</array>
以恢复模式重启以重新启用 SIP (csrutil enable
)
重新启动计算机并将用户 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/
以及我的工作方式:
通过 KeyChain Access 创建编码签名证书:
1.1 从菜单中,select KeyChain Access > Certificate Assistant > Create a Certificate...
1.2 按照向导创建一个证书,我们命名为gdb-cert
,身份类型为Self Signed Root,证书类型为代码签名和select让我覆盖默认值。
1.3 多次单击“继续”,直到出现“为证书指定位置”屏幕,然后将 Keychain 设置为 系统.
通过 Homebrew 安装 gdb:brew install gdb
重启taskgated
:sudo killall taskgated && exit
重新打开终端 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 中提供参数来解决。
如何在 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
我能够让代码签名工作的唯一方法是 运行 ggdb
和 sudo
。祝你好运!
请注意,此答案是为 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:使用任务门的旧选项
根据@user14241 的回答,禁用 SIP 并将 -p 选项添加到 taskgated
是一个选项。请注意,如果使用此选项,不需要签署二进制文件,并且它还会绕过用于验证开发人员工具组成员身份的对话框 (_developer
)。
在将 -p 选项(允许组 procmod 和 procview)添加到任务后,您还需要将应该允许使用 gdb 的用户添加到 procmod 组。
食谱是:
以恢复模式重新启动,打开终端并运行
csrutil disable
重新启动机器并编辑
/System/Library/LaunchDaemons/com.apple.taskgated.plist
,添加-p
选项:<array> <string>/usr/libexec/taskgated</string> <string>-sp</string> </array>
以恢复模式重启以重新启用 SIP (
csrutil enable
)重新启动计算机并将用户
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/
以及我的工作方式:
通过 KeyChain Access 创建编码签名证书:
1.1 从菜单中,select KeyChain Access > Certificate Assistant > Create a Certificate...
1.2 按照向导创建一个证书,我们命名为
gdb-cert
,身份类型为Self Signed Root,证书类型为代码签名和select让我覆盖默认值。1.3 多次单击“继续”,直到出现“为证书指定位置”屏幕,然后将 Keychain 设置为 系统.
通过 Homebrew 安装 gdb:
brew install gdb
重启
taskgated
:sudo killall taskgated && exit
重新打开终端 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 中提供参数来解决。