Protokollierungsmuster: OutputDebugString , DebugView nutzen

In diesem Artikel betrachten wir eine effektive Protokollierungsmethode unter Verwendung der Windows-API-Dienstprogramme OutputDebugString und DebugView in Excel VBA.

1. Grundlegende Protokollierungsmuster

Excel VBA-Kurse (9): Excel VBA How-To

der oben 4.3. So verwenden Sie das Direktfenster-Tool Im Inhaltsverzeichnis „3. Überprüfen der Ausgabenachricht“ wurde behandelt.

직접 실행 창 도구 활용 방법
So verwenden Sie das Direktfenster-Tool

Dies ist eine Möglichkeit, die von Debug.Print ausgegebenen Inhalte im Sofortausführungsfenster zu überprüfen. Während dieses Verfahren den Vorteil hat, sehr einfach zu sein, hat es die folgenden Nachteile.

  • VBE (Visual Basic Editor) kann den Inhalt des Ausgabeprotokolls nicht überprüfen, wenn der Excel-Prozess gestoppt wird.
  • Unter den oben genannten Nutzungsmethoden „2. Wenn Sie es zusammen mit „Variablenwerte während der Ausführung prüfen“ verwenden, werden Log- und Variablenwerte in der Mitte gemischt, was die Log-Verifizierung stören kann.
  • Nachrichten mit mehr als 200 Zeilen werden gelöscht. Das heißt, nur die letzten 200 Zeilen werden beibehalten.

Eine bessere Möglichkeit, Debug.Print zu ersetzen, ist die Verwendung von OutputDebugString, einer Windows-API, und DebugView, einem Dienstprogramm.

2. OutputDebugString-Verwendungsmuster

2.1. VBA-Code mit OutputDebugString

Im folgenden Artikel habe ich die Verwendung der Windows-API OutputDebugString vorgestellt.

Optimierung der Arbeitsverteilung durch eindimensionalen Bin-Packing-Algorithmus_4.Attachment

5.1.4. Quellcode des modUtil-Moduls Durch leichte Modifikation des in eingeführten Codes wurde der gesamte notwendige Inhalt wie folgt geschrieben.

Option Explicit
Public Const LOG_PREFIX As String = "[VBA] " 'DebugView에서 로그 메시지를 필터링하기 위한 Prefix 지정

Private Declare PtrSafe Sub OutputDebugString Lib "kernel32" Alias "OutputDebugStringA" (ByVal lpOutputString As String)

'OutputDebugString API를 이용한 Debug Message 출력
'DebugView등을 이용하여 메시지 View 가능함
Public Sub DoLog(aMsg As String)
    OutputDebugString LOG_PREFIX + aMsg
End Sub

'Log 예시 프로시져
Public Sub TestLog()
    Dim lIdx As Long
    For lIdx = 1 To 1000
        DoLog "Log[" + CStr(lIdx) + "]"
    Next
End Sub
  • Zeile 2: Geben Sie ein Präfix zum Filtern von Protokollmeldungen in DebugView an. Das Filterverfahren wird unten beschrieben.
  • Zeile 4: Importieren Sie die Windows-API OutputDebugString und deklarieren Sie sie als Funktion.
  • Zeile 9: Kombinieren Sie LOG_PREFIX und Protokollnachricht, übergeben Sie es als Parameter an die in Zeile 4 importierte Funktion und führen Sie es aus. Machen Sie diesen Prozess zu einer DoLog-Funktion.
  • Zeile 16: Rufen Sie die Funktion DoLog auf, wenn die Ausgabe der Protokollmeldung erforderlich ist.

An diesem Punkt ist die gesamte im VBA-Code erforderliche Arbeit abgeschlossen. Sehen wir uns als Nächstes das Dienstprogramm DebugView an.

2.2. Einführung und Verwendung des DebugView-Dienstprogramms

2.2.1. Einführung in das Dienstprogramm DebugView

DebugView Sysinternals-SuiteEs ist ein Dienstprogramm, das in .

DebugView – Windows Sysinternals | Microsoft-Docs

DebugView v4.90 소개
Einführung von DebugView v4.90

DebugView-Version 4.90

Markus Russinowitsch
Gepostet am: 23. April 2019
DebugView herunterladen (1,3 MB)

Vorstellen
Debugview ist eine Anwendung, mit der Sie die Debug-Ausgabe auf Ihrem lokalen System oder auf jedem Computer in einem Netzwerk überwachen können, der über TCP/IP erreichbar ist. Es kann sowohl die Kernelmodus- als auch die Win32-Debugausgabe anzeigen, sodass Sie keinen Debugger benötigen, um die von Ihrer Anwendung oder Ihrem Gerätetreiber generierte Debugausgabe abzufangen, und Sie müssen Ihre Anwendung oder Ihren Treiber nicht ändern, um nicht standardmäßiges Debugging zu verwenden Ausgabe-APIs.

Erfassen Sie DebugView
Unter Windows 2000, XP, Server 2003 und Vista debugview erfasst:
  – Win32-AusgabeDebugString
  – DbgPrint im Kernelmodus
  – Alle Kernelmodus-Varianten von DbgPrint, die in Windows XP und Server 2003 implementiert sind

Kurz zusammengefasst: „DebugView ist ein Dienstprogramm, das die beim Aufrufen von OutputDebugString, einer Windows-API, übergebene Zeichenfolge erfasst und auf dem Bildschirm anzeigt“.

Der DebugView-Beispielbildschirm sieht wie folgt aus.

DebugView 예시 화면
DebugView-Beispielbildschirm

* Quelle: https://docs.microsoft.com/ko-kr/sysinternals/downloads/debugview#installation-and-use

2.2.2. Verwenden Sie das DebugView-Dienstprogramm

Laden Sie DebugView herunter und führen Sie es aus. Führen Sie dann das Filter/Highlight-Menü aus.

DebugView Filter/Highlight 메뉴
DebugView Filter/Hervorhebungsmenü

Wenn das obige Menü ausgeführt wird, wird der folgende Bildschirm angezeigt.

DebugView Filter/Highlight 화면
DebugView Filter/Highlight-Bildschirm
  • Einschließen: Geben Sie eine Zeichenfolge ein, die in der anzuzeigenden Nachricht enthalten sein soll. Verwenden Sie * als Platzhalterzeichen (z. B. [VBA]*), um alle Meldungen auszugeben, wenn sie leer sind. Wenn Sie mehrere Zeichenfolgen eingeben, trennen Sie diese durch Semikolons (;).
  • Ausschließen: Geben Sie eine in der Nachricht enthaltene Zeichenfolge ein, die nicht ausgegeben werden soll. Wenn Sie mehrere Zeichenfolgen eingeben, trennen Sie diese durch Semikolons (;).
  • Hervorheben: Wählen Sie die Filter 1 bis 20 und wählen Sie eine Zeichenfolge und Farbe zum Hervorheben aus. Vordergrundfarbe und Hintergrundfarbe können eingestellt werden

Beachten Sie Folgendes: Wenn Sie in Include keine Zeichenfolge zum Filtern eingeben, werden die Nachrichten, die von verschiedenen Prozessen ausgegeben werden, erfasst und vermischt. Es wird empfohlen, die zu filternde Zeichenfolge nach Bedarf anzugeben.

„2.1. Um das Ergebnis des im Inhaltsverzeichnis von „VBA-Code“ geschriebenen Beispiel-VBA-Codes zu erfassen, geben Sie „[VBA]*“ in „Einschließen“ ein und klicken Sie auf die Schaltfläche „OK“.

Wenn Sie den VBA-Code ausführen, können Sie die in DebugView erfasste Meldung wie folgt überprüfen.

Als Referenz können Sie mit der Highlight-Funktion so etwas ausgeben:

DebugView의 Highlight 기능 예시
Beispiel für die Highlight-Funktion von DebugView

Wenn eine Hintergrundfarbe und eine Vordergrundfarbe unterschiedlich sind, wenn eine bestimmte Zeichenfolge enthalten ist, ist es visuell sehr gut, den aktuellen Fortschritt des Protokolls zu überprüfen.


Bisher haben wir effektive Protokollierungsmethoden unter Verwendung der Windows-API-Dienstprogramme OutputDebugString und DebugView in Excel VBA betrachtet.

DebugView hat viele attraktive Funktionen wie Highlight und Remote Logging. Diese Funktionen werden später in einem separaten Artikel behandelt.


Demonstrationsvideo der DA#-Makrofunktion (YouTube) In dem Beitrag habe ich die Situation aufgezeichnet, in der Nachrichten im DebugView-Dienstprogramm erfasst werden.

Im Video unten ist die obere rechte Ecke die DebugView. Sie können ein Protokoll darüber aufzeichnen, wie die Funktion funktioniert, und es später überprüfen.

Beachten Sie, dass, DA#-Makro(1): DA#, DA#-API, DA#-Makroübersicht Das in eingeführte DA#-Makro verwendet LOG_PREFIX als „[DA#]“.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

de_DEDeutsch