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...

相关推荐
IT_陈寒17 分钟前
Java的Stream.parallel()把我CPU跑爆了,这种优化要谨慎
前端·人工智能·后端
子兮曰1 小时前
Bun 重写为 Rust:11天、64个Claude、16.5万美元,一次改变行业认知的激进实验
前端·后端·bun
子兮曰1 小时前
Node.js v26.5.0 深度解读:import Text、流式 ReadableStreamTee、以及隐藏的安全加固浪潮
前端·后端·node.js
子兮曰1 小时前
TypeScript 7.0 RC 深度解读:Go 重写完成,10 倍提速,编译器的「奇点时刻」
前端·后端·typescript
kosan1 小时前
.NET/C# 实战:我如何把登录验证码从“裸奔”改到“铜墙铁壁”
后端
王中阳Go2 小时前
AI编程实践:规则 + 技能 + 子代理 + 钩子,拆解Trae AI 开发规范的完整落地范式
后端·agent·ai编程
香吧香2 小时前
go tool pprof 使用总结
go
码事漫谈2 小时前
放下代码洁癖,享受挖坑人生
后端
_张有志_2 小时前
手撕 STL:一棵红黑树,凭什么同时撑起 set 和 map?
后端
妙码生花2 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(二十七):管理员登录验证码开关
前端·后端·ai编程