首先安装工具gdb,可以
brew install gdb
也可以源码安装
http://ftp.gnu.org/gnu/gdb/
tar -zxvf gdb-8.0.1.tar.gz
cd gdb-8.0.1
./configure
mkdir build
cd build
../configure
make
make install
8.0.1编译错误,网上这个说法
gdb 8.1 is incompatible with macOS 10.13. Downgrade to gdb 8.0.1 instead
https://sourceware.org/gdb/wiki/PermissionsDarwin
http://ftp.gnu.org/gnu/gdb/gdb-8.0.1.tar.gz
对mac 10.15.是不ok的,9.2可以编译通过
一段简单的源码开始
package main
import "fmt"
func main() {
a := 1
b := 2
fmt.Println(a + b)
}
编译,保留调试信息,去除内联优化
go build -o main -gcflags="-N -l" main.go
然后开始调试
gdb main
如果报错
Unable to find Mach task port for process-id 47072: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
是权限不够
sudo gdb main
或者给gdb创建证书,具体步骤参考
https://blog.roy4801.tw/2020/01/27/%E5%9C%A8-macOS-Mojave-%E4%B8%8A%E6%AD%A3%E5%B8%B8%E4%BD%BF%E7%94%A8-gdb/
在钥匙串中生成证书
which gdb
/usr/local/bin/gdb
cd /usr/local/bin/
vi gdb.xml
codesign --entitlements gdb.xml -fs gdb-cert ./gdb
codesign -d --entitlements - $(which gdb)
如果遇到
[New Thread 0xe03 of process 51333]
[New Thread 0x1203 of process 51333]
During startup program terminated with signal SIGTRAP, Trace/breakpoint trap.
解决办法
echo "set startup-with-shell off" > ~/.gdbinit
TUI(TextUser Interface)为GDB调试的文本用户界面,可以方便地显示源代码、汇编和寄存器文本窗口,为了方便和代码关联上可以调出tui窗口
tui enable
或者
sudo gdb -tui main
遇到问题
Loading Go Runtime support.
BFD: /usr/lib/dyld(i386:x86-64): unknown load command 0x3
解决办法
(gdb) source /usr/local/Cellar/go/1.15.3/libexec/src/runtime/runtime-gdb.py
Loading Go Runtime support.
参考:https://golang.org/doc/gdb
TUI模式下有4个窗口:
(cmd)command 命令窗口. 可以键入调试命令
(src)source 源代码窗口. 显示当前行,断点等信息
(asm)assembly 汇编代码窗口
(reg)register 寄存器窗口
最常用的也就是默认使用的方式,也可以通过layout命令来进行选择自己需要的窗口,可参见help layout.
gdbtui相关的其他命令
layout
用以修改窗口布局
help layout
layout src
layout asm
layout split
winheight
调整各个窗口的高度。
help winheight
winheight src +5
遇到问题:
(gdb) file main
Re symbols from main... BFD: /usr/lib/dyld(i386:x86-64): unknown load command 0x34
Loading Go Runtime support.
BFD: /usr/lib/dyld(i386:x86-64): unknown load command 0x34
BFD: /usr/lib/dyld(i386:x86-64): unknown load command 0x34
解决办法,下载最新版10.2
http://ftp.gnu.org/gnu/gdb/
问题解决
b main.main
Thread 2 hit Breakpoint 1, main.main () at /Users/xiazemin/go/src/github.com/xiazemin/template_learn/asm/exp1/main.go:5
(gdb) winheight src -5
(gdb) layout split
界面如下
可以同步查看源码和对应的汇编代码
本文分享自 golang算法架构leetcode技术php 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!