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

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

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

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

问题:

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

【问题讨论】:

标签: c++ multithreading gdb


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2019-02-27
    相关资源
    最近更新 更多