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 Task
或 Ctrl+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"
我正在 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 Task
或 Ctrl+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"