gdb:在多线程程序中调用函数而不进行线程

Posted

技术标签:

【中文标题】gdb:在多线程程序中调用函数而不进行线程【英文标题】:gdb: call function in multithreaded program without progressing threads 【发布时间】:2019-07-09 20:58:34 【问题描述】:

我正在使用 gdb 调试一个多线程 C++ 程序。这是我想要实现的调试流程:

    运行到断点,然后暂停所有线程的执行 使用disable 命令禁用[断点] 调用一个函数(在我的程序中定义)来打印向量的状态(同时保持其他线程暂停)

但是,当我多次调用打印系统状态的函数时,数据结构的值会发生变化。除非我有其他错误,否则这一定意味着其他线程正在运行,而我的打印功能正在运行。

问题:

    在执行call 命令时其他线程是否恢复执行 在gdb中? 假设是这样,有没有办法禁用它,这样我就可以 当我通过call 反省程序状态时保持线程暂停 命令?

【问题讨论】:

sourceware.org/gdb/onlinedocs/gdb/All_002dStop-Mode.html 有用吗? @KostasRim 是的,这正是我所需要的; set scheduler-locking on 做我想做的事 【参考方案1】:

参见@KostasRim 的评论——set scheduler-locking on 实现了所需的行为 (https://sourceware.org/gdb/onlinedocs/gdb/All_002dStop-Mode.html)。默认情况下,其他线程在单步执行、函数调用等过程中运行。

【讨论】:

以上是关于gdb:在多线程程序中调用函数而不进行线程的主要内容,如果未能解决你的问题,请参考以下文章

Pjsip 在多线程中调用它的函数时在 android 上崩溃

GDB 调试多线程程序的总结

多线程程序中的分段错误和 gdb 回溯信息不完整

在多线程 C 应用程序中嵌入 python

由“Qt程序运行一段时间后崩溃”引发的“opancv库中Mat::clone()函数”在多线程下的注意事项

Qt入门教程QObject篇重入性和线程安全