這是一個卡了我兩天的報錯(痛心),先上解決辦法:
解決辦法:
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.