Freigeben über


_EFN_StackTrace-Funktion

Aktualisiert: November 2007

Stellt für jeden Übergang zwischen nicht verwaltetem und verwaltetem Code eine Textdarstellung einer verwalteten Stapelüberwachung und ein Array von CONTEXT-Datensätzen bereit.

HRESULT CALLBACK _EFN_StackTrace(
        [in]  PDEBUG_CLIENT  Client,
        [out] WCHAR          wszTextOut[],
        [out] size_t         *puiTextLength,
        [out] LPVOID         pTransitionContexts,
        [out] size_t         *puiTransitionContextCount,
        [in]  size_t         uiSizeOfContext,
        [in]  DWORD          Flags
);

Parameter

  • Client
    [in] Der Client, der gedebuggt wird.

  • wszTextOut
    [out] Die Textdarstellung der Stapelüberwachung.

  • puiTextLength
    [out] Ein Zeiger auf die Anzahl von Zeichen in wszTextOut.

  • pTransitionContexts
    [out] Das Array von Übergangskontexten.

  • puiTransitionContextCount
    [out] Ein Zeiger auf die Anzahl von Übergangskontexten im Array.

  • uiSizeOfContext
    [in] Die Größe der Kontextstruktur.

  • Flags
    [in] Legen Sie entweder 0 (null) oder SOS_STACKTRACE_SHOWADDRESSES (0x01) fest, um vor jeder module!functionname-Zeile das EBP-Register und den ESP (Enter Stack Pointer) anzuzeigen.

Hinweise

Die _EFN_StackTrace-Struktur kann von einer programmgesteuerten WinDbg-Schnittstelle aufgerufen werden. Die Parameter werden wie folgt verwendet:

  • Wenn wszTextOut NULL und puiTextLength ungleich NULL ist, gibt die Funktion die Zeichenfolgenlänge in puiTextLength zurück.

  • Wenn wszTextOut ungleich NULLL ist, speichert die Funktion Text in wszTextOut bis zu der durch puiTextLength angegebenen Position. Bei ausreichendem Pufferspeicher wird die erfolgreiche Ausführung zurückgegeben, bei nicht ausreichendem Pufferspeicher wird E_OUTOFMEMORY zurückgegeben.

  • Der Übergangsteil der Funktion wird ignoriert, wenn sowohl pTransitionContexts als auch puiTransitionContextCount NULL sind. In diesem Fall stellt die Funktion Aufrufern lediglich die Textausgabe der Funktionsnamen bereit.

  • Wenn pTransitionContexts NULL und puiTransitionContextCount ungleich NULL ist, gibt die Funktion die erforderliche Anzahl von Kontexteinträgen in puiTransitionContextCount zurück.

  • Wenn pTransitionContexts ungleich NULL ist, wird es von der Funktion als Array von Strukturen der Länge puiTransitionContextCount behandelt. Die Strukturgröße wird mit uiSizeOfContext angegeben und muss mit der Größe von SimpleContext oder CONTEXT für die Architektur übereinstimmen.

  • wszTextOut wird im folgenden Format geschrieben:

    "<ModuleName>!<Function Name>[+<offset in hex>]
    ...
    (TRANSITION)
    ..."
    
  • Wenn der Offset im Hexadezimalformat 0x0 ist, wird kein Offset geschrieben.

  • Wenn der gegenwärtig im Kontext befindliche Thread keinen verwalteten Code enthält, wird von der Funktion SOS_E_NOMANAGEDCODE zurückgegeben.

  • Der Flags-Parameter ist entweder 0 oder SOS_STACKTRACE_SHOWADDRESSES, um vor jeder module!functionname-Zeile EBP und ESP anzuzeigen. Standardmäßig beträgt dieser Zwischenraum 0.

    #define SOS_STACKTRACE_SHOWADDRESSES   0x00000001
    

Anforderungen

Plattformen: siehe Systemanforderungen für .NET Framework.

Header: SOS_Stacktrace.h

.NET Framework-Versionen: 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0

Siehe auch

Weitere Ressourcen

Debuggen von globalen statischen Funktionen