Freigeben über


Stapel- und Dumpprotokollierung

Verwenden der Schalter "/stacktraceonerror" und "/minidumponerror"

Es gibt zwei Möglichkeiten, Stapelablaufverfolgung und Miniabbilder aus Ihren Tests zu erfassen. Am einfachsten ist der "Onerror"-Modus. Wenn Sie Ihre Tests ausführen, geben Sie die Schalter "/stacktraceonerror" und/oder "/minidumponerror" an. Wenn Sie dann auf einen Fehler stoßen, erfasst logger die Stapelablaufverfolgung und/oder den Miniabbild für Sie im Standardformat.

Die andere Methode zum Erfassen von Stapelablaufverfolgung und Minidumpen besteht darin, die APIs zu verwenden, die unten beschrieben werden.

Verwenden der WexDebug.h-Funktionalität zum Erfassen von Stapelablaufverfolgungen und Miniabbildern

WexDebug.h bietet APIs zum Erfassen von Aufrufstapelablaufverfolgungen und Minidumps.

Rufen Sie die SaveDump-API auf, um ein Minidump zu speichern.

Diese API verwendet einen optionalen DWORD-Parameter (bei dem es sich um eine Dumptypflag- oder Flagkombination handelt) und einen Zeichenfolgenverweis, in dem eine Zeichenfolge zurückgegeben wird, die einen Dateinamen und einen Pfad zur gespeicherten Dumpdatei enthält. Der Dateiname wird automatisch von der API generiert und basiert auf dem aktuellen Datum und der aktuellen Uhrzeit.

Der optionale Dumptypparameter gibt an, was das genommene Minidump enthalten soll. Außerdem wird angegeben, ob das Dump in einer dmp- oder cab-Datei gespeichert wird, und im Fall von cab-Dateien, ob die Symbole zusammen mit dem Dump gespeichert werden. Wenn der optionale Parameter nicht angegeben wird, werden Standardeinstellungen verwendet.

Beispiel (Speichern des Dumps in einer Cab mit den pdbs):

NoThrowString savedDumpFilePath;
HRESULT hr = Debug::SaveDump(MiniDumpFormat::WriteCab | MiniDumpFormat::WriteCabSecondaryFiles, savedDumpFilePath);

Beachten Sie, dass das Speichern eines Dumps in einer Cab-Datei länger dauert als das speichern eines normalen Dumps. Das Anfügen von Symboldateien dauert noch länger.

Rufen Sie die GetStack-API auf, um eine Aufrufstapelablaufverfolgung abzurufen.

Diese API verwendet einen optionalen DWORD-Parameter (bei dem es sich um eine Typflag- oder Flagkombination handelt) und einen Zeichenfolgenverweis, in dem sie eine Zeichenfolge zurückgibt, die die Aufrufstapelablaufverfolgung für den aktuellen Kontext enthält.

Der optionale Stapeltypparameter gibt an, was die Stapelablaufverfolgung enthalten soll. Wenn der optionale Parameter nicht angegeben wird, werden Standardeinstellungen verwendet.

Beispiel:

NoThrowString stackText;
HRESULT hr = Debug::GetStack(CallStackFormat::ColumnNames | CallStackFormat::FrameAddress |
                             CallStackFormat::SourceLine, stackText);

Korrelation von Stapeloptionsflags mit Debuggerbefehlen. Wenn Sie die Windbg-Familie von Debuggern verwenden, kann die folgende ungefähre Korrelationsliste hilfreich sein:

Debuggersyntax Entsprechende Flags
k CallStackFormat::ColumnNames
Kv k + CallStackFormat::FunctionInfo
kp / kP k + CallStackFormat::P arameter
kn k + CallStackFormat::FrameNumbers
Kf k + CallStackFormat::FrameMemoryUsage

Technische Referenz

Wenn Sie weitere Informationen zu den optionalen Dump- und Stapelparametern benötigen, lesen Sie die Dokumentation der Debugtools für Windows. Die Dokumentation zu den "Dumpflags" finden Sie im DEBUG_FORMAT_XXX. Eine Dokumentation zu den "Stapelflags" finden Sie im OutputStackTrace.