使用VSCode的调试器步进多线程C程序会在每一步都切换线程。
调试器跳转的线程运行如下代码:
do {
rc = nanosleep(&rqtp, &rem);
rqtp = rem;
} while (rc < 0 && errno == EINTR);
我的调试器配置如下: &#34;版本&#34;:&#34; 0.2.0&#34;, &#34;配置&#34;:[
{
"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:如何将焦点集中在属于该线程的callstack上?
答案 0 :(得分:0)
Q1 的答案:根据this SO thread,在 gdb 中添加 set scheduler-locking on
可以让你在单步时停留在同一个线程中。
不确定第 2 季度的情况,但这应该为您提供继续所需的信息。我认为显示了当前线程的调用堆栈,但我不确定。