在Windows 7上设置VSCode进行C/C++调试,使用gcc、g++和gdb。

3

我按照这里的说明进行操作。安装了cpptools,并创建了tasks.json文件,其内容如下:

{
    "version": "0.1.0",
    "command": "g++",
    "isShellCommand": true,
    "showOutput": "always",
    "args": ["-g", "helloworld.c"]
}

并且使用以下内容打开launch.json文件:

{
    "version": "0.2.0",
    "configurations": [

        {
            "name": "C++ Launch (Windows)",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${workspaceRoot}/a.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceRoot}",
            "environment": [],
            "externalConsole": false,
            "windows": {
                "MIMode" : "gdb",
                "miDebuggerPath": "C:\\Mahesh\\Program Files\\mingw\\MinGW\\bin\\gdb.exe"
            }

        },
        {
            "name": "C++ Attach (Windows)",
            "program": "${workspaceRoot}/a.exe",
            "type": "cppvsdbg",
            "request": "attach",
            "processId": "${command.pickProcess}",
            "windows": {
                "MIMode" : "gdb",
                "miDebuggerPath": "C:\\Mahesh\\Program Files\\mingw\\MinGW\\bin\\gdb.exe"
            }
        }
    ]
}

当我按下 Ctrl+Shift+B 时,代码会生成 a.exe。当我运行调试时,它会输出以下内容:
--------------------------------------------------------------------------------
You may only use the C/C++ Extension for Visual Studio Code with Visual Studio
Code, Visual Studio or Xamarin Studio software to help you develop and test your
applications.
--------------------------------------------------------------------------------
Loaded 'C:\Mahesh\repos\VSCodeC\polyaddition\a.exe'. Symbols are not loaded.
Loaded 'C:\Windows\System32\ntdll.dll'. Symbols are not loaded.
Loaded 'C:\Windows\System32\kernel32.dll'. Symbols are not loaded.
Loaded 'C:\Windows\System32\KernelBase.dll'. Symbols are not loaded.
Loaded 'C:\Windows\System32\sysfer.dll'. Symbols are not loaded.
Loaded 'C:\Windows\System32\msvcr100.dll'. Symbols are not loaded.
Loaded 'C:\Windows\System32\QIPCAP64.dll'. Symbols are not loaded.
Loaded 'C:\Windows\System32\oleaut32.dll'. Symbols are not loaded.
Loaded 'C:\Windows\System32\ole32.dll'. Symbols are not loaded.
Loaded 'C:\Windows\System32\msvcrt.dll'. Symbols are not loaded.
Loaded 'C:\Windows\System32\gdi32.dll'. Symbols are not loaded.
Loaded 'C:\Windows\System32\user32.dll'. Symbols are not loaded.
Loaded 'C:\Windows\System32\lpk.dll'. Symbols are not loaded.
Loaded 'C:\Windows\System32\usp10.dll'. Symbols are not loaded.
Loaded 'C:\Windows\System32\rpcrt4.dll'. Symbols are not loaded.
Loaded 'C:\Windows\System32\imm32.dll'. Symbols are not loaded.
Loaded 'C:\Windows\System32\msctf.dll'. Symbols are not loaded.
The thread 9524 has exited with code 0 (0x0).
Hello World!!!
The program '[7876] a.exe' has exited with code 0 (0x0).

但是这段代码没有命中我在代码中设置的调试点。你可以看到,它正在打印“Hello World !!!” 。我该如何配置才能在调试时逐步执行代码?

环境:

  • 程序'[7876]a.exe'已退出,代码为0(0x0),配置为“i686-pc-mingw32”。
  • gcc.exe(x86_64-win32-seh-rev201506,mingwpy build)4.9.2
  • g++.exe(x86_64-win32-seh-rev201506,mingwpy build)4.9.2

更新

  • 评论中的讨论中,我被要求使用m32标志运行gcc,因为我的编译器是64位的,它可能会生成64位二进制文件。 但是gcc -m32 helloworld.c会产生错误,类似于这个。这里的评论解释了这一点,需要在编译时添加i686-w64-mingw32 / x86_64-w64-mingw32标志。 但是gcc -x86_64-w64-mingw32 helloworld.c会产生“未识别的语言”错误,gcc -i686-w64-mingw32 helloworld.c会产生“未识别的命令行选项”错误。 我做错了什么?
  • 此外,这篇文章说,目前只能在Linux上进行调试,而在Windows上不行,是真的吗?

你需要设置调试符号的路径。symbolSearchPath=C:\\path_1;D:\\path_2;etc... - Ingenioushax
为配置 launch.json,这是一篇很好的 GitHub VSCode 小文章。希望能对您有所帮助。https://github.com/Microsoft/vscode-cpptools/blob/master/launch.md - Ingenioushax
@Ingenioushax,但是那些调试符号在哪里呢?就像我所说的,在我的情况下,gcc -g helloworld.c没有生成任何调试符号。 - Mahesha999
注意Mahesh,你已经在“Program Files”中安装了Mingw <-- 这是一个带有空格的文件夹。这可能会导致一些神秘的问题;应该安装到C:\mingw。 - rdtsc
3个回答

1
如果您想让command.PickProcess起作用...
应该使用“:”而不是“.” - 因此:
{
    "name": ".NET Core Attach",
    "type": "coreclr",
    "request": "attach",
    "processId": "${command:pickProcess}"
}

应该能解决你的问题 :)

1
我相信您正在尝试使用VS Code调试器(cppvsdbg)而不是gdb(cppdbg)。对于我来说,这个修改过的launch.json与TDM-GCC和gdb作为调试器一起使用。
{
"version": "0.2.0",
"configurations": [
    {
        "name": "C++ Launch",
        "type": "cppdbg",
        "request": "launch",
        "args": [],
        "stopAtEntry": false,
        "cwd": "${workspaceRoot}",
        "environment": [],
        "externalConsole": true,

        "linux": {
            "program": "${workspaceRoot}/a.out",
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        },
        "osx": {
            "MIMode": "lldb"
        },
        "windows": {
            "miDebuggerPath": "C:\\TDM-GCC-64\\bin\\gdb.exe",
            "program": "${workspaceRoot}\\a.exe",
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    },
    {
        "name": "C++ Attach",
        "miDebuggerPath": "C:\\TDM-GCC-64\\bin\\gdb.exe",
        "type": "cppdbg",
        "request": "attach",
        "program": "${workspaceRoot}/a.exe",
        "processId": "${command:pickProcess}",
        "linux": {
            "MIMode": "gdb",
            "program": "${workspaceRoot}/a.out",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        },
        "osx": {
            "MIMode": "lldb"
        },
        "windows": {
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\TDM-GCC-64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    }
    ]
}

0

我以前也遇到过这个问题。在我的情况下,编译器默认生成了一个发布应用程序。它没有调试符号。

因此,请确保您生成了一个用于调试的调试应用程序。

祝你好运!


这是什么意思? - ifconfig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接