【GO】【gdb】
1 安装homebrew
参考 https://www.cnblogs.com/suren2017/p/9249803.html (【Ruby】【环境搭建】macOS Sierra 10.12.6 + Xcode 8 + gpg 2.2.8 + rvm 1.29.3 + Ruby 2.4.0 + RubyMine 2018.1.4)
2 安装gdb
brew update
brew search gdb 有的话就执行下面的 一般情况是有的
brew install gdb
Install gdb 8.0.1: brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/9ec9fb27a33698fc7636afce5c1c16787e9ce3f3/Formula/gdb.rb 为避免遇到During startup program terminated with signal SIGTRAP, Trace/breakpoint trap.问题
3 钥匙串
打开钥匙串访问 -> 创建证书 名字自定义 “身份类型”:自签名根证书 “证书类型”:代码签名
注意一定钥匙代码签名,英文名是codesign,上面的名称随意,这个跟你后面的命令行键入的名称有关,接下来,一直往下
"指定该证书的位置" 把这个钥匙串改成system
双击,将信任改成始终信任:
中间要输入密码之类的,输入就是了。
退出Keychain Access以刷新存储证书
OK,只差最后一步
重启电脑。
然后在命令行上输入:
codesign -fs gdb-cert-hekewen /usr/local/bin/gdb
4 echo "set startup-with-shell off" >> ~/.gdbinit
【gdb遇到的问题】
1 During startup program terminated with signal SIGTRAP, Trace/breakpoint trap.
解决方式,回退gdb版本至8.0.1
Unlink current gdb: brew unlink gdb
Install gdb 8.0.1: brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/9ec9fb27a33698fc7636afce5c1c16787e9ce3f3/Formula/gdb.rb
2 During startup program terminated with signal SIG113, Real-time event 113
这个错误好像只有在高版本的OSX系统上才出现,解决办法就是在gdb启动的时候,键入命令
set startup-with-shell off
就解决了
当然,如果这样,你每次在调试的时候都要键入,这时候你就可以添加到.gdbinit,每次运行gdb的时候都执行一次。
关于.gdbinit,就是在你每次用gdb调整程序的时候,如果程序文件中有.gdbinit,就会自动读取里面的命令,全部执行一遍。
于是乎,我们只要用vim在程序文件里面创建一个.gdbinit,并在里面写上set startyup-with-shell off
就解决了。
3 钥匙串问题
https://www.cnblogs.com/suren2017/p/10469284.html (【Mac】【创建钥匙串】)
4 Starting program: /x/y/foo Unable to find Mach task port for process-id 28885: (os/kern) failure (0x5). (please check gdb is codesigned - see taskgated(8))
方法一: 这个原因是mac不允许没有给予许可的进程来调试其它进程,那解决办法自然就想到了root,来个根权限。但是,这个会影响到万一gdb调试了重要内核程序后果不是我们想要的,没有安全证书,我们就自己添加一个安全证书:
首先打开钥匙串访问 -> 创建证书 名字自定义 “身份类型”:自签名根证书 “证书类型”:代码签名
注意一定钥匙代码签名,英文名是codesign,上面的名称随意,这个跟你后面的命令行键入的名称有关,接下来,一直往下
"指定该证书的位置" 把这个钥匙串改成system
双击,将信任改成始终信任:
中间要输入密码之类的,输入就是了。
退出Keychain Access以刷新存储证书
OK,只差最后一步
重启电脑。
然后在命令行上输入:
codesign -fs gdb-cert-hekewen /usr/local/bin/gdb
这个gdb-cert-hekewen,要改成你的证书名,后面就是gdb位置。
没有报错就是成功了。
方法二:
Mac OS Sierra 无法使用gdb调试
Unable to find Mach task port for process-id 47072: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
During startup program terminated with signal SIG113, Real-time event 113.
如果是用Homebrew安装的gdb,brew install gdb,安装完有提示
gdb requires special privileges to access Mach ports.
You will need to codesign the binary. For instructions, see:
https://sourceware.org/gdb/wiki/BuildingOnDarwin
On 10.12 (Sierra) or later with SIP, you need to run this:
echo “set startup-with-shell off” >> ~/.gdbinit
在macOS上,gdb使用Mach ports需要特殊权限
你需要对二进制文件进行签名。指导步骤,查看:
https://sourceware.org/gdb/wiki/BuildingOnDarwin
在10.12 (Sierra) 或之后带SIP的操作系统版本,你还需要运行这个命令:
echo “set startup-with-shell off” >> ~/.gdbinit
解决方法
具体操作,按照https://sourceware.org/gdb/wiki/BuildingOnDarwin步骤2开始
2. Giving gdb permission to control other processes
启动 /Applications/Utilities/Keychain Access.app
顶部菜单选择 /Keychain Access/Certificate Assistant/Create a Certificate…
Create Your Certificate
Name: gdb-cert
Identity Type: Self Signed Root
Certificate Type: Code Signing
勾选 Let me override defaults
一直按continue,直到Specify a Location For The Certificate
Keychain: System
tips: 如果无法将Certificate保存到System keychain,就先保存到login keychain,然后导出,再导入到System keychain。
Create
如附图,右键选择gdb-cert的Get Info,打开Trust项,将Code Signing改成Always Trust
最后退出Keychain Access以刷新存储证书
codesign gdb,执行
codesign -fs gdb-cert $(which gdb)
macOS 10.12 (Sierra) 或以上版本的操作系统
需要使用 gdb 7.12.1 之上的版本
此外,为防止gdb利用shell来启动程序开始debug,执行下面的语句
echo "set startup-with-shell off" >> ~/.gdbinit
重启系统
【GO】【gdb】的更多相关文章
- 【程序员小助手】Emacs,最强编辑器,没有之一
内容简介 1.Emacs简介 2.Emacs三个平台的安装与配置 3.自动补全插件 4.小编的Emacs配置文件 5.常用快捷方式 6.和版本控制系统的配合(以SVN为例) [程序员小助手]系列 在这 ...
- 【GO】【环境配置】
1.首先下载GO的安装包:https://golang.org/doc/install#testing 找到上面一个Download超大按钮,找不到的可以不用再看了. 下载完成,安装. 安装成功后,启 ...
- “500 oops socket” Debian 9 running via Linux Deploy上成功部署vsftpd的解决方案(201901原创)【成功完美简单极致】
"500 oops socket" Debian 9 running via Linux Deploy上成功部署vsftpd的解决方案(201901原创)[成功完美简单极致] #自 ...
- Linux从头学15:【页目录和页表】-理论 + 实例 + 图文的最完全、最接地气详解
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++.嵌入式.Linux. 关注下方公众号,回复[书籍],获取 Linux.嵌入式领域经典书籍:回复[PDF],获取所有原创文章( PDF 格式). ...
- 【疯狂造轮子-iOS】JSON转Model系列之二
[疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...
- 【疯狂造轮子-iOS】JSON转Model系列之一
[疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...
- 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付
前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...
- 【AutoMapper官方文档】DTO与Domin Model相互转换(上)
写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...
- 【Win 10 应用开发】应用预启动
所谓预启动,其实你一看那名字就知道是啥意思了,这是直接译,也找不到比这个叫法更简练的词了.在系统资源允许的情况下(比如电池电量充足,有足够的内存空间),系统会把用户常用的应用程序在后台启动,但不会显示 ...
随机推荐
- oracle树形结构全路径查询
很实用的语法,父子节点通过id与patientId来关联,知道子节点的id,想查出所有的父节点: START WITH ...CONNECT BY ... SELECT T2.ORG_FULLNAME ...
- [vue]vue基础复习项案例stepbystep
看本篇第二次复习内容即可. 还有一些 文档了这个如 https://www.cnblogs.com/iiiiiher/p/9508733.html https://www.cnblogs.com/ii ...
- head和tail命令
1.head head 文件名 :查看前10行 head -n 5 文件名 :查看文件的前5行 head -c 5 文件名 :查看文件的前5个字符 head -n -5 文件名 :查看文件的后5行 ...
- 一小时上手Java 8新特性
一小时上手Java 8新特性 本文摘译自 https://www.journaldev.com/2389/java-8-features-with-examples,并做了适当增补. Iterable ...
- 接口自动化框架(java)--2.接口用例POST请求,参数配置
这套框架的报告是自己封装的 Post类型的接口通常有请求参数,请求参数也是json类型,所以需要写一个类将请求参数序列化成json对象 以常见的登录接口为例 新建一个package,和postPara ...
- FG面经Prepare: BST to Double LinkedList
BST to double linkedlist in inorder traversal sequenceFollow Up: 如果这个BST自带prev, next, 给一个value,插进去这个 ...
- 一道有趣的JS问题
function Foo() { getName = function () { alert (1); }; return this; } Foo.getName = function () { al ...
- windows下redis 配置文件参数说明
1.先看redis.windows.conf 文件 # Redis configuration file example # Note on units: when memory size is ne ...
- Visual Studio 2019 16.0 正式版下载
Visual Studio 2019 16.0 最新版 现在流行 官方版直接下载 在线选择性安装https://www.visualstudio.com/zh-hans/downloads/ Vis ...
- mysql 5.7 配置文件说明
1.配置文件样例 [client] #password= socket=/data/var/mysql/mysql.sock [mysqld_safe] pid-file=/data/var/mysq ...