9 Tracing (Ablaufverfolgung)

Die Abarbeitung im Dialog Manager kann mit Hilfe verschiedener Kommandozeilen-Switches automatisch mitprotokolliert und Fehler erkannt werden.

9.1 Beschreibung des Tracing

Mit Hilfe der Tracing-Einrichtung können Dialog Manager-Anwendungen ausgetestet und Fehler beseitigt werden. Die Trace-Datei beinhaltet alle ausgeführten Regeln, alle aufgerufenen Anwendungsfunktionen und alle aufgerufenen Dialog Manager-Funktionen mit ihren gegenwärtigen Parametern (bitte vergleichen Sie hierzu auch das Handbuch „C-Schnittstelle - Grundlagen“). Des weiteren werden protokolliert:

Die Datei sieht allgemein wie folgt aus:

[<Abkürzung>]Aktion

In <Aktion> steht die Erklärung dazu, was gerade gemacht wurde.

Die <Abkürzung> steht dafür, was der Dialog Manager gemacht hat. Folgende Codes können hier vorkommen:

[AC]

AppMain call. Aufruf an Main-Programm AppMain des Benutzers.

[AR]

AppMain return. Rückgabewert des AppMain-Programms an den Dialog Manager.

[BA]

Builder action: Start einer Aktion (z.B. ‑writeexport) im Builder-Prozess-Modus.

[BC]

Builtin function call. Aufruf einer eingebauten Funktion .

[BD]

Builder return: Ende einer Aktion (z.B. ‑writeexport) im Builder-Prozess-Modus.

[BM]

Builder message: Nachricht des IDM im Builder-Prozess-Modus.

[BR]

Builtin function return. Rückgabewert einer eingebauten Funktion.

[BX]

Builder command: Kommando für den IDM im Builder-Prozess-Modus, z.B. ‑buildertimeout.

[DC]

Dump Call. Quelltext-Ausgabe des aktiven Fensters nach Drücken der mit der Startoption -IDMobjdump_fkey definierten Funktionstaste.

[DE]

Dialog event. Benutzerereignis, das vom Benutzer durch Interaktion mit dem System erzeugt wurde.

[DR]

Dump Return. Ende der Quelltext-Ausgabe des aktiven Fensters nach Drücken der mit der Startoption -IDMobjdump_fkey definierten Funktionstaste.

[DS]

Dialog start. Ausführung der Dialogstart-Regel.

[EC]

ErrorHandler Call. Fehlerhandler wird aufgerufen

[EE]

Exit. Die Anwendung wird nicht normal beendet. Der Status des Abbruchs wird in die Trace-Datei geschrieben.

[EF]

Evaluation failure. Evaluationsfehler während des Interpretierens von Regelcode. Ausgabe erfolgt beispielsweise auch innerhalb einer fail()-Klammerung.

[ER]

ErrorHandler Return. Rückkehr aus dem Fehlerhandler

[EQ]

Return executing SQL statement. Rückgabewert nach der Ausführung eines SQL-Statements.

[EX]

External event. Externes Ereignis.

[FA]

Function assignment phase (Phase der Funktionszuweisung). Die übergebenen Parameter mit Schreibzugriff (als Ausgabeparameter deklariert) werden nun ihren Objektattributen zugewiesen.

[FC]

Function call. Eine Funktion der Anwendung wurde vom Dialog Manager aufgerufen.

[FE]

Finish dialog. Dialog beenden-Ereignis, das durch den Aufruf der Funktion exit in den Regeln aufgerufen wurde.

[FR]

Function call return. Rückgabewert einer Anwendungsfunktion.

[IA]

Interface argument. Argument, das von der Anwendung an eine Dialog Manager-Funktion übergeben wurde.

[IC]

Interface call. Eine Dialog Manager-Funktion wurde von der Anwendung aufgerufen.

[IE]

Interface error. Dialog Manager-Funktion gibt Fehler zurück.

[IR]

Interface call return. Rückgabewert einer Dialog Manager-Funktion.

[IV]

Interface value. Zusätzliche Werte, übergeben zu oder zurückgegeben von Schnittstellenfunktionen.

[MC]

Method call. Aufruf einer Methode.

[ME]

Module loading finished. Das Laden eines.Moduls ist beendet

[ML]

Module loading. Ein Modul wird geladen

[MR]

"Method return". Rückgabewert einer Methode.

[NI]

Network information. Dies beschreibt, welches Netzwerkprotokoll ausprobiert wurde und welches gestartet wurde.

[PD]

Finish of perform rule. Ausführung von Sub-Regel wurde beendet.

[PR]

Perform rule. Aufruf einer Sub-Regel durch eine andere Regel.

[RC]

Rule call. Aufruf einer benannten Regel.

[RR]

Rule return. Rückgabewert einer benannten Regel.

[SC]

Simulated function call. Simulierter Funktionsaufruf.

[SE]

Setval event. Internes Ereignis, das durch das Setzen eines Objektattributes erzeugt wurde.

[SQ]

Execute SQL statement. Ausführen eines SQL-Statements.

[SR]

Simulated function return. Rückgabewert einer simulierten Funktion.

[SV]

SetValue. SetValue zu Attribut von Objekt.

[TD]

Tracing disabled. Abschalten des Tracing.

[TE]

Tracing enabled. Aktivierung des Tracing.

[UA]

Userclass argument. Informationen über ein Argument einer USW Callback-Funktion.

[UC]

Userclass call. Eine USW Callback-Funktion wird aufgerufen.

[UM]

User message. Diese Meldung wurde von der Anwendung mit Hilfe des Aufrufs von DM_TraceMessage geschrieben.

[UR]

Userclass return. Rückkehr aus einer USW Callback-Funktion.

[UV]

Userclass value information. Informationen über einen Rückgabewert einer USW Callback-Funktion.

[VS]

Versionstring. Versionsstring der verwendeten Dialog Manager-Version (5 Zeilen).

[WE]

Window system event. Fenstersystem-Ereignis.

[XD]

Finish execution rule. Ausführung einer Regel wurde beendet.

[XR]

Execution rule. Ausführung einer Regel wurde gestartet.

9.2 Konfigurierung des Tracing

Bei der Bearbeitung sehr großer Dialoge werden auch die Tracedateien entsprechend groß. Aus diesem Grund kann das Tracing konfiguriert werden. Die Möglichkeit das Tracing an- und auszuschalten (setup.tracing := true/false) ist dabei zusätzlich verfügbar.

Die Konfigurierbarkeit des Tracing ermöglicht es, das Tracing für spezielle Trace-Ereignisse abzustellen. Dies kann z.B. nützlich sein für Schleifen oder andere trace-intensive Regeln bzw. Programmcodes. Sie können die Trace-Ereignisse am Setup-Objekt abstellen. Das Attribut .tracing wird mit einem String indiziert:

setup.tracing["<Abkürzung>"] := false;

Beispiel

setup.tracing["RR"] := false;

Diese Definition stellt alle Rückgabewerte von benannten Regeln ab.

Beim Abstellen bestimmter Trace-Ereignisse – z.B. ["RC"] (Aufruf einer benannten Regel) – können Sie auch einen Gruppierungseffekt erreichen: in dem eben genannten Beispiel werden neben den Aufrufen benannter Regeln auch die Rückgabewerte benannter Regeln unterdrückt. (s. unten Tabelle Spalte Gruppierung.)

Anmerkung

Bitte beachten Sie, dass folgende Trace-Ereignisse nicht abzustellen sind:

Warnung

Falls Sie die Unterstützung des IDM-Supports benötigen sollten, empfehlen wir Ihnen, nicht zu viele Trace-Messages abzustellen. Ansonsten kann Ihnen eventuell nicht effizient geholfen werden, da aufgrund des Fehlens entscheidender Trace-Messages keine ausreichende Analyse möglich ist.

Im Folgenden finden Sie entsprechende Programmiertipps.

Richtig

variable boolean I_NEED_HELP_FROM_ISA_SUPPORT := true;
...
rule MyCode()
{
  TraceEvent("RC", false);
  ...
}

rule TraceEvent(string TraceTag, boolean Value)
{
  !! Check the global variable for support.
  if ( not I_NEED_HELP_FROM_ISA_SUPPORT ) then
    setup.tracing[TraceTag] := Value;
  endif
}

Falsch

rule MyCode()
{
  !! Do not look for help in your rules without a trace.
  !! Nobody knows which rule was called!
  setup.tracing["RC"] := false;
  ...
}

In der folgenden Tabelle ist zusammengefasst, wie Trace-Ereignisse in der Tracedatei gruppiert und eingerückt werden. Außerdem ist angegeben, ob die Trace-Meldungen vom Benutzer abgestellt werden können. In der Tabelle bedeuten:

Abkürzung

Gruppierung

Einrückung

An-/Abstellbar durch Benutzer

IC

IC

>

Ja

IR

IC

<

Ja

IE

--

=

Nein

IA

IC

=

Ja

IV

IC

=

Ja

FC

FC

>

Ja

FR

FC

<

Ja

FA

FC

=

Ja

EE

--

=

Nein

VS

--

=

Nein

UM

--

=

Nein

UC

--

=

Ja

UR

--

=

Ja

UA

--

=

Ja

UV

--

=

Ja

AC

AC

>

Ja

AR

AC

<

Ja

NI

--

=

Nein

TE

--

=

Nein

TD

--

=

Nein

SV

--

=

Ja

PR

PR

>

Ja

PD

PR

<

Ja

SQ

SQ

>

Ja

EQ

SQ

<

Ja

BC

BC

>

Ja

BR

BC

<

Ja

RC

RC

>

Ja

RR

RC

<

Ja

MC

MC

>

Ja

ME

ME

=

Nein

ML

ME

=

Nein

MR

MC

<

Ja

DS

--

=

Ja

FE

--

=

Ja

SE

--

=

Ja

EX

--

=

Ja

DE

--

=

Ja

XR

XR

>

Ja

XD

XR

<

Ja

SC

SC

>

Ja

SR

SC

<

Ja

WE

--

=

Ja

EC

--

>

Ja

ER

EC

<

Ja

9.3 Zeitstempel bei der Ablaufverfolgung

Mit Hilfe der Option ‑IDMtracetime <Nr> kann während des Programmablaufes der absolute oder relative Zeitbedarf von Funktionen und Regeln mitprotokolliert werden. Dadurch ist es möglich, Stellen zu identifizieren, die sehr Zeit intensiv sind und daher sich für diese Funktionen oder Regeln entsprechende Tuningmaßnahmen lohnen können.

Es gibt drei Arten der Zeitmessung, die über den Parameter <Nr> eingestellt werden können:

0
Im Tracefile werden keine Zeiten aufgeführt
1

Dieser Wert kennzeichnet den Starttime-Modus. Bei diesem Modus werden alle Start- und Endezeiten mitprotokolliert, der Zeitverbrauch für einen einzelnen Aufbau kann dann aus der Differenz berechnet werden. Dabei wird in diesem Modus ausschließlich die System- und die Benutzerzeit betrachtet.

In diesem Modus erscheinen im Tracefile am Zeilenanfang die Zeiten im Format [hh:mm:ss:uuu]:

  • hh = Stunden
  • mm = Minuten
  • ss = Sekunden
  • uuu = Millisekunden
2

Dieser Wert kennzeichnet den Tracetime-Modus. In diesem Modus wird der Zeitunterschied zum letzten mitprotokollierten Aufruf gegeben. In diesem Modus kann also relativ einfach erkannt werden, wie viel Zeit für einzelne Aktionen verbraucht wird.

In diesem Modus erscheinen im Tracefile die Zeitdifferenz zur letzten Trace-Ausgabe im Format [ss:uuu] am Zeilenanfang:

  • ss = Sekunden
  • uuu = Millisekunden
3

Dieser Wert kennzeichnet den Realtime-Modus. In diesem Fall wird für jede zu protokollierende Aktion die reale Zeit (Uhrzeit) im Tracefile abgelegt.

In diesem Modus erscheinen im Tracefile die Realzeit im Format [hh:mm:ss] am Zeilenanfang:

  • hh = Stunden
  • mm = Minuten
  • ss = Sekunden

9.4 Safety-Tracing

Verfügbarkeit

Der Safety-Modus des Tracing ist in den DM Versionen A.05.01.g3 und A.05.01.h sowie ab A.05.02.e verfügbar.

Das Safety-Tracing ist ein besonderer Modus des Tracefiles. Um das Mitlaufen des Tracefiles auch bei längeren Anwendungssitzungen mit möglichst geringen Performanzeinbußen und Ressourcenverbrauch zu ermöglichen, wird in diesem Modus ein Tracing in einen begrenzten Ringpuffer, der im Speicher gehalten wird, durchgeführt. Hierzu muss statt der Option ‑IDMtracefile <filepath> entweder ‑IDMstracefile <filepath> verwendet werden oder zusätzlich zu ‑IDMtracefile <filepath> der Safety-Modus über ‑IDMstrace eingeschaltet werden.

Bezogen auf den Ringpuffer heißt begrenzt, dass die Zeilenzahl und die Anzahl der Zeichen pro Zeile (ohne Einrückung) beschränkt sind. Außerdem wird eine Kürzung bei der Ausgabe von Stringwerten (typischerweise in "…" gesetzt) vorgenommen und die Stringlänge in [ ] angehängt. Die Begrenzungen können über die Option ‑IDMstraceopts beeinflusst werden. Für die hierarchische Einrückung im Tracefile werden zwei Leerzeichen verwendet. Dies kann nicht durch die Option ‑IDMindent beeinflusst werden. Sind die ausgegebenen Zeilen nicht zusammenhängend, so ist dies durch eine Zwischenzeile mit einem Doppelpunkt kenntlich gemacht. Ein Überschreiten der maximalen Zeilenlänge ist durch eine Tilde (~) am Zeilenende gekennzeichnet.

Der Inhalt des Ringpuffers wird erst beim Beenden der Anwendung in die Trace-Datei geschrieben. Um das Speichern auch bei Abstürzen zu gewährleisten, ist ein aktiver Exception-Catcher (siehe Kapitel „Exception-Catcher“) nötig.

Ein Abschalten des Tracing oder der Ausgabe bestimmter Tracecodes ist beim Safety-Tracing nicht möglich.

Beim Safety-Tracing gelten folgende Begrenzungen:

 

Minimal

Maximal

Standard

Bytes pro Zeile

20

65.536

200

Zeilen

20

100.000

1.000

Stringlänge

 

 

40

Einrückungstiefe

 

50 (100 Leerzeichen)