使用 vscode 调试多线程 C 程序时单步切换线程

Posted

技术标签:

【中文标题】使用 vscode 调试多线程 C 程序时单步切换线程【英文标题】:Step-over switches thread while debugging multi-threaded C program with vscode 【发布时间】:2017-12-26 00:44:10 【问题描述】:

使用 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:如何保持对属于该线程的调用堆栈的关注?

【问题讨论】:

【参考方案1】:

对Q1的回答:根据this SO thread的说法,在gdb中添加set scheduler-locking on可以让你在单步执行时留在同一个线程中。

不确定第 2 季度,但这应该会为您提供继续所需的信息。我认为显示了当前线程的调用堆栈,但我不确定。

【讨论】:

以上是关于使用 vscode 调试多线程 C 程序时单步切换线程的主要内容,如果未能解决你的问题,请参考以下文章

vscode怎么调试c语言 调试步骤

vscode为啥不能调试c语言

GDB 调试多线程程序的总结

vscode怎么配置c语言的断电调试啊?请大神们教一下啊

gdb多线程调试

经验分享vscode远程c++工程gcc或cmake编译单步调试配置