delve 是go語(yǔ)言的調(diào)試器,delve的目標(biāo)是為go提供一個(gè)簡(jiǎn)潔、功能齊全的debug工具,delve易于調(diào)用和使用。
10多年的宜都網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整宜都建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“宜都網(wǎng)站設(shè)計(jì)”,“宜都網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
為了能夠編譯delve,需要安裝Go 1.10或更高版本
安裝好go后,直接go get即可安裝,更多安裝教程見(jiàn):
go get github.com/go-delve/delve/cmd/dlv
安裝好后,在終端執(zhí)行dlv或者dlv help 會(huì)看到dlv的幫助信息,則說(shuō)明安裝成功
dlv常用命令
delve的目標(biāo)是成為一個(gè)簡(jiǎn)潔而強(qiáng)大的工具。但如果你不習(xí)慣在編譯語(yǔ)言中使用源碼調(diào)試,則可能令人困惑。本文檔將提供開(kāi)始調(diào)試go程序所需的全部信息。
調(diào)試?yán)映绦蛉缦?/p>
├── go.mod
├── go.sum
├── main.go
├── test
└── utils
├── util.go
└── util_test.go
調(diào)試程序主要有三個(gè)文件,main.go、util.go、util_test.go,內(nèi)容如下,比較簡(jiǎn)單,go包管理工具使用的是go module,模塊名為test
在vscode debug 的設(shè)置中配置launch.json文件
mode 設(shè)置為debug時(shí),program的內(nèi)容${fileDirname}即可,mode 設(shè)置為exec時(shí),program的值為二進(jìn)制文件的路徑,通過(guò)設(shè)置mode的值,即可調(diào)試源碼和二進(jìn)制程序(也需要有源碼)。mode模式為auto時(shí),測(cè)試了下,vscode 并不能通過(guò)program的內(nèi)容來(lái)判斷是debug還是exec
遠(yuǎn)程調(diào)試時(shí),需要在遠(yuǎn)程也有源碼、二進(jìn)制包和dlv工具
在遠(yuǎn)端執(zhí)行dlv命令
dlv debug --headless --listen=:8989 --api-version=2 --accept-multiclient #用degbug方式啟動(dòng)遠(yuǎn)程應(yīng)用程序
dlv exec --headless --listen=:8989 ./test --api-version=2 --accept-multiclient # exec執(zhí)行當(dāng)前目錄下的test二進(jìn)制文件
--listen:指定調(diào)試端口
--api-version:指定api版本,默認(rèn)是1
--accept-multiclient:接受多個(gè)client調(diào)試
在vscode中線下好源碼,和遠(yuǎn)端的源碼結(jié)構(gòu)一致。launch.json配置如下:
在vscode中打好斷點(diǎn)后,就可以進(jìn)行遠(yuǎn)程調(diào)試了
Go語(yǔ)言由Google公司開(kāi)發(fā),并于2009年開(kāi)源,相比Java/Python/C等語(yǔ)言,Go尤其擅長(zhǎng)并發(fā)編程,性能堪比C語(yǔ)言,開(kāi)發(fā)效率肩比Python,被譽(yù)為“21世紀(jì)的C語(yǔ)言”。
Go語(yǔ)言在云計(jì)算、大數(shù)據(jù)、微服務(wù)、高并發(fā)領(lǐng)域應(yīng)用應(yīng)用非常廣泛。BAT大廠正在把Go作為新項(xiàng)目開(kāi)發(fā)的首選語(yǔ)言。
Go語(yǔ)言能干什么?
1、服務(wù)端開(kāi)發(fā):以前你使用C或者C++做的那些事情,用Go來(lái)做很合適,例如日志處理、文件系統(tǒng)、監(jiān)控系統(tǒng)等;
2、DevOps:運(yùn)維生態(tài)中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go語(yǔ)言開(kāi)發(fā);
3、網(wǎng)絡(luò)編程:大量?jī)?yōu)秀的Web框架如Echo、Gin、Iris、beego等,而且Go內(nèi)置的 net/http包十分的優(yōu)秀;
4、Paas云平臺(tái)領(lǐng)域:Kubernetes和Docker Swarm等;
5、分布式存儲(chǔ)領(lǐng)域:etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;
6、區(qū)塊鏈領(lǐng)域:區(qū)塊鏈里面有兩個(gè)明星項(xiàng)目以太坊和fabric都使用Go語(yǔ)言;
7、容器虛擬化:大名鼎鼎的Docker就是使用Go語(yǔ)言實(shí)現(xiàn)的;
8、爬蟲及大數(shù)據(jù):Go語(yǔ)言天生支持并發(fā),所以十分適合編寫分布式爬蟲及大數(shù)據(jù)處理。
可以去DELVE官網(wǎng)進(jìn)行下載。
關(guān)于delve工具的介紹,這里簡(jiǎn)單給大家介紹一下。
delve在go項(xiàng)目及應(yīng)用的開(kāi)發(fā)中可以用來(lái)追蹤程序中的異常代碼,也可以通過(guò)打日志的方式追查問(wèn)題,但是更重要也是非常厲害的一點(diǎn),就是delve可以直接分析程序執(zhí)行的情況。這一點(diǎn)在后期或線上的問(wèn)題排查中無(wú)疑是提供了一個(gè)非常大的便捷。
Go(又稱?Golang)是?Google?的 Robert Griesemer,Rob Pike 及 Ken Thompson 開(kāi)發(fā)的一種靜態(tài)強(qiáng)類型、編譯型語(yǔ)言。
Go 語(yǔ)言語(yǔ)法與?C?相近,但功能上有:內(nèi)存安全,GC(垃圾回收),結(jié)構(gòu)形態(tài)及 CSP-style?并發(fā)計(jì)算。
Go的語(yǔ)法接近C語(yǔ)言,但對(duì)于變量的聲明有所不同。Go支持垃圾回收功能。Go的并行模型是以東尼·霍爾的通信順序進(jìn)程(CSP)為基礎(chǔ)。
采取類似模型的其他語(yǔ)言包括Occam和Limbo,但它也具有Pi運(yùn)算的特征,比如通道傳輸。在1.8版本中開(kāi)放插件(Plugin)的支持,這意味著現(xiàn)在能從Go中動(dòng)態(tài)加載部分函數(shù)。
Delve常用命令
命令功能:
dlv attach后面跟 pid,用來(lái)Debug編譯好的Golang程序。
dlv core用于 coredump。
dlv debug后面跟要調(diào)試的 go 文件,進(jìn)入 Debug。
dlv testDebug test 函數(shù)。
問(wèn)題
Goland和Idea使用debug報(bào)錯(cuò),如下:could not launch process: decoding dwarf section info at offset 0x0: too short。
解決方法
1,更新dlv
2.修改goland或idea配置
更新后的div在$gopath路徑下的bin文件夾下。
替換到idea或goland的這個(gè)目錄下
重啟ide,問(wèn)題解決