VS代码忽略了C++调试中的断点

VS code is ignoring the breakpoint in c++ debugging

我正在 VS Code 中调试 C++ 代码,但它不会在断点处停止并可视化变量、监视和调用堆栈,这是它应该做的。而不是这个,它在调试控制台打印这个:

Breakpoint 1, 0x000000000040074a in main ()
[Inferior 1 (process 9445) exited normally]
The program '/home/hashir/x/a.out' has exited with code 0 (0x00000000)

这里是 launch.json 文件:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "/home/hashir/x/a.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "/home/hashir/x/",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

使用 -g 标签和 g++/clang

编译程序

我发现如果您的源代码文件名包含空格,如 "Binary Search.cpp",VSCode 将忽略断点,而不管 "stop at entry" 配置如何。从我的源文件名中删除空格有效,尽管它们的路径包含空格。例如 "C++ Exercises/BinarySearch.cpp" 似乎是有效的。

this GitHub 上打开的问题中,建议非 ascii 字符可能会导致此类问题。

这个问题简直毁了我的一天。事实证明,我所要做的只是 Terminal > Run Build TaskCtrl+Shift + B 然后开始调试。

默认的 launch.json 文件有这一行:
"program": "${workspaceFolder}/a.out",
但这将 运行 a.out 开始调试,如果你配置 tasks.json 文件只有一个 cpp 文件,它将有这样的行:

                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"  

这将创建一个与您当前文件同名的可执行文件。
要么更改 tasks.json 以创建一个 a.out 文件,要么使用当前文件的无扩展名更改 launch.json 文件。

launch.json:

"program": "${workspaceFolder}/<stripped current file name>", 


tasks.json:

                "-o",
                "${fileDirname}/a.out"