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
為了解決原始碼被彙編的問題,我們也可以使用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可以透過以下兩種方式設定斷點:
使用Dlv的圖形介面可以更直觀地對程序進行操作和修改。執行下列指令,接著會自動開啟圖形介面:
dlv debug ./debug-demo
#執行下列指令進入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中文網其他相關文章!