2

マルチスレッド プログラムの 1 つのスレッドをシングル ステップ実行すると、デバッガーが次のように中断されます。

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

私の推測では、デバッグ中のプログラムのどこかでスレッドが停止しましたが、それは私がデバッグしているものではないため、続行するためにデバッグ プロセスを再起動する必要がある理由がわかりません。

回避策があります。次の行にブレークポイントを設定してから再実行します。これは機能しますが、非常に面倒です。デバッグが本当に遅くなります。誰もがより良い方法を知っていますか? (たとえば、単一ステップのすべてのスレッド)

4

2 に答える 2

1

What is likely happening is that some other thread has exited (doing next resumes all threads in the process, not just the one you are debugging). You can verify this: do thread when you start debugging a particular place, and again when you get the next aborted message.

If the thread you are debugging doesn't need to interact with other threads, you can resume just that one thread with next <thread_id> (where thread_id is the one thread command prints).

A word of caution: if your thread needs to malloc() some memory, you may have to resume other threads, because one of them could be holding e.g. malloc lock.

于 2009-02-10T07:40:32.720 に答える
1

環境変数 _THREAD_ERROR_DETECTION を 0 に設定してみてください

軽い読書

于 2009-02-07T09:26:10.557 に答える