Go語言實戰筆記(二十三)| Go 調試

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

《Go語言實戰》讀書筆記,未完待續,歡迎掃碼關注公眾號flysnow_org或者網站http://www.flysnow.org/,第一時間看後續筆記。覺得有協助的話,順手分享到朋友圈吧,感謝支援。

對於任何程式員來說,偵錯工具是必備的技能。當我們的開發好的程式不符合我們的預期時,就需要我們通過調試它找到根本的原因,然後才可以有針對性的解決它。

調試是一種技能,不限於我們說的debug,這隻是其中的一種,這是可以打斷點的調試,除此之外,還有列印輸出、日誌記錄、單元測試,這都可以稱之為偵錯工具的手段。

列印輸出

列印輸出是一種比較傳統的調試手段,我們可以把我們需要瞭解的變數值,執行的步驟等列印出來,來證明我們的猜測,以便解決問題。

123456789
func min(a,b int) int {//調試輸出fmt.Println("a:",a,",b:",b)if a>b {return b} else {return a}}

這是一個求最小值的函數,其中的fmt.Println("a:",a,",b:",b) 就是我們加入的調試輸出語句,這樣我們就可以看到被比較的兩個數的值,進而推測我們求最小值的演算法是否正確。

列印輸出不僅可以輸出數值,還可以通過測試是否有輸出來判斷程式走了哪個邏輯,比如if語句,可能因為比較的錯誤,程式進入了另外一個if分支,那麼我們就可以通過使用列印輸出來判斷。

日誌輸出

這個和列印非常像,但是他比列印多了很多資訊,比如發生時間,發生的程式碼數等,這種尤其在我們遇到線上問題的時候尤其有用。

比如我們監控到有一些部分使用者的登陸一直失敗,那麼我們就就可以通過我們的記錄檔裡的日誌,來定位時間、IP、使用者、錯誤資訊以及程式碼等,最終找到問題,解決問題。關於日誌的適用可以參考我以前的一篇文章 http://www.flysnow.org/2017/05/06/go-in-action-go-log.html,這裡就不再詳細介紹了。

GDB調試

GDB是一款類Unix下的調試器,可以協助我們調試可執行檔程式,Go也對GDB進行了支援,所以我們也可以適用GDB調試go程式。

GDB是命令列的工具,在調試前,我們要先編譯出我們需要調試的程式。使用go build -gcflags "-N -l" main.go即可進行編譯。這裡-N -l的標記是忽略編譯器最佳化的意思,這樣我們就可以更容易的偵錯工具。

調試通過gdb main啟動,會進入一個GDB的調試介面,在這裡面我們可以通過list命令查看代碼,可以通過b命令對某一行打斷點,可以通過run命令運行等,具體的可以參考GDB相關文檔,這裡不做詳細介紹。

Delve調試

Delve是一個專門為調試Go程式而生的調試工具,它比GDB更強大,尤其時調試多goroutine高並發的Go程式。Delve的項目地址為https://github.com/derekparker/delve,它業績大部分Go開發IDE選用的調試工具,比如Goland,後面我們再介紹。

Delve的使用和GDB非常像,都是命令列的工具,我們可以通過dlv debug main.go啟動,然後就會進入一個互動介面,在這個介面裡我們就可以進行調試操作了。

Delve的一些常用命令如下:

1.break 打斷點

  1. continue 運行到斷點處
  2. clear 刪除斷點
  3. list 顯示原始碼
  4. next 運行到下一行
  5. locals 列印局部變數
  6. print 列印一個變數或者運算式
  7. exit 退出調試

除此之外,還有很多,大家可以參考Delve的文檔進行調試。

IDE調試

對於調試來說,命令列下的太麻煩了,所以為了工具效率,建議大家使用IDE進行調試,可見,逐行,效率高。
調試這個事情,只要可以解決我們的問題就好,有一個好的IDE可以協助我們更高效率的調試,何樂不為呢。

這裡推薦Goland,Jetbrains出品,老牌IDE廠商,非常方便。它家有很多IDE,而且快速鍵都一樣了,會了一個其他的也都會了。

IDE調試非常簡單,點擊工具列的啟動調試按鈕,就可以調試了,記得提前打上斷點。然後F8和F7配合就可以調試了,有專門的調試視窗可以看當前的局部變數,堆棧資訊等,很簡單,這裡不做詳細介紹了。

單元測試

單元測試也是一種調試的手段,我們可以類比很多情境來驗證我們邏輯的正確性,遇到問題,列印輸出等,所以也是一種調試的手段,具體關於Go的單元測試可以參考http://www.flysnow.org/2017/05/16/go-in-action-go-unit-test.html這篇文章,這裡不再詳細介紹。

調試是手段,也算一種技能,以解決問題為目的,只要可以解決問題,就是好的調試手段。

《Go語言實戰》讀書筆記,未完待續,歡迎掃碼關注公眾號flysnow_org或者網站http://www.flysnow.org/,第一時間看後續筆記。覺得有協助的話,順手分享到朋友圈吧,感謝支援。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.