使用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:我如何保持对属于该线程的调用堆栈的关注?
2条答案
按热度按时间z31licg01#
对Q1的回答:根据this SO thread,将
set scheduler-locking on
添加到gdb将使您在单步执行时保持在同一线程中。不确定Q2,但这应该给予你继续所需的东西。我想显示了当前线程的调用堆栈,但我不确定。
cx6n0qe32#
我发现只有一个选项可以做到这一点。在VS代码调试控制台中,当您在断点处停止时,需要运行命令
不幸的是,我找不到如何在开始调试之前设置
scheduler-locking
选项。