@popov654
Специалист в области веб-технологий

VS Code творит лютую дичь при компиляции и отладке?

65aa3af1b086e367795399.png
У меня только один вопрос: какого хрена?
Я и про несоответствие реальной точки останова отображению (не впервые такое уже вижу), и про то, почему вообще у меня уже 4-ый раз подряд программа упорно заходит в закомменченную функцию. Пробовал несколько раз перезапускать VS Code, не помогло. Также удалял все .exe и .o файлы в папке проекта (последних, впрочем, и так не было).

Кстати, вопрос вдогонку: можно как-то сделать, чтобы отладчик GDB не останавливался на вызовах функции free()? Сейчас он постоянно это делает, и я ничего не могу с этим сделать, очень мешает.

Вот содержимое моих конгфигов:

tasks.json
{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe build main.cpp",
            "command": "E:\\msys64\\ucrt64\\bin\\g++.exe",
            "args": [
                "-std=c++20",
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "alphacrypt\\md5.c",
                "alphacrypt\\acp.c",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "Task generated by Debugger."
        },
        {
            "type": "cppbuild",
            "label": "C: gcc.exe build main.c",
            "command": "E:\\msys64\\ucrt64\\bin\\gcc.exe",
            "args": [
                "-fdiagnostics-color=always",
                "${file}",
                "alphacrypt\\md5.c",
                "alphacrypt\\acp.c",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}c.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}


launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(Windows) Launch",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",
            "args": [
                "file.txt",
                "-o",
                "out.txt"
            ],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "console": "externalTerminal"
        },
        {
            "name": "(Windows) Build & Launch",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${workspaceFolder}/${fileBasenameNoExtension}c.exe",
            "args": [
                "file.txt",
                "-o",
                "out.txt"
            ],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "console": "externalTerminal",
            "preLaunchTask": "C: gcc.exe build main.c"
        },
        {
            "name": "C/C++: g++.exe build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "E:\\msys64\\ucrt64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "Set Disassembly Flavor to Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++.exe build main.cpp"
        },
        {
            "name": "C: gcc.exe build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "E:\\msys64\\ucrt64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "Set Disassembly Flavor to Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C: gcc.exe build main.c"
        }
    ]
}

Отладку я запускаю так: выбираю в редакторе вкладку с файлом main.c и нажимаю на кнопку в левой панели отладки с зелёным треугольником, при этом в списке выбран пункт "C: gcc.exe build and debug active file".

Вывод в терминале:
PS C:\Users\Alex\Documents\cpp\Lessons>  & 'c:\Users\Alex\.vscode\extensions\ms-vscode.cpptools-1.18.5-win32-x64\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-vuh1vkuc.4aa' '--stdout=Microsoft-MIEngine-Out-jgtyslgs.41t' '--stderr=Microsoft-MIEngine-Error-gfblkaem.lmp' '--pid=Microsoft-MIEngine-Pid-txrdgupb.5ud' '--dbgExe=E:\msys64\ucrt64\bin\gdb.exe' '--interpreter=mi'
  • Вопрос задан
  • 3484 просмотра
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Это называется "оптимизируюший компилятор". Он может выкинуть какие-то строчки, часть кода переписать и перетасовать. Соптимизировать по своему усмотрению. Поэтому для отладки используют специальные debug сборки. Установите компилятору флаг -O0, чтобы отлкючить оптимизацию.

В закоменченную фунцию он может заходить, если вы не перекомпилировали перед запуском.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@stasenso
Забудьте task.json как страшный сон. И замените его на CMakeLists.txt. А расширение CMake Tools для vscode позволит выбирать из выпадающего списка конфигурацию сборки, а также компилятор.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы