# Nemiver-Handbuch

## Überblick

Nemiver wird ständig weiterentwickelt, um einen unabhängig arbeitenden grafischen Debugger zur Verfügung zu stellen, der sich nahtlos in die GNOME-Arbeitsumgebung einfügt. Das gegenwärtige Backend benutzt den wohlbekannten GNU-Debugger gdb zum Debuggen von in C oder C++ geschriebenen Programmen.

### Ansichten

Nemiver wurde als universeller grafischer Arbeitsplatz entworfen, der über ein Plugin-System verschiedene Ansichten darstellen kann. Gegenwärtig ist die einzige bereitgestellte Ansicht die Debugging-Ansicht. In der Zukunft aber könnten Ansichten für das Speicher-Debugging mit valgrind oder für Profiling-Werkzeuge wie oprofile möglich sein.

## Erste Schritte

Dieser Abschnitt beschreibt den Start von Nemiver und gibt einen grundlegenden Überblick über die Anwendung.

### Nemiver starten

Sie können Nemiver auf folgende Arten starten:

Menü Anwendungen

- Wählen Sie Entwicklung Nemiver Debugger.

Befehlszeile

- Geben Sie `nemiver` ein und drücken Sie anschlieẞend die Eingabetaste.

  #### Zusätzliche Optionen für die Befehlszeile

  Durch Eingabe des Befehls `nemiver --help-all` erhalten Sie eine Liste aller Optionen, die Sie an Nemiver in einer Befehlszeile übergeben können.

### Das Nemiver-Fenster

Beim Start von Nemiver erscheint ein Fenster, welches wie folgt aussieht:

#### Nemiver-Fenster

Zeigt das Hauptfenster von Nemiver.

Das Nemiver-Fenster enthält die folgenden Elemente:

Menüleiste

- Die Menüs in der Menüleiste enthalten alle Befehle, die Sie für die Arbeit mit Nemiver benötigen.

Werkzeugleiste

- Die Werkzeugleiste enthält grundlegende Debugging-Aktionen, die Sie zur Ausführung oder schrittweisen Ausführung des zu debuggenden Programms benötigen.

Quellansicht-Reitermappe

- Wenn Quelldateien geöffnet sind, dann zeigt dieser Bereich die Quelldateien des zu debuggenden Programms.

Status-Reitermappe

- Die Status-Reitermappe enthält folgende Reiter zur Anzeige von Informationen über das zu debuggende Programm:

  Aufruf-Stack

- Zeigt den aktuellen Status des Aufruf-Stacks im zu debuggenden Programm an.

Variablen

- Zeigt eine Liste aller lokalen Variablen und Funktionsparameter an, zusätzlich zu deren Werten und Typen.

Ziel-Terminal

- Falls das zu debuggende Programm irgendetwas im Terminal ausgibt, dann wird die Ausgabe in diesem Reiter angezeigt.

Haltepunkte

- Dieser Reiter zeigt eine Liste aller gesetzten Haltepunkte an. Sie können den Quellcode eines bestimmten Haltepunkts betrachten, indem Sie auf den Listeneintrag doppelklicken. Wahlweise können Sie mit der rechten Maustaste auf einen der Einträge klicken und Gehe zu Quelldatei im Kontextmenü wählen. Außerdem können in diesem Reiter Haltepunkte gelöscht, aktiviert oder deaktiviert werden. Weitere Informationen über Haltepunkte finden Sie in nemiver-sect-breakpoints.

Register

- Dieser Reiter zeigt alle Register des Prozessors und deren Werte an. Weitere Informationen finden Sie in nemiver-sect-registers.

Speicher

- Dieser Reiter zeigt den gegenwärtigen Status eines bestimmten Speicherbereichs an. Weitere Informationen finden Sie in nemiver-sect-memory.

### Auswahl eines Programms zum Debuggen

Es gibt verschiedene Wege, mit dem Debuggen eines Programms zu beginnen. Nemiver ermöglicht Ihnen das Laden einer ausführbaren Datei oder einer Core-Datei, das Anhängen an einen laufenden Prozess oder die Verbindung zu einem entfernten Debugging-Server.

#### Debuggen eines ausführbaren Programms

##### Benutzung des Arbeitsplatzes

Um ein ausführbares Programm zum Debuggen auszuwählen, wählen Sie Datei Ausführen. Der folgende Dialog wird angezeigt:

###### Ausführen-Dialog

Zeigt den Dialog zur Auswahl einer ausführbaren Datei

In diesem Dialog können sie Folgendes auswählen: das zu debuggende Programm, eventuelle in der Befehlszeile an das auszuführende Programm zu übergebende Argumente, den Arbeitsordner, in welchem sich das auszuführende Programm befindet, sowie einige Umgebungsvariablen, die beim Debuggen des auszuführenden Programms gesetzt werden sollen.

##### Verwendung der Befehlszeile

Um ein zu debuggendes ausführbares Programm in der Befehlszeile zu starten, geben Sie einfach dessen Namen an. Sie können einen absoluten Pfad angeben, oder falls es sich bereits in Ihrer Pfad-Variable befindet, geben Sie den Basisnamen der ausführbaren Datei an. Wenn sich beispielsweise `/usr/bin` in Ihrem Pfad befindet, dann sind beide der folgenden Aufrufe gültig:

- `nemiver /usr/bin/Programmname`

- `nemiver Progammname`

###### Übergabe von Optionen in der Befehlszeile

Falls Sie dem zu debuggenden Programm Befehlszeilenoptionen übergeben wollen, sollten Sie diese in Anführungszeichen setzen. So verhindern Sie, dass Nemiver diese verarbeitet: `nemiver "prognam --arg1 --arg2"`.

#### Anhängen an ein laufendes Programm

##### Benutzung des Arbeitsplatzes

Wählen Sie Datei An laufendes Programm anhängen, wodurch der folgende Dialog angezeigt wird:

###### Anhängen-Dialog

Zeigt den Dialog zum Anhängen an ein laufendes Programm

Wählen Sie einen Prozess in der Liste aus und klicken Sie auf OK, um mit dem Debuggen des gewählten Programms zu beginnen. Die Anzeige in der Liste kann sehr umfangreich sein, deswegen können Sie die Ansicht filtern, um nur die für Sie interessanten einträge anzuzeigen. Geben Sie hierzu etwas Text in das Textfeld unterhalb der Liste ein.

##### Verwendung der Befehlszeile

Um aus einer Befehlszeile an ein laufendes Programm anzuhängen, verwenden Sie die Option `--attach`. Diese Option akzeptiert entweder eine Prozesskennung oder einen Prozessnamen. Um beispielsweise den laufenden Prozess `foo` mit der Prozessnummer 1121 zu debuggen, geben Sie entweder `nemiver --attach foo` oder `nemiver --attach 1121` ein.

#### Laden einer Core-Datei

##### Benutzung des Arbeitsplatzes

Wählen Sie Datei Core-Datei laden, um folgenden Dialog zu öffnen, in welchem Sie eine Core-Datei laden können:

###### Dialog zum Laden einer Core-Datei

Zeigt den Dialog zum Laden einer Core-Datei

##### Verwendung der Befehlszeile

Core-Dateien können nicht über die Befehlszeile geladen werden.

#### Entferntes Debuggen

Nemiver ermöglicht Ihnen die Verbindung zu einem entfernten Debugging-Server.

##### Benutzung des Arbeitsplatzes

Um eine Verbindung zu einem entfernten Debugging-Server herzustellen, wählen Sie Datei Zum entfernten Ziel verbinden

Dialog zum entfernten Debuggen

Wählen Sie das zu ladende ausführbare Programm und den Ort der gemeinsamen Bibliotheken und geben Sie die Details zur Verbindung mit dem entfernten Server ein.

##### Verwendung der Befehlszeile

Nemiver stellt keinen Weg bereit, eine Verbindung zu einem entfernten Server in einer Befehlszeile aufzubauen.

## Benutzung von Nemiver

Dieser Abschnitt beschreit, wie Sie Nemiver zum Debuggen Ihrer Anwendung einsetzen können.

### Grundlegende Debugging-Aktionen

Die grundlegenden Debugging-Aktionen sind über die Werkzeugleiste, im Menü Debug oder als Tastenkürzel verfügbar. Die am häufigsten benutzten Aktionen werden nachfolgend aufgelistet:

Fortsetzen

- Startet das Programm. Das Programm wird bis zum nächsten Haltepunkt oder bis zum Programmende ausgeführt, es sei denn, es wird manuell vom Benutzer durch Anklicken von Stop unterbrochen. Diese Aktion kann auf der Tastatur mit F5 aktiviert werden.

Weiter

- Führt die nächste Anweisung aus und stoppt, wenn die nächste Zeile in dieser Datei erreicht ist. Einige Debugger nennen diese Aktion »Step Over«. Diese Aktion kann auf der Tastatur mit F6 aktiviert werden.

Einzelschritt

- Führt die nächste Anweisung aus und springt in die Funktion, wenn möglich. Einige Debugger nennen diese Anweisung »Step in«. Diese Aktion kann auf der Tastatur mit F7 aktiviert werden.

Herausspringen

- Beendet die Ausführung der aktuellen Funktion und stoppt, wenn es zur aufgerufenen Fenktion zurückkehrt. Diese Aktion kann auf der Tastatur mit Umschalttaste F7 aktiviert werden.

Neustart

- Lädt die aktuelle Ausführung neu und beginnt die Ausführung wieder am Ausgangspunkt. Diese Aktion kann auf der Tastatur mit Umschalttaste F5 aktiviert werden.

Anhalten

- Unterbricht die Ausführung des Programms manuell. Diese Aktion ist nur verfügbar, wenn der Debugger gerade ausführt, beispielsweise wenn der Benutzer Fortsetzen angeklickt hat. Diese Aktion kann auf der Tastatur mit F9 aktiviert werden.

Standardmäßig erzeugt Nemiver einen Haltepunkt bei `main()` nach dem Laden eines ausführbaren Programms. Sobald die Ausführung `main()` erreicht hat, wird die Ausführung angehalten und wartet auf eine Eingabe. Sie können durch das Programm springen, Variablen prüfen (siehe nemiver-sect-inspecting-variables), oder zusätzliche Haltepunkte hinzufügen (siehe nemiver-sect-breakpoints).

### Untersuchen von Variablen

Nemiver zeigt eine Liste aller lokalen Variablen im Variablen-Reiter der Status-Reitermappe an. Falls Sie eine bestimmte Variable (oder auch einen bestimmten Ausdruck) untersuchen wollen, können Sie die Variablen-Untersuchung verwenden. Um die Variablen-Untersuchung zu öffnen, wählen Sie Debug Eine Variable untersuchen. Wenn die Variablen-Untersuchung geöffnet ist, dann wird folgendes Fenster angezeigt:

Dialog der Variablenuntersuchung

Sie können in das Eingabefeld einen beliebigen Variablennamen (wie `pFoo->bar`) eingeben. Wenn die Variable gültig ist und im aktuellen Bereich liegt, werden Einzelheiten über diesen Ausdruck angezeigt.

Alternativ können Sie den Variablennamen im Quelleditor markieren und dann die Variablen-Untersuchung aufrufen. Es wird dann versucht, Informationen über den markierten Variablennamen anzuzeigen.

#### Tastenkürzel

Sie können die Variablen-Untersuchung auch auf der Tastatur mit F12 aufrufen.

Nemiver zeigt Ihnen auch eine Liste der globalen Variablen einer Anwendung in einem separaten Dialog an. Um den Dialog Globale Variable anzuzeigen, wählen Sie Debug Globale Variablen anzeigen oder drücken Sie Strg G.

Dialog zu Globalen Variablen

Bei einigen Programmen (insbesondere C++) kann das Auflisten aller globalen Variablen sehr lange Zeit in Anspruch nehmen.

### Festlegen von Haltepunkten

Es gibt verschiedene Wege, in Nemiver Haltepunkte zu setzen. Nemiver setzt eine Haltepunkt automatisch bei `main()`, wenn Sie mit dem Debuggen eines ausfphrbaren Programms neu beginnen. Um zusätzliche Haltepunkte zu setzen, können Sie folgendermaßen vorgehen:

- Klicken Sie auf den Rand neben der Zeile, wo Sie den Haltepunkt setzen wollen.

- Platzieren Sie den Cursor auf einer Zeile, in der Sie einen Haltepunkt hinzufügen wollen. Wählen Sie Debug Haltepunkt am Cursor setzen/entfernen, oder drücken Sie F8

- Setzen Sie einen Haltepunkt an einem specifischen Funktionsnamen oder an einem specifischen Ort in einer Datei. Wählen Sie hierzu Debug Haltepunkt setzen oder drücken Sie Strg B. Daraufhin wird folgender Dialog angezeigt:

  Dialog zum Setzen von Haltepunkten

  Sie können einen Haltepunkt an einem bestimmten Ort einer Datei oder anhand eines Funktionsnamens setzen. Wenn es mehrere Funktionen gleichen Namens gibt, zeigt Nemiver eine Liste aller passenden Funktionen an und bittet Sie um die Auswahl der gewünschten Funktion.

#### Deaktivierte Haltepunkte

Haltepunkte können aktiviert oder deaktiviert werden. Der Debugger hält die Ausführung an, sobald ein aktivierter Haltepunkt erreicht ist und kein deaktivierter Haltepunkt diesen beeinflusst. Dadurch wird Ihnen ermöglicht, vorübergehend einen Haltepunkt zu deaktivieren, ohne ihn gleich löschen zu müssen.

Um einen Haltepunkt zu aktivieren oder zu deaktivieren, klicken Sie in das Ankreuzfeld neben der Nummer des gewünschten Haltepunkts im Reiter Haltepunkte der Status-Reitermappe. Alternativ drücken Sie Umschalttaste F8, um den Haltepunkt in der Zeile zu aktivieren oder zu daktivieren, in der sich der Cursor befindet.

Die folgenden Abbildungen verdeutlichen den Unterschied zwischen aktivierten und deaktivierten Haltepunkten im Quelltexteditor.

Ansicht eines aktivierten Haltepunkts

Aktivierter Haltepunkt

Ansicht eines deaktivierten Haltepunkts

Deaktivierter Haltepunkt

#### Öffnen von Quelldateien

Gelegentlich kennen Sie den exakten Funktionsnamen oder die Zeilennummer nicht, wo Sie einen Haltepunkt setzen wollen. Um dies herauszufinden, müssen Sie eine Quelldatei öffnen. Sie können hierzu einfach bestimmte Dateien im System öffnen, aber Nemiver stellt Ihnen auch eine Liste der Quelldateien bereit, aus denen die ausführbare Datei erstellt wurde. Sie können aus dieser Liste eine Datei wählen. Wählen Sie Datei Quelldatei öffnen, woraufhin folgendes Fenster angezeigt wird:

Zeigt den Dialog zum Öffnen von Quelldateien

Um eine bestimmte Datei im Dateisystem zu öffnen, wählen Sie die Option Im Dateisystem auswählen. Um aus einer Liste von Dateien zu wählen, aus denen die ausführbare Datei erstellt wurde, wählen Sie Aus ausführbarem Ziel wählen.

##### Bestimmen von Quelldateien für dynamisch geladene Module

Falls das ausführbare Ziel Module zur Laufzeit lädt (z.B. mit der Funktion `dlopen()`), wird Nemiver vor dem Laden dieser Module nicht in der Lage sein zu bestimmen, welche Dateien verwendet wurden.

### Fortgeschrittenes Debuggen

#### Register

Die Bearbeitung von Registern ist im Reiter Register der Status-Reitermappe möglich. Alternativ drücken Sie Alt F5, um direkt zu diesem Reiter zu springen.

Das Widget zum Bearbeiten der Speicherregister

Hier werden die aktuellen Wert aller Register des Prozessors angezeigt. Klicken Sie zum Bearbeiten der Registerwerte auf die Spalte Wert und geben Sie einen neuen Wert ein. Falls sich der Registerwert seit dem letzten Anhalten des Debuggers geändert hat, wird er in roter Farbe hervorgehoben.

#### Speicher

Die Speicherbearbeitung ermöglicht Ihnen die direkte Auswahl eines Speichersegments. Dadurch erhalten Sie einen detaillierteren Blick auf die Vorgänge während der Ausführung Ihres Programms.

Das Widget zum Bearbeiten des Speichers

Um ein Speichersegment anzuzeigen, geben Sie eine Speicheradresse im Feld Adresse ein. Falls die Adresse für das zu debuggende Programm gültig ist, dann werden die Speicherwerte beginnend bei der angegebenen Adresse angezeigt. Speicherwerte können Im Byte-Format, im Wort-Format (2 Byte) oder im langen Wort-Format (4 Byte) angezeigt werden. Wählen Sie hierzu die entsprechende Option in der Auswahlliste Gruppieren nach. Die Speicherwerte werden beim Springen durch das Programm automatisch aktualisiert.

Neben dem reinen Betrachten der Speicherwerte können Sie auch Speicherwerte verändern. Sie können entweder die hexadezimale Byte-Darstellung bearbeiten (im linken Bereich) oder die ASCII-Darstellung (im rechten Bereich). Alle Änderungen werden unmittelbar angewendet.

## Speichern und Wiederherstellen von Sitzungen

Nemiver kann Ihre Debugging-Sitzungen speichern, so dass Sie diese später wiederaufnehmen können. Hierbei werden Informationen wie das zu debuggende Programm, die Umgebungsvariablen. die übergebenen Befehlszeilenoptionen, die geöffneten Dateien und die Haltepunkte gespeichert. Auf diese Weise können Sie jederzeit wieder dahin zurückkehren, wo Sie Nemiver beendet haben.

### Speichern von Sitzungen

Nemiver speichert Ihre Sitzung automatisch beim Beenden, so dass Sie darüber nicht nachdenken müssen. Wenn Sie jedoch die Sitzung explizit speichern wollen, bevor Sie Nemiver schließen, wählen Sie Datei Sitzung auf Platte speichern.

### Wiederaufnehmen gespeicherter Sitzungen

#### Benutzung des Arbeitsplatzes

Wählen Sie Datei Gespeicherte Sitzung wiederherstellen und wählen Sie eine Sitzung in der Liste aus.

##### Sitzungsdialog

Zeigt den Dialog zum Wiederaufnehmen einer gespeicherten Sitzung

#### In der Befehlszeile

Falls Ihnen die Sitzungskennung der auszuführenden Sitzung bekannt ist, können Sie die Debugging-Sitzung aus der Befehlszeile starten. Wenn Sie beispielsweise die Sitzung mit der Nummer 3 starten wollen, rufen Sie folgenden Befehl auf: `nemiver --session 3`.

## Info zu Nemiver

Nemiver wurde von Dodji Seketeli und Jonathon Jongsma geschrieben, mit zusätzlichen Beiträgen von vielen anderen. Weitere Informationen über Nemiver finden Sie auf der Nemiver-Projektwebseite.

Um einen Fehler zu melden oder einen Vorschlag zu dieser Anwendung oder zu diesem Handbuch zu machen, ziehen Sie den Abschnitt »Rückmeldungen« des GNOME Desktop-Benutzerhandbuchs zu Rate.

Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 2 der Lizenz oder (nach Ihrer Option) jeder späteren Version. Eine Kopie der GNU General Public License finden Sie in der GPL, oder in der Datei COPYING, die im Quellcode dieses Programms enthalten ist.