C++ 在没有GDB的情况下使用VS代码调试GNU

C++ 在没有GDB的情况下使用VS代码调试GNU,c++,command-line,gdb,g++,visual-studio-code,C++,Command Line,Gdb,G++,Visual Studio Code,周末,我通过MSYS2 bash安装了一个gcc。我在VS代码中设置了它,并使其正常工作。我甚至让GDB工作(是的,我知道这是一个调试器)。但是,我的主要问题是,是否可以使用VS代码中的调试函数而不是GDB进行调试。按F5它调出launch.json文件,并给我launch:program'输入程序名,例如c:\School\a.exe'不存在。经过一些研究后,我看到你给它一个文件给args,允许它在调试器中运行。当我这样做的时候,我似乎既不能给它正确的文件,也不能使它整体工作。我也在使用a.e

周末,我通过MSYS2 bash安装了一个gcc。我在VS代码中设置了它,并使其正常工作。我甚至让GDB工作(是的,我知道这是一个调试器)。但是,我的主要问题是,是否可以使用VS代码中的调试函数而不是GDB进行调试。按
F5
它调出launch.json文件,并给我
launch:program'输入程序名,例如c:\School\a.exe'不存在
。经过一些研究后,我看到你给它一个文件给args,允许它在调试器中运行。当我这样做的时候,我似乎既不能给它正确的文件,也不能使它整体工作。我也在使用
a.exe
,而不是
a.out
。我不确定这是否有效

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "enter program name, for example ${workspaceFolder}/a.exe",
            "args": ["C:\\School\\CSE340\\project2\\main.cpp"],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "/path/to/gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

VS代码没有内部调试器()。您需要使用GDB或visual studio调试器(如果有后者)

launch.json
中,您需要修改以下条目:

“程序”
:这是要调试的程序的路径,即编译的程序(可以是项目文件夹的相对路径)

“miDebuggerPath”
:这是到GDB的路径

“args”
:这些是参数,您希望传递给程序进行调试,也就是说,您可以将其保留为空

因此,您的
launch.json
文件如下所示:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}\\CSE340\\project2\\main.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\MinGW\\bin\\gdb.exe", // Path where your gdb.exe is located
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}
${workspaceFolder}
是工作区的路径变量,似乎指向
C:\\School\\\
,因此可能需要修改
“程序”
的值,以指向要调试的应用程序。您还可以指定程序的绝对路径

另外,不要忘记使用调试标志(
-g
)编译代码,GDB需要这些标志来逐步完成代码。例如:
g++-g main.cpp-o main.exe

我不完全确定这是真的。我知道某些代码支持cpp的逐步调试。我的问题是我正在尝试使用GDB来实现它。我只是不确定如何给它我的文件来开始正确的调试。@AustinEfnor你在哪里读到没有gdb的调试?我在网上找不到关于它的任何东西。还说VS代码只使用调试适配器。顺便说一句:你为什么不想使用gdb?我记得在某处看到有人这样做。他们提供了我所做的基本内容,但他们设法将GDB传递到VS代码调试器中,允许他们像在VisualStudio中一样单步执行(单步执行、单步执行等),所有操作都在VS代码中进行。这是我想要达到的,因为这是我喜欢的,也是我希望我的工作流程是怎样的。此外,从这个意义上说,使用它可以让我在右边的debugger选项卡中查看变量,并查看调用的堆栈,也可以是ect。就是搞不懂:(@AustinEfnor然后我们一直在谈论对方:这正是
launch.json
文件的作用。VS code调用GDB(或使用相同protocoll的任何其他调试器)作为调试器的GUI。我编辑了我的答案以获取更多信息。太棒了!这让我达到了我想要的程度,但是当我调试并尝试“进入”或任何步骤时,它会导致
无法打开“crtexe.c”:找不到文件(file:///c:/repo/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/crtexe.c)
。我也改变了
“stopAtEntry”
设置为true,以便显示GUI,但这是当它在单步执行时中断的情况。另外,顺便说一句,它为我提供了在VS代码中创建此文件的选项,我只是担心这会导致更多问题。