这两天遇到一个诡异的问题,也是诡异中解决的,虽然问题没了,但是也不知道是咋好的。
前一秒还在debug,加了两行代码,再执行debug的时候,总是执行几步就崩溃。每次蹦的时候,console提示还都不一样,回忆下,大概有这么几种:
1,unexpected signal during runtime execution
2, SIGTRAP: trace trap
3, signal SIGSEGV: segmentation violation
4,Cgo tool test2json: signal: interrupt
5, debugger disconnected unexpectedly
6, runtime.debugCallV2()
反正每次都会变着花样的给出错误信息。
每个都google了一圈,除了看不懂的,看的懂的都试了一遍:
1,卸载现有1.16版本golang,安装go 1.17版。
我用的这个命令安装的,brew install go@1.17
在大佬的演示下,知道了一种新的安装方式,在goland中,comd+, 组合键,弹出这个框框
按➕,选好version,指定好location。就能安装了。
然后就是配置go环境变量,放到 ~/.zshrc 中
#go环境配置
export GOROOT="/Users/didi/go/go1.17.13"
export GOPATH="/Users/didi/project/dp/go/"
export GOBIN="$GOROOT/bin"
export PATH="$PATH:$GOBIN"
export GOSUMDB=off
另外配一下goland 的 gopath,要把自己的代码根目录包含进去
然后就是gomodules了,各家公司都不一样
折腾一圈,无效!
2,重装goland ide。
无效!
3,go get -v github.com/go-delve/delve/cmd/dlv
这个应该是重装dlv的吧。dlv就是一个go的一个调试的组件,我目前先这么理解。
到此我已经放弃了。
4,参考这篇文章
https://youtrack.jetbrains.co...
给出的步骤折腾goland。
a, add "#com.goide.dlv.DlvVm" (without quotes) in Help | Debug Log Settings...
dialog
b, restart the IDE.
c, recreate the problem
d, collect logs using Help | Collect Logs and Diagnostic Data
menu item and attach them here.
看
这个idea.log中,有一堆symbol index 无法找到的错误,应该变量符号表地址给搞错了(纯属瞎猜),反正怎么解我也不知道,还有 一些dlv记录的什么信息,咱也看不懂。
5,最后大佬突发奇想,在*_test.go 文件中增加了一个 单测函数。
单步执行该函数,顺利走完。然后再执行之前崩溃的case,也是顺利走完。
不得不佩服,大佬就是出其不意的解决问题。
之前出错,猜测有可能是某次意外导致有go携程内存越界啥的,然后给其他携程发送信号。猜测有可能是缓存啥的,加了个新测试函数,把之前出错的部分给覆盖了。
总结:
1,出问题的原因是啥,不知道,怎么解决的,就是5,为啥能解决,不知道。
2,跟着大佬学到了很多。
3,记录下最后那个方法,以后在不明所以的情况下,试试。