GDB 无法通过 VS Code 调试正在运行的进程,但可以通过命令行进行调试。

10

我正在尝试在Windows上调试一个由Python脚本启动的C++应用程序。 我能够使用命令行中的GDB附加到进程,并且一切正常。

然而,当尝试使用VS Code附加GDB时,它可以附加,但所有断点都停留在“尝试绑定断点…”,并且尝试在调试控制台中执行命令会返回“无法执行此操作,因为该进程正在运行。”。

这是我的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 Code启动GDB时,它会执行一些额外或奇怪的操作。有没有办法解决这个问题?


我遇到了完全相同的问题。想知道你是否找到了解决方法。我注意到可能是相同的问题。如果你附加或启动时启用断点,那么vs-code就可以正常工作,但是如果你正在运行并设置断点等,则无法正常工作。我希望至少有一种方法可以通过ctrl-c暂停调试器,从而允许我设置必要的断点。 - Gr-Disarray
2个回答

0

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


-2

MinGW上的GDB有一些限制

Cygwin和MinGW上的GDB无法中断正在运行的进程。要在应用程序正在运行(未在调试器下停止)时设置断点,或者要暂停正在调试的应用程序,请在应用程序的终端中按Ctrl-C。

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


1
这显然不是由于GDB的限制引起的。如原问题所述,我能够使用完全相同的GDB从命令行调试。因此,这显然是VS Code的一个错误或者是VS Code配置问题。 - user2005848
如何通过VSCode向应用程序发出Ctrl-C信号? - Gr-Disarray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接