2012-05-09 4 views
11

Wir versuchen, einen w3wp-Speicherauszug mit windbg zu analysieren, und wir haben festgestellt, dass der w3wp-Prozess aufgrund eines Stapelüberlaufs abstürzt. Ich lud die psscor4.dll und bekam den Anrufstapel, indem ich! Clrstack ausgab. Aber ich möchte auch wissen, dass die Parameter an die Methoden übergeben werden. Wenn ich "! Clrstack -p" oder "! Clrstack -a" ausstelle, erhalten wir < keine Daten > für alle Parameter und lokalen Variablen. Irgendeine Idee, warum wir < keine Daten > anstelle der tatsächlichen Werte für die Parameter und lokale Variablen bekommen?! Clrstack -p gibt die Werte der Parameter für die Methoden im Aufrufstack nicht an

+0

Ich denke, ich verstehe, bis zu dem Punkt, wo Sie die Frage stellen, "Irgendeine Idee, warum wir anstelle der tatsächlichen Werte für die Parameter und lokale Variablen bekommen?" Kannst du umformulieren? –

+0

@dtryon, ich habe die Frage jetzt aktualisiert. Danke, dass du es aufgezeigt hast. – arul

Antwort

9

Wenn Sie einen Release-Build ausführen, können Sie normalerweise Locals und Parameter nicht verfolgen, da sie optimiert und in Registern gespeichert sind. Wenn Sie es wirklich brauchen, können Sie sich den kompilierten JIT-Code ansehen und die Werte in den Registern finden, aber das erfordert eine Menge Buchhaltung.

14

So sind die Freuden des Debuggens optimierten Codes. Wenn Sie "! Sex.mdv" verwenden, erhalten Sie zumindest die Datentypen Ihrer Locals/Args. Dann können Sie! Sos.dso oder! Sosex.mdso ausführen, um die Objekte auf dem Stapel mit ihren Typen zu sehen. Es ist normalerweise nicht so schwierig, die Argumente auf diese Weise aufzuspüren, obwohl es nicht immer funktioniert.

Verwandte Themen