假设我正在用GDB调试一个多线程程序。我停在一个线程的断点上;然后输入next 3(或类似的step 3或smth);此时另一个线程遇到断点,GDB切换到那个线程(scheduler-locking关闭)。是否可以保证第一个线程在第二个断点停止时运行不超过3行?第一个线程运行了2行,GDB切换到第二个线程,然后第一个线程运行了1000多行,然后GDB停在一个断点(在第二个线程中),这是不可能的?我不确定我能从文件中设计出这个。
next 3
step 3
scheduler-locking
bgtovc5b1#
在您的情况下,第一个线程执行的操作不会超过3个next。在内部,GDB将设置断点,以确保第一个线程执行一个next,然后设置所有线程运行。GDB将等待一个线程停止。如果第一个线程停止,那么GDB将设置第二个next,并再次启动第一个线程。对第三个next重复此操作,一旦完成,所有线程将停止,控制权返回给用户。然而,在这个过程中的任何时候,另一个线程可能会因为其他原因而停止。如果发生这种情况,GDB将要求所有线程停止,控制权将交还给用户。但是,由于第一个线程已经为next设置,因此该线程最多只能继续到其当前next操作的末尾。
next
1条答案
按热度按时间bgtovc5b1#
在您的情况下,第一个线程执行的操作不会超过3个
next
。在内部,GDB将设置断点,以确保第一个线程执行一个
next
,然后设置所有线程运行。GDB将等待一个线程停止。如果第一个线程停止,那么GDB将设置第二个
next
,并再次启动第一个线程。对第三个
next
重复此操作,一旦完成,所有线程将停止,控制权返回给用户。然而,在这个过程中的任何时候,另一个线程可能会因为其他原因而停止。如果发生这种情况,GDB将要求所有线程停止,控制权将交还给用户。
但是,由于第一个线程已经为
next
设置,因此该线程最多只能继续到其当前next
操作的末尾。