91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言之調試

發布時間:2020-07-01 17:52:05 來源:網絡 閱讀:4521 作者:baby神 欄目:編程語言

調試是一種技能,不限于我們說的debug,這只是其中的一種,這是可以打斷點的調試,除此之外,還有打印輸出、日志記錄、單元測試,這都可以稱之為調試程序的手段。


打印輸出


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


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配合就可以調試了,有專門的調試窗口可以看當前的局部變量,堆棧信息等,很簡單,這里不做詳細介紹了。


單元測試


單元測試也是一種調試的手段,我們可以模擬很多場景來驗證我們邏輯的正確性,遇到問題,打印輸出等,所以也是一種調試的手段


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阜新| 宾川县| 汝南县| 海兴县| 多伦县| 林芝县| 赫章县| 额济纳旗| 安陆市| 津南区| 西充县| 于都县| 平山县| 望奎县| 三亚市| 吉林省| 宜阳县| 陆丰市| 河北区| 县级市| 容城县| 新晃| 大兴区| 阳原县| 芮城县| 栾城县| 商河县| 濮阳县| 池州市| 海门市| 东丽区| 万源市| 黄山市| 民和| 山东省| 慈利县| 来安县| 屏东县| 韶关市| 磴口县| 犍为县|