Emp*_*ian 11
请参阅文档set scheduler-locking on.
注意:如果你挂起其他线程,并且其中一个持有锁,并且如果你的有趣线程在步进时需要锁定,那么你将陷入僵局.
人们调试线程应用程序的"正常"方式是什么?
你永远无法调试线程的正确性,你只能设计它.根据我的经验,大多数线程应用程序的调试都会进行断言,并在其中一个断言被违反时检查世界状态.
首先,您需要使用以下命令启用多线程调试器行为.不知道为什么默认禁用它.
set target-async 1
set non-stop on
Run Code Online (Sandbox Code Playgroud)
我个人将这些命令放入.gdbinit文件中.它们使您的每个命令仅应用于当前关注的线程.注意:线程可能正在运行,因此您必须暂停它.
要查看焦点线程执行thread.
要切换到另一个线程,请附加线程的编号,例如thread 2.
查看带有数字问题的所有主题info thread.
要将命令应用于特定线程,请发出类似thread apply threadnum命令的内容.例如,thread apply 4 bt将backtrace命令应用于线程号4. thread apply all continue继续所有暂停的线程.
但是有一个小问题 - 许多命令需要暂停线程.我知道几种方法:
interrupt 命令:中断线程执行,接受多个线程暂停,没有参数打破焦点.break 25 thread 4.你也可能会发现非常有用的是你可以设置当遇到断点要执行的命令列表通过命令commands-例如,所以你可能会快速打印有趣的值,然后继续执行.
| 归档时间: |
|
| 查看次数: |
8426 次 |
| 最近记录: |