Настройка VSCode для отладки C / C ++ в Windows 7 с помощью gcc, g ++ и gdb

Я следовал инструкциям от Вот. Установил 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) 4.9.2
  • g ++. exe (x86_64-win32-seh-rev201506, сборка mingwpy) 4.9.2

Обновить

  • В обсуждении в Комментарии, Меня попросили запустить GCC с m32 флаг, поскольку мой компилятор 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. Это так?

4

Решение

Я полагаю, что вы пытаетесь использовать отладчик кода VS (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
}
]
}
}
]
}
1

Другие решения

Если вы хотите, чтобы command.PickProcess работал ..

Это должно быть «:», а не «.» — следовательно:

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

Должен разобраться с вами 🙂

1

Я сталкивался с этой проблемой раньше. В моем случае компилятор сгенерировал релизное приложение по умолчанию. У него нет символов для отладки.

Поэтому, пожалуйста, убедитесь, что вы создали приложение для отладки.

удачи!

0
По вопросам рекламы [email protected]