一哎甲、前言
本文介紹了在本地主機(jī)VS Code編輯器中進(jìn)行g(shù)olang代碼遠(yuǎn)程調(diào)試的方法。
vs code的運(yùn)行環(huán)境是windows饲嗽,被調(diào)試代碼的運(yùn)行環(huán)境是centos炭玫。go版本為1.13,dlv版本為1.3貌虾。
二吞加、調(diào)試環(huán)境準(zhǔn)備
1.確認(rèn)可以正常使用go get功能(可選步驟)
使用以下命令可以設(shè)置go的代理,該代理的地址非官方提供尽狠,可靠性存疑.
go env -w GOPROXY=https://goproxy.cn,direct
2.被調(diào)試機(jī)設(shè)置環(huán)境變量
1. sudo vim /etc/profile
2. ##編輯文本首行加入如下:
3. export GOPATH=/root/go
4. export PATH={GOPATH}/bin
5. ##wq保存退出
6. sudo source /etc/profile
3.vscode安裝提示所需GO插件
三衔憨、操作步驟
1.在本地主機(jī)和遠(yuǎn)程主機(jī)分別安裝dlv
delve,簡稱dlv是go語言的最常用的調(diào)試器,獲取dlv的操作命令如下:
1. go get -u github.com/derekparker/delve/cmd/dlv
2. #驗(yàn)證dlv安裝
3. dlv version
2.vscode中配置
在vscode中使用打開文件夾模式袄膏。打開源代碼所在文件夾践图。編寫源代碼,代碼編寫完成后復(fù)制到遠(yuǎn)程主機(jī)上沉馆。
一定要保證本地代碼和遠(yuǎn)程代碼一致
在本地主機(jī)中配置遠(yuǎn)程調(diào)試的參數(shù)码党。打開vscode中的調(diào)試側(cè)邊欄,快捷鍵 ctrl+shift+d斥黑。點(diǎn)擊調(diào)試欄中的齒輪按鈕揖盘,
配置調(diào)試連接參數(shù)。此時(shí)vscode中打開了 launch.json 文件的編輯界面锌奴,這個(gè)文件存儲在當(dāng)前文件夾路徑下的 .vscode 目錄中兽狭,
里面可以存儲多組調(diào)試配置。默認(rèn)生成的配置參數(shù)如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${fileDirname}",
"env": {},
"args": []
}
]
}
在vscode中鼠標(biāo)移動到j(luò)son的字段上會提示可以填寫的參數(shù)鹿蜀。這里手動添加一條遠(yuǎn)程調(diào)試的配置箕慧,配置如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${fileDirname}",
"env": {},
"args": []
},
{
// 調(diào)試配置的名稱,用作vscode中區(qū)分
"name": "remotedebug",
// 調(diào)試類型茴恰,go語言當(dāng)然選擇go
"type": "go",
// 調(diào)試請求類型销钝,可以選擇launch啟動調(diào)試和attach附加調(diào)試
"request": "launch",
// 調(diào)試模式,這里選擇遠(yuǎn)程調(diào)試
"mode": "remote",
// 必填項(xiàng)琐簇,遠(yuǎn)程調(diào)試?yán)锖孟駴]什么用處
"program": "${fileDirname}",
// 遠(yuǎn)程連接的端口號
"port": 2345,
// 遠(yuǎn)程主機(jī)的ip地址
"host": "192.168.100.118",
// 被調(diào)試的代碼在遠(yuǎn)程主機(jī)上的路徑蒸健,必須使用絕對路徑.且具體到指定調(diào)試目錄
"remotePath": "/root/go/src/test"
}
]
}
3.在遠(yuǎn)程主機(jī)中啟動dlv
cd 到源代碼所在的目錄,這個(gè)目錄要與上一步在vscode中remotePath字段配置的路徑一致運(yùn)行以下命令:
1. dlv debug --headless --listen ":2345" --log --api-version 2
2. ##--headless指定只使用調(diào)試服務(wù)模式婉商,
3. ##--listen指定了調(diào)試服務(wù)的端口似忧,要與vscode的配置一致。
4. ##--log啟用了調(diào)試日志輸出丈秩,可關(guān)閉盯捌。
5. ##--api-version 2選擇調(diào)試api的版本,這里必須指定為2蘑秽,否則不能調(diào)試
6. ##-- 雙減號加空格后填寫程序啟動的參數(shù)
待被調(diào)試機(jī)器出現(xiàn)如下狀態(tài)饺著,可啟動vscode中F5功能鍵進(jìn)行遠(yuǎn)程調(diào)試 箫攀。
4.進(jìn)行VScode調(diào)試
? 開始調(diào)試
在vscode中使用 F9 為代碼設(shè)置/取消斷點(diǎn),在調(diào)試欄中選擇之前編輯好的remotedebug調(diào)試配置幼衰,F(xiàn)5開始調(diào)試靴跛,此時(shí)vscode會與遠(yuǎn)程調(diào)試服務(wù)連接,連接成功后程序運(yùn)行并中斷在第一個(gè)斷點(diǎn)處渡嚣。
? 操作快捷鍵
F5 開始調(diào)試
shift + F5 停止調(diào)試
F9 設(shè)置/刪除斷點(diǎn)
F10 跳過
F11 跳入
shift + F11 跳出
? 調(diào)試信息
在調(diào)試欄中可以查看變量值梢睛、調(diào)用堆棧、監(jiān)視列表识椰、斷點(diǎn)列表绝葡;
四、問題解決
- 使用launch方式遠(yuǎn)程調(diào)試時(shí)腹鹉,
vscode會提示:Request type of 'launch' with mode 'remote' is deprecated, please use request type 'attach' with mode 'remote' instead.目前看這個(gè)提示暫時(shí)可以不用理會藏畅。 - 有時(shí)候在launch.json被編輯狀態(tài)時(shí)進(jìn)行調(diào)試會失敗,需要關(guān)閉該文件的編輯功咒。
- 重啟調(diào)試功能在遠(yuǎn)程調(diào)試中無法使用墓赴,點(diǎn)擊后會不能繼續(xù)調(diào)試,需要重啟vscode航瞭。