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

相关推荐
王的宝库5 小时前
Go 语言:结构体:定义、初始化、方法、组合、Tag、对齐
开发语言·后端·学习·golang
冉冉同学5 小时前
Vibe Coding指南【道、法、术】
前端·人工智能·后端
只能是遇见6 小时前
【SpringBoot3】Spring Boot 3.0 集成 Mybatis Plus
spring boot·后端·mybatis
Holen&&Beer6 小时前
Spring-Profile与部署说明
java·后端·spring
wyt5314296 小时前
新手如何快速搭建一个Springboot项目
java·spring boot·后端
网小鱼的学习笔记6 小时前
创建型设计模式(工厂、builder、原型、单例)
java·后端·设计模式
夏语灬7 小时前
SpringBoot集成MQTT客户端
java·spring boot·后端
Memory_荒年7 小时前
Spring Boot自动装配:告别“配置地狱”的智能管家
java·后端·spring
盐水冰7 小时前
【烘焙坊项目】后端搭建(9)- 缓存实现及购物车相关功能开发
java·后端·spring
阿鑫_9967 小时前
通用-ESLint+Prettier基础知识
前端·后端