Freigeben über


ACX-Protokollierung und Fehlersuche

Dieses Thema enthält Informationen zum Protokollieren, Nachverfolgen und Debuggen der ACX-Audioklassenerweiterungen.

ACX-Treiberprotokollierung

Die Softwareablaufverfolgung für Treiber basiert in der Regel auf der Ereignisablaufverfolgung für Windows (ETW), einer Einrichtung auf Kernelebene, die Ablaufverfolgungsmeldungen für Kernelmodus- und Benutzermodusprozesse protokolliert. Da ACX-Treiber WDF-Treiber sind, stehen alle WDF-Protokollierungs- und Ereignisfunktionen für ACX-Treiberentwickler zur Verfügung.

WPP

Da ETW etwas kompliziert zu verwenden sein kann, verwenden die meisten Treiberentwickler den Windows Software Trace Preprocessor (WPP), der den Prozess der Instrumentierung eines Treibers für die ETW-Ablaufverfolgung vereinfacht und verbessert.

ACX verwendet WPP-Protokolle für die Ablaufverfolgung und das Debuggen. Weitere Informationen finden Sie unter Verwenden der WPP-Softwareablaufverfolgung in KMDF-Treibern und Hinzufügen der WPP-Softwareablaufverfolgung zu einem Windows-Treiber.

In-Flight Recorder (IFR)

In-Flight Recorder (IFR) wird unterstützt und kann über WDFKD, RCDRKD oder mit der ACXKD-Debuggererweiterung angezeigt werden, wenn sie verfügbar ist. Allgemeine Informationen zum Arbeiten mit IFR-Protokollen finden Sie unter Using Inflight Trace Recorder (IFR) in KMDF und UMDF 2 Drivers and Video: Zugreifen auf Treiber IFR-Protokolle ohne Debugger

ACX protokolliert wichtige Ereignisse mithilfe anderer ETW-Anbieter, um die Visualisierung dieser speziellen Ereignisse zu vereinfachen.

Protokollierung zu Ihrem Treiber hinzufügen

Treiber von Drittanbietern werden stark ermutigt, auch WPP- und ETW-Ereignisse zu verwenden.

Dieser Beispielcode zeigt die Überprüfung eines Rückgabewerts und das Protokollieren eines geeigneten Fehlers.


    //
    // The driver uses this DDI to delete the circuits from the current device. 
    //
    status = AcxDeviceRemoveCircuit(Device, devCtx->Speaker);
    if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove speaker circuit, continuing with ReleaseHardware, %!STATUS!", status); }
    status = AcxDeviceRemoveCircuit(Device, devCtx->MicArray);
    if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove micarray circuit, continuing with ReleaseHardware, %!STATUS!", status); }
    status = AcxDeviceRemoveCircuit(Device, devCtx->SpeakerHp);
    if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove speakerHp circuit, continuing with ReleaseHardware, %!STATUS!", status); }
    status = AcxDeviceRemoveCircuit(Device, devCtx->MicrophoneHp);
    if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove microphoneHp circuit, continuing with ReleaseHardware, %!STATUS!", status); }
    status = AcxDeviceRemoveCircuit(Device, devCtx->HDMI);
    if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove HDMI circuit, continuing with ReleaseHardware, %!STATUS!", status); }

Die vorgestellte Version des Toaster-Treiberbeispielcodes enthält Beispiele für die WMI-Tracing sowie wiederverwendbaren Tracingcode. Weitere Informationen zum Toaster-Beispiel finden Sie unter Toaster Sample Driver.

Empfehlungen für die ACX-Treiberprotokollierung

Um die Zuverlässigkeit Ihres ACX-Treibers zu verbessern, sollten Sie die folgenden Verhaltensweisen für die Protokollierung berücksichtigen.

  • Unerwartete Rückgabewerte aus Datenstrompuffer-E/A oder einer anderen normalen Signalverarbeitungsaktivität.
  • Unerwartete Energiezustände oder Energiezustandsübergänge.
  • Fehler im Zusammenhang mit Anrufen, die während Updates oder einer erneuten Installation getätigt wurden.
  • Andere Verhaltensweisen, die zu "keine Audiodaten" führen können, könnten für die Protokollierung berücksichtigt werden.

Verwendung der WMI-Ablaufverfolgungs-Debuggererweiterungen

Um Trace-Ereignisse im Debugger anzuzeigen, verwenden Sie die WMI-Erweiterung Wmitrace.dll. Sie enthält eine Bibliothek mit Funktionen, die zum Steuern und Anzeigen der WMI-Ereignisablaufverfolgung entwickelt wurden. Weitere Informationen finden Sie unter WMI Tracing Extensions (Wmitrace.dll).

ACX-Treiber-Fehlersuche

ACX-Treiber sind WDF-Treiber, daher gelten die für WDF-Treiber beschriebenen Debugtechniken für ACX-Treiber. Informationen zum Debuggen von WDF-Treibern finden Sie in den folgenden Themen.

Allgemeine Informationen zu den Debuggingtools

Debugtools für Windows (WinDbg, KD, CDB, NTSD)

KMDF-Debugging

Videodurchgänge

Erweiterungsbibliothek des ACX-Kerneldebuggers (AcxKd.dll)

Um das Debuggen zu unterstützen, verfügt ACX über eine Begleit-Kerneldebuggererweiterungsbibliothek (AcxKd.dll). Diese Bibliothek unterstützt Entwickler beim Nachverfolgen von Problemen auf einzelnen und mehrstufigen Audio-Pfaden. Mit der kd-Erweiterung können Entwickler in ACX-Strukturen suchen.

Weitere Informationen zum Debuggen von ACX-Treibern und zum Arbeiten mit der AcxKd.dll Debuggererweiterung finden Sie unter !acxkd.

Siehe auch

Übersicht über ACX-Audioklassenerweiterungen

Zusammenfassung von ACX-Objekten