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 上崩溃