mac gdb 安装避坑指南,避免重启大坑!

前言

本文介绍 mac 下成功安装 gdb 工具的安装步骤和避坑指南,先列出我的安装环境,因为环境真的很重要!

mac 下版本 10.15.6 Catalina

gdb-10.2

本文将分为三个部分行介绍,各位看官各取所需:

  1. gdb 下载安装
  2. 证书创建与授权
  3. golang 代码调试

1.gdb 下载安装

mac 上安装 gdb 工具有两种方式:

  1. brew 仓库安装
  2. 直接下载安装包,解压安装

1.1 brew 安装

执行步骤:

  1. 执行 brew search gdb ,搜索 brew 仓库(这一步当然可以不必执行,只是看一下 brew 仓库有没有,没有的话,更新一下 brew 指令:brew update);
  2. 执行 brew install gdb 使用 brew 仓库安装 gdb (默认最新);
  3. 安装完可以查看 gdb 版本:gdb -v;
  4. 还可以查看安装路径 : which gdb,默认路径是 /usr/local/bin/gdb;

1.2 下载安装包,进行安装

我使用的是 gdb-10.2 版本,安装包地址:gdb-10.2.tar.gz

安装步骤:

  1. 下载安装包 & 解压 & 进入解压后目录;
  2. 配置./configure
  3. 编译 make -j4 需要等待一定的时间;
  4. 安装 make install,顺利的话很快会安装完成,我目前没有遇到安装层面的问题;
  5. 查看 gdb 版本:gdb -v
  6. 查看安装路径 : which gdb,默认路径是 /usr/local/bin/gdb;

至此安装完成!

1.3 调试程序

  1. 安装完成尝试一下调试程序:main,go
go 复制代码
package main

import "fmt"

func main() {
    fmt.Println("Hello World!")
}
  1. 编译源码:go build -gcflags=all="-N -l" -ldflags=-compressdwarf=false -o main main.go

  2. 执行 gdb main 进入程序调试,执行 info files 查看程序入口:

  1. 在程序入口设置断点进行调试 break *0x1068260
  1. 执行 run 运行程序,报错如下:
go 复制代码
(gdb) run
Starting program: /Users/hanyafei/golang/myGoMod/main
Unable to find Mach task port for process-id 23330: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))

这是因为 Darwin 内核在你没有特殊权限的情况下,不允许调试其它进程。换句话说 gdb 没有调试进程的权限,为了防止被恶意攻击,这个是 mac 系统默认打开的,所以需要 mac 系统对 gdb 产生信任,也就是为其创建证书进行签名。

2.证书创建与授权

2.1 证书创建

  1. 在你的应用(app)里先找到 mac 的证书程序,三个钥匙串的图标 & 打开:
  1. 创建证书:
  1. 证书名称一般叫:gdb_codesign,当然你随便起名字都行,后边要用,最好别包含中文!
  1. 后续过程一路继续就可以了,都不需要改动。
  2. 直到这里:选择"系统";这样证书就会出现在你的系统那一栏里,如果系统创建失败,选择登录也是可以的,不过创建完,需要把证书文件移入系统那一栏!
  1. 成功的标志,点击完成!

  2. 双击打开证书

  1. 修改为始终信任!

  2. 至此证书创建完成!恭喜!

2.2 证书授权

证书授权区分 mac 系统版本:

10.14 之前的系统,直接执行:codesign -fs gdb_codesign $(which gdb)(因为我的系统是 10.15 这个方法对我不管用,需不需要重启,自己尝试一下)

10.14 之后的系统,比如我的系统 10.15.6 Catalina,授权步骤如下: 先创建一个文件 gdb-entitlement.xml,内容为:

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>

然后在该文件的同级目录下执行:codesign --entitlements gdb-entitlement.xml -fs gdb_codesign $(which gdb),然后我就能用了,根本不用重启!!!

3.golang 代码调试

按照前面的步骤打上断点过后,执行 run 得到如下结果,表示调试成功!!!

参考文章

blog.csdn.net/u013161278/...

segmentfault.com/q/101000000...

blog.csdn.net/ocean_R/art...

相关推荐
老A技术联盟5 分钟前
聊一聊消息中间件的后起之秀-pulsar及其实践
后端
隐-梵15 分钟前
Android studio前沿开发--利用socket服务器连接AI实现前后端交互(全站首发思路)
android·服务器·人工智能·后端·websocket·android studio·交互
uhakadotcom17 分钟前
Langflow:零基础快速上手AI流程可视化开发工具详解与实战案例
后端·面试·github
bobz96517 分钟前
strongswan ipsec 端口使用
后端
陈哥聊测试21 分钟前
这款自研底层框架,你说不定已经用上了
前端·后端·开源
一只叫煤球的猫34 分钟前
分布式-跨服务事务一致性的常见解决方案
java·分布式·后端
扣丁梦想家38 分钟前
Spring Boot 实现 Excel 导出功能(支持前端下载 + 文件流)
spring boot·后端·excel
调试人生的显微镜1 小时前
flutter ios 自定义ios插件
后端
天朝八阿哥1 小时前
ANSI转义序列
go·命令行
仰望星空的打工人1 小时前
windows11家庭版安装docker
后端