Sicht 'Debug' verwenden

In der Sicht 'Debug' können Sie das Debugging eines Programms verwalten. Darin wird der Stack für die ausgesetzten Threads jedes Ziels angezeigt, für das Sie ein Debug ausführen. Debugziele (verbunden mit Threads und Stack-Frames) werden in der Sicht 'Debug' für jedes Programm und jede Anwendung angezeigt, für die ein Debug ausgeführt wird.

Informationen zu diesem Vorgang

Das folgende Diagramm zeigt ein typisches Debugziel in der Sicht 'Debug':

Sicht Debug

In der Sicht 'Debug' werden Starts, die zum Starten der Debugsitzung für das Programm verwendet werden, auf der obersten Knotenebene angezeigt (Zeiger A. im Diagramm). Unter dem Start wird ein Knoten angezeigt, der die Debugsteuerkomponente darstellt (Zeiger B. im Diagramm). Dann wird jeder Thread Ihres Programms angezeigt (Zeiger C. im Diagramm). Wenn die Programmausführung gestoppt wird, wird standardmäßig der Knoten des betreffenden Threads automatisch erweitert, sodass seine Stack-Frames angezeigt werden (Zeiger D. im Diagramm). Wenn Sie manuell andere Threads erweitern, werden diese Threads beim nächsten Aussetzen des Programms automatisch erweitert. Schließlich wird ein Knoten angezeigt, der den Prozess und das Programm darstellt, für die der Debug ausgeführt wird (Zeiger E. im Diagramm).

Anmerkung:
  • Bei Anwendungen mit nur einem einzigen Thread (solche, die ohne Angabe von libpthreads.a erstellt wurden) handelt es sich bei der in der Sicht 'Debug' angezeigten Thread-ID immer um eine Kernel-Thread-ID. Dies ist normalerweise eine größere Zahl.
  • Bei Multithread-Anwendungen (solche, die unter Angabe von libpthreads.a erstellt wurden) handelt es sich bei der in der Sicht 'Debug' angezeigten Thread-ID um die pthread-ID. Dies sind normalerweise kleinere Zahlen. Bei einem Thread mit einer sehr langen Thread-ID handelt es sich um einen Kernel-Thread, der derzeit nicht zu einem pthread gehört. Dies ist normalerweise der Fall, wenn die Anwendung ein asynchrones Signal, wie zum Beispiel SIGSTOP, empfangen hat. Diese Threads verschwinden, wenn das Signal verarbeitet wurde.
  • Wenn Sie sich dafür entscheiden, nach einem Aufruf fork() in einem Multithread-Prozess dem Kindprozess zu folgen, führt der Debugger nur für den einen Kernel-Thread ein Debug aus, der im Kindprozess besteht. Die ID dieses Threads ist die eines Kernel-Threads.

Wenn die Programmausführung ausgesetzt wird, wird die Quelle für den ausgewählten Stack-Frame im Editor geöffnet, wobei die Zeile im Quellcode, vor deren Ausführung das Programm gerade steht, hervorgehoben wird. Wenn es in dem Programm viele Threads gibt, befindet sich der Thread, der den Stopp verursacht hat, möglicherweise unten außerhalb des Debugfensters.

Die Sicht 'Debug' kann außerdem zum Definieren des Debuggerdämons verwendet werden. Informationen dazu enthält der Abschnitt zur Empfangsbereitschaft für Debugsteuerkomponenten.

Ausführen, beenden und freigeben

Informationen zu diesem Vorgang

Diese grundlegenden Debugaktionen können Sie in der Sicht 'Debug' ausführen:

  • Wenn Sie Ihre Anwendung ausführen möchten, klicken Sie auf die Schaltfläche 'Wieder aufnehmen' ( Symbol Wieder aufnehmen) oder drücken Sie F8.
  • Wenn Sie die Debugsitzung beenden möchten, klicken Sie auf die Schaltfläche 'Beenden' (Symbol Beenden) oder drücken Sie Umschalt+F8 - oder klicken Sie mit der rechten Maustaste auf das Debugziel (oder einen seiner Threads oder Stacks), das Sie beenden möchten, und wählen Sie eine der Aktionen zum Beenden aus.
  • Wenn Sie das Programm freigeben und ausführen möchten, klicken Sie auf die Schaltfläche 'Verbindung trennen' (Symbol Verbindung trennen). Diese Aktion steht möglicherweise nicht zur Verfügung. Dies ist davon abhängig, wie das Programm, für das Sie das Debug ausführen, gestartet wurde.

Ausführung stoppen

Informationen zu diesem Vorgang

Während der Ausführung der Anwendung, für die Sie das Debug ausführen, können Sie sie (oder einzelne Threads darin) stoppen, indem Sie die Aktion Aussetzen verwenden (Symbol Aussetzen) (Strg+F8). Wenn der Prozess bei der Verwendung dieser Aktion ausgewählt wird, werden alle Threads des Prozesses gestoppt. Wenn Ihre Debugsteuerkomponente das Aussetzen und Wiederaufnehmen einzelner Threads unterstützt und ein Thread ausgewählt wird, wird nur dieser Thread gestoppt. Diese Unterstützung ist nur verfügbar, wenn Sie Version 11.1 oder eine spätere Version der Debugsteuerkomponente verwenden. Der Thread/die Threads in der Anwendung wird/werden ausgesetzt, bis Sie eine Aktion Wieder aufnehmen aufrufen. Wenn Sie eine Aktion zum Aussetzen aufrufen, sendet die Debugsteuerkomponente das Signal SIGSTOP an das Programm, für das Sie das Debug ausführen.

Das Stoppen ist nützlich, wenn es um einen nicht mehr steuerbaren Prozess geht, der ausgeführt wird, aber auf keinen Unterbrechungspunkt trifft. Sie können dann wieder die Kontrolle über die Anwendung übernehmen, indem Sie sie stoppen. Wenn Sie ein Programm stoppen, wird es normalerweise in der Deassemblierungssicht im Editor gestoppt.

Programm ablaufen lassen

Informationen zu diesem Vorgang

Wenn ein Thread ausgesetzt wird, können die Step-Steuerelemente dazu verwendet werden, die Ausführung des Programms schrittweise Zeile für Zeile durchzugehen. Wenn während einer Step-Operation ein Unterbrechungspunkt oder ein Ereignis angetroffen wird, wird die Ausführung bei dem Unterbrechungspunkt bzw. Ereignis ausgesetzt und die Step-Operation wird beendet. Mit Step-Befehlen können Sie Ihr Programm instruktions- oder positionsweise durchgehen.

Die folgenden Step-Befehle sind verfügbar:

  • Step Over (Symbol Step Over)(F6): Wenn Sie Step Over verwenden, geht das Programm zur nächsten Zeile im Quellcode.
  • Step Into (Symbol Step Into)(F5): Wenn Sie Step Into verwenden, geht das Programm zum nächsten Anweisung. Wenn sich in der aktuellen Zeile ein Aufruf einer anderen Funktion befindet, stoppt der Debugger in dieser Funktion.

    Das Verhalten dieses Befehls wird durch die Aktion Step-Filter verwenden beeinflusst (Symbol Step-Filter verwenden/Step Debug)(Umschalt+F5). Wenn der Filter ausgeschaltet ist (Schaltfläche nicht ausgewählt), stoppt der Debugger auch dann in einer aufgerufenen Funktion, wenn sie keine Debuginformationen enthält und die Disassemblierung angezeigt werden muss. Wenn der Filter eingeschaltet ist (Schaltfläche ausgewählt), stoppt der Debugger nur dann in der aufgerufenen Funktion, wenn die Quelle angezeigt werden kann. Wenn die Quelle nicht angezeigt werden kann, verhält er sich so, als hätten Sie Step Over angegeben. Die Umgebungsvariable DER_DBG_ STEP_DEBUG für die Debugsteuerkomponente beeinflusst die Aktion Step-Filter verwenden. Informationen zu den Umgebungsvariablen für die Debugsteuerkomponente enthält der zugehörige Abschnitt.

    Anmerkung: Bei PL/I und COBOL verhält sich die Step-Into-Aktion normalerweise so, als wäre die Step-Filteraktion immer eingeschaltet. Beim Debugging von Programmen, die in diesen Sprachen geschrieben wurden, versucht der Debugger, im Quellcode zu stoppen.
  • Step Return (Symbol Step Return)(F7): Wenn Sie Step Return verwenden, wird Ihr Programm bis zu dem Punkt im aufrufenden Programm direkt nach dem Aufruf der aktuellen Funktion ausgeführt. Normalerweise wird an der Position gestoppt, die der aufrufenden Instruktion folgt. Wenn das aufrufende Programm Debuginformationen enthält, kann dies auch mitten in einer Zeile im Quellcode sein.
  • Animated Step-Into: Wenn Sie diese Aktion verwenden, führt der Debugger eine Step-Into-Aktion wiederholt aus. Sie können die Verzögerung zwischen den einzelnen Step-Into-Aktionen steuern, indem Sie die Aktion Animated Step-Into erneut auswählen.

Rückmeldung