來自公眾號:新世界雜貨鋪
本意是打算研究一下go程序的啟動流程,然後就去網上搜索了一下入門教程。結果令我有點沮喪,搜到的幾乎所有文章開篇都是通過GDB調試, 然後就是不同平臺下的彙編代碼。。。
這令我很不開心, 雖然C/C++應用很廣泛, 但是我對它真的沒啥興趣啊, 對它相關的調試工具就更加不感冒了, 雖然它可以調試go程序, 但是總感覺心裡少了點什麼, 難道dlv它不香嘛, 於是就有了今天這篇文章
dlv的名頭應該不用我多說, 所以我們直奔主題
dlv debug test.go
執行上述命令後, 就會進入debug交互命令行界面, 在這個界面任何時候輸入h都會列印幫助信息.
在test.go的文件第6行打上一個斷點b test.go:6
如上圖所示, 我們繼續執行時會發現=>會停留在我們前面標記的斷點處。這裡的其他命令我們在本篇文章不做過多的介紹了, 我們儘量緊扣本篇的主題。
如上圖所示, 我們通過dlv的調用棧可以看見調用main函數之前,還執行了asm_amd64.s(本次debug的機器為mac)的彙編代碼和proc.go的main函數。
意外之喜, 本來只是單純的不想用GDB調試去了解go程序的啟動流程, 現在卻也有了一些頭緒, 下面我們繼續本篇的主題
綜上: 按照上面的步驟, 我們通過dlv就可以進行runtiime的調試, 並且還可以了解go程序的啟動流程
我個人比較喜歡用vscode進行代碼編輯, 所以在擼go的時候用的也是vscode, 體驗還是非常不錯的
關於vscode如何配置go的開發環境和配置圖形化debug就不再本篇過多贅述, 筆者在這裡分享一下自己在vscode中關於go的配置
&34;: true,&34;: { &34;: true, &34;: true, &34;: true},&34;: [&34;],&34;: true,&34;: true,&34;: true,&34;: true,&34;: true,
本部分在備用電腦上面完成,go版本為: go1.14.2
此次直接復用了前面文章的demo。三個斷點分別位於,main/test.go, runtime/proc.go和runtime/string.go.
vscode通過F5快捷鍵即可快速開始debug
接下來, 你就可以開始快樂的debug之旅啦
細心的同學肯定已經發現了,在上面vscode圖形化debug的調用棧裡面並沒有runtime/string.go的影子。接下來, 我們結合本篇的主題繼續往下分析
相信看過我這篇文章的同學,心裡已經基本有數了。對於這種即沒有調用棧也沒有明確調用者的函數,我們遵循以下兩點即可完成對它的debug
6A737D; --tt-darkmode-color: 6A737D; --tt-darkmode-color: 6A737D; --tt-darkmode-color: #6A737D;">原創不易, 卑微求關注收藏二連.