Go 以及調試工具 dlv 安裝及使用

安裝 go

wget https://studygolang.com/dl/golang/go1.14.1.linux-amd64.tar.gz

tar -C /usr/local -zxvf go1.14.1.linux-amd64.tar.gz

mkdir -p /home/go/bin/home/go/pkg /home/go/src  #官方建議工作目錄爲/home/go

vi .bash_profile
#在最下面添加
export GOROOT=/usr/local/go
export GOPATH=/home/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export GOPROXY="https://goproxy.io"
source .bash_profile

安裝 Delve

# cd $GOPATH/src/
# git clone https://github.com/derekparker/delve.git
# cd delve/cmd/dlv/
# go build
# go install

命令介紹

Delve 時 Go 程序的源代碼級的調試器。

Delve 通過控制進程的執行、評估變量以及提供線程 / goroutine 狀態、CPU 寄存器狀態等信息,使你能夠與程序進行交互。

使用“--”將標誌傳遞給正在調試的程序,例如:

`dlv exec ./hello -- server --config conf/config.toml`

Usage:
  dlv [command]

Available Commands:
  attach      連接到正在運行的進程並開始調試.
  connect     連接到無頭調試服務器.
  core        檢查覈心轉儲.
  debug       編譯並開始調試當前目錄下的主包或指定的包.
  exec        執行預編譯的二進制文件,並開始調試會話.
  help        幫助信息
  run         棄用的命令。使用“debug”替代它.
  test        編譯測試二進制文件並開始調試程序.
  trace       編譯並開始跟蹤程序.
  version     打印版本.

Flags:
      --accept-multiclient   允許無頭服務器接受多個客戶機連接。注意,服務器API不是可重入的,客戶端必須協調.
      --api-version int      無頭時選擇API版本. (default 1)
      --backend string       後端選擇:
            default        在macOS上使用lldb,其他地方都是本地的.
            native        本地後端.
            lldb        使用lldb-server或debugserver.
            rr            使用mozilla rr (https://github.com/mozilla/rr).
         (default "default") 默認使用的是default
      --build-flags string   生成標誌,以傳遞給編譯器.
      --headless             僅在headless模式下運行調試服務器.
      --init string          初始化文件,由終端客戶端執行.
  -l, --listen string        調試服務器監聽地址. (default "localhost:0")
      --log                  啓用調試服務器日誌記錄.
      --log-output string    應該產生調試輸出的組件的逗號分隔列表,可能的值爲:
            debugger    記錄調試器命令
            gdbwire        日誌連接到gdbserial後端
            lldbout        將輸出從debugserver/lldb複製到標準輸出
            debuglineerr    讀取.debug_line時日誌可恢復錯誤
            rpc            記錄所有RPC消息
            fncall        日誌函數調用協議
            minidump    日誌minidump加載
            使用--log啓用日誌時,默認爲“debugger”.
      --wd string            用於運行程序的工作目錄. (default ".")

使用"dlv [command] --help"獲取有關命令的詳細信息.

debug 和 attach 使用的多一點

dlv debug

dlv debug test.go -- arg1 arg2

dlv attach

如果項目正在運行中,想要對正在運行的項目進行調試

  1. 首先使用 "ps aux | grep 編譯文件名" 來查看運行程序的進程號 pid

  2. 然後就能夠使用 "dlv attach pid" 來連接該運行程序,然後就能使用之前 debug 中的命令來進行調試了

GoLand + Delve:遠程調試

前面的例子有使用 Delve 啓動應用或 attach 到應用進行調試,但添加斷點,運行到下一步,查看變量值等操作都是在終端中,輸入 delve 命令來進行的。這種調試方式也太古老了,效率低下。真實場景下,幾乎不會使用這種方式來進行調試。我們還是希望藉助 IDE 進行更高效的調試。 下面就介紹如何在 GoLand 中配合 delve 進行調試。包括附加到進程調試和遠程調試。其實附加到本地進程和遠程調試原理是一樣的,待調試的進程是通過 delve 啓動的,delve 會啓動進程,並立即附加到進程,開啓一個 debug session。並且啓動一個 debug server,暴露某個端口,客戶端 IDE 可以通過該端口連接到 debug server 進行調試。

遠程調試 Debug 優點

  1. 極大的加快開發速度, 減少給在代碼中使用大量 log 來定位錯誤 (開發效率太低)
  2. 最大程度的使用 linux 遠程服務器環境, 極大的簡化本地部署模擬服務器環境
  3. 可以繞過數據庫內網的限制
  4. 完美的解決一些不支持 windows 開發的依賴

步驟

  1. 在服務器上運行 delve server,可以是用 delve 運行 go 代碼,也可以是運行可執行程序,也可以是侵入一個運行中的 go 程序,一般來說 attach 一個運行中的 go 程序比較常見

    dlv attach $PID --headless --api-version=2 --log --listen=:1234

    這樣 delve server 就起來了,然後 繼續下一步就是 Goland 連接調試

  2. 直接在 Goland 中配置 Host 和 Port 即可,然後在源代碼中選擇這個 “Go Remote” 調試器進行調試

本文作者:尹瑞星

本文鏈接:https://www.cnblogs.com/yrxing/p/14830827.html

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://www.cnblogs.com/yrxing/p/14830827.html