快看!你的 golang 程序在干什么不可描述的事情

0x0 起因

在一次優(yōu)化中,增加了按 seller 自動啟動 goroutine 的功能,維護著一個 seller map 將協(xié)程 ID 都存入其中,發(fā)現(xiàn)這個 seller 沒有 goroutine 就自動啟動一個。 當(dāng)時因為 map 沒有加同步鎖,而且是 goroutine 使用 fmt.Print 調(diào)試,各種幾千個重復(fù) print 真是受夠了(誰試誰知道),一個正常的人馬上得精神病。是時候祭出大殺器 VSCode Debug 工具。

0x1 給 VSCode 安裝 debug 包

Debug 估計大家不用陌生,就是通過設(shè)置斷點查看代碼的執(zhí)行情況,在 golang 有一個 debug 包 delve 可以很方便的結(jié)合 VSCode 調(diào)試。

    go get -u github.com/derekparker/delve/cmd/dlv

0x2 設(shè)置斷點

假如我們要 debug 下面這段代碼

    package main
    import "fmt"
    var a string
    func init() {
        a = "a string"
    }
    func main() {
        b := "b string"
        fmt.Printf("%s\n%s", a, b)
        for i := 1; i < 5; i++ {
            fmt.Println(i)
        }
        fmt.Println("Done")
    }

把斷點打在函數(shù)起始行

加斷點

0x3 開始調(diào)試

按下 F5 啟動調(diào)試(或者找到菜單 - 調(diào)試 - 啟動調(diào)試), 調(diào)試開始你在 VSCode 上方能看到一個調(diào)試控制臺,

調(diào)試控制臺

分別是:

  • 繼續(xù):繼續(xù)運行直到遇到下個斷點
  • 單步跳過:跳過此行
  • 單步調(diào)試:代碼往下執(zhí)行,深入調(diào)試(可跨文件)
  • 單步跳出:跳出當(dāng)前調(diào)試函數(shù)
  • 重啟:重新啟動調(diào)試
  • 停止:停止調(diào)試
完整調(diào)試

0x4 查看調(diào)試信息

上面動圖已經(jīng)完成了完整的一次簡單調(diào)試,那么通過上面的調(diào)試我們可以看到什么樣的信息呢?

  • 局部變量

當(dāng)前作用域的所有局部變量。

局部變量
  • 全局變量

在監(jiān)視面板添加你需要監(jiān)視的全局變量。

全局變量
  • 堆棧信息

暫時跳過,里面信息還看不懂。

堆棧信息
  • 調(diào)試信息。
調(diào)試信息

0x5 高級功能

  • 條件斷點

顧名思義,當(dāng)達(dá)到指定條件之后才會觸發(fā)斷點,貌似 golang 暫時還不支持下次補上

0x6 尾聲

Cool,恭喜你。學(xué)會了偷看你的 golang 腳本干的羞羞事情,那么其他語言遇到了類似情況,你已經(jīng)知道怎么做了。如果你有 Debug 新發(fā)現(xiàn),歡迎更新此文。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • LLDB的Xcode默認(rèn)的調(diào)試器,它與LLVM編譯器一起,帶給我們更豐富的流程控制和數(shù)據(jù)檢測的調(diào)試功能。平時用Xc...
    小笨狼閱讀 20,803評論 31 186
  • LLDB的Xcode默認(rèn)的調(diào)試器,它與LLVM編譯器一起,帶給我們更豐富的流程控制和數(shù)據(jù)檢測的調(diào)試功能。平時用Xc...
    CoderSC閱讀 1,500評論 0 2
  • 對于開發(fā)的同學(xué)來講,Debug并不陌生,對于做Android開發(fā)的同學(xué)也是一樣的。 可能有些同學(xué)會問,調(diào)試程序誰不...
    點融黑幫閱讀 5,600評論 3 6
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,825評論 25 709
  • 簡介 Sublime使用ctrl+shift+p實時查看markdown效果 By舉子 1. 更好的學(xué)習(xí)文檔 簡書...
    舉子7先生閱讀 377評論 1 1

友情鏈接更多精彩內(nèi)容