diff options
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100321.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100321.html | 342 |
1 files changed, 342 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100321.html b/Master/Reference Architectures and Patterns/hjp5/html/k100321.html new file mode 100644 index 0000000..c57951e --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100321.html @@ -0,0 +1,342 @@ +<html>
+<head>
+<title>
+Handbuch der Java-Programmierung, 5. Auflage
+</title>
+</head>
+<body>
+<a name="startofbody"></a>
+<script language="JavaScript" src="hjp4lib.js">
+</script>
+<script language="JavaScript">
+installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100317.html;106,k100320.html;107,k100322.html;108,index.html");
+</script>
+<table border=0 cellpadding=0 cellspacing=1 width="100%">
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100317.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100320.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100322.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
+<td align="right">Kapitel 51 - Hilfsprogramme des JDK
+</table>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel2id051004"></a>
+<h2>51.4 jdb - Der <a name="ixa103746">Debugger</a> </h2>
+<hr>
+<ul>
+<li><a href="k100321.html#sectlevel2id051004">51.4 jdb - Der Debugger</a>
+<ul>
+<li><a href="k100321.html#sectlevel3id051004001">51.4.1 Aufruf</a>
+<li><a href="k100321.html#sectlevel3id051004002">51.4.2 Beschreibung</a>
+<li><a href="k100321.html#sectlevel3id051004003">51.4.3 Vorbereitungen</a>
+</ul>
+</ul>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel3id051004001"></a>
+<h3>51.4.1 Aufruf </h3>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+jdb [ classfile ]
+</pre>
+</font>
+</td>
+</tr>
+</table>
+
+
+<!-- Section -->
+<a name="sectlevel3id051004002"></a>
+<h3>51.4.2 Beschreibung </h3>
+
+<p>
+<a name="ixa103747"><a href="index_j.html#ixb102764"><font color=#000080><tt>jdb</tt></font></a></a>
+ist der Debugger des JDK. Er bietet die Möglichkeit, Programme
+kontrolliert ablaufen zu lassen und dabei Breakpoints zu setzen, im
+Einzelschrittmodus den nächsten Befehl ausführen zu lassen
+oder den Inhalt von Variablen oder Objekten zu inspizieren. Man sollte
+allerdings nicht zu große Erwartungen an <a href="index_j.html#ixb102764"><font color=#000080><tt>jdb</tt></font></a>
+stellen, denn das Programm ist ein Kommandozeilendebugger in schönster
+UNIX-Tradition. Mit den grafischen Debuggern der integrierten Java-Entwicklungsumgebungen
+hat er nur wenig gemeinsam. Leider ist er nicht nur umständlicher
+zu bedienen, sondern läßt (insbesondere in Prä-1.2-JDKs)
+auch einige wichtige Features moderner Debugger vermissen.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Seit der Version 1.3 besitzt das JDK eine neue Debugging-Architektur.
+Sie wird als <a name="ixa103748"><i>JPDA</i></a> (<a name="ixa103749"><i>Java Platform Debugger
+Architecture</i></a>) bezeichnet und erlaubt
+es, Debugger komplett in Java zu schreiben. Zwar wird nach wie vor
+kein ausgefeilter GUI-Debugger mit dem JDK ausgeliefert. Doch befindet
+sich im Unterverzeichnis <font color="#660099">jpda</font> des Demo-Verzeichnisses
+des JDK ein Beispielprogramm <a name="ixa103750"><a href="index_j.html#ixb102794"><font color=#000080><tt>javadt</tt></font></a></a>,
+dass als Prototyp eines GUI-Debuggers angesehen werden kann. Hinweise
+zu seiner Verwendung finden sich in der JDK-Dokumentation. Auch integrierte
+Entwicklungsumgebungen verwenden diese Schnittstelle, um ihre eigenen
+Debugger einzubinden.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#FF9900">
+<tr>
+<td><font color="#FFFFFF"> JDK1.1-6.0 </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+
+<!-- Section -->
+<a name="sectlevel3id051004003"></a>
+<h3>51.4.3 Vorbereitungen </h3>
+
+<p>
+Damit ein Programm debugt werden kann, sollte es mit der Option <a name="ixa103751"><a href="index_0.html#ixb102767"><font color=#000080><tt>-g</tt></font></a></a>
+übersetzt werden. Dadurch werden symbolische Informationen in
+die Klassendatei geschrieben, die der Debugger zur Interpretation
+von lokalen Variablen benötigt. Beim Aufruf des Debuggers kann
+die zu untersuchende Klassendatei als Argument angegeben werden:
+<font color="#000077">
+<pre>
+jdb classfile
+</pre>
+</font>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Damit <a href="index_j.html#ixb102764"><font color=#000080><tt>jdb</tt></font></a>
+überhaupt startet, muss ein laufender TCP/IP-Stack vorhanden
+sein. Dies ist für Anwender unangenehm, die nur eine Wählverbindung
+zu ihrem Provider haben, denn bei jedem Starten des Debuggers die
+Verbindung aufzubauen ist nicht nur umständlich, sondern auch
+kostspielig. Die übliche Empfehlung im Usenet lautet in diesem
+Fall, eine Datei <a name="ixa103752"><a href="index_h.html#ixb102795"><font color=#000080><tt>hosts</tt></font></a></a>
+anzulegen und den folgenden Eintrag einzufügen:</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
+<tr>
+<td><font color="#FFFFFF"> Hinweis </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+<font color="#000077">
+<pre>
+127.0.0.1 localhost
+</pre>
+</font>
+
+<p>
+Unter Windows 95 muss die Datei im Windows-Installationsverzeichnis
+(typischerweise <font color="#660099">c:\windows</font>) angelegt
+werden, meist gibt es dort schon eine Kopiervorlage <font color="#660099">hosts.sam</font>,
+die verwendet werden kann. In aktuellen JDKs kann auf das Anlegen
+der Datei unter Umständen verzichtet werden. Falls der Debugger
+nicht starten will, kann es sinnvoll sein, zusätzlich die <a name="ixa103753"><i>DNS-Konfiguration</i></a>
+zu deaktivieren. Dazu ist in der Systemsteuerung im Bereich »Netzwerk«
+das TCP/IP-Protokoll auszuwählen und nach Klick auf »Eigenschaften«
+im Registerblatt »DNS-Konfiguration« der Button »DNS
+deaktivieren« anzuklicken.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Bei dieser Anpassung ist allerdings Vorsicht geboten, denn Veränderungen
+an den Netzwerkeinstellungen können die Netzwerkanbindung des
+Rechners unbrauchbar machen. Es empfiehlt sich in jedem Fall, vor
+der Veränderung der Parameter die alte Konfiguration zu notieren,
+um sie nötigenfalls wieder restaurieren zu können. Veränderungen
+sollte sowieso nur derjenige vornehmen, der genau weiß, was
+er tut.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#CC0000">
+<tr>
+<td><font color="#FFFFFF"> Warnung </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+<p>
+Nachdem der Debugger gestartet wurde, meldet er sich mit seiner Kommandozeile
+und ist bereit, Befehle entgegenzunehmen. Die wichtigsten von ihnen
+werden in <a href="k100321.html#jdbkommandos">Tabelle 51.4</a> vorgestellt
+und kurz erläutert. <a name="jdbkommandos"></a>
+
+<p>
+<table cols=2 border width=100%>
+
+<tr>
+<td valign=top align=left width=20%><b>Kommando</b></td>
+<td valign=top align=left width=80%><b>Bedeutung </b></td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>?</tt></font></td>
+<td valign=top align=left>Liefert eine Übersicht aller Kommandos.
+Alternativ kann auch das Kommando <font color="#000077"><tt>help</tt></font>
+verwendet werden. </td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>!!</tt></font></td>
+<td valign=top align=left>Wiederholt das letzte Kommando. </td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>load classname</tt></font></td>
+<td valign=top align=left>Lädt eine Klassendatei in den Debugger.
+Falls <a href="index_j.html#ixb102764"><font color=#000080><tt>jdb</tt></font></a>
+bereits mit einer Klassendatei als Argument aufgerufen wurde, muss
+dieses Kommando nicht mehr aufgerufen werden. </td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>run</tt></font></td>
+<td valign=top align=left>Startet das geladene Programm. Falls die
+Klassendatei mit <font color="#000077"><tt>load</tt></font> geladen
+wurde, müssen zusätzlich der Klassenname und ggfs. weitere
+Parameter des Programms übergeben werden. Nach Ausführung
+dieses Programms läuft das Programm bis zum nächsten Breakpoint
+oder bis es mit dem <font color="#000077"><tt>suspend</tt></font>-Kommando
+angehalten wird. </td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>quit</tt></font></td>
+<td valign=top align=left>Beendet den Debugger. Alternativ kann auch
+das Kommando <font color="#000077"><tt>exit</tt></font> verwendet
+werden. </td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>stop in</tt></font></td>
+<td valign=top align=left>Setzt einen Breakpoint auf den Anfang einer
+Methode. Das Kommando erwartet den Namen der Klasse, einen Punkt und
+den Namen der Methode als Argument. Beispiel:
+<br>
+<font color="#000077"><tt>stop in JDBBeispiel.actionPerformed</tt></font>
+</td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>stop at</tt></font></td>
+<td valign=top align=left>Setzt einen Breakpoint auf eine vorgegebene
+Zeile. Dazu müssen der Name der Klasse, ein Doppelpunkt und die
+Zeilennummer innerhalb der Quelldatei angegeben werden. Beispiel:
+<br>
+<font color="#000077"><tt>stop at JDBBeispiel:48</tt></font> </td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>clear</tt></font></td>
+<td valign=top align=left>Löscht einen Breakpoint. Als Argument
+müssen der Klassenname, gefolgt von einem Doppelpunkt und der
+Zeilennummer, in der sich der Breakpoint befindet, angegeben werden.
+Es gibt keine Möglichkeit, eine Liste der aktuellen Breakpoints
+anzeigen zu lassen. </td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>list</tt></font></td>
+<td valign=top align=left>Zeigt den aktuellen Ausschnitt des Quelltextes
+an, an dem das Programm angehalten wurde. Die als nächstes auszuführende
+Zeile wird durch einen Pfeil markiert. Alternativ kann auch der Name
+einer Methode oder eine Zeilennummer an das Kommando übergeben
+werden. </td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>step</tt></font></td>
+<td valign=top align=left>Nachdem ein Programm angehalten wurde, kann
+es mit diesem Kommando im Einzelschrittmodus fortgeführt werden.
+Befindet sich an der Aufrufstelle ein Methodenaufruf, springt das
+Kommando in die Methode hinein und bleibt bei der ersten ausführbaren
+Anweisung stehen. </td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>next</tt></font></td>
+<td valign=top align=left>Wie <font color="#000077"><tt>step</tt></font>,
+springt dabei aber nicht in einen Methodenaufruf hinein, sondern führt
+die Methode als Ganzes aus und bleibt beim nächsten Kommando
+nach dem Methodenaufruf stehen. Dieses Kommando steht erst ab dem
+JDK 1.2 zur Verfügung. </td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>step up</tt></font></td>
+<td valign=top align=left>Führt die aktuelle Methode bis zum
+Ende aus. </td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>cont</tt></font></td>
+<td valign=top align=left>Führt das Programm nach einem Breakpoint
+fort. Es läuft dann bis zum nächsten Breakpoint oder bis
+es mit dem <font color="#000077"><tt>suspend</tt></font>-Kommando
+angehalten wird. </td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>print</tt></font></td>
+<td valign=top align=left>Zeigt den Inhalt der Variablen an, die als
+Argument übergeben wurde. <font color="#000077"><tt>print</tt></font>
+verwendet dazu die Methode <a href="index_t.html#ixb100327"><font color=#000080><tt>toString</tt></font></a>,
+die in allen Objektvariablen implementiert ist. Damit eine Variable
+angezeigt werden kann, muss sie an der Aufrufstelle sichtbar sein.
+Es gibt leider keine Möglichkeit, den Inhalt einer Variablen
+aus dem Debugger heraus zu verändern. </td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>dump</tt></font></td>
+<td valign=top align=left>Zeigt den Inhalt der Objektvariable, die
+als Argument übergeben wurde, inklusive aller Membervariablen
+an. Damit eine Variable angezeigt werden kann, muss sie an der Aufrufstelle
+sichtbar sein. </td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>locals</tt></font></td>
+<td valign=top align=left>Gibt eine Liste aller lokalen Variablen
+und ihrer aktuellen Inhalte aus. </td></tr>
+<tr>
+<td valign=top align=left><font color="#000077"><tt>where</tt></font></td>
+<td valign=top align=left>Zeigt einen Stacktrace an.</td></tr>
+</table>
+<p><i>
+Tabelle 51.4: Kommandos von jdb </i></p>
+<hr>
+<table border=0 cellpadding=0 cellspacing=1 width="100%">
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
+Wesley, Version 5.0.1
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100317.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100320.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100322.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
+<td align="right">© 1998, 2007 Guido Krüger & Thomas
+Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
+</table>
+<a name="endofbody"></a>
+</body>
+</html>
|
