2

この 32 ビット C++ アプリケーションは、Windows の標準的な方法を使用してスレッドに名前を付けます。エラーが発生するとミニダンプが生成されますが、ダンプが Visual Studio 2013 に読み込まれると、スレッド名が失われます。これにより、多数のスレッドが存在する場合、問題のデバッグが難しくなります。

これを改善するために私が聞いた唯一の方法は、このMicrosoft User Voice の投稿から来ています。発信者は、カスタム ストリームにそれらを埋め込み、カスタム Visual Studio 拡張機能を記述して、ダンプの読み込み時にスレッドの名前を変更することを提案しています。ただし、これは面倒なようで、読み込みプロセスに多くの時間がかかるようです。

スレッド名をダンプに埋め込む簡単な方法はありますか? Visual Studio にロードするときに "そのまま動作" しますか?

参考までに: Visual Studio 2013 を使用してビルドし、アプリを Win7 以降で実行し、Google Breakpad を使用してダンプを生成します。

4

2 に答える 2

0

さらに掘り下げた後、これを行う1つの方法は、スレッドのTEBのArbitraryUserPointerフィールドに名前へのポインターを格納することのようです。

その後、TEB がミニダンプに埋め込まれていた場合 (この記事によると、これは MiniDumpWithProcessThreadData フラグで実現できます)、少なくとも Visual Studio のウォッチ ウィンドウで現在のスレッド名を評価することで表示できたようです。

(*(char **)(@TIB+0x14))

おそらく、Visual Studio デバッガー アドオンを記述して、プロセスがアタッチされたときに TEB の内容を調べ、例外 'hack' を使用して [スレッド] ウィンドウでスレッドの名前を設定することができます。

于 2014-08-06T14:34:12.323 に答える