2016-08-04 136 views
2

我有一个系统,其中5个线程并行运行。我已经放了一个断点。gdb单步执行全停止模式的单线程

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

你能建议我该怎么做。

回答

0

从gdb的文档:https://sourceware.org/gdb/onlinedocs/gdb/All_002dStop-Mode.html

在一些操作系统中,您可以通过锁定OS调度器,只允许一个线程来运行修改GDB的默认行为。

集调度锁定模式

设置调度锁定模式。它适用于正常执行,记录模式和重放模式。如果它关闭,则不会锁定,任何线程都可能随时运行。如果打开,则只有当前线程可以在下级恢复时运行。步进模式优化为单步;它可以防止其他线程在步进时抢占当前线程,以便调试的重点不会意外更改。其他线程在执行时永远不会有机会运行,而当您使用诸如“继续”,“直到”或“完成”之类的命令时,它们完全可以自由运行。但是,除非另一个线程在其时间片期间遇到断点,否则gdb不会将当前线程从正在调试的线程中移开。重播模式在记录模式下表现得像关闭一样,在重放模式下表现得如此。