首頁  >  文章  >  後端開發  >  golang linux 如何調試

golang linux 如何調試

PHPz
PHPz原創
2023-05-14 15:25:38902瀏覽

Go語言作為一種為了更方便、更快速地進行開發而被出版的高級程式設計語言,不僅可以運行在Windows,MacOS和Linux等多個作業系統上,同時還提供了強大的調試工具幫助開發者解決問題。本篇文章將會介紹如何在Linux系統上進行Go語言程式的除錯。

偵錯工具

Go語言提供了內建的偵錯器-go debug,但Go的高效功能也帶來了許多除錯挑戰。 Dlv(https://github.com/go-delve/delve)是一個 Go 語言的現代調試器,能夠支援 Go 特定的調試功能。 Dlv 提供了單步驟追蹤、檢視變數、修改變數和斷點等常用的偵錯功能。另外,GDB也支援Go語言的調試,但是它不能理解Go語言的調度器,因此更適合開發內核或只需要使用少量Go特定功能的程式調試。

安裝Dlv

Dlv是用Go語言寫的,因此安裝它需要先安裝Go語言本身。可以從官方網站(https://golang.org/dl/)下載最新版本的Go語言安裝包,並將其配置到環境變數中。

安裝完成Go語言後,我們需要先安裝Dlv依賴的函式庫-dynamically linked Linux utilities:

sudo apt-get update
sudo apt-get install linux-tools-common linux-tools-generic linux-tools-`uname -r`

接著執行以下指令安裝Dlv:

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

以上指令將Dlv安裝到$GOPATH/bin目錄中,可以手動將其添加到PATH變量,也可以透過以下命令將其添加到PATH中:

echo "export PATH=$PATH:$(go env GOPATH)/bin" >> ~/.bashrc
source ~/.bashrc

編譯調試程式

我們需要進入程式所在的目錄,使用go build編譯程式並產生二進位。假設我們的程式名稱為debug-demo,我們可以透過以下命令進行編譯:

go build -gcflags "-N -l" -o debug-demo
  • #-gcflags "-N -l":新增編譯標識以確保編譯器不會最佳化程式碼,從而方便調試。
  • -o debug-demo:將產生的執行檔命名為debug-demo。

為了解決原始碼被彙編的問題,我們也可以使用go env指令來取得CGO_ENABLED的值,並將它設為0,然後再進行編譯:

go env
go build -gcflags "-N -l" -o debug-demo -tags netgo -ldflags '-w -extldflags "-static"' -v main.go

#設定斷點

在程式中設定斷點是偵錯過程中最常用的操作。我們可以在程式碼的任意位置設定斷點,以等待程式執行到該處位置時停止。

使用Dlv可以透過以下兩種方式設定斷點:

  1. 圖形介面(建議)

使用Dlv的圖形介面可以更直觀地對程序進行操作和修改。執行下列指令,接著會自動開啟圖形介面:

dlv debug ./debug-demo
  1. 命令列

#執行下列指令進入Dlv指令列模式:

dlv debug ./debug-demo --headless --listen=:2345 --api-version=2

進入Dlv之後,我們可以使用break(或縮寫為b)命令設定斷點:

(b)reak {<location>|<function>|<filename>:<line>|<remote package path>}: 设置断点
(b)reakpoints: 显示当前所有的断点
(d)elete {<breakpoint#>|<breakpoint.id>}: 删除断点#或通过Breakpoint.id删除指定断点
(c)ontinue: 从当前位置继续执行程序,直到下一个断点或程序完结

例如,我們可以在程式的第10行設定斷點:

(b)reak main.go:10

控製程式運行

在程式運行過程中,可以使用step(或縮寫為s)和next(或縮寫為n)命令控製程式運行:

(s)tep: 单步调试,如果当前位置是函数,则进入该函数内部
(n)ext: 单步调试,如果当前位置是函数,则不进入该函数内部

查看變數

Dlv也提供了顯示變數的命令,使用print(或縮寫為p)命令可以查看目前作用域中的變數:

(p)rint <variable>: 显示变量

例如,我們可以使用以下命令查看變數a和變數b:

(p)rint a
(p)rint b

修改變數

除了查看變數外,Dlv還支援修改變數的值,使用set指令修改變數的值:

(s)et <variable> = <value>: 修改变量的值

例如,我們可以使用下列指令將變數a的值修改為100:

(s)et a = 100

總結

本文介紹如何在Linux系統上使用Dlv對Go程式進行除錯。首先,我們安裝了Go語言和Dlv調試器,然後使用go build編譯程式並在程式中設定了斷點,使用Dlv的圖形化介面或命令列控製程式運行,並查看和修改變數的值,以解決Go程式調試中遇到的問題。希望透過本文,讀者可以掌握在Linux系統下使用Dlv調試Go程式的基本技能。

以上是golang linux 如何調試的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn