1.原因
有時候項目在服務器中存在很多依賴,有些依賴可能因爲種種原因只能運行在linux環境中,又或者依賴的包太多,總之不方便在本地運行項目,那麼只能夠通過遠程調試了。
2.安裝delve
服務器上運行該命令安裝 delve
go get -u github.com/go-delve/delve/cmd/dlv
3.編譯項目
記得一定要加上 -gcflags='all=-N -l
這裏假設編譯的是main.go
go build -gcflags="all=-N -l" ./main.go
4.服務器上以debug模式啓動程序
方式一:侵入式調試代碼
就是調試運行中的進程
假設程序main
已在運行中
先ps -aux | grep main
查看main程序的PID
,然後啓動侵入調試
dlv attach $PID --headless --api-version=2 --log --listen=:1234
方式二:啓動調試進程
dlv --listen=:1234 --headless=true --api-version=2 --accept-multiclient exec ./main
5.Goland調試
下面這幾步很重要!!!!
指定當前本地項目的GOPATH
添加遠程調試策略
Host,就是遠端服務器的可以聯通的IP地址或機器名;Port,就是剛剛dlv debug啓動時指定的監聽端口
編輯器右上角選擇遠程調試的策略名,就是上一步命名的,然後點擊綠色的蟲子
調試成功
6.結束調試
在本地結束調試後,如果想暫停服務器的程序,CTRL + C 也不能夠終止程序,所以需要強行kill
掉服務
ps -aux | grep dlv
ps -aux | grep main
返回
root 27089 8.0 2.1 297472 39812 pts/1 Sl 12:34 0:00 dlv --listen=:8888 --headless=true --api-version=2 --accept-multiclient exec ./main
root 3157 0.0 0.4 148296 8496 pts/1 Sl 11:59 0:00 ./main
然後分別kill掉
7.最後要注意的
本地改完代碼之後遠程服務器一定要重新編譯!!!不然調試的時候會出現這樣的情況