debugging GDB是否保证一个线程在切换到另一个线程后不会运行超过指定的时间?

dluptydi  于 2022-12-29  发布在  其他
关注(0)|答案(1)|浏览(149)

假设我正在用GDB调试一个多线程程序。
我停在一个线程的断点上;然后输入next 3(或类似的step 3或smth);此时另一个线程遇到断点,GDB切换到那个线程(scheduler-locking关闭)。
是否可以保证第一个线程在第二个断点停止时运行不超过3行?
第一个线程运行了2行,GDB切换到第二个线程,然后第一个线程运行了1000多行,然后GDB停在一个断点(在第二个线程中),这是不可能的?
我不确定我能从文件中设计出这个。

bgtovc5b

bgtovc5b1#

在您的情况下,第一个线程执行的操作不会超过3个next
在内部,GDB将设置断点,以确保第一个线程执行一个next,然后设置所有线程运行。GDB将等待一个线程停止。
如果第一个线程停止,那么GDB将设置第二个next,并再次启动第一个线程。
对第三个next重复此操作,一旦完成,所有线程将停止,控制权返回给用户。
然而,在这个过程中的任何时候,另一个线程可能会因为其他原因而停止。如果发生这种情况,GDB将要求所有线程停止,控制权将交还给用户。
但是,由于第一个线程已经为next设置,因此该线程最多只能继续到其当前next操作的末尾。

相关问题