前言
上一遍文章介紹了利用QEMU+GDB調(diào)試Linux內(nèi)核。但是,有時(shí)候直接利用GDB調(diào)試查看代碼還不是很方便,所以,在這么重要的場(chǎng)合,怎么能少的了vscode這個(gè)神器呢。本篇文章介紹如何使用vscode遠(yuǎn)程調(diào)試內(nèi)核。
本文環(huán)境:
- windows10vscodeubuntu 20.04
我個(gè)人使用的是騰訊云服務(wù)器,所以就省去了安裝虛擬機(jī)的過(guò)程。直接從vscode配置開(kāi)始。
vscode插件安裝
remote-ssh
在插件庫(kù)中找到Remote-SSH插件并且安裝。
安裝完成后右邊工具欄會(huì)多出一個(gè)功能
按F1呼出對(duì)話框,輸入remote-ssh,選擇open ssh configuration file。
選擇第一個(gè)配置文件
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host ubuntu
HostName 服務(wù)器IP地址
User 用戶名
IdentityFile 私鑰路徑
我這里使用的是私鑰方式登陸服務(wù)器,IdentityFile填寫(xiě)的是私鑰的絕對(duì)路徑。
配置好后,點(diǎn)擊加號(hào)按鈕,就可以登陸服務(wù)器了
報(bào)錯(cuò):Setting up SSH Host XX:Copying VS Code Server to host with scp
在進(jìn)行連接的時(shí)候卡住了,一直在等待Setting up SSH Host XX:Copying VS Code Server to host with scp。
原因
是因?yàn)樵谶h(yuǎn)程的服務(wù)器下 家目錄~/.vscode-server/bin/commit_id/vscode-servlet.tar.gz
沒(méi)有下載下來(lái)。
commit_id 可以在vscode 【幫助】->【終端】中查看。
解決辦法
那我們就手動(dòng)進(jìn)行下載vscode-servlet.tar.gz。通過(guò)下面的鏈接進(jìn)行下載。
#注意把:${commit_id}替換成對(duì)應(yīng)的Commit ID
https://update.code.visualstudio.com/commit:${commit_id}/server-linux-x64/stable
運(yùn)行下面這行命令。把~/.vscode-server/bin
目錄下的東西刪除干凈。
rm ~/.vscode-server/bin/* -rf
沒(méi)有~/.vscode-server/bin
目錄的話進(jìn)行創(chuàng)建,有的話請(qǐng)忽略這一步*。
mkdir -p ~/.vscode-server/bin
將下載的壓縮包vscode-server-linux-x64.tar.gz放在~/.vscode-server/bin
目錄下。
運(yùn)行下面這三行命令,其中${commit_id}
需要替換成第2步記錄的commit_id.
cd ~/.vscode-server/bin
tar -zxf vscode-server-linux-x64.tar.gz
mv vscode-server-linux-x64 ${commit_id}
報(bào)錯(cuò):Permissions for 'vscode_rsa' are too open.
然后就可以在原來(lái)的文件瀏覽界面,打開(kāi)遠(yuǎn)程的文件夾。但是在配置好進(jìn)行連接的時(shí)候,VScode的終端報(bào)錯(cuò)了:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'vscode_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "vscode_rsa": bad permissions
根本原因是私鑰的權(quán)限問(wèn)題。這要是在Linux里,直接使用chmod,就可以修改,修改為644即可,但是windows,就稍微麻煩點(diǎn)。
在私鑰上右擊選擇屬性,然后選擇【安全】選項(xiàng)卡,然后點(diǎn)擊下面的【高級(jí)】按鈕,然后在新彈出的窗口下方點(diǎn)擊【禁用繼承】,然后點(diǎn)擊繼承那個(gè)按鈕上面的【添加】按鈕重新將當(dāng)前window登錄用戶設(shè)置為私鑰的所有者,并勾選所有權(quán)限。最后跟下面一樣即可:
這時(shí)再次打開(kāi)VScode遠(yuǎn)程連接,就沒(méi)有問(wèn)題了。
C/C++
安裝C/C++插件
依次點(diǎn)擊【運(yùn)行】->【打開(kāi)配置】,將以下配置復(fù)制到launch.json中。
{
"version": "0.2.0",
"configurations": [
{
"name": "kernel-debug",
"type": "cppdbg",
"request": "launch",
"miDebuggerServerAddress": "127.0.0.1:1234",
"program": "${workspaceFolder}/vmlinux",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"logging": {
"engineLogging": false
},
"MIMode": "gdb",
}
]
}
然后在main函數(shù)中,打上兩個(gè)斷點(diǎn),在服務(wù)器上開(kāi)啟QEMU,F(xiàn)5即可開(kāi)啟調(diào)試。
在vscode中調(diào)試內(nèi)核,和正常的在windows調(diào)試代碼是一樣的,側(cè)邊欄可以看到變量,監(jiān)視變量,調(diào)用堆棧等,非常方便。
大功告成,以后就可以在可視化界面調(diào)試內(nèi)核了!
圖書(shū)推薦
圖書(shū)簡(jiǎn)介
嵌入式實(shí)時(shí)操作系統(tǒng)是嵌入式人工智能與物聯(lián)網(wǎng)終端的重要工具和運(yùn)行載體。本書(shū)以國(guó)產(chǎn)RT-Thread實(shí)時(shí)操作系統(tǒng)為背景,闡述實(shí)時(shí)操作系統(tǒng)的線程、調(diào)度、延時(shí)函數(shù)、事件、消息隊(duì)列、信號(hào)量、互斥量等基本知識(shí)要素,并給出實(shí)時(shí)操作系統(tǒng)下的程序設(shè)計(jì)方法。全書(shū)分為基礎(chǔ)應(yīng)用(第1~7章)、原理剖析(第8~12章)及綜合實(shí)踐(第13~14章)三篇,如果讀者只從事實(shí)時(shí)操作系統(tǒng)下的應(yīng)用開(kāi)發(fā),可只閱讀基礎(chǔ)應(yīng)用篇與綜合實(shí)踐篇;如果希望理解實(shí)時(shí)操作系統(tǒng)原理,則建議通讀全書(shū)。
本書(shū)是RT-Thread官方推薦圖書(shū),面向嵌入式人工智能與物聯(lián)網(wǎng)領(lǐng)域,將應(yīng)用與原理分開(kāi)闡述,分基礎(chǔ)應(yīng)用、原理剖析、綜合實(shí)踐三篇,循序漸進(jìn),更利于讀者學(xué)習(xí)和應(yīng)用RTOS。
本文參考
https://www.it610.com/article/1295167638502187008.htm
https://blog.csdn.net/weixin_39529413/article/details/108775129
https://learnku.com/articles/57161
https://blog.csdn.net/AhznuIOT/article/details/117459364
https://blog.csdn.net/Taylor_0522/article/details/118733368
https://blog.csdn.net/code_peak/article/details/118769074
https://www.bilibili.com/read/cv15173707/
https://zhuanlan.zhihu.com/p/445453676
https://wenfh2020.com/2021/12/03/ubuntu-qemu-linux/