MacOS配置gdb终极蛇皮详细版本

1、安装homebrew

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

2、安装gdb

brew install gdb
gdb --version //使用这个命令查看版本信息,若能查到则证明安装成功了

3、使用gdb

//在某个目录下用c语言写hello world程序,保存为hello.cpp
gcc -g hello.c -o hello
gdb hello
gdb -q hello //不打印gdb版本信息 与上一行两者选一执行即可

4、使用gdb时会遇到的问题

4.1初次使用gdb可能会遇到的错误

(gdb) run
Starting program: /usr/local/bin/fabnacci
Unable to find Mach task port for process-id 23330: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))

这是因为 Darwin 内核在你没有特殊权限的情况下,不允许调试其它进程。调试某个进程,意味着你对这个进程有完全的控制权限,所以为了防止被恶意利用,它是默认禁止的。允许 gdb 控制其它进程最好的方法就是用系统信任的证书对它进行签名。

解决方案:
1、用聚焦(cmd+空格)搜索钥匙串访问,选择打开
2、光标移到左上角的 钥匙串访问->证书助理->创建证书
3、如下填写:
名称:gdb_codesign
身份类型:自签名根证书
证书类型:代码签名
钩选:让我覆盖这些默认设置
4、一路确定,直到指定证书位置的步骤,选择系统
5、点击“创建”,会提示用输入系统登录密码,创建完成
6、在钥匙串访问程序中,选择左侧栏上半部分的系统左侧栏下半部分的我的证书,找到你刚刚创建的gdb_codesign证书并双击打开证书信息窗口,展开信任项,设置使用此证书时:为始终信任
7、关闭证书信息窗口,系统会再次要求输入系统登录密码
8、对gdb签名
如果是之前的系统,直接执行

codesign -fs gdb-cert $(which gdb)

如果是Mojave(10.14)之后的系统
先创建一个文件 gdb-entitlement.xml 内容为:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.cs.debugger</key>
    <true/>
</dict>
</plist>
</pre>

在该xml文件所在目录下执行

codesign --entitlements gdb-entitlement.xml -fs gdb_codesign $(which gdb)

没有报错就是签名成功了

9、在第8部按照不同系统版本完成对gdb签名之后,一定要重启系统!!!

4.2 在gdb内使用run时程序没有结果

使用run命令执行程序,但并没有输出预期结果“Hello World”
像死循环一样了
或者输出了如下的信息:

Starting program: /Users/dongcl/code/acm/hello 
[New Thread 0x2703 of process 706]
[New Thread 0x2603 of process 706]

During startup program terminated with signal SIGTRAP, Trace/breakpoint trap.

解决办法:
每次启动gdb启动的时候,执行命令

set startup-with-shell off

或者一劳永逸的办法:

echo "set startup-with-shell off" >> ~/.gdbinit

4.3更换到gdb v8.0.1

$ brew uninstall gdb
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c3128a5c335bd2fa75ffba9d721e9910134e4644/Formula/gdb.rb
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值