gdb使用全停模式单步执行单个线程

时间:2016-08-04 07:08:43

标签: c++ multithreading gdb

我有一个系统,其中5个线程并行运行。我已经放了一个断点。

在gdb全停模式下,一旦遇到断点,所有线程都在该断点处停止(我当前看到线程2导致断点命中)。现在我希望当我按下next并且所有其他线程继续保持停止时,只有线程4运行。即我想与线程4一起确保所有其他线程保持停止状态。

你能建议我怎么做。

1 个答案:

答案 0 :(得分:0)

来自gdb文档:https://sourceware.org/gdb/onlinedocs/gdb/All_002dStop-Mode.html

  

在某些操作系统上,您可以通过锁定OS调度程序以仅允许单个线程运行来修改gdb的默认行为。

     

设置调度程序锁定模式

     

设置调度程序锁定模式。它适用于正常执行,记录模式和重放模式。如果它关闭,则没有锁定,任何线程都可以随时运行。如果选中,则只有当前线程可以在下级恢复时运行。步进模式优化单步执行;它可以防止其他线程在您踩踏时抢占当前线程,因此调试的重点不会意外地改变。其他线程在你步进时永远不会有机会运行,当你使用'continue','until'或'finish'之类的命令时,它们完全可以自由运行。但是,除非另一个线程在其时间片期间遇到断点,否则gdb不会将当前线程更改为您正在调试的线程。重放模式在记录模式下表现得像关闭一样,在重放模式下也是如此。