gdb:多线程程序中的调用函数,无需进程线程

时间:2019-07-09 20:58:34

标签: c++ multithreading gdb

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

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

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

问题:

  1. 在执行call命令时其他线程是否继续执行 在gdb中?
  2. 假设如此,有没有办法禁用此功能,以便我可以 通过call自检程序状态时,保持线程暂停 命令?

1 个答案:

答案 0 :(得分:1)

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