前言
上一遍文章介紹了利用QEMU+GDB調試Linux內核。但是,有時候直接利用GDB調試查看代碼還不是很方便,所以,在這么重要的場合,怎么能少的了vscode這個神器呢。本篇文章介紹如何使用vscode遠程調試內核。
本文環(huán)境:
- windows10vscodeubuntu 20.04
我個人使用的是騰訊云服務器,所以就省去了安裝虛擬機的過程。直接從vscode配置開始。
vscode插件安裝
remote-ssh
在插件庫中找到Remote-SSH插件并且安裝。
安裝完成后右邊工具欄會多出一個功能
按F1呼出對話框,輸入remote-ssh,選擇open ssh configuration file。
選擇第一個配置文件
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host ubuntu
HostName 服務器IP地址
User 用戶名
IdentityFile 私鑰路徑
我這里使用的是私鑰方式登陸服務器,IdentityFile填寫的是私鑰的絕對路徑。
配置好后,點擊加號按鈕,就可以登陸服務器了
報錯:Setting up SSH Host XX:Copying VS Code Server to host with scp
在進行連接的時候卡住了,一直在等待Setting up SSH Host XX:Copying VS Code Server to host with scp。
原因
是因為在遠程的服務器下 家目錄~/.vscode-server/bin/commit_id/vscode-servlet.tar.gz
沒有下載下來。
commit_id 可以在vscode 【幫助】->【終端】中查看。
解決辦法
那我們就手動進行下載vscode-servlet.tar.gz。通過下面的鏈接進行下載。
#注意把:${commit_id}替換成對應的Commit ID
https://update.code.visualstudio.com/commit:${commit_id}/server-linux-x64/stable
運行下面這行命令。把~/.vscode-server/bin
目錄下的東西刪除干凈。
rm ~/.vscode-server/bin/* -rf
沒有~/.vscode-server/bin
目錄的話進行創(chuàng)建,有的話請忽略這一步*。
mkdir -p ~/.vscode-server/bin
將下載的壓縮包vscode-server-linux-x64.tar.gz放在~/.vscode-server/bin
目錄下。
運行下面這三行命令,其中${commit_id}
需要替換成第2步記錄的commit_id.
cd ~/.vscode-server/bin
tar -zxf vscode-server-linux-x64.tar.gz
mv vscode-server-linux-x64 ${commit_id}
報錯:Permissions for 'vscode_rsa' are too open.
然后就可以在原來的文件瀏覽界面,打開遠程的文件夾。但是在配置好進行連接的時候,VScode的終端報錯了:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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
根本原因是私鑰的權限問題。這要是在Linux里,直接使用chmod,就可以修改,修改為644即可,但是windows,就稍微麻煩點。
在私鑰上右擊選擇屬性,然后選擇【安全】選項卡,然后點擊下面的【高級】按鈕,然后在新彈出的窗口下方點擊【禁用繼承】,然后點擊繼承那個按鈕上面的【添加】按鈕重新將當前window登錄用戶設置為私鑰的所有者,并勾選所有權限。最后跟下面一樣即可:
這時再次打開VScode遠程連接,就沒有問題了。
C/C++
安裝C/C++插件
依次點擊【運行】->【打開配置】,將以下配置復制到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函數中,打上兩個斷點,在服務器上開啟QEMU,F5即可開啟調試。
在vscode中調試內核,和正常的在windows調試代碼是一樣的,側邊欄可以看到變量,監(jiān)視變量,調用堆棧等,非常方便。
大功告成,以后就可以在可視化界面調試內核了!
圖書推薦
圖書簡介
嵌入式實時操作系統是嵌入式人工智能與物聯網終端的重要工具和運行載體。本書以國產RT-Thread實時操作系統為背景,闡述實時操作系統的線程、調度、延時函數、事件、消息隊列、信號量、互斥量等基本知識要素,并給出實時操作系統下的程序設計方法。全書分為基礎應用(第1~7章)、原理剖析(第8~12章)及綜合實踐(第13~14章)三篇,如果讀者只從事實時操作系統下的應用開發(fā),可只閱讀基礎應用篇與綜合實踐篇;如果希望理解實時操作系統原理,則建議通讀全書。
本書是RT-Thread官方推薦圖書,面向嵌入式人工智能與物聯網領域,將應用與原理分開闡述,分基礎應用、原理剖析、綜合實踐三篇,循序漸進,更利于讀者學習和應用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/