默认 clang++.exe 环境生成的调试 launch.json 文件使用的 lldb-mi.exe 问题
clang
和 lldb
通过 pacman
安装。
pacman -Sy mingw-w64-x86_64-clang
pacman -Sy mingw-w64-x86_64-lldb
F5 进行调试,选择 clang++
自动生成的 tasks.json
和 launch.json
,使用的调试器是 lldb-mi.exe
,通过 msys 源安装的 clang
没有这个文件,google 一番llvm
已经将这个工具单独的剥离出去。
clone
源码。
cd lldb-mi
mkdir build && cd build
cmake -D CMAKE_C_COMPILER=clang -D CMAKE_CXX_COMPILER=clang++ -G "MSYS Makefiles" ..
make
polly
库依赖问题
cmake
执行的时候,会报错:
The imported target "PollyISL" references the file "D:/msys64/mingw64/lib/libPollyISL.a" but this file does not exist. Possible reasons include:
原因是依赖polly
库,安装即可。
pacman -Sy mingw-w64-x86_64-polly
MSYS Makefiles
生成器
MSYS Makefiles
生成器使用 make 来构建,如果是MinGW Makefiles
生成器,使用 mingw32-make
来构建。
构建完毕,在 build
的 src
目录下,就有 lldb-mi.exe
,复制到 lldb.exe
所在的目录,便能正常的进行调试。
删除目录下的 .vscode 文件夹,按 F5,环境选 GDB/LLDB
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PEYZPCrN-1617551299628)(D:\project\code_project\pic\vscode\debug\lldb.jpg)]
配置选 clang++.exe
.
TERMINAL
窗口输出调试的参数,显示正常进入调试模式。
DEBUG CONSOLE
窗口可用来执行 lldb
的调试命令。
此时,在 DEBUG CONSOLE
下执行调试命令,需要使用 -exec command
.
问题
部分调试信息显示的不正确,这里 vec
的大小正确的为 13,截图处显示的是 1;原因未明。
规避 lldb-mi.exe
首先,在菜单 Terminal
-> Configure Tasks
为 clang++
生成一个单独 tasks.json
文件。
然后,在菜单 Run
-> Add configuration
生成 launch.json
时,选择环境里会多一个LLDB
的选项,使用这个选项生成的 launch.json
配合第一步生成的 tasks.json
就能使用 lldb
进行调试。
生成的launch.json
如下。需要手动修改可执行文件的名字:program
项和添加调试前执行的任务:preLaunchTask
项。
{
// 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": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/${fileBasenameNoExtension}.exe", //手动改<your program>为${fileBasenameNoExtension}.exe
"args": [],
"cwd": "${workspaceFolder}",
"preLaunchTask": "C/C++: clang++.exe 生成活动文件" //本句前置执行的任务为手动添加,任务的名称和tasks.json中label值保持一致。
},
]
}
此时进入调试模式,只有 debug console 有输出,terminal 窗口是没有输出的。
此时,在 DEBUG CONSOLE
下执行调试命令,直接使用 command
即可,比如图中的运行到下一行 n
命令。