单步执行dbx时的tb_event_death

时间:2008-11-24 12:00:15

标签: c++ multithreading debugging solaris dbx

当我单步执行多线程程序的一个线程时,调试器会被中断:

0x(some hex ref) : tdb_event_death      : ret
dbx: thread has exited -- next aborted

我的猜测是我正在调试的程序中的一个线程停止了,但它不是我正在调试的那个,所以我看不出为什么我必须重新启动调试过程才能继续。

我有一个解决方法,我在下一行设置一个断点,然后重新运行,这有效,但非常烦人,它确实减慢了我的调试速度。有谁知道更好的方法? (例如,单步所有线程)

2 个答案:

答案 0 :(得分:1)

尝试将环境变量_THREAD_ERROR_DETECTION设置为0

some light reading

答案 1 :(得分:1)

可能发生的是其他一些线程已经退出(执行next恢复进程中的所有线程,而不仅仅是您正在调试的线程)。您可以对此进行验证:在开始调试特定地点时执行thread,并在收到next aborted消息时再次执行此操作。

如果您正在调试的线程不需要与其他线程交互,则可以使用next <thread_id>(其中thread_idthread命令打印)恢复该一个线程

提醒一句:如果你的线程需要malloc()一些内存,你可能必须恢复其他线程,因为其中一个线程可以保持例如malloc锁定。