Einen Absturz mit dem Remote-Debugger analysieren
Vom Host-Rechner attachen
Aufgabe: Vom Host-Rechner an Ihr eigenes Programm attachen, das auf dem Lab-Target läuft. Attachen Sie zuerst. Öffnen Sie den Projektordner in StatusRivet, schalten Sie auf Ask first und beschreiben Sie die Einrichtung. Shell führt den Befehlszeilenmodus Ihres Debuggers mit den von Ihnen angegebenen Verbindungsdetails aus, und die Karte zeigt, ob der Attach über den echten Exit-Code gelangt ist. Der Agent erfindet keine Verbindungseinstellungen, also nehmen Sie Host, Target und Port aus Ihren Lab-Notizen. Remote-Debugging ist nur für Ihre eigenen Lab-Rechner gedacht, nie für einen Computer, den Sie nicht besitzen. Lesen Sie die Karte, bevor Sie zum nächsten Schritt übergehen. Wenn das Attach fehlgeschlagen ist, sollte nichts anderes laufen, und Sie beheben zuerst die Verbindung, dann fragen Sie erneut. Die Karte speichert auch den genauen Befehl, damit Sie ihn später wiederholen können.
Einen Dump und den Call Stack speichern
Aufgabe: Nachdem Sie den Absturz auf dem Target mit der kleinstmöglichen Eingabe reproduziert haben, speichern Sie die Evidenz. Speichern Sie beide Dateien. Shell bittet Ihren Debugger, einen Crash-Dump zu schreiben und den Call Stack des fehlerhaften Threads in eine Textdatei zu speichern, und die Karten zeigen beide Ergebnisse. Ein Windows-JIT-Debugger-Eintrag auf dem Target startet automatisch einen Debugger, wenn eine Anwendung abstürzt. Das ist eine Systemeinstellung, also ändern Sie sie nur auf einer Testmaschine, notieren Sie den vorherigen Wert und stellen Sie ihn danach wieder her. Um die Ursache eines Systemabsturzes aus einem Minidump zu finden, beginnen Sie mit dem gespeicherten Call Stack. Sie genehmigen jeden Schritt im Ask first-Modus, und Sie behalten beide Dateien mit der Checkliste für die nächste Person, die den Fall liest. Benennen Sie die Dateien nach dem Build, damit niemand sie verwechselt.
Eine Frame einer Quellcodezeile zuordnen
Aufgabe: Den Top-Frame mit Ihrem Code verbinden. Beginnen Sie mit den Symbolen. read_file öffnet stack.txt, grep sucht im Projekt nach dem Funktionsnamen und dem Ausnahmecode, z. B. 0xC0000005 für eine Access Violation, und read_file öffnet die Quelldatei an dieser Zeile. Mit der passenden PDB zeigt der Stack Funktionsnamen, Quelldateien und Zeilennummern, ohne ihn sehen Sie nur Adressen. Ein einfrierender Rechner, der mit einem BSOD mit einem Kernel Security Check Failure endet, ist ein Fall genau für diese Routine: Dump, Stack, Source. Lesen Sie die Evidenz selbst, bevor der Agent etwas bearbeitet, denn der Agent arbeitet nur mit Text und kann nicht durch das Programm schrittweise gehen. Für das schrittweise Durchgehen nutzen Sie Ihren eigenen Debugger und sagen Sie dem Agenten, was Sie gesehen haben.
Den Fix vorschlagen und den Test erneut ausführen
Aufgabe: Die Erkenntnis in eine Änderung umwandeln. edit_file schlägt einen minimalen Diff vor, z. B. eine fehlende Nullprüfung oder einen falschen Index, und im Ask first-Modus pausiert der Agent, damit Sie die geänderten Zeilen lesen können. Shell führt dann Ihren Build-Befehl, mit Symbolen, und Ihren Testbefehl aus, und die Karten melden die echten Exit-Codes. Ein Kernel-Mode-Heap-Corruption-BSOD in einem von Ihnen geschriebenen Treiber kann lange nach dem falschen Schreibzugriff auftreten, also prüfen Sie die früher geschriebenen Puffer im Stack, nicht nur den letzten Frame. Eine unerwartete Store Exception BSOD auf Ihrem Lab-Target wird auf die gleiche Weise behandelt. Akzeptieren Sie den Diff erst nach einem erfolgreichen Test, und notieren Sie sich, was sich geändert hat. Testen Sie vor der Annahme. Wenn der Test weiterhin fehlschlägt, behalten Sie den neuen Stack und beginnen Sie den Loop erneut ab dem zweiten Schritt.