windows下使用gdb进行调试

#go;#gdb;#编译环境;#MinGW

MinGW目前最新的GDB版本为8.1,用它来调试go程序是有问题的。 比如说,对于下面几行代码,使用gdb调试时,run,breakpoint都是没问题的,但是你要list一下 gdb就要报错退出了 ``` package main import ( "fmt" "time" ) func main() { for i := 0; i < 10; i++ { fmt.Println(time.Now()) } } ``` 报错如下: gdb-8.1/gdb/buildsym.c:1764: internal-error: void buildsym_init(): Assertion `free_pendings == NULL' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. 经过多方查阅,发现这是gdb8.1多年的bug,讨论地址如下: [GDB on windows with golang](https://sourceware.org/bugzilla/show_bug.cgi?id=18624#c17) 15年的问题,18年才解决,win果真没人关注。。。 那就只能自己编译gdb了,最新版本8.3,文件可自行下载 win下编译可以使用msys2,时间稍微有点长,不过需要同时加载msys-2.0.dll, 我这里设置的 target=x86_64-w64-mingw32 不想编译的同学可以直接下载 下载地址: [gdb.exe](https://fullstack.love/static/file/gdb.exe) [msys-2.0.dll](https://fullstack.love/static/file/msys-2.0.dll) 当然也有折中(偷懒)的方法,cgo编译后符号表是可以正常调试的,所以你只需开头加入: ``` import "C" ``` 或者干脆,使用dlv调试嘛!

上一篇