Das Debugger-Verbindungsfenster
Das Debugger-Verbindungsfenster Beschreibung des Verbindungsfensters
Für jede Verbindung zwischen einer Anwendung und dem Debugger wird ein eigenes Verbindungsfenster angezeigt.

In der Titelzeile des Verbindungsfensters und in der Statusleiste des Debuggers wird der Zustand der Verbindung und die Version des Clients angezeigt, mit dem die Verbindung hergestellt wurde:
- Es besteht keine Verbindung zu einer Applikation.
- Es besteht eine Verbindung zu einer Applikation auf einem anderen Rechner oder mit einer Version älter als 5.8.04.
- Es besteht eine Verbindung zu einer Applikation auf dem gleichen Rechner.
- Die Verarbeitung einer Prozedur wurde angehalten.
Der Zustand in der Titelzeile wird nur bei nicht maximierten Verbindungsfenstern angezeigt. Der Zustand in der Statusleiste bezieht sich immer auf das aktuelle Verbindungsfenster.
Hinter dem Zustand der Verbindung wird in der Statuszeile die Version des Clients angezeigt, mit dem die Verbindung aufgebaut.
Der Debugger stellt eine Verbindung zum CONZEPT 16-Server her und meldet sich dort mit einem speziellen Benutzer an die Datenbank an. Kann der Benutzer nicht angemeldet werden (zum Beispiel, wenn in die Datenbank zu diesem Zeitpunkt ein Update eingelesen wird, die Datenbank ist dann gesperrt), gibt der Debugger eine entsprechende Fehlermeldung aus.
Der Debugger kann nur dann verwendet werden, wenn in der Datenbank der Prozedurtext vorhanden ist. Ohne Prozedurtext ist eine Fehlersuche nicht möglich.
Das Verbindungsfenster ist in vier Bereiche aufgeteilt:
Die einzelnen Bereiche können über das Menü "Ansicht" ein- und ausgeblendet werden. Über den Eintrag "Einzelansicht" wird der gesamte Fensterbereich einem der Bereiche zur Verfügung gestellt.
In einigen Bereichen werden Listen dargestellt. In allen Listen kann die Breite der Spalten durch Ziehen der Spaltenzwischenräume zwischen den Spaltenüberschriften verändert werden. Durch Anklicken der Spaltenzwischenräume kann die ursprüngliche Spaltenbreite wieder hergestellt werden. Die Reihenfolge der Spalten kann durch Verschieben der Spaltenköpfe geändert werden.
Prozedur
Ist die Verarbeitung einer Prozedur angehalten, wird die Prozedur in diesem Bereich dargestellt. Die Zeile mit der Anweisung, die als nächstes ausgeführt wird, ist mit einem farbigen Balken markiert.
Innerhalb der Prozedur kann mit einem Doppelklick auf eine Variable oder ein Feld die Variable in die Liste der überwachten Variablen aufgenommen werden. Existieren mehrere Variablen mit dem gleichen Namen, werden alle Variablen in die Liste der gefundenen Variablen eingetragen. Aus dieser Liste kann dann die Variable aus dem gewünschten Kontext in die Liste der zu überwachenden Variablen übernommen werden. Durch Anklicken der Variable bei gleichzeitigem Drücken der -Taste wird die Variable des aktuellen Kontextes direkt in die Liste der zu überwachenden Variablen aufgenommen.
Wird mit der Maus über ein Feld oder eine Variable in der aktiven Funktion gefahren, erscheint ein Tooltip mit dem Inhalt. Dieser wird je nach Datentyp in mehreren unterschiedlichen Interpretations- und Darstellungsformen angezeigt. Hier am Beispiel für den Datentyp int:
Wird im linken Rand das Kontextmenü aufgerufen, können innerhalb der Prozedur Breakpoints gesetzt werden. Die Verarbeitung der Prozedur kann dann fortgesetzt werden und wird erst wieder beim nächsten Breakpoint unterbrochen.
Mit folgenden Tastenkombinationen können Suchleisten in der Prozeduransicht angezeigt werden:
+
Aktiviert die Suchleiste mit der Funktion "Suchen".
+
+
Aktiviert die Suchleiste mit der Funktion "Gehe zu Funktion".
+
Aktiviert die Suchleiste mit der Funktion "Gehe zu Zeile".
Protokoll
Im Protokollbereich werden alle Ausgaben, die mit dem Befehl DbgTrace () durchgeführt werden, eingetragen. Darüber hinaus kann über das Protokoll -Menü der Aufruf und der Rücksprung von bzw. aus Prozedur und Funktionen protokolliert werden.
Mit den Anweisungen DbgControl ( _DbgTimeStart ) und DbgControl ( _DbgTime ) kann die Laufzeit von Funktionen oder Teilbereichen von Funktionen gemessen werden. Die Ausgabe der Laufzeiten erfolgt im Protokollbereich.
Der Inhalt des Protokolls kann mit den entsprechenden Funktionen in einer externen Datei gespeichert werden. Einträge können auch per Mehrfachauswahl in die Zwischenablage kopiert werden.
Alle Variablen
In diesem Bereich kann über die entsprechende Notizbuchseite auf verschiedene Felder und Variablen zugegriffen werden. Der Zugriff ist nur möglich, wenn die Verarbeitung einer Funktion unterbrochen wurde.
Suche
Auf dieser Seite kann eine Suche über alle Felder, globale Variablen und lokale Variablen durchgeführt werden. Bei der Suche können die Wildcards * und ? angegeben werden. Nach Drücken der Taste werden alle gefundenen Variablen, Felder und Argumente in der darunterliegenden Liste dargestellt. Einzelne Variablen können durch Doppelklick in die Liste der überwachten Variablen übernommen werden. Zusätzlich können mehrere Variablen markiert werden und mit der Taste
überwacht werden. Über die Schaltflächen
und
können keine bzw. alle Einträge in der Liste selektiert werden.
Die Schaltfläche trägt alle gefundenen Variablen in die überwachten Variablen ein. Mit Drücken der Schaltfläche
kann die Liste geleert werden.
Bei der Suche werden alle Felder und alle bereits angelegten Variablenbereiche berücksichtigt. Dies sind die lokalen Variablen der aufgerufenen Funktionen und die globalen Variablen, deren Bereiche in den aufgerufenen Funktionen allokiert wurden. Dabei spielt es keine Rolle, ob eine lokale Variable noch gültig ist oder der globale Variablenbereich mittlerweile wieder freigegeben wurde.
Ist zum Zeitpunkt der Suche eine Datenbank mit der Anweisung DbaConnect () verbunden, werden die Felder dieser Datenbank ebenfalls durchsucht.
Über die Auswahlliste im Punkt Filter lassen sich die zu suchenden Datentypen und Datenbereiche einschränken. Dabei werden die markierten Einträge aus beiden Kategorien mit UND und innerhalb eine Kategorie mit ODER kombiniert.
In der Liste werden die gefundenen Felder und Variablen angezeigt. Neben dem Namen der Variablen oder des Feldes werden der Kontext (Funktion, in der die Variable gültig ist bzw. Datei-, Teildatensatz- und Feldnummer) und der Inhalt angezeigt.
Wird durch die Suche nur ein Feld oder eine Variable gefunden, wird das Feld bzw. die Variable sofort in die Liste der überwachten Variablen übernommen, wenn in den Einstellungen die Option Schneller Einfügemodus beim Suchen aktiviert ist.
Je nach Größe des Bereiches Alle Variablen werden nicht alle Objekte auf der Suchseite angezeigt.
Felder
Auf dieser Seite können alle Felder der Datenstruktur eingesehen werden.
Global
Hier werden alle globalen Variablenbereiche, die in den aufgerufenen Funktionen angelegt wurden, angezeigt. Die Variablenbereiche werden auch dann angezeigt, wenn sie wieder freigegeben wurden.
Lokal
Auf dieser Seite werden die lokalen Variablenbereiche der bislang aufgerufenen Prozeduren angezeigt. Der Fokus steht auf dem Bereich der Funktion, die zur Zeit durchgeführt wird.
Deskriptoren werden mir ein "+" vor dem Variablensymbol angezeigt. Hat der Deskriptor untergeordnete Objekte können diese mit Klicken auf das "+" aufgeklappt werden. Sind keine Objekte vorhanden, wird das Symbol ausgeblendet. Bei Oberflächenobjekten werden die untergeordneten Objekte und bei Ereignissen, das auslösende Objekt angezeigt. Es wird nur eine begrenzte Anzahl von Objekten angezeigt. Durch Anklicken von "Mehr anzeigen" können weitere Objekte angezeigt werden. In Klammern steht die Anzahl der angezeigten und die Anzahl der insgesamt untergeordneten Objekte. Da die Deskriptoren keiner Variablen zugeordnet sind, entspricht die Anzeige dem Wert des Deskriptors. Im Bereich der überwachten Variablen können dann auch die Eigenschaften dieser Objekte verändert werden. Durch Anklicken des "-"-Symbols kann eine Baumstruktur wieder zusammengeklappt werden.
Durch Drücken von Strg+F kann auch der Wert eines Deskriptors angegeben werden (zum Beispiel "10103"). In dem Fall wird der angezeigte Objektbaum nach dem Deskriptor durchsucht und auf das entsprechende Objekt positioniert. Es werden nur Objekte gefunden, die in dem Baum angezeigt werden.
Über den Eintrag "Elternelement anzeigen" des Kontextmenüs kann von Oberflächenobjekten das Eltern-Objekt ermittelt werden. Das Eltern-Objekt wird in dem Registerreiter "Temporäre Handles" angezeigt.
System
Im diesem Bereich werden Systemvariablen und die aktiven Funktionen angezeigt. Der globale Fehlerwert und der aktuelle Speicherverbrauch (siehe ProcessMemoryKb) können mit einem Doppelklick in die Liste der überwachten Variablen aufgenommen werden. Ein Anhalten bei Änderungen in den Systemvariablen ist allerdings nicht möglich.
Die aktiven Funktionen sind alle Funktionen, in die bei einer weiteren Verarbeitung wieder zurückgesprungen wird. Es sind also die Funktionen, die Unterfunktionen aufgerufen haben, die noch nicht beendet wurden.
Temporäre Handles
Dieser Registerreiter wird nur angezeigt, wenn ein Deskriptor eines Eltern-Objekts angezeigt werden soll. In der angezeigten Liste kann wie auf der Seite "Lokal" durch den Objekt-Baum navigiert werden. Die Elternelemente können aus der Registerkarte wieder gelöscht werden, indem das Element durch einen Rechtsklick ausgewählt und im Menü der Punkt "Variable löschen" angeklickt wird. Wenn keine Elemente in der Registerkarte vorhanden sind, wird diese wieder gelöscht.
Um den Wert einer Variablen oder eines Feldes zu überprüfen, muss auf der entsprechenden Seite der Eintrag doppelt angeklickt werden. Der Name wird dann in die Liste der überwachten Variablen aufgenommen.
Auf den Seiten Felder , Global , Lokal und Temporäre Handles kann gesucht werden. Wird in dem jeweiligen Baum die Taste oder die Tastenkombination
+
gedrückt, kann in einem Eingabefeld ein Name aus dem Baum angegeben werden. Nach Abschließen der Eingabe mit
wird auf das entsprechende Element positioniert. Die Verwendung von Wildcards (, ?) ist bei der Suche möglich. Sind keine Wildcards angegeben wird nach allen Stellen gesucht, die den Suchbegriff enthalten (
<Begriff>*).
Überwachte Variablen
In diesem Bereich können die Inhalte von Feldern, globalen und lokalen Variablen und Systemvariablen eingesehen werden. Um eine Variable oder ein Feld in die Liste aufzunehmen, kann entweder in der dargestellten Prozedur oder im Alle Variablen -Bereich der Name der Variablen oder des Feldes doppelt angeklickt werden. Erzielt die Suche nur einen Treffer, wird diese Variable oder dieses Feld automatisch in die Liste der überwachten Variablen aufgenommen, wenn in den Einstellungen die Option Schneller Einfügemodus beim Suchen aktiviert ist. In die Liste der überwachten Variablen können bis zu 1000 Variablen eingetragen werden.
Von überwachten Feldern oder Variablen wird der Status, der Name, der Wert und der Kontext angezeigt. Handelt es sich um einen Deskriptor können die Eigenschaften des Deskriptors im Bereich "Details" eingesehen werden.
In der Spalte "Status" werden Informationen zu dem Überwachungsstatus und der Variablen angezeigt:
Überwachungsstatus:
Der Debugger kann die Werte von verschiedenen Variablen und Feldern kontrollieren. Tritt in diesen Variablen oder Feldern eine Veränderung des Wertes auf, unterbricht der Debugger automatisch die weitere Verarbeitung der Funktion. Die Verarbeitung bleibt nach der Anweisung, die die Änderung hervorgerufen hat, stehen. Wird die Veränderung durch eine Benutzerinteraktion verursacht (zum Beispiel Selektieren eines Datensatzes in einem RecList -Objekt), bleibt die Verarbeitung an der nächsten möglichen Stelle stehen (zum Beispiel beim Aufruf des nächsten Ereignisses).
- grüne Markierung - Verarbeitung der Prozedur wird angehalten, sobald sich der Wert der Variablen ändert.
- rote Markierung - Die Verarbeitung der Prozedur wurde angehalten, weil sich der Wert der Variablen geändert hat.
- graue Markierung - Die Variable wird nicht kontrolliert.
Die Systemvariablen können nicht kontrolliert werden.
Die Markierung kann zur Laufzeit der Prozedur über einen Doppelklick geändert werden.
Herkunft:
Die Herkunft der Variablen wird über Buchstaben gekennzeichnet:
- F - Datenbankfeld
- G - globale Variable
- L - lokale Variable
- S - Systemvariable
Feld- oder Variablen-Typ:
In der ersten Spalte wird ebenfalls der Typ der Variablen über ein entsprechendes Symbol angezeigt.
Je nach verwendeter Sortierung steht in der Spaltenüberschrift noch eine "1" oder "2". Werden die Variablen nach dem Status sortiert, können sie entweder in der Reihenfolge ihrer Herkunft (1) oder ihres Typs (2) sortiert sein. Durch nochmaliges Anklicken der Spaltenüberschrift kann zwischen den beiden Sortierungen gewechselt werden.
Im Inhalt wird der Wert der entsprechenden Variablen oder des Feldes dargestellt. Der Inhalt kann durch Doppelklick in die Spalte "Inhalt" oder durch Drücken der -Taste verändert werden. Durch erneutes Drücken der Eingabetaste wird der Wert übernommen. Der Inhalt von Variablen vom Typ
event und caltime, sowie Variablen außerhalb ihres Gültigkeitbereiches können nicht editiert werden. Wird eine Variable oder ein Feld bearbeitet, steht der Name im Titel des Bereiches in der Form -> Name.
Zusätzlich werden die unterschiedlichen Interpretationsmöglichkeiten des jeweiligen Datentyps für Variablen und Felder mit mehreren Möglichkeiten unterhalb der Liste dargestellt. Diese können in den angezeigten Feldern auch bearbeitet werden. Hier am Beispiel für Datentyp int:
Bei einem Deskriptor werden die Eigenschaften des Objekts angezeigt. Die Eigenschaften, die grundsätzlich editiert werden können, können ebenfalls im Debugger verändert werden.
Die Anzeige der Variablendetails kann in den Einstellungen unter Anzeige ein- bzw. ausgeblendet werden.
Bei Variablen, die zurzeit keine Gültigkeit haben (weil zum Beispiel die Funktion, in der die Variablen definiert ist, nicht aufgerufen ist), wird der Inhalt der Variablen rot hinterlegt.
Bei den Datentypen point und rect wird der Cursor in die entsprechende Komponente positioniert. Anschließend kann der Wert über die Schaltflächen an der rechten Seite des Eingabefeldes oder durch die Eingabe eines neuen Wertes verändert werden.
Wird in den Wert des Datentyps font geklickt, wird ein Eingabefenster angezeigt:
In diesem Fenster wird die Schriftart und der Schriftgrad angezeigt. Durch Anklicken in den betreffenden Bereich kann ein anderer Font oder Schriftgrad gewählt werden. Die Schaltflächen unterhalb des Eingabefeldes zeigen die Attribute der Schrift an. In der Reihenfolge der Schaltflächen sind das Fett, Kursiv, Unterstrichen und Durchgestrichen. Durch das Verlassen des Feldes wird die Variable entsprechend gesetzt.
Die Eigenschaften von Deskriptor Variablen können betrachtet und modifiziert werden. Wenn die Variable in der Liste der überwachten Variablen selektiert ist, werden darunter in "Details" die Attribute angezeigt. Eigenschaften die nicht editierbar sind werden mit einem grauen Hintergrund angezeigt. Bei CteNode werden alle "Value" Eigenschaften angezeigt, obwohl nur eine Interpretation richtig ist. Wenn eine Eigenschaft nicht editiert werden konnte wird, der Fehler in einer Ballon-Hilfe angezeigt.
Standardmäßig werden die Eigenschaften nach Typ unterteilt. Die Sortierung der Eigenschaften kann über ein Rechtsklick auf den Eigenschaften geändert werden. Dabei erscheint ein Menü, welches die Auswahl zwischen Sortierung nach Gruppen und nach Namen bietet. Die Sortierung nach Name erfolgt alphabetisch.
Anders als bei üblichen Variablen steht hier bei überwachten Variablen im Kontext das übergeordnete Objekt.
Im Kontext wird bei Feldern die Dateinummer, Teildatensatznummer und die Feldnummer angegeben. Bei lokalen Variablen ist hier die Funktion angegeben, in der sie deklariert ist. Bei globalen Variablen wird der Name des Variablenbereiches angezeigt.
Die Liste kann nach dem Namen der Variablen oder Typ durch Anklicken der entsprechenden Spaltenüberschriften sortiert werden. Die Sortierung nach Typ wird dabei zunächst nach der Herkunft der Variablen (Felder, lokale Variablen, globale Variablen) vorgenommen. Durch erneutes Anklicken der Spaltenüberschrift erfolgt die Sortierung nach dem Typ (alpha, int, ...) der Variablen.
Eine Variable oder ein Feld kann mit der -Taste aus der Liste entfernt werden. Dazu muss zuvor der Eingabefokus auf den betreffenden Eintrag gestellt werden.