默认 clang++.exe 环境生成的调试 launch.json 文件使用的 lldb-mi.exe 问题

clanglldb 通过 pacman 安装。

pacman -Sy mingw-w64-x86_64-clang
pacman -Sy mingw-w64-x86_64-lldb

F5 进行调试,选择 clang++ 自动生成的 tasks.jsonlaunch.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 来构建。

构建完毕,在 buildsrc目录下,就有 lldb-mi.exe,复制到 lldb.exe 所在的目录,便能正常的进行调试。

删除目录下的 .vscode 文件夹,按 F5,环境选 GDB/LLDB

CodeSys V3使用DLL文件 codesys库文件_CodeSys V3使用DLL文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PEYZPCrN-1617551299628)(D:\project\code_project\pic\vscode\debug\lldb.jpg)]

配置选 clang++.exe.

CodeSys V3使用DLL文件 codesys库文件_g++_02

TERMINAL 窗口输出调试的参数,显示正常进入调试模式。

CodeSys V3使用DLL文件 codesys库文件_g++_03

DEBUG CONSOLE 窗口可用来执行 lldb 的调试命令。

CodeSys V3使用DLL文件 codesys库文件_g++_04

此时,在 DEBUG CONSOLE 下执行调试命令,需要使用 -exec command.

问题

部分调试信息显示的不正确,这里 vec 的大小正确的为 13,截图处显示的是 1;原因未明。

规避 lldb-mi.exe

使用CodeLLDB

首先,在菜单 Terminal -> Configure Tasksclang++ 生成一个单独 tasks.json 文件。

然后,在菜单 Run -> Add configuration 生成 launch.json 时,选择环境里会多一个LLDB的选项,使用这个选项生成的 launch.json 配合第一步生成的 tasks.json就能使用 lldb 进行调试。

CodeSys V3使用DLL文件 codesys库文件_CodeSys V3使用DLL文件_05

生成的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 窗口是没有输出的。

CodeSys V3使用DLL文件 codesys库文件_json_06

此时,在 DEBUG CONSOLE 下执行调试命令,直接使用 command 即可,比如图中的运行到下一行 n 命令。