我正在尝试在MacOS Catalina上使用lldb和VSCode设置C ++调试器。我能够成功编译我的源代码,以输出可执行文件和.dSYM文件,并通过VSCode launch.json和task.json文件全部启动调试器。但是,我无法在编辑器中设置断点并将其反映在调试器窗口中。该程序只是一直运行。
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": "g++ build and debug ARMsim",
"type": "cppdbg",
"request": "launch",
"program": "ARMsim",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "lldb",
"preLaunchTask": "g++ build ARMsim"
}
]
}
tasks.json
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "g++ build ARMsim",
"command": "/usr/bin/g++",
"args": [
"-g",
"${workspaceFolder}/ARMsim.cpp",
"-o",
"${workspaceFolder}/ARMsim"
],
"options": {
"cwd": "/usr/bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build"
}
]
}
Program source code, note breakpoints on lines 9 and 10.
我唯一的想法是,这与.dSYM文件有关。我的断点未在其中反映出来,或者未将其装入lldb,或者我误解了所有这些的工作原理。我看过其他有关此问题的StackOverflow帖子,但实际上我正在使用-g标志进行编译,并且正在创建我的符号文件。
答案 0 :(得分:0)
请注意,您可以设置断点。
对我来说起作用的是launch.json中的程序项需要如下所示:
"program": "${workspaceFolder}/ARMsim"
没有完全限定的路径,出现错误并且无法实际调试任何东西。
仅进行此更改,调试器便会启动,打开外部终端窗口,使源文件处于活动状态,并且在主函数的第一行停止我(因为stopAtEntry为true)。继续在断点处停止。
我能想到的另一件事是确保始终以VS Code打开文件夹,而不是单个文件。否则,VS Code将不知道工作空间文件夹是什么。
我假设其他所有设置均已正常运行。 XCode命令行工具,适当的扩展名等。如果您还没有替换库存的g ++(我根本不建议这样做),那么您实际上就是在调用clang ++。
和另外一个小字。从C ++ 11开始,您不必将文件名转换为C字符串。