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

相关推荐
NiNg_1_2343 分钟前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
Chrikk1 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*2 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue2 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man2 小时前
【go从零单排】go语言中的指针
开发语言·后端·golang
customer083 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
Yaml44 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
小码编匠5 小时前
一款 C# 编写的神经网络计算图框架
后端·神经网络·c#