1

マネージコードと一緒にネイティブライブラリを使用するときに発生するデッドロックを分析しています。WinDbgを使用して問題をデバッグし、ベンダーが構内で問題を観察できるようにダンプを保存することを目的としています。

問題のあるプロセスにアタッチすると、コールスタックの前に次のメッセージが表示されます。

警告:スタックアンワインド情報は利用できません。次のフレームが間違っている可能性があります。

プロセスに直接取り付けた場合、フレームは実際には正しく見えます。ただし、このファイルのダンプを取得してから、別のマシンのWinDbgでダンプを開くと、スタックフレームの1つが異なります(上記のエラーも表示されます)。これは、コードパスが不可能であると思われたため、元々ベンダーを困惑させていました。 。

私は以下を使用してダンプを取りました:

.dump /ma filename.dmp

この不一致の原因は何ですか?ダンプファイルの呼び出しスタックを確実に分析するためにできることはありますか?私が知っておくべき他の誤って伝えられたデータがあるかもしれませんか?

4

2 に答える 2

2

これは、pdbが一致していない可能性があるようです。!chksymおよび!itoldyousoコマンドを試しましたか?たとえば、Bugslayerの記事を参照してください

もう1つ試してみると!sym noisy、ロードされているpdbファイルが表示されます。

MSDNブログも参照してください

于 2009-11-03T09:24:27.660 に答える
2

警告は、デバッガーがスタック上の1つ以上のアドレスを既存のモジュール情報に関連付けることができないことを示しています。マネージコードはCLRによってオンザフライでコンパイルされるため、コードに対応するモジュールがないため、警告が表示されます。

SOSコマンド!clrstackには、意味のあるスタックを表示するために(または、少なくとも警告なしに)CLRからの必要な情報があります。ネイティブスタックダンプコマンドのいずれかを使用すると、マネージコードに対してこの警告が表示されます。

近刊のAdvanced.NETDebuggingには、追加の詳細があります。http://advanceddotnetdebugging.com/を参照してください

于 2009-11-03T09:30:17.163 に答える