【问题标题】:GDB can't debug running process using VS Code but can through command lineGDB 无法使用 VS Code 调试正在运行的进程,但可以通过命令行
【发布时间】:2021-02-19 16:31:04
【问题描述】:

我正在尝试在 Windows 上调试由 python 脚本启动的 C++ 应用程序。我可以从命令行使用 GDB 附加到该进程,并且一切正常。

但是,当尝试使用 VS Code 附加 GDB 时,它管理附加,但所有断点都卡在 Attempting to bind to the breakpoint... 并尝试在调试控制台中执行命令返回 Unable to perform this action because the process is running.

这是我的 launch.json 配置:

{ 
        "name": "(gdb) Attach",
        "type": "cppdbg",
        "request": "attach",
        "program": "${workspaceFolder}\\build\\program.exe",
        "processId": "${command:pickProcess}",
        "MIMode": "gdb",
        "miDebuggerPath": "C:\\Program Files (x86)\\mingw-w64\\i686-8.1.0-posix-dwarf-rt_v6-rev0\\mingw32\\bin\\gdb.exe",
        "setupCommands": [
            {
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": true
            }
        ]
    }

我假设 VS 代码在启动 GDB 时做了一些额外/奇怪的事情,有没有办法解决这个问题?

【问题讨论】:

  • 我遇到了完全相同的问题。想知道你是否在这里找到了工作。我注意到的可能是一样的。如果您在启用断点的情况下附加或启动,则 vs-code 可以正常工作,但是如果您正在运行并且设置了断点等,那么这将不起作用。我希望至少有一种方法可以用 ctrl-c 暂​​停调试器,从而允许我设置必要的断点。

标签: c++ gcc visual-studio-code gdb


【解决方案1】:

我知道这是一个老问题,但我遇到了同样的问题,让我来到这里。
对我来说,罪魁祸首是在launch.json中的“miDebuggerPath”
尽管在我无数次检查时路径看起来正确,但它与从命令行调用的路径不同(我在安装了许多 gdb 版本的环境中使用 Linux 机器)
尝试找到从命令行调用的gdb路径,并将其添加到调试配置文件中的上述参数中。

【讨论】:

    【解决方案2】:

    MinGW 上的 GDB 有一些 limitations:

    Cygwin 和 MinGW 上的 GDB 不能中断正在运行的进程。设置一个 应用程序运行时的断点(不停止在 调试器),或暂停正在调试的应用程序,按 Ctrl-C 应用程序的终端。

    确保在 VS Code 中设置断点之前使用 Ctrl-C 停止应用程序。另请参阅相关问题:https://github.com/Microsoft/vscode-cpptools/issues/595

    【讨论】:

    • 这显然不是 GDB 限制造成的。如原始问题中所述,我可以使用完全相同的 GDB 从命令行进行调试。所以这显然是 VS Code 中的错误或 VS Code 配置问题。
    • 如何通过 vscode 向应用发出 ctrl-c?
    猜你喜欢
    • 2011-01-19
    • 2021-12-09
    • 2011-12-08
    • 2018-01-17
    • 2020-05-03
    • 2016-11-23
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多