Настройка 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. Когда я запускаю отладку, он дает следующий вывод:

--------------------------------------------------------------------------------
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. Это так?

person Mahesha999    schedule 10.03.2017    source источник
comment
Вам нужно установить путь для символов отладки. symbolSearchPath=C:\\path_1;D:\\path_2;etc...   -  person Ingenioushax    schedule 10.03.2017
comment
Хорошая небольшая запись GitHub VSCode для настройки launch.json. Надеюсь, это немного поможет. github.com/Microsoft/vscode-cpptools/blob/master/launch. Мэриленд   -  person Ingenioushax    schedule 10.03.2017
comment
@Ingenioushax, но где эти символы отладки? Как я уже сказал, в моем случае gcc -g helloworld.c не генерирует никаких символов отладки.   -  person Mahesha999    schedule 10.03.2017
comment
Обратите внимание, Махеш, у вас установлен Mingw в Program Files ‹ -- папка с пробелом. Это может вызвать загадочные проблемы; он должен быть установлен в C:\mingw.   -  person rdtsc    schedule 10.04.2017


Ответы (3)


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

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

Это должно быть ':', а не '.' - следовательно:

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

Надо бы разобраться :)

person andylockran    schedule 06.10.2017

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

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

удачи!

person Yuanhui    schedule 14.06.2017
comment
Что это должно означать? - person ifconfig; 07.09.2017