1

多数のダンプ ファイルが提供されました。windbg/sosex コマンドを使用!dumpstack -EEすると、多くの場合、最後に次の行が表示されます。

0aa6ce7c 028ea126 (MethodDesc 02756288 +0x16 TheCompany.Toolbox.Log.Logger.Info(System.String))
0aa6cecc 028ea126 (MethodDesc 02756288 +0x16 TheCompany.Toolbox.Log.Logger.Info(System.String))
0aa6cf54 028ea126 (MethodDesc 02756288 +0x16 TheCompany.Toolbox.Log.Logger.Info(System.String))
0aa6d080 6f42bc51 (MethodDesc 6f1da670 +0x81 System.TimeSpan.TimeToTicks(Int32, Int32, Int32))
0aa6d0a8 6f42c0a0 (MethodDesc 6f1daf1c +0x40 System.DateTime.TimeToTicks(Int32, Int32, Int32))
0aa6d0d0 6f42cb8f (MethodDesc 6f1da8ec +0x7f System.DateTime.Add(Double, Int32))

残念ながら、でローカル変数を取得しようとしても、!clrstack -a適切な結果が得られません。

0:045> !clrstack -a
OS Thread Id: 0xf50 (45)
Child SP       IP Call Site
0aa6ed78 76df7094 [GCFrame: 0aa6ed78]
0aa6ef5c 76df7094 [DebuggerU2MCatchHandlerFrame: 0aa6ef5c]

最後のフレーム以外のフレームに移動する方法はありますか? (このフレームでローカルを取得するため)。

ネイティブ モードでは、次のことができます。

.frame @$.frame +1

次に、その前のフレームにローカルを含めることができます

dv

!clrstack -a前のフレーム内でできるように、管理されたスタックで同じことを行う方法を知りたいです。このスタックフレームの関数パラメータの値/参照も知りたいです。

そのようなアクションを実行するコマンドはありますか?

4

1 に答える 1

3

Steve Johnson のSOSEXには!mframeコマンドがあります。

質問にタグを付けましたが、SOSEX コマンドは使用せず、SOS コマンドのみを使用したため、コマンドが見つからなかった可能性があります。

からフレーム番号を取得します!mk。DML が有効になっている場合、フレーム番号をクリックすると、!mframeコマンドが自動的に実行されます。その後、!mdv引数とローカルを表示することができます。

または、!mdv <frame>フレーム番号を直接取得することもできます。

ただし、これが常に役立つかどうかはわかりません。SOSEX は魔法のようなものではなく、.NET フレームワークによって提供される情報に依存する必要があります。なんらかの理由でそれが壊れている場合は、運が悪い可能性があります。

于 2015-10-14T18:41:32.180 に答える