如何在Mac OSX El Capitan中安装gdb(debugging器)?
如何在Mac OSX El Capitan中安装gdb(debugging器)? 我已经尝试安装GDB,但失败了几次。
我正在关注这个URL: http ://ntraft.com/installing-gdb-on-os-x-mavericks/,MAC不允许安装MacPorts。
任何人都可以在这方面帮助我。
有两个解决scheme的问题,他们在这个问题的其他答案都提到,并且如何让gdb在OSX 10.11下使用macports工作El Capitan? ,但是为了澄清一些困惑,这里是我的总结(作为一个答案,因为它有一点点评论):
我认为哪种scheme更安全可归结为1)信任自签名证书和2)给予用户更多特权。
备选scheme1:签署二进制文件
如果使用签名替代方法,则禁用SIP将-p选项添加到taskgated
不是必需的。
但是 ,请注意,使用此替代方法, 只能对 _developer
组中的 用户进行debugging 。
使用codesign使用名为gdb-cert
的证书进行签名:
codesign -s gdb-cert /opt/local/bin/ggdb
(使用MacPorts标准path,必要时采用)
有关详细的代码签名配方(包括创build证书),请参阅: https : //gcc.gnu.org/onlinedocs/gcc-4.8.1/gnat_ugn_unw/Codesigning-the-Debugger.html或https://sourceware.org/ GDB /维基/ BuildingOnDarwin
请注意,您需要在此过程中和之后重新启动钥匙串应用程序和任务门户服务(最简单的方法是重新启动)。
scheme2:使用遗留选项进行任务
根据@ user14241的回答,禁用SIP并向taskgated
添加-p选项是一个选项。 请注意,如果使用此选项, 则不需要对二进制文件进行签名 ,并且还会绕过用于进行身份validation的对话框,以作为“开发人员工具”组( _developer
)的成员进行身份validation。
在将-p选项(允许组procmod和procview)添加到taskgated之后,还需要将允许使用gdb的用户添加到procmod组中 。
配方是:
-
在恢复模式下重新启动,打开terminal并运行
csrutil disable
-
重启机器并编辑
/System/Library/LaunchDaemons/com.apple.taskgated.plist
,添加-p
opion:<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
先安装自制软件:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
然后运行这个: brew install gdb
这里有一篇博客文章解释得非常好:
http://panks.me/posts/2013/11/install-gdb-on-os-x-mavericks-from-source/
而我得到它的工作方式:
-
通过KeyChain Access创build一个编码签名证书:
1.1从菜单中selectKeyChain访问>证书助理>创build证书…
1.2按照向导创build一个证书,我们将其命名为
gdb.cert
,身份types是自签名的根 ,证书types是代码签名,然后select让我覆盖默认值。1.3继续点击几次,直到您到达指定证书的位置屏幕 ,然后将钥匙串设置为系统 。
-
通过Homebrew
brew install gdb
:brew install gdb
-
重新启动
taskgated
:sudo killall taskgated && exit
-
重新打开terminal窗口并键入
sudo codesign -vfs gdb.cert /usr/local/bin/gdb
这不一定解决这个问题,但如果你使用的是Mac OS X,那么你可以使用lldb
LLDB主页 。 它和gdb
非常相似,甚至提供了一个使用gdb
命令的指南。
在我的Mac OS X El Capitan上,我使用自制软件安装gdb:
brew install gdb
然后我按照这里的说明: https : //sourceware.org/gdb/wiki/BuildingOnDarwin ,在2.1节。 适用于Mac OS X 10.5(Leopard)及更高版本的方法 。
一旦你安装了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。 ggdb
安装的gdb
命令实际上是ggdb
。 您需要ggdb
以下说明对ggdb
进行编码:
https://gcc.gnu.org/onlinedocs/gcc-4.8.1/gnat_ugn_unw/Codesigning-the-Debugger.html
我已经能够获得代码签名的唯一方法是使用sudo
运行ggdb
。 祝你好运!
现在看来,MacPorts可以安装在El Capitan: https : //www.macports.org/install.php然后你可以通过你提到的链接安装gdb。
- 为什么GDB铸造不工作?
- 如何使用libc的debugging版本
- “EXC_BREAKPOINT(SIGTRAP)”由debugging断点引起的exception吗?
- 缺less单独的debuginfos,请使用:debuginfo-install glibc-2.12-1.47.el6_2.9.i686 libgcc-4.4.6-3.el6.i686 libstdc ++ – 4.4.6-3.el6.i686
- 如何使用GDB修改内存内容?
- 如何显示一个结构在gdb中的字段?
- gdb失败,并显示“无法find用于进程ID的Mach任务端口”错误
- 在GDB中引发特定exceptiontypes时如何中断?
- 如何检查GDB中函数的返回值?