【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 应用开发】应用预启动
所谓预启动,其实你一看那名字就知道是啥意思了,这是直接译,也找不到比这个叫法更简练的词了.在系统资源允许的情况下(比如电池电量充足,有足够的内存空间),系统会把用户常用的应用程序在后台启动,但不会显示 ...
随机推荐
- 跨主机网络overlay和macvlan模型
overlay网络模型 无论是openstack还是docker都是先创建一个网络然后再创建虚机或者容器 并把创建的虚机或者容器运行在此网络中 Docker 提供了 overlay driver,使 ...
- 时序图中的生命线与类绑定(EA)
使用时序图时序图( Sequence Diagram)时,有时候在起初拖放放的对象生命线未绑定相关的类. 如果: 但在后期需要和类进行绑定. 那么需要如下设置,右键你要关联的对象生命线,选择Advan ...
- 基于Promise封装uni-app的request方法,实现类似axios形式的请求
https://my.oschina.net/u/2428630/blog/3004860 uni-app框架中 安装(项目根目录下运行) npm install uni-request --save ...
- crypto 简单了解
阅读前:文章记录crypto库的简单了解,和一些简单的用法,与具体加解密算法的实现无关. 文中例子使用到了node的crypto模块 和 npm sjcl(Stanford Javascript C ...
- windows 下安装weblogic
下载weblogic安装文件 https://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html 在目录下, 下载后 ...
- js左右大小变化
点左边左边变大.点右边右边大左边小 <style type="text/css"> *{ margin:0px auto; padding:0px; } #wai{ w ...
- 蓝桥杯c/c++省赛真题——日志统计
标题:日志统计 [问题描述]小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是:ts id 表示在ts时刻编号id的帖子收到一个" ...
- JavaScript之jsx&react
1.Virtual DOM 1.将网页所有内容映射到一颗树形结构的层级对象模型上,浏览器提供对dom的支持,用户可以是用脚本调用dom,api来动态修改dom节点,从而达到修改网页目的,这种修改是浏览 ...
- react16实战总结
实战总结 react实战基础 遇到的一些坑 li里要带key值否则会警告,这个问题在vue中也存在, 考虑到虚拟DOM中diff,所以不要用index作为key值,而要用item. 2.immutab ...
- 跟我一起学python(1)
1.变量 定义一个变量 会有三个特征 id,type,value print(id(age),type(age),age) 命名推荐用下划线方式 (尽量用英文 不要过长 意思要明白) numb ...