当我单步执行多线程程序的一个线程时,调试器会被中断:
0x(some hex ref) : tdb_event_death : ret
dbx: thread has exited -- next aborted
我的猜测是我正在调试的程序中的一个线程停止了,但它不是我正在调试的那个,所以我看不出为什么我必须重新启动调试过程才能继续。
我有一个解决方法,我在下一行设置一个断点,然后重新运行,这有效,但非常烦人,它确实减慢了我的调试速度。有谁知道更好的方法? (例如,单步所有线程)
答案 0 :(得分:1)
尝试将环境变量_THREAD_ERROR_DETECTION设置为0
答案 1 :(得分:1)
可能发生的是其他一些线程已经退出(执行next
恢复进程中的所有线程,而不仅仅是您正在调试的线程)。您可以对此进行验证:在开始调试特定地点时执行thread
,并在收到next aborted
消息时再次执行此操作。
如果您正在调试的线程不需要与其他线程交互,则可以使用next <thread_id>
(其中thread_id
是thread
命令打印)恢复该一个线程
提醒一句:如果你的线程需要malloc()一些内存,你可能必须恢复其他线程,因为其中一个线程可以保持例如malloc
锁定。