【问题标题】:VSCode+LLDB debugging not working properly in Vagrant-UbuntuVSCode+LLDB 调试在 Vagrant-Ubuntu 中无法正常工作
【发布时间】:2021-11-02 12:21:55
【问题描述】:

我正在使用 Vagrant 启动一个 Ubuntu 虚拟机并在 Linux 中编译我的 C++ 代码。 Linux 版本为5.8.0-59-generic

makefile 构建命令是exec: main.o other_lib.o ${CXX} ${CXX_FLAGS} -lc++abi bin/main.o bin/other_lib.o -o bin/exec -g -fstandalone-debug。运行make exec./bin/exec后,程序可以成功运行。但是调试部分有问题。这是 LLDB 的 launch.json 配置:

{
    "name": "debug exec lldb",
    "type": "cppdbg",
    "request": "launch",
    "program": "/home/vagrant/bin/exec",
    "stopAtEntry": true,
    "cwd": "${workspaceFolder}",
    "environment": [],
    "externalConsole": false,
    "MIMode": "lldb",
    "miDebuggerPath": "/usr/bin/lldb-mi",
    "preLaunchTask": "debug exec",
    "setupCommands": [
        {
            "description": "Enable pretty-printing for gdb",
            "text": "-enable-pretty-printing",
            "ignoreFailures": true
        },
        {
            "text": "settings set target.run-args ${input:lldb-debugger-args}"
        }
    ]
}

我第一次使用F5 运行此调试配置时,vscode 提示miDebuggerPath invalid。发现系统中没有/usr/bin/lldb-mi的可执行文件,于是跑了sudo apt-get install lldb。这就是事情变得奇怪的地方:

  1. 我尝试通过VSCode运行调试过程,没有出现miDebuggerPath invalid错误。但是,在点击F5 后,终端将输出[1] + Done(127) "/usr/bin/lldb-mi" --interpreter=mi --tty=${DbgTerm} 0<"/tmp/Microsoft-MIEngine-In-ly4ql3cx.s1b" 1>"/tmp/Microsoft-MIEngine-Out-gfkz1mbe.fex" 并打印一个新的提示以侦听下一个命令。出现了 VSCode 的悬停调试工具栏,但有一个不断运行的进度条(见下文)。整个调试过程卡住了。

  2. /usr/bin/ 中使用lslldb-mi 文件显示为红色。使用ls -l /usr/bin/lldb-mi表示是断链,指向另一个断链lldb-mi-11

  3. /usr/bin/lldb 是一个现有的可执行文件。但是lldb-mi 似乎是lldb 的“机器接口”,我不确定使用lldb 作为miDebugger 是否可以工作。

我该如何解决这个问题(找到lldb-mi 的替代品或以某种方式解决lldb-mi 的链接断开问题)?

【问题讨论】:

    标签: c++ linux ubuntu visual-studio-code lldb


    【解决方案1】:

    lldb-mi 曾经是 lldb 项目的一部分,但它在没有维护者的情况下衰落了很长一段时间,最终它在 GitHub 上被分解成一个单独的包,希望作为一个独立的东西它会得到使用它的人的更多支持。可能有一个 apt-get 作为一个独立的包?不确定。但它仍然在 GitHub 上可用,所以如果一切都失败了,你可以自己获取并构建它。源代码在这里:https://github.com/lldb-tools/lldb-mi,其中有一个关于如何构建它的 README。

    但如果您主要对使用 VSCode 感兴趣,则可以尝试使用 lldb-vscode。它没有使用 MI 接口(在这一点上已经很长了),而是使用了 MicroSoft 自己的调试协议,目前正在积极开发中。 lldb-vscode 二进制文件确实是作为常规 lldb 构建的一部分构建的。

    【讨论】:

    • 我从使用 VirtualBox 转移到使用 Docker 作为 Vagrant 的主机,它以某种方式工作了?谢谢
    猜你喜欢
    • 2020-03-20
    • 1970-01-01
    • 2015-04-02
    • 2021-06-05
    • 2023-04-07
    • 2015-04-13
    • 2015-10-26
    • 2013-05-03
    • 1970-01-01
    相关资源
    最近更新 更多