Google官方為Golang的調(diào)試?yán)幽J(rèn)使用了gdb
然而, 使用gdb調(diào)試go程序會(huì)遇到goroutine的各類問題, 因?yàn)間db不懂go
因此, 這里使用delve黑科技來進(jìn)行Golang的程序調(diào)試
純命令行調(diào)試方法在網(wǎng)上很容易搜索到, 本文主要以LiteIDE來進(jìn)行程序調(diào)試
關(guān)閉編譯器優(yōu)化
正常go build/install出的go程序是完全優(yōu)化過的, 強(qiáng)行使用調(diào)試器掛接調(diào)試時(shí), 某些local變量/lamda表達(dá)式捕獲的變量會(huì)直接進(jìn)入寄存器, 無法使用調(diào)試器查看
刪掉所有的pkg, 為build或install參數(shù)加入關(guān)閉編譯器優(yōu)化的參數(shù) -gcflags "-N -l"
例如:
go install -gcflags "-N -l" svc\gamesvc
delve調(diào)試器安裝方法
LiteIDE自帶了gdb, 但是沒有delve調(diào)試器, 需要自行安裝, 命令如下
go get github.com/derekparker/delve/cmd/dlv
delve調(diào)試器會(huì)被放到你的GOPATH/bin下
LiteIDE中的delve調(diào)試器配置
選擇調(diào)試器
在LiteIDE菜單中選擇 調(diào)試->debugger/delve
delve環(huán)境變量設(shè)置
這個(gè)時(shí)候, LiteIDE依然找不到delve, 因?yàn)樗辉诃h(huán)境變量PATH中, 這里無需修改環(huán)境變量, 只需要LiteIDE的環(huán)境配置
在LiteIDE菜單中選擇 查看->編輯當(dāng)前環(huán)境, 在彈出的文檔中修改
PATH=c:\mingw32\bin;%GOROOT%\bin;%PATH%;c:\your\path\to\delve
去掉PATH前的注釋#, 在%PATH%添加分號(hào), 然后和你到delve調(diào)試器的路徑
開始調(diào)試
選擇你的工程, 點(diǎn)擊F5, 進(jìn)入調(diào)試模式
調(diào)試器顯示變量值

LiteIDE使用delve調(diào)試時(shí), 無法在 變量 監(jiān)視等窗口中正確捕捉delve調(diào)試返回?cái)?shù)據(jù)(因?yàn)楦袷教珡?fù)雜了…)
沒關(guān)系, 我們使用命令行配合顯示即可
LiteIDE控制臺(tái)或調(diào)試輸出窗口在delve調(diào)試時(shí), 實(shí)際上是一個(gè)標(biāo)準(zhǔn)命令行
命令如下
p 變量名可以查看變量值
locals查看局部變量
ls可查看當(dāng)前文件
stack查看棧
help可以查看各種幫助
調(diào)試外部程序
如果你的程序是外部程序, 或者使用go install安裝到GOPATH/bin目錄的程序, 那么使用delve調(diào)試器啟動(dòng)程序時(shí), 可能會(huì)碰到啟動(dòng)路徑錯(cuò)誤的問題
使用LiteIDE菜單 調(diào)試->調(diào)試其他應(yīng)用程序… 填入你要調(diào)試程序的路徑以及工作目錄, 可以解決這個(gè)問題