debugging 使用vscode调试多线程C程序时的Step-over切换线程

bogh5gae  于 2023-04-06  发布在  Vscode
关注(0)|答案(2)|浏览(354)

使用VSCode的调试器单步执行多线程C程序,在每一步都切换线程。
调试器跳转的线程运行如下代码:

do {
    rc = nanosleep(&rqtp, &rem);
    rqtp = rem;
} while (rc < 0 && errno == EINTR);

我的调试器配置如下:“版本”:“0.2.0”,“配置”:[

{
        "name": "solid Launch",
        "type": "cppdbg",
        "request": "launch",
        "program": "${workspaceRoot}/program",
        "args": ["-a","-b"],
        "stopAtEntry": true,
        "cwd": "${workspaceRoot}",
        "environment": [],
        "externalConsole": true,
        "linux": {
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    }

Q1:我如何让调试器坚持运行到断点的线程?
Q2:我如何保持对属于该线程的调用堆栈的关注?

z31licg0

z31licg01#

对Q1的回答:根据this SO thread,将set scheduler-locking on添加到gdb将使您在单步执行时保持在同一线程中。
不确定Q2,但这应该给予你继续所需的东西。我想显示了当前线程的调用堆栈,但我不确定。

cx6n0qe3

cx6n0qe32#

我发现只有一个选项可以做到这一点。在VS代码调试控制台中,当您在断点处停止时,需要运行命令

-exec set scheduler-locking step

不幸的是,我找不到如何在开始调试之前设置scheduler-locking选项。

相关问题