goland debug : could not launch process: decoding dwarf section info at offset 0x0: too short

这是一个卡了我两天的报错(痛心),先上解决办法:

解决办法:

go build去掉参数 -ldflags "-w"

goland启动的时候会带上你设置的启动参数(如果你设置了)

背景:

我有两个go项目,项目A go版本 (1.13)什么问题都没有,项目B (go版本1.10)用ide的debug会报错如题:

could not launch process: decoding dwarf section info at offset 0x0: too short

过程:

这种问题没头脑的问题当然先百度了,其中120%(夸张的说法)的答案是:

拉取并安装delve(Goland使用的调试工具)新版本,设置ide的配置

当然不符合我的情况了

我把delve的各个版本装了个遍,go get还经常拉不下来,delve可能还换过地址,网上很多都是老地址,各种花式安装delve

go版本换了n种组合,ide是本月最新的版本

过程种有些delve版本下连项目A也调试不了了,同样的错误(这种应该确实的版本问题)

我试过跳过ide直接指令执行debug,一样

搜完了重重复复重重的中文结果,我爬过了墙头去看隔壁的答案

我在github上的delve和goland的issues的相关问题里一层一层的爬,stackoverflow的评论一条一条的看

问题答案都指向go、delve、goland的版本和组合问题,但是每种方法都不符合我的情况

最后,我看着两个项目(一个可以一个不行),找不同,相同ide,go版本换成同一个,我盯着屏幕思索了良久,难道代码会影响调试工具启动?感觉走到了玄学领域

我把ide编译运行执行debug程序的实际指令 拿出来一个字符一个字符的对比,发现了如上的启动参数的不同,此时心中没有海阔天空,只有mmp

-ldflags "-w"

关于这个指令是干嘛的,我不知道,是在某次mac更新后启动报错时百度告诉我的解决办法,也不知道为什么现在去掉了也没问题

好累

加上上述参数的gobuild指令(去掉了路径种个人信息)

$GOROOT/bin/go build -ldflags -w -o /.../ -gcflags "all=-N -l" xxx

 

关于这个问题,我在go-delve/delve 的 iss里回复给了一个提问的人,然后一个大佬秒回了我,关键应该在于这个-w参数,下边是原话,垃圾英语水平就不翻译了

大佬给了解释:

The -w removes the DWARF debugging information from the binary, so essentially you are trying to debug a binary that's not built to be debugable. Don't add the -w flag, or strip the binary, when debugging, and Delve will work as expected.

你可能感兴趣的:(GO)