本文目的是在Ubuntu系統使用gdb除錯程式的基礎上,練習使用可視化除錯前端軟體VScode除錯程式,
目錄
- (一)安裝并配置VScode
- 1.安裝VScode
- 2.配置VScode編譯C/C++的環境
- 3.配置VScode除錯C/C++的環境
- (二)使用VScode進行程式的除錯
- 1.除錯程式
- 2.啟動除錯
- 3.修改程式
- (三)總結
(一)安裝并配置VScode
1.安裝VScode
- 方法一
直接在Ubuntu系統自帶的Ubuntu軟體安裝Visual Studio Code - 方法二
命令列安裝Visual Studio Code- 下載:從vscode官網下載最新版本,deb包下載地址:https://code.visualstudio.com/docs?dv=linux64
使用wget 下載地址進行下載 - 安裝:
dpkg -i 安裝包
參考博文:https://www.cnblogs.com/lwp-king666/p/10513382.html 1
- 下載:從vscode官網下載最新版本,deb包下載地址:https://code.visualstudio.com/docs?dv=linux64
- 安裝好VScode后如圖所示

2.配置VScode編譯C/C++的環境
- 安裝C/C++插件

在VScode的左邊擴展(Ctrl+Shift+X)處搜索C/C++并安裝它(我這里已經安裝好了C/C++), - 安裝Chinese (Simplified) Language Pack for Visual Studio Code插件
這個插件可以使VScode顯示簡體中文,方便使用
3.配置VScode除錯C/C++的環境
- 首先,新建vscode_program檔案夾作為VScode的作業目錄,(注意檔案路徑和檔案名不能有中文,否則會報錯,)
- 在VScode中打開該檔案夾(即作業目錄)并新建子檔案夾test存放撰寫的程式和生成的可執行檔案,然后再新建一個C語言程式RevertNum.c,

- 配置程式除錯環境
- 首先啟動除錯(F5)

- 然后選擇環境

- 最后選擇配置

- 報錯如下:
- 從圖中可以看出生成的可執行檔案的路徑為
./vscode_program/RevertNum而不是./vscode_program/test/RevertNum,

- 原因如下:
由于tasks.json中的命令type型別為cppbuild時會使編譯以行程運行而不是以shell命令運行,因此type配置為cppbuild將會生成的檔案放到根目錄(作業目錄)下,而改為shell會生成到當前目錄下,
- 從圖中可以看出生成的可執行檔案的路徑為
- 繼續除錯程式,程式正常運行
- 若想要除錯程式時顯示外部視窗則需要將 launch.json中的externalConsole屬性改為true,顯示效果如下:

- 此時發現輸出中有多余的類似
[1] + Done "/usr/bin/gdb" --interpreter=mi --tty=${DbgTerm} 0<"/tmp/Microsoft-MIEngine-In-36xb7mwq.voj" 1>"/tmp/Microsoft-MIEngine-Out-t93wyo8f.xxh"的內容輸出,查閱網上資料2說這是正常的輸出資訊,忽略即可, - 此時終端輸出如下警告:
如果想要去掉該警告,則需在tasks.json中修改presentation的屬性panel為new即可解決3,

- 若想要除錯程式時顯示外部視窗則需要將 launch.json中的externalConsole屬性改為true,顯示效果如下:
- 首先啟動除錯(F5)
- 修改的launch.json檔案和tasks.json檔案4
- launch.json檔案修改如下:
{ // 使用 IntelliSense 了解相關屬性, // 懸停以查看現有屬性的描述, // 欲了解更多資訊,請訪問: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "gcc - 生成和除錯活動檔案", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, //是否顯示外部除錯視窗 "MIMode": "gdb", "setupCommands": [ { "description": "為 gdb 啟用整齊列印", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "C/C++: gcc build active file", "miDebuggerPath": "/usr/bin/gdb" } ] }- tasks.json檔案修改如下:
{ "tasks": [ { "type": "shell", 配置為cppbuild將會生成的檔案放到根目錄下,而改為shell會生成到當前目錄下 "label": "C/C++: gcc build active file", "command": "/usr/bin/gcc", "args": [ "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "options": { "cwd": "/usr/bin" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "Generated task by Debugger", "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "new", //這里shared表示共享,改成new之后每個行程創建新的埠 "showReuseMessage": true, "clear": true } } ], "version": "2.0.0" }
(二)使用VScode進行程式的除錯
1.除錯程式
- RevertNum.c
#include<stdio.h>
// 函式作用:輸出反轉的數
void ShowRevertNum(int Num)
{
while(Num>10)
{
printf("%d",Num%10);
Num/=10;
}
printf("%d\n",Num);
}
int main()
{
int n;
printf("Please input a number:");
scanf("%d",&n);
printf("After Revert:");
ShowRevertNum(n);
return 0;
}
- 程式運行時的問題
當程式輸入100時輸出為010,正確輸出應為001,運行結果如下:

2.啟動除錯
- 添加斷點
- 將滑鼠放在程式所在行的左邊即可看見暗紅色的小圓點,單擊它即可設定斷點,

- 設定如下三個斷點

- 將滑鼠放在程式所在行的左邊即可看見暗紅色的小圓點,單擊它即可設定斷點,
- 開始除錯
利用上方的繼續、單步跳過、單步除錯、單步跳出等可視化方式除錯該程式,- 當程式停在第一個斷點時,Num的值為100

- 當經過一輪while回圈后Num的值變為10,此時Num>10不成立直接跳過while回圈,

- 到達第三個斷點時,直接輸出Num的值,此時Num值為10,

- 除錯結束

- 當程式停在第一個斷點時,Num的值為100
3.修改程式
將RevertNum.c中的while回圈中判斷條件改為Num>=10即可,成功運行如下:

(三)總結
之前直接使用gdb進行C程式的除錯中讓我從底層了解了gdb除錯程式的程序,而使用VScode除錯程式則讓我從更高的層次除錯程式,作業效率有了顯著提升;通過可視化的除錯軟體,可以不用再去記憶復雜繁多的除錯命令,而是直接使用滑鼠可視化操作進行程式的相關除錯,極大地提高了生產力,
感謝以下博客和文章對我的幫助:
https://www.cnblogs.com/lwp-king666/p/10513382.html ??
https://github.com/microsoft/vscode-cpptools/issues/3298 ??
https://blog.csdn.net/qq_30467819/article/details/105697823 ??
https://segmentfault.com/a/1190000020793997?utm_source=tag-newest ??
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/206540.html
標籤:其他
