使用gcc,g ++和gdb在Window 7上为C / C ++调试设置VSCode

我在这里遵循指示。 安装了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 。 当我运行debug时,它提供以下输出:

 -------------------------------------------------------------------------------- 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给出了这样的错误。 这里的评论用-m32选项解释了它。 它要求在编译时添加i686-w64-mingw32/x86_64-w64-mingw32标志。 但是gcc -x86_64-w64-mingw32 helloworld.c给出了language not recognized错误, gcc -i686-w64-mingw32 helloworld.c给出了unrecognized command line option 。 我做错了什么?
  • 另外这篇文章说调试目前只能用于Linux而不能用于Windows。 是这样吗?

我相信你正在尝试使用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 } ] } } ] } 

如果你想command.PickProcess工作..

它应该是’:’而不是’。’ – 因此:

 { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } 

应该排除你:)

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

因此,请确保生成调试应用程序以进行调试。

祝好运!