精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

內存問題克星:VSCode GDB調試全攻略

開發(fā) 前端
VSCode,作為一款廣受歡迎的輕量級代碼編輯器,憑借其簡潔的界面、強大的插件系統(tǒng)以及跨平臺的特性,贏得了眾多開發(fā)者的心。而 GDB(GNU Debugger),則是 Linux 環(huán)境下非常強大的調試工具,它提供了豐富的命令和功能,讓我們能夠靈活地控制程序的運行,檢查變量的值,查看內存狀態(tài)等等。

各位開發(fā)者伙伴,在 C/C++ 的開發(fā)世界里,精準調試是解決代碼問題、提升開發(fā)效率的關鍵。今天,我們聚焦 VSCode 與 GDB 的調試組合,從環(huán)境搭建的 “地基”,到基礎與高級調試操作的 “核心招式”,再到常見問題的 “破局之道”,全方位拆解這個強大工具的使用秘籍。

掌握這些技能,不僅能幫你快速定位并修復代碼 bug,更能讓你深入理解程序運行的底層邏輯,這可是成為優(yōu)秀開發(fā)者的必經之路!無論你是調試新手,還是希望進階的 “老司機”,相信接下來的內容都能讓你在實際項目中,更從容地駕馭代碼,收獲編程帶來的成就感。現(xiàn)在,就讓我們開啟這場高效調試之旅吧!

一、為什么要掌握VSCode GDB 調試

在 C/C++ 開發(fā)的世界里,調試就像是一把神奇的鑰匙,能幫我們打開隱藏在程序深處的秘密大門,找到那些潛伏著的錯誤。想象一下,你辛苦編寫了一段代碼,滿心期待它能順利運行,結果卻出現(xiàn)了各種意想不到的問題:程序崩潰、輸出結果不對、莫名奇妙的卡頓…… 這個時候,調試就派上用場了,它能讓我們深入程序內部,一步步查看程序的執(zhí)行過程,揪出那些搗亂的小 “Bug”。

VSCode,作為一款廣受歡迎的輕量級代碼編輯器,憑借其簡潔的界面、強大的插件系統(tǒng)以及跨平臺的特性,贏得了眾多開發(fā)者的心。而 GDB(GNU Debugger),則是 Linux 環(huán)境下非常強大的調試工具,它提供了豐富的命令和功能,讓我們能夠靈活地控制程序的運行,檢查變量的值,查看內存狀態(tài)等等。

當 VSCode 與 GDB 強強聯(lián)手,就形成了一個超級高效的調試組合,為我們的開發(fā)工作帶來了諸多便利和優(yōu)勢。

在開始使用 VSCode GDB 調試之前,我們需要先完成一些準備工作,確保我們的開發(fā)環(huán)境已經搭建好:

首先,我們需要安裝 VSCode 和 GDB。VSCode 可以從其官方網站(https://code.visualstudio.com/ )下載,根據(jù)你的操作系統(tǒng)選擇對應的安裝包進行下載和安裝。安裝過程非常簡單,按照提示一步一步進行即可。

GDB 的安裝方式因操作系統(tǒng)而異,以下是三種不同系統(tǒng)安裝:

①Linux 系統(tǒng):大多數(shù) Linux 發(fā)行版都可以通過包管理器來安裝 GDB。例如,在 Ubuntu 系統(tǒng)中,你可以打開終端,輸入以下命令進行安裝:

sudo apt-get install gdb

②macOS 系統(tǒng):如果你使用的是 macOS 系統(tǒng),可以通過 Homebrew 來安裝 GDB。首先確保你已經安裝了 Homebrew,然后在終端中輸入以下命令:

brew install gdb

安裝完成后,還需要進行一些額外的配置,以授予 GDB 調試權限。具體步驟可以參考 GDB 在 macOS 上的官方文檔。

③Windows 系統(tǒng):在 Windows 系統(tǒng)上安裝 GDB 相對復雜一些。你可以下載 MinGW 或 TDM - GCC,它們都包含了 GDB 調試器。以 MinGW 為例,下載安裝包后,按照安裝向導進行安裝。安裝完成后,需要將 MinGW 的 bin 目錄添加到系統(tǒng)的環(huán)境變量 PATH 中,這樣才能在命令行中使用 GDB。

安裝好 VSCode 和 GDB 之后,還需要在 VSCode 中安裝 C/C++ 擴展。打開 VSCode,點擊左側的擴展圖標(或者使用快捷鍵 Ctrl+Shift+X),在搜索框中輸入 “C/C++”,然后點擊安裝按鈕進行安裝。這個擴展為 VSCode 提供了 C/C++ 語言的語法高亮、代碼補全和調試支持等功能 ,是進行 C/C++ 調試必不可少的。

二、配置 VSCode 進行 GDB調試

2.1安裝 VSCode 和 C/C++ 擴展

①下載 VSCode:打開你常用的瀏覽器,訪問 VSCode 官方網站https://code.visualstudio.com/ 。在官網首頁,你會看到醒目的 “Download” 按鈕,點擊它。根據(jù)你的操作系統(tǒng),選擇對應的安裝包進行下載,比如 Windows 系統(tǒng)下載.exe 文件,macOS 系統(tǒng)下載.dmg 文件,Linux 系統(tǒng)則根據(jù)不同發(fā)行版選擇.deb 或.rpm 文件。下載完成后,找到安裝包并雙擊運行,按照安裝向導的提示,一步一步完成 VSCode 的安裝。

②安裝 C/C++ 擴展:啟動 VSCode,在界面左側的活動欄中,點擊擴展圖標(看起來像四個方塊組成的拼圖),或者使用快捷鍵 Ctrl+Shift+X,打開擴展面板。在搜索框中輸入 “C/C++”,這時會出現(xiàn)一系列相關的擴展,找到由 Microsoft 提供的 “C/C++” 擴展,點擊其右側的 “安裝” 按鈕。安裝過程可能需要一些時間,安裝完成后,你就可以在 VSCode 中獲得 C/C++ 語言的語法高亮、代碼補全和調試支持等功能了。

2.2安裝 GDB

⑴Windows 系統(tǒng):推薦使用 MinGW 或 TDM - GCC 來安裝 GDB。以 MinGW 為例,你可以從 MinGW 的官方網站(https://mingw.osdn.io/ )下載安裝程序。下載完成后,運行安裝程序,按照提示進行安裝。在安裝過程中,注意選擇安裝路徑,并且要確保將 MinGW 的 bin 目錄(例如 C:\MinGW\bin)添加到系統(tǒng)的環(huán)境變量 PATH 中。

這樣,你就可以在命令行中直接使用 GDB 了。安裝完成后,打開命令提示符,輸入 “gdb -v”,如果能顯示 GDB 的版本信息,說明安裝成功。

⑵Linux 系統(tǒng):在大多數(shù) Linux 發(fā)行版中,安裝 GDB 非常簡單,使用系統(tǒng)自帶的包管理器即可。比如在 Ubuntu 系統(tǒng)中,打開終端,輸入以下命令:

sudo apt-get update
sudo apt-get install gdb

第一條命令用于更新軟件源,確保獲取到最新的軟件信息;第二條命令則是安裝 GDB。安裝完成后,同樣可以在終端中輸入 “gdb -v” 來驗證安裝是否成功。

⑶macOS 系統(tǒng):利用 Homebrew 包管理器來安裝 GDB 是個不錯的選擇。首先,確保你已經安裝了 Homebrew。如果沒有安裝,可以在終端中執(zhí)行以下命令進行安裝:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安裝好 Homebrew 后,在終端中輸入以下命令安裝 GDB:

brew install gdb

不過,在 macOS 上使用 GDB 還需要進行一些額外的配置,因為系統(tǒng)的安全機制會限制 GDB 的調試權限。你需要生成一個證書并對 GDB 進行簽名,具體步驟可以參考 GDB 在 macOS 上的官方文檔或相關教程。

2.3配置 launch.json 文件

launch.json 文件是 VSCode 用于配置調試會話的重要文件,它告訴 VSCode 如何啟動調試器以及調試哪些程序。在 VSCode 中,點擊菜單欄中的 “運行”->“添加配置”,這時會彈出一個下拉菜單,選擇 “C++ (GDB/LLDB)”。VSCode 會自動生成一個默認的 launch.json 文件,并在編輯器中打開它。以下是一個示例的 launch.json 配置:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C++ Debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/a.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "console": "integratedTerminal",
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}
  • name:調試配置的名稱,你可以根據(jù)自己的喜好進行修改,這個名稱會顯示在 VSCode 的調試工具欄中。
  • type:調試類型,這里是 “cppdbg”,表示使用 C++ 調試器。
  • request:調試請求類型,“l(fā)aunch” 表示啟動調試會話。
  • program:要調試的程序路徑,“${workspaceFolder}” 是 VSCode 的變量,表示當前工作區(qū)文件夾,這里假設編譯后的可執(zhí)行文件名為 “a.out”,并位于工作區(qū)文件夾中。如果你的可執(zhí)行文件有其他名稱或路徑,需要相應地修改。
  • args:傳遞給程序的命令行參數(shù),這里是一個空數(shù)組,如果你的程序需要參數(shù),可以在這里添加。
  • stopAtEntry:是否在程序入口處暫停,設置為 false 表示不暫停,程序會直接運行,直到遇到斷點。
  • cwd:調試時的工作目錄,這里設置為當前工作區(qū)文件夾。
  • environment:環(huán)境變量,這里是一個空數(shù)組,如果你的程序需要特定的環(huán)境變量,可以在這里添加。
  • console:調試時使用的控制臺,“integratedTerminal” 表示使用 VSCode 集成終端。
  • MIMode:調試器的 MI 模式,這里使用 “gdb”。
  • setupCommands:在調試會話啟動前執(zhí)行的命令,這里的命令是啟用 gdb 的漂亮打印功能,使調試輸出更易讀。

2.4配置 tasks.json 文件(可選)

tasks.json 文件主要用于配置構建任務,比如編譯 C/C++ 程序。雖然不是必須配置,但對于自動化編譯程序非常有用。在 VSCode 中,按下 Ctrl+Shift+P,打開命令面板,輸入 “Tasks: Configure Default Build Task” 并回車,VSCode 會彈出一個模板選擇列表,選擇 “C/C++: g++ build active file”(如果你使用的是 gcc 編譯器,選擇相應的 gcc 選項)。VSCode 會在工作區(qū)的.vscode 文件夾下生成一個 tasks.json 文件,內容如下:

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "g++ build active file",
            "command": "g++",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": false,
                "panel": "shared",
                "showReuseMessage": true,
                "clear": false
            },
            "problemMatcher": ["$gcc"]
        }
    ]
}

作用及示例解釋:這個配置表示使用 g++ 編譯器來編譯當前活動文件。

  • “command” 指定了使用的編譯器是 g++,
  • “args” 數(shù)組中包含了編譯選項和參數(shù),
  • “-g” 表示生成調試信息,
  • “\({file}”表示當前活動文件,
  • “-o”表示輸出文件,
  • “\){fileDirname}/${fileBasenameNoExtension}” 表示輸出文件的路徑和名稱,與當前活動文件在同一目錄下,且去掉了文件擴展名。
  • “group” 部分將這個任務標記為構建任務,并設置為默認任務。

這樣,在 VSCode 中按下 Ctrl+Shift+B,就會自動執(zhí)行這個編譯任務,生成可執(zhí)行文件,方便后續(xù)的調試。如果你的項目有特殊的編譯需求,比如需要鏈接特定的庫、使用不同的編譯選項等,可以根據(jù)實際情況修改 “args” 數(shù)組中的內容。

三、VSCode基礎調試操作

3.1設置斷點

在 VSCode 中,設置斷點是調試的基礎操作,就像在地圖上標記重要地點一樣,它能讓程序在執(zhí)行到特定代碼行時暫停,方便我們檢查程序狀態(tài)。設置斷點有兩種常見的方法。

一種是非常直觀的圖形化操作,當你打開需要調試的代碼文件后,只需將鼠標移動到代碼左側邊緣,也就是行號旁邊的空白區(qū)域,點擊一下,就會出現(xiàn)一個醒目的紅點 ,這就是斷點。比如,在下面這段簡單的 C++ 代碼中:

#include <iostream>
int main() {
    int a = 10;
    int b = 20;
    int sum = a + b;
    std::cout << "The sum is: " << sum << std::endl;
    return 0;
}

如果你想檢查變量sum的計算結果,就可以在int sum = a + b;這一行的左側點擊設置斷點。

另一種方法是在 GDB 控制臺中使用命令來設置斷點。在 VSCode 的調試控制臺中輸入break命令,后面跟上要設置斷點的行號或者函數(shù)名。例如,break 5表示在第 5 行設置斷點;如果要在某個函數(shù)中設置斷點,比如void func()函數(shù),就可以輸入break func。這種方式在一些復雜的調試場景中,比如在大型項目中需要根據(jù)函數(shù)名快速定位斷點時,非常實用。

除了普通斷點,VSCode 還支持設置條件斷點、日志斷點和函數(shù)斷點等高級斷點類型。條件斷點允許你設置一個條件表達式,只有當條件滿足時,斷點才會觸發(fā)。比如,在一個循環(huán)中,你只想在某個變量達到特定值時暫停程序,就可以設置條件斷點。在普通斷點上右鍵單擊,選擇 “添加條件”,然后輸入條件表達式,如i == 10,表示當變量i等于 10 時觸發(fā)斷點 。日志斷點則是在斷點處打印一條消息,而不是暫停程序執(zhí)行,這對于跟蹤程序的執(zhí)行流程很有幫助。函數(shù)斷點則是在函數(shù)入口處設置斷點,方便對函數(shù)的執(zhí)行進行調試。

3.2運行和繼續(xù)

設置好斷點后,就可以開始調試程序了。在 VSCode 中,有兩種常見的方式來啟動調試。一種是點擊 VSCode 界面上方調試工具欄中的綠色三角形 “開始調試” 按鈕,這個按鈕就像是啟動汽車的鑰匙,按下它,調試之旅就開始了。另一種方式是在 GDB 控制臺中輸入run命令,也可以縮寫為r。當你執(zhí)行這兩種操作之一后,程序就會開始運行,直到遇到第一個斷點才會暫停。

當程序暫停在斷點處時,如果你想讓程序繼續(xù)執(zhí)行,直到遇到下一個斷點或者程序結束,可以在調試工具欄中點擊 “繼續(xù)” 按鈕,它的圖標是一個向右的三角形。在 GDB 控制臺中,也可以輸入continue命令,縮寫為c。比如,在上面的代碼中,程序在int sum = a + b;這一行的斷點處暫停后,你執(zhí)行continue命令,程序就會繼續(xù)執(zhí)行,直到遇到下一個斷點或者return 0;語句,程序結束。

3.3查看變量

在調試過程中,查看變量的值是非常重要的操作,它能幫助我們了解程序在運行過程中的狀態(tài),判斷程序是否按照我們預期的方式執(zhí)行。在 VSCode 中,查看變量值有兩種主要方式。一種是通過調試側邊欄,當程序暫停在斷點處時,VSCode 左側的調試側邊欄會顯示 “變量” 面板。在這個面板中,會列出當前作用域中的所有變量及其值,包括局部變量、全局變量等。

比如,在前面的代碼中,當程序暫停在int sum = a + b;這一行的斷點處時,“變量” 面板中就會顯示變量a、b的值,你可以直觀地看到它們當前的取值。如果變量是一個復雜的數(shù)據(jù)結構,比如數(shù)組、結構體或對象,還可以展開它們,查看內部的成員變量的值。

另一種方式是在 GDB 控制臺中使用print命令,縮寫為p。在控制臺中輸入print加上變量名,就可以打印出該變量的值。例如,輸入print sum,就會輸出變量sum的值。這種方式在需要快速查看某個特定變量的值時非常方便,尤其是當你不想在側邊欄中查找變量時。此外,print命令還可以用于計算和打印表達式的值,比如print a + b,它會計算a + b的結果并打印出來 ,這對于調試復雜的表達式非常有用。

3.4單步執(zhí)行

單步執(zhí)行是調試中常用的操作,它允許我們逐行執(zhí)行代碼,仔細觀察程序的執(zhí)行流程和變量的變化情況。在 GDB 中,有兩個重要的單步執(zhí)行命令:step和next。step命令會進入函數(shù)內部執(zhí)行,如果你在調用某個函數(shù)的代碼行上使用step命令,調試器會進入這個函數(shù),讓你可以逐行查看函數(shù)內部的代碼執(zhí)行情況。例如,假設有如下代碼:

#include <iostream>
void func(int num) {
    int result = num * 2;
    std::cout << "The result in func is: " << result << std::endl;
}
int main() {
    int a = 5;
    func(a);
    return 0;
}

當程序暫停在func(a);這一行時,使用step命令,調試器就會進入func函數(shù),你可以看到int result = num * 2;這一行的執(zhí)行過程,以及變量result的計算結果。

而next命令則會跳過函數(shù)調用,直接執(zhí)行下一行代碼。還是以上面的代碼為例,當程序暫停在func(a);這一行時,使用next命令,調試器會直接執(zhí)行func函數(shù)調用之后的代碼,也就是return 0;這一行,而不會進入func函數(shù)內部。

next命令適用于你已經了解某個函數(shù)的功能,不需要深入查看其內部執(zhí)行過程的情況,這樣可以加快調試速度,快速跳過一些你不關心的代碼段 。通過靈活使用step和next命令,我們可以更細致地跟蹤程序的執(zhí)行流程,準確找到程序中出現(xiàn)問題的地方。

3.5觀察點

觀察點是一種特殊的斷點,它的作用是當某個表達式的值發(fā)生改變時,程序會自動暫停執(zhí)行,這對于追蹤變量的變化非常有用。比如,在一個復雜的程序中,你可能很難確定某個變量在什么地方被修改了,這時觀察點就能派上用場。在 GDB 控制臺中,使用watch命令來設置觀察點。例如,有如下代碼:

#include <iostream>
int main() {
    int count = 0;
    while (count < 10) {
        count++;
        std::cout << "count is: " << count << std::endl;
    }
    return 0;
}

如果你想知道變量count在什么時候被修改,可以在 GDB 控制臺中輸入watch count,這樣當count的值發(fā)生變化時,程序就會暫停在修改count的那一行代碼處。此時,你可以查看程序的狀態(tài),了解為什么count會發(fā)生這樣的變化。除了簡單的變量,watch命令也可以用于觀察復雜的表達式。

比如watch a + b,當a + b的計算結果發(fā)生變化時,程序就會暫停,這對于調試涉及多個變量運算的代碼非常有幫助 。通過設置觀察點,我們可以更精準地監(jiān)控程序中變量和表達式的變化,提高調試的效率和準確性。

3.6調整執(zhí)行流程

在調試過程中,有時候我們可能需要改變程序的執(zhí)行流程,跳過一些不需要執(zhí)行的代碼,或者重新執(zhí)行某一段代碼。這時候,jump命令就派上用場了。jump命令可以讓我們在調試過程中直接跳轉到指定的內存地址或者代碼行繼續(xù)執(zhí)行程序。例如,假設有如下代碼:

#include <iostream>
int main() {
    int num = 1;
    for (int i = 0; i < 5; i++) {
        num = num * (i + 1);
        std::cout << "num is: " << num << std::endl;
    }
    return 0;
}

當程序在循環(huán)中執(zhí)行時,如果你已經確定前面的循環(huán)執(zhí)行沒有問題,想要直接跳轉到循環(huán)結束后的代碼行繼續(xù)執(zhí)行,可以在 GDB 控制臺中使用jump命令。首先,你需要知道循環(huán)結束后的代碼行的行號或者對應的內存地址。假設循環(huán)結束后的代碼行是return 0;,其行號為 8,那么你可以在 GDB 控制臺中輸入jump 8,程序就會直接跳轉到return 0;這一行繼續(xù)執(zhí)行。

jump命令也可以根據(jù)內存地址來跳轉。你可以使用info line命令查看某一行代碼的內存地址,然后使用jump命令加上內存地址來實現(xiàn)跳轉。例如,info line 8會顯示第 8 行代碼的內存地址,假設為0x123456,那么jump *0x123456就可以跳轉到該內存地址處繼續(xù)執(zhí)行程序 。通過使用jump命令,我們可以靈活地調整程序的執(zhí)行流程,快速定位到我們關心的代碼部分進行調試,提高調試的效率。

四、高級調試技巧

4.1使用條件斷點

條件斷點是一種非常強大的調試工具,它允許我們在特定條件滿足時才觸發(fā)斷點,這在處理復雜邏輯和循環(huán)結構時特別有用。例如,在一個大型的循環(huán)中,我們可能只關心當某個變量達到特定值時程序的執(zhí)行狀態(tài),如果使用普通斷點,我們需要手動多次跳過循環(huán),直到變量達到目標值,這無疑是非常繁瑣的。而條件斷點可以幫我們解決這個問題。

假設我們有如下代碼:

#include <iostream>
int main() {
    int num = 0;
    for (int i = 0; i < 100; i++) {
        num = num + i;
        if (num > 500) {
            std::cout << "num exceeds 500: " << num << std::endl;
        }
    }
    return 0;
}

如果我們想在num超過 500 時暫停程序,查看此時的變量狀態(tài)和程序執(zhí)行情況,可以在if (num > 500)這一行設置條件斷點。在 VSCode 中,設置條件斷點的方法是在普通斷點上右鍵單擊,選擇 “添加條件”,然后輸入條件表達式num > 500。這樣,當程序執(zhí)行到這一行時,只有當num的值確實超過 500,斷點才會觸發(fā),程序才會暫停。通過這種方式,我們可以快速定位到我們關心的程序執(zhí)行點,大大提高調試效率 。

4.2多線程調試

在現(xiàn)代軟件開發(fā)中,多線程編程越來越常見,因為它可以充分利用多核處理器的優(yōu)勢,提高程序的執(zhí)行效率和響應速度。然而,多線程編程也帶來了一些調試上的挑戰(zhàn),比如線程同步問題、資源競爭問題等。因此,掌握多線程調試技巧對于開發(fā)高質量的多線程程序至關重要。

在 VSCode 中進行多線程調試,首先要確保你的開發(fā)環(huán)境已經配置好相應的編譯器和運行時庫,并且熟悉程序中使用的同步機制,如互斥鎖、信號量等,這些是確保線程安全的關鍵。

VSCode 提供了直觀的多線程調試功能。當程序在調試過程中暫停時,你可以在調試側邊欄的 “線程” 面板中看到所有正在運行的線程列表。通過點擊不同的線程,你可以切換到該線程的執(zhí)行上下文,查看該線程的變量值、調用棧等信息。例如,假設有如下多線程代碼:

#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
void print_id(int id) {
    std::lock_guard<std::mutex> guard(mtx);
    std::cout << "thread " << id << '\n';
}
void do_work() {
    for (int i = 0; i < 5; i++) {
        print_id(i);
    }
}
int main() {
    std::thread threads[5];
    for (int i = 0; i < 5; i++) {
        threads[i] = std::thread(do_work);
    }
    for (auto& th : threads) {
        th.join();
    }
    return 0;
}

在調試這個程序時,當程序暫停在某個斷點處,你可以在 “線程” 面板中看到 5 個線程,每個線程都有自己的執(zhí)行狀態(tài)和調用棧。你可以選擇某個線程,然后使用單步執(zhí)行、繼續(xù)等調試操作,觀察該線程的執(zhí)行情況。

此外,VSCode 還支持設置線程特定的斷點。你可以在代碼的某一行上右鍵單擊,選擇 “條件斷點”,然后在彈出的對話框中,不僅可以設置條件表達式,還可以選擇 “線程 ID”,輸入你想要在哪個線程上觸發(fā)斷點的 ID。這樣,當指定的線程執(zhí)行到這一行時,斷點才會觸發(fā),方便你對特定線程進行調試 。

4.3遠程調試

在實際開發(fā)中,我們經常會遇到這樣的情況:代碼運行在遠程服務器上,或者在嵌入式設備等本地環(huán)境無法直接運行的平臺上,這時候就需要用到遠程調試。遠程調試允許我們在本地開發(fā)環(huán)境中,對遠程目標上運行的程序進行調試,就像程序在本地運行一樣方便。

使用 VSCode 進行遠程 GDB 調試,一般需要以下步驟:

⑴安裝必要擴展:在本地的 VSCode 中,點擊左側的 “擴展” 圖標,搜索并安裝 “C/C++” 擴展和 “Remote - SSH” 擴展。“C/C++” 擴展為 C/C++ 代碼的編輯和調試提供支持,而 “Remote - SSH” 擴展則是實現(xiàn)遠程連接的關鍵。

⑵連接到遠程服務器:點擊 VSCode 左下角的綠色圖標,選擇 “Remote-SSH: Connect to Host...” 選項,然后輸入遠程服務器的 SSH 連接信息,包括用戶名和主機名(IP 地址或域名)。如果需要使用私鑰進行連接,還需要配置私鑰路徑。連接成功后,VSCode 會在新窗口中打開遠程服務器的文件系統(tǒng),你可以在這個窗口中編輯和查看遠程服務器上的 C/C++ 代碼。

⑶配置遠程開發(fā)環(huán)境:確保在遠程服務器上安裝了 C/C++ 編譯器(如 gcc/g++)和 GNU Debugger(GDB)。如果沒有安裝,可以使用服務器系統(tǒng)的包管理器進行安裝,例如在 Ubuntu 系統(tǒng)中,可以使用sudo apt - get install build - essential gdb命令進行安裝。

⑷創(chuàng)建調試配置:在 VSCode 中,打開你的 C/C++ 代碼文件,點擊左側的調試圖標,然后點擊齒輪圖標以創(chuàng)建新的調試配置。選擇 “C++ (GDB/LLDB)” 作為調試環(huán)境,在調試配置中,配置 “program” 字段為編譯后的可執(zhí)行文件的路徑。如果你的程序需要傳遞命令行參數(shù),還可以在 “args” 字段中添加相應的參數(shù)。例如,以下是一個簡單的調試配置示例:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Remote C++ Debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "/path/to/your/executable",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "console": "integratedTerminal",
            "MIMode": "gdb",
            "miDebuggerServerAddress": "your_remote_server_ip:1234",
            "setupCommands": [
                {
                    "description": "Enable pretty - printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

其中,“miDebuggerServerAddress” 字段指定了遠程服務器的 IP 地址和調試端口(這里假設端口為 1234,你可以根據(jù)實際情況修改)。

⑸開始遠程 GDB 調試:在 C/C++ 代碼文件中設置斷點,然后點擊調試工具欄上的 “開始調試” 按鈕。VSCode 將通過 SSH 連接到遠程服務器,并啟動遠程 GDB 調試會話。此時,你就可以像在本地調試一樣,使用調試工具欄上的按鈕來執(zhí)行調試操作,如步進、繼續(xù)、停止等,查看遠程程序的執(zhí)行狀態(tài)和變量值 。通過遠程調試,我們可以方便地對運行在遠程服務器或其他設備上的程序進行調試,大大提高了開發(fā)和調試的效率。

4.3常見問題及解決方法

在使用 VSCode GDB 調試的過程中,可能會遇到一些常見問題,下面為你列舉并提供相應的解決方法:

①無法找到 GDB

這可能是因為 GDB 沒有正確安裝,或者安裝路徑沒有添加到系統(tǒng)環(huán)境變量中。你可以通過在命令行中輸入 “gdb -v” 來檢查 GDB 是否安裝成功。如果提示 “gdb 不是內部或外部命令”,說明 GDB 未正確配置。解決方法是重新安裝 GDB,并確保將 GDB 的安裝路徑添加到系統(tǒng)環(huán)境變量 PATH 中。例如,在 Windows 系統(tǒng)中,如果 GDB 安裝在 “C:\MinGW\bin” 目錄下,需要將該目錄添加到 PATH 變量中。

②調試配置錯誤

launch.json 文件中的配置錯誤可能導致調試無法正常啟動。比如,“program” 字段指定的可執(zhí)行文件路徑錯誤,或者 “MIMode” 設置不正確。解決這個問題的方法是仔細檢查 launch.json 文件中的各項配置,確保路徑、參數(shù)等設置正確無誤。可以參考前面提到的 launch.json 配置示例,根據(jù)自己的項目實際情況進行調整。

③斷點無效

有時設置了斷點,但程序運行時卻不會在斷點處暫停。這可能是因為源代碼和生成的可執(zhí)行文件不同步,例如代碼修改后沒有重新編譯。解決辦法是在設置斷點之前,確保代碼已經重新編譯,生成了最新的可執(zhí)行文件。另外,斷點位置也可能影響其有效性,如果斷點設置在不可執(zhí)行的代碼行,如注釋行或空行,自然不會生效,需要將斷點設置在有效的代碼行上。

④VSCode 無法連接 GDB 服務器

在進行遠程調試時,可能會遇到 VSCode 無法連接到 GDB 服務器的問題。這可能是由于網絡限制、端口被占用或者配置文件中的 IP 地址和端口設置錯誤。首先,檢查網絡連接是否正常,確保遠程服務器的 IP 地址和端口可以正常訪問。然后,檢查 launch.json 文件中的 “miDebuggerServerAddress” 字段,確保設置的 IP 地址和端口正確無誤。如果端口被占用,可以嘗試更換其他未被占用的端口 。同時,還要檢查防火墻設置,確保沒有阻止 VSCode 與 GDB 服務器之間的通信。

責任編輯:武曉燕 來源: 深度Linux
相關推薦

2010-08-04 18:03:27

NFS服務器

2021-06-23 06:30:14

H5 移動端前端開發(fā)

2010-04-23 14:04:23

Oracle日期操作

2024-05-07 09:01:21

Queue 模塊Python線程安全隊列

2013-04-15 10:48:16

Xcode ARC詳解iOS ARC使用

2013-06-08 11:13:00

Android開發(fā)XML解析

2009-07-04 11:05:48

Linux安全攻略

2021-04-23 20:59:02

ThreadLocal內存

2011-10-31 14:44:49

2009-02-20 11:43:22

UNIXfish全攻略

2009-12-14 14:32:38

動態(tài)路由配置

2009-10-19 15:20:01

家庭綜合布線

2014-03-19 17:22:33

2010-01-21 12:57:25

FC存儲交換機

2015-03-04 13:53:33

MySQL數(shù)據(jù)庫優(yōu)化SQL優(yōu)化

2022-10-21 11:30:42

用戶生命周期分析

2009-10-12 15:06:59

2009-07-04 11:26:12

unix應急安全攻略

2010-10-11 13:54:03

Windows Ser

2020-12-28 10:50:09

Linux環(huán)境變量命令
點贊
收藏

51CTO技術棧公眾號

欧洲av在线精品| 不卡av电影在线播放| 精品亚洲va在线va天堂资源站| 黄色一级片播放| 免费黄色在线视频网站| 久久国产剧场电影| 欧美激情视频网站| 久久丫精品忘忧草西安产品| 国产精品视频一区二区三区综合| 香蕉影视欧美成人| 亚欧精品在线| 色婷婷综合视频| 久久综合九色| 久久久噜噜噜久噜久久| 四虎国产成人精品免费一女五男| 6080亚洲理论片在线观看| 欧美在线色视频| 亚洲美免无码中文字幕在线| 色影院视频在线| 久久一二三国产| 国产精品加勒比| 97超碰人人草| 久久精选视频| 午夜精品一区二区三区在线视| 日本女人性生活视频| 杨幂一区二区三区免费看视频| 91麻豆精品国产自产在线观看一区 | 亚洲av鲁丝一区二区三区 | 国产精品一区免费视频| 国产精品极品尤物在线观看| 亚洲综合一二三| 亚洲国产一区二区三区在线播放 | 欧美精品亚洲二区| 无码人妻丰满熟妇区五十路百度| 日本三级在线观看网站| 一区免费观看视频| 日本精品国语自产拍在线观看| 日本精品一区二区在线观看| 精品无人区卡一卡二卡三乱码免费卡| 日韩av免费看| 天堂中文字幕在线观看| 亚洲激情网站| 高清欧美性猛交xxxx| 久久久久久久久久网站| 天天超碰亚洲| 俺也去精品视频在线观看| 黄色av片三级三级三级免费看| 精品一区三区| 亚洲欧美精品伊人久久| 国产美女精品久久| 深夜福利久久| 国产午夜精品一区二区三区| 美女洗澡无遮挡| 美女久久99| 亚洲天堂免费观看| 波多野结衣av在线观看| 精品国产乱码久久久久久果冻传媒| 日韩成人中文电影| 精品无码在线视频| 久久99国产精一区二区三区| 亚洲免费福利视频| 亚洲性猛交xxxx乱大交| 精品久久久久久久久久久aⅴ| 一区三区二区视频| 欧美一区二区三区观看| 天天天综合网| 色综合色综合久久综合频道88| 中文字幕av免费在线观看| 精品动漫3d一区二区三区免费| 欧美极品美女视频网站在线观看免费| 精品无码人妻一区二区三区品 | 国产视频www| 国产成人免费在线视频| αv一区二区三区| 欧美少妇bbw| 久久无码av三级| 亚洲精品国产精品国自产观看| 久久99精品久久| 亚洲午夜在线视频| 日韩人妻精品无码一区二区三区| 欧美电影免费观看高清完整| 欧美日韩国产bt| 中国男女全黄大片| 中文字幕精品影院| 精品国产一区二区三区久久久狼| 欧美久久久久久久久久久久| 亚洲最黄网站| 国产区精品视频| 性中国古装videossex| 91麻豆国产福利精品| 亚洲美女网站18| 国产探花在线观看| 在线视频欧美精品| 亚洲av综合色区无码另类小说| 欧美一级三级| 久久亚洲国产精品成人av秋霞| 九九热国产视频| 老汉av免费一区二区三区| 国产99视频精品免费视频36| 二人午夜免费观看在线视频| 亚洲免费电影在线| 一本久道综合色婷婷五月| 欧美特黄不卡| 在线亚洲欧美视频| 日本三级午夜理伦三级三| 免费观看日韩av| 精品欧美日韩| 97caopron在线视频| 色88888久久久久久影院野外| 26uuu国产| 欧美少妇性xxxx| 91精品国产777在线观看| 国产精品羞羞答答在线| 久久久亚洲精品一区二区三区| 热久久最新网址| 精品176极品一区| 亚洲精品资源美女情侣酒店| 欧美日韩成人免费观看| 免费在线看成人av| 蜜桃成人在线| av在线不卡免费| 欧美群妇大交群中文字幕| v8888av| 精品白丝av| 91午夜在线播放| 91高清在线| 欧美在线小视频| v8888av| 欧美三级视频| 亚洲精品欧美极品| 日本不卡在线| 欧美日韩在线一区二区| 国产免费无遮挡吸奶头视频| 国产精品日本欧美一区二区三区| 国产精品免费一区二区三区| 一二三四区在线观看| 69堂国产成人免费视频| 中国美女黄色一级片| 免费观看日韩电影| 亚洲一区二区精品在线| 福利一区和二区| 中文字幕亚洲无线码在线一区| 亚洲黄网在线观看| 国产亚洲视频系列| 日韩欧美黄色大片| av中文一区| 国产区亚洲区欧美区| 91激情在线| 91精品麻豆日日躁夜夜躁| 亚洲综合久久av一区二区三区| 另类小说一区二区三区| 在线成人性视频| www.久久草.com| 欧美激情a在线| 理论片中文字幕| 无码av免费一区二区三区试看 | 国产又黄又大又粗的视频| 国产精品久久久久久久久久免费看 | 97香蕉碰碰人妻国产欧美| 国产一区日韩欧美| 国产亚洲第一区| 男人皇宫亚洲男人2020| 在线成人中文字幕| 国产美女永久免费| 亚洲综合一二区| 亚洲av成人无码一二三在线观看| 亚洲视频成人| 神马影院我不卡| 欧洲亚洲精品| 欧美激情影音先锋| 深夜福利在线视频| 色诱视频网站一区| 亚洲aaa视频| 国产成人精品网址| 欧洲黄色一级视频| 久久一区二区中文字幕| 99re国产| 亚洲人体影院| 日韩视频亚洲视频| 亚洲aⅴ乱码精品成人区| 色先锋资源久久综合| 精品少妇一区二区三区密爱| 国产**成人网毛片九色| 日本精品久久久久中文字幕| 欧美成人自拍| 国产在线一区二| 97人人做人人爽香蕉精品| 欧美大尺度激情区在线播放| 日本福利片在线| 91精品国产综合久久小美女| 精品国产免费观看| 中文字幕一区二区三区四区| 人妻无码中文久久久久专区| 免费看日韩精品| 国产一二三在线视频| 青青草91久久久久久久久| 91精品国产综合久久久久久丝袜| 瑟瑟视频在线看| 日韩一区二区三区国产| 天堂√在线中文官网在线| 欧美三级韩国三级日本一级| 国产一级片网址| 国产精品久久久久婷婷| zjzjzjzjzj亚洲女人| 蜜臀av国产精品久久久久| 高清欧美精品xxxxx| 91成人看片| 日韩久久在线| 欧美激情影院| 97久久天天综合色天天综合色hd | 国产欧美精品久久| 男插女免费视频| 精品99在线| 久久久久资源| 99re热精品视频| 91精品在线观看视频| 三上悠亚一区二区| 91av在线免费观看视频| 欧美一卡二卡| 久久久精品国产| lutube成人福利在线观看| 日韩av在线网| 国产日韩欧美视频在线观看| 91国偷自产一区二区三区观看| 国产精品99re| 一区二区三区日韩欧美精品| 日本激情视频一区二区三区| 国产视频911| b站大片免费直播| 91视频.com| 久久久久国产精品无码免费看| 国产91丝袜在线播放九色| 91热视频在线观看| 九色porny丨国产精品| 欧美男女交配视频| 蜜桃久久久久久久| 日日躁夜夜躁aaaabbbb| 免费精品视频在线| 天天操,天天操| 蜜桃视频在线一区| 日本人视频jizz页码69| 日本网站在线观看一区二区三区| 精品视频一区二区在线| 性xx色xx综合久久久xx| 日本三级免费网站| 午夜亚洲福利在线老司机| www.中文字幕在线| 亚洲一区二区三区高清| 国产v片免费观看| 99伊人成综合| 大肉大捧一进一出好爽动态图| 欧美一级视频| mm1313亚洲国产精品无码试看| 午夜在线一区| 亚洲色图38p| 免播放器亚洲一区| 三级一区二区三区| 国产一区二区伦理片| 国产老头和老头xxxx×| 成人精品视频一区| 国内精品久久99人妻无码| 国产日产欧美一区二区三区| 日日操免费视频| 亚洲精品日韩一| 日韩成人高清视频| 日本韩国一区二区| 亚洲视频在线观看一区二区| 91精品国产一区二区三区| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的 | 国产精品国产一区二区| 日韩a级大片| 性欧美.com| 欧美一区高清| 欧美牲交a欧美牲交aⅴ免费下载| 日本中文字幕一区二区有限公司| 亚洲色图偷拍视频| 不卡一区在线观看| 国产第一页精品| 亚洲一区二区三区在线播放| 亚洲免费在线观看av| 欧美性xxxxxxxx| www.com欧美| 亚洲精品一区二区三区婷婷月| 一本一道波多野毛片中文在线 | 亚洲久久久久久久久久| 尤物网在线观看| 久久久久九九九九| 亚洲成av在线| av一区和二区| 欧美久久精品一级c片| 欧美a级免费视频| 丝袜美腿亚洲一区二区图片| 日韩精品aaa| 久久嫩草精品久久久精品一| 手机看片国产日韩| 婷婷综合五月天| 国产又粗又猛又爽又黄视频 | av成人毛片| 欧美成人乱码一二三四区免费| 丁香激情综合五月| 在线观看免费黄色网址| 亚洲国产另类精品专区| 中文字幕自拍偷拍| 精品视频在线播放| 最新国产露脸在线观看| 国产成人精品一区二区| 操欧美女人视频| 手机福利在线视频| 久久久精品五月天| 国产性猛交96| 亚洲欧美另类久久久精品| 国产午夜麻豆影院在线观看| 精品国产亚洲一区二区三区在线观看 | 爱情岛亚洲播放路线| 国产精品三级久久久久久电影| 国产亚洲成av人片在线观黄桃| 一个色的综合| 日韩不卡一区二区| 人妻熟女aⅴ一区二区三区汇编| 亚洲精品伦理在线| 97精品久久人人爽人人爽| 亚洲人成电影在线观看天堂色| caoprom在线| 亚洲综合社区网| 天天综合网网欲色| 天天操,天天操| 中文字幕第一页久久| www.国产com| 亚洲精品大尺度| 俺来俺也去www色在线观看| 97人摸人人澡人人人超一碰| 99精品国产一区二区三区| 欧美午夜性生活| 久久久高清一区二区三区| 欧美另类一区二区| 亚洲精品久久久久久久久| av资源中文在线天堂| 国产精品9999久久久久仙踪林| 欧美在线亚洲综合一区| 天堂在线资源视频| 国产亚洲污的网站| 日本视频www色| 正在播放亚洲1区| 久久91视频| 在线观看一区二区三区三州| 日本在线不卡视频| 一二三四在线观看视频| 欧美三级电影在线观看| 91青青在线视频| 国产欧美在线观看| 亚洲精品中文字幕乱码| 韩国一区二区在线播放| 亚洲男人的天堂在线观看| 99久久精品国产成人一区二区| 欧美精品免费在线观看| 国产suv精品一区| 国产成人无码精品久久久性色| 97精品国产露脸对白| 亚洲欧美另类在线视频| 国产亚洲视频在线| 婷婷成人av| 国产a级黄色大片| 成人一区二区三区中文字幕| 日韩精品在线不卡| 亚洲天堂av在线播放| 亚洲一区二区三区久久久| 青青草视频国产| 99re这里只有精品首页| 欧美另类高清videos的特点| 久久好看免费视频| 哺乳一区二区三区中文视频 | 日本少妇bbwbbw精品| 国产视频亚洲精品| www.国产精品| 亚洲一区 在线播放| 99久久精品国产观看| 中日精品一色哟哟| 九九热这里只有在线精品视| 欧美黄色影院| 日本在线播放一区二区| 亚洲图片欧美色图| 91成人高清| 国产精品夜夜夜一区二区三区尤| 久久精选视频| 欧美日韩大片在线观看| 亚洲欧美一区二区激情| 在线播放成人| 免费看国产一级片| 国产精品欧美精品| 日本高清视频www| 国产精品香蕉av| 在线欧美三区| 亚洲综合久久av一区二区三区| 亚洲精品久久7777777| 懂色av色香蕉一区二区蜜桃| 国模吧无码一区二区三区| 亚洲视频网在线直播| 欧美理论在线观看| 99在线观看| 捆绑调教美女网站视频一区|