Frage

Als jemand, der gerade beginnen, die Feinheiten der Computer Debuggen zu lernen, für das Leben von mir, ich kann nicht verstehen, wie der Stapel Text einer Deponie in Windbg zu lesen. Ich habe keine Ahnung davon, wo auf beginnen, wie sie zu interpretieren, oder wie man das macht. Kann jemand Richtung auf diese arme Seele anbieten?

dh (die einzige Müllhalde ich mit mir auf der Hand tatsächlich)

>b69dd8f0 bfa1e255 016d2fc0 89efc000 00000040 nv4_disp+0x48b94

b69dd8f4 016d2fc0 89efc000 00000040 00000006 nv4_disp+0x49255

b69dd8f8 89efc000 00000040 00000006 bfa1dcc0 0x16d2fc0

b69dd8fc 00000000 00000006 bfa1dcc0 e1e71018 0x89efc000

Ich weiß, dass das Problem mit den Nvidia-Display-Treiber zu tun, aber was ich wissen will, ist, wie man tatsächlich den Stapel lesen (zB was ist b69dd8f4?): - [

War es hilfreich?

Lösung

Als erstes müssen Sie die richtigen Symbole konfiguriert haben. Die Symbole können Sie Speicheradressen Funktionsnamen übereinstimmen. Um dies zu tun, müssen Sie einen lokalen Ordner in Ihrem Computer erstellen, in dem Sie einen lokalen Cache von Symbolen gespeichert werden (zum Beispiel: C: \ Symbole). Dann müssen Sie die Symbole Server-Pfad angeben. Um dies zu tun gehen Sie einfach zu: Datei> Symboldateipfad und geben Sie:

SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

Sie finden weitere Informationen finden, wie man richtig die Symbole konfigurieren hier .

Sobald Sie richtig die Symbole Server konfigurieren Sie die minidump aus öffnen: Datei> Öffnen Absturz Dump.

Sobald die minidump geöffnet werden, wird es auf der linken Seite der Befehlszeile zeigt den Thread, ausgeführt wurde, als der Dump erzeugt wurde. Wenn Sie sehen wollen, was dieses Thema Typen ausführt:

kpn 200

Dies könnte einige Zeit dauern, das erste es Sie ausführen, da es die notwendigen öffentlichen Microsoft ähnliche Symbole zum ersten Mal zum Download hat. Sobald alle Symbole heruntergeladen werden Sie so etwas wie bekommen:

01 MODULE!CLASS.FUNCTIONNAME1(...)
02 MODULE!CLASS.FUNCTIONNAME2(...)
03 MODULE!CLASS.FUNCTIONNAME3(...)
04 MODULE!CLASS.FUNCTIONNAME4(...)

Dabei gilt:

  • Die erste Zahl : Zeigt die Rahmennummer
  • MODULE : Die DLL, die den Code
  • enthält
  • CLASS : (nur auf C ++ Code) erhalten Sie die Klasse zeigen, dass der Code
  • enthält
  • FUNCTIONAME : Die Methode, die aufgerufen wurde. Wenn Sie die richtigen Symbole haben Sie auch die Parameter sehen.

Sie können auch so etwas wie

siehe
01 MODULE!+989823

Dies zeigt an, dass Sie das richtige Symbol nicht für diese DLL haben und deshalb sind Sie nur in der Lage, das Verfahren zu sehen, gegenüber.

Also, was ist ein Aufrufliste?

Stellen Sie sich diesen Code haben:

void main()
{
  method1();
}

void method1()
{
  method2();
}

int method2()
{
  return 20/0;
}

In diesem Code method2 wird im Grunde eine Ausnahme aus, da wir durch 0 zu teilen versuchen, und dies führt dazu, dass der Prozess zum Absturz bringen. Wenn wir ein minidump bekommen, als dies geschah, würden wir die folgende Aufrufliste sehen:

01 MYDLL!method2()
02 MYDLL!method1()
03 MYDLL!main()

Sie können von dieser Aufrufliste folgen, dass „main“ genannt „method1“, die dann „method2“ genannt, und es ist fehlgeschlagen.

In Ihrem Fall, dass Sie diese Aufrufliste haben (was ich denke, ist das Ergebnis der laufenden „kb“ -Befehl)

b69dd8f0 bfa1e255 016d2fc0 89efc000 00000040 nv4_disp+0x48b94
b69dd8f4 016d2fc0 89efc000 00000040 00000006 nv4_disp+0x49255
b69dd8f8 89efc000 00000040 00000006 bfa1dcc0 0x16d2fc0
b69dd8fc 00000000 00000006 bfa1dcc0 e1e71018 0x89efc000

Die erste Spalte zeigt den Kinderrahmenzeiger, die zweite Spalte die Rücksendeadresse des Verfahrens, dass die nächsten drei Spalten zeigen die ersten drei Parameter ausgeführt wird, die an die Methode übergeben wurden, und der letzte Teil ist der DLL-Name (nv4_disp) und dem des Verfahrens gegenüber, die gerade ausgeführt wird (+ 0x48b94). Da Sie nicht über die Symbole sind nicht in der Lage der Methodennamen zu sehen. Ich bezweifle, tha NVIDIA den Zugang der Öffentlichkeit zu ihren Symbolen bietet damit ich gues Sie nicht viele Informationen von hier erhalten können.

Ich empfehle Ihnen "KPN 200" laufen. Dies wird Ihnen die vollständige Aufrufliste zeigen und Sie könnten den Ursprung des Verfahrens zu sehen, in der Lage, die diesen Absturz verursacht (wenn es sich um eine Microsoft-DLL war sollten Sie die richtigen Symbole in den Schritten, die ich zur Verfügung gestellt Ihnen).

Wenigstens wissen Sie es zu einem NVIDIA Bug verwandt ist ;-) Versuchen Sie, die DLLs dieses Treibers auf die neueste Version zu aktualisieren.

Falls Sie mehr über WinDBG Debuggen lernen empfehle ich die folgenden Links:

Andere Tipps

Ein wirklich gutes Tutorial einen Stack-Trace zur Interpretation zur Verfügung steht hier:

http://www.codeproject.com/KB/debug/cdbntsd2.aspx

Doch selbst mit einem Tutorial wie, dass es sehr schwierig sein kann (oder in der Nähe unmöglich) einen Stack Dump ohne die richtigen Symbole verfügbar / geladen zu interpretieren.

Es könnte helfen, ein Beispiel für die Stapel aufzunehmenden Sie lesen wollen. Ein guter Tipp ist, dass Sie richtige Debug-Symbole für alle in dem Stapel gezeigt Module zu gewährleisten. Dazu gehört Symbole für Module in dem O, Microsoft ihr Symbol Server öffentlich zugänglich gemacht hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top