Tips-如何优雅的使用GDB调试Go

栏目: IT技术 · 发布时间: 4年前

内容简介:Tips 系列:记录日常解决问题、解放双手的一些小技巧。目的只有一个:不被重复的琐事麻痹,能偷懒的绝不手软。今天聊聊如何优雅的使用GDB调试Go程序。
Tips: all for hands-free.

Tips 系列:记录日常解决问题、解放双手的一些小技巧。

目的只有一个:不被重复的琐事麻痹,能偷懒的绝不手软。

今天聊聊如何优雅的使用GDB调试 Go 程序。

GDB有啥用?

想了解代码底层的话,它是一大利器,更别说定位问题啥的。

具体骚操作见曹大的 使用 debugger 学习 golang

但GDB从安装到可用,可能有一大堆问题要解决(尤其在Mac上),我们怎么能优雅的使用它,避免陷入问题中,是本文的重点。

(涉及 Docker 和Mac两个平台上运行)

先来看比较推荐的Docker方式

Docker篇:3步即可调试

docker加持的话,非常方便,随用随起

先上效果:

具体步骤如下:(完全回归 工具 本质,换台机器也能调试)

// 1. 已当前目录映射启动gdb
docker run --rm -it --security-opt="apparmor=unconfined" \
  --security-opt="seccomp=unconfined"  \
  --cap-add=SYS_PTRACE -v "$(pwd):/go/src/app" \
  newbmiao/gdb-go1.14rc1:latest bash

// 2. 编译go,不使用compressdwarf 、inline and escape
go build -ldflags=-compressdwarf=false -gcflags=all="-N -l" -o test test.go

// 3. 可以愉快的debug了
gdb ./test

一套打完,收工,就这么简单。文末会附上怎么定义的docker。

你可能有疑问,docker这些参数是干啥的,下边附资料,感兴趣自行查看

具体讨论见issue: apparmor denies ptrace to docker-default profile

  • AppArmor

AppArmor 是一个 Linux 内核安全模块,可用于限制主机操作系统上运行的进程的功能。每个进程都可以拥有自己的安全配置文件。安全配置文件用来允许或禁止特定功能,例如网络访问或文件读/写/执行权限。

详见 AppArmor security profiles for Docker

  • Seccomp

Seccomp是Secure computing mode的缩写,它是Linux内核提供的一个操作,用于限制一个进程可以执行的系统调用.当然,我们需要有一个配置文件来指明进程到底可以执行哪些系统调用,不可以执行哪些系统调用.在Docker中,它使用Seccomp来限制一个容器可以执行的系统调用。

详见 Seccomp security profiles for Docker

  • SYS_PTRACE

配合 seccomp=unconfined , 允许容器使用ptrace运行strace / ltrace之类的程序。

Mac篇:需要证书签名

版本: gdb 8.3.1 On macoOS High Serria 10.13.6

步骤:

  • 创建系统证书 gdb-cert

重点是标红处,其他一路下一步即可。(注意证书创建成功,才能签名成功)

Tips-如何优雅的使用GDB调试Go

(如果创建失败,可以 删除证书,重启创建 (推荐);或者尝试创建登录证书=》导出=》=》加载到系统证书)

  • gdb代码签名

已创建脚本,直接执行:

sh debugger/gdb/installMac.sh

  • gdb调试(方式同docker篇)

证书相关具体参见: PermissionsDarwin

同样列一下可能遇到的问题:

  • codesign
Unable to find Mach task port for process-id 3884: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))
  • 初次运行卡住
$ gdb ./test
>>> r
Starting program: /Users/newbmiao/Documents/tech/Dig101-Go/test
[New Thread 0xd03 of process 7603]
# 卡住。。。

解决方法:

直接别的窗口找到对应进程id,kill掉,后续会正常

ps aux|grep gdb
kill -9 xxx
  • SIG113问题

详见: GDB kind of doesn’t work on macOS Sierra

解决方法:

# gdb 的配置
$ cat ~/.gdbinit
# gdb-dashboard
// $ cat ~/.gdbinit.d/init
set startup-with-shell off

详细代码见 NewbMiao/free-hands-tips


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

用户故事与敏捷方法

用户故事与敏捷方法

Mike Cohn / 石永超、张博超 / 清华大学出版社 / 2010-4 / 39.00元

《用户故事与敏捷方法》详细介绍了用户故事与敏捷开发方法的结合,诠释了用户故事的重要价值,用户故事的实践过程,良好用户故事编写准则,如何搜集和整理用户故事,如何排列用户故事的优先级,进而澄清真正适合用户需求的、有价值的功能需求。 《用户故事与敏捷方法》对于软件开发人员、测试人员、需求分析师和管理者,具有实际的指导意义和重要的参考价值。一起来看看 《用户故事与敏捷方法》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具