<!DOCTYPE REFENTRY PUBLIC "-//Sun Microsystems//DTD DocBook V3.0-Based SolBook Subset V2.0//EN" [
<!--ArborText, Inc., 1988-1998, v.4001-->
<!ENTITY % javaents SYSTEM "javaman.ent">
%javaents;
]>
<?Pub UDT _bookmark _target>
<refentry id="jdb-1">
<!--@(#)jdb.1 1.13 01/03/14 SMI;-->
<refmeta><refentrytitle>jdb</refentrytitle><manvolnum>1</manvolnum>
<refmiscinfo class="date">2001 年 11 月 30 日</refmiscinfo>
<refmiscinfo class="sectdesc">&man1;</refmiscinfo>
<refmiscinfo class="software">&java-release;</refmiscinfo>
<refmiscinfo class="arch">generic</refmiscinfo>
<refmiscinfo class="copyright"> Copyright 2001 Sun Microsystems, Inc. All rights reserved.  Copyright 2001 Sun Microsystems, Inc. Tous droits r&eacute;serv&eacute;s. </refmiscinfo>
</refmeta>
<refnamediv><refname>jdb</refname><refpurpose>Java デバッガ</refpurpose></refnamediv>
<refsynopsisdiv><title>&synp-tt;</title>
<cmdsynopsis><command>jdb</command><arg choice="opt"><replaceable>options</replaceable></arg><arg choice="opt"><replaceable>class</replaceable></arg><arg choice="opt"><replaceable>arguments</replaceable></arg>
</cmdsynopsis></refsynopsisdiv>
<refsect1><title>&parm-tt;</title>
<variablelist termlength="narrow"><varlistentry><term remap="15"><replaceable>options</replaceable> </term><listitem><para>コマンド行オプション</para>
</listitem></varlistentry>
<varlistentry><term><replaceable>class</replaceable> </term><listitem><para>デバッグを開始するクラス名</para>
</listitem></varlistentry>
<varlistentry><term><replaceable>arguments</replaceable> </term><listitem><para>クラスの <function>main</function> メソッドに渡される引数</para>
</listitem></varlistentry>
</variablelist>
</refsect1>
<refsect1><title>&desc-tt;</title>
<indexterm id="jdb-1-indx-1"><primary sortas="Java debugger">Java debugger &mdash; jdb</primary></indexterm><indexterm id="jdb-1-indx-2"><primary sortas="jdb">jdb &mdash; Java debugger</primary></indexterm>
<para>Java&trade; デバッガの <command>jdb</command> は、Java クラス用の単純なコマンド行デバッガです。<literal>Java Platform Debugger Architecture</literal> を画面に表示しながら実行し、ローカルまたはリモートの Java Virtual Machine の検査とデバッグを行うことができます。</para>
<refsect2><title>jdb セッションの開始</title>
<indexterm id="jdb-1-indx-3"><primary sortas="jdb">jdb &mdash; Java debugger</primary><secondary>Starting a jdb Session</secondary></indexterm>
<para>jdb セッションを開始するにはさまざまな方法があります。もっとも頻繁に使われるのは、アプリケーションのメインクラスをデバッグして、<command>jdb</command> から新しく Java Virtual Machine (VM) を起動する方法です。コマンド行で、<command>java</command> (<citerefentry><refentrytitle>java</refentrytitle><manvolnum>1</manvolnum></citerefentry> を参照) の代わりに <command>jdb</command> コマンドを入力します。たとえば、アプリケーションのメインクラスが <literal>MyClass</literal> の場合は、次のコマンドを使用して <command>jdb</command> 環境でデバッグします。<informalexample>
<para><screen>example% <userinput>jdb MyClass</userinput></screen></para>
</informalexample></para>
<para>このようにして起動すると、<command>jdb</command> は 2 つ目の Java VM を呼び出し、指定されたパラメータを渡し、指定されたクラスをロードします。そのあと、クラスの最初の命令を実行する前に VM を停止させます。</para>
<para><command>jdb</command> のもう 1 つの使用方法は、すでに起動している Java VM に <command>jdb</command> を接続することです。<command>jdb</command> を使用してデバッグする VM は、次のオプションを使用して起動しなければなりません。</para>
<para><screen>    オプション                             目的

    -Xdebug                            VM 内でのデバッグのサポートを有効にする 
                                      

    -Xrunjdwp:transport=dt_socket,     プロセス内デバッグライブラリをロードし、
    server=y,suspend=n                 作成する接続の種類を指定する</screen></para>
<para>たとえば、次のコマンドは <literal>MyClass</literal> アプリケーションを実行し、後で <command>jdb</command> を接続できるようにします。<informalexample>
<para><screen>example% <userinput>jdb -Xdebug &bsol;
   -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n</userinput></screen></para>
</informalexample></para>
<para>次のコマンドで <command>jdb</command> を VM に接続できます。<informalexample>
<para><screen>example% <userinput>jdb -attach 8000</userinput></screen></para>
</informalexample></para>
<para>このとき、<literal>jdb</literal> は新しい VM を起動するのではなく、既存の VM に接続するので、<command>jdb</command> コマンド行で <command>MyClass</command> を指定しないことに注意してください。</para>
<para>これ以外にもデバッガ (<command>jdb</command>) を VM に接続する方法はたくさんあり、<command>jdb</command> はそのすべての方法をサポートしています。このような接続オプションについては、Java Platform Debugger Architecture のマニュアルを参照してください。</para>
</refsect2>
<refsect2><title>jdb 基本コマンド</title>
<indexterm id="jdb-1-indx-4"><primary sortas="jdb">jdb &mdash; Java debugger</primary><secondary>Basic jdb Commands</secondary></indexterm>
<para>以下に <command>jdb</command> 基本コマンドの一覧を示します。Java デバッガで使用可能なその他のコマンドは、<command>help</command> コマンドで表示できます。</para>
<para>なお局所(スタック)変数をブラウズするには、そのクラスが <command>javac</command> <option>g</option> オプションでコンパイルされている必要があります。</para>
<variablelist termlength="narrow"><varlistentry><term remap="15"><command>cont</command> </term><listitem><para>ブレークポイント、例外、またはステップ実行のあとで、デバッグ中のアプリケーションの実行を継続します。</para>
</listitem></varlistentry>
<varlistentry><term><command>dump</command> </term><listitem><para>プリミティブ値の場合には、このコマンドは <command>print</command> と同じです。オブジェクトの場合には、オブジェクト内に定義されている各フィールドの現在の値を出力します。static フィールドと instance フィールドを出力します。<command>dump</command> コマンドは、<command>print</command> コマンドと同じ式をサポートします。</para>
</listitem></varlistentry>
<varlistentry><term><command>help</command></term><term><command>?</command></term><listitem><para><command>jdb</command> のコマンドの中でもっとも重要なのが、この <command>help</command> コマンドです。利用可能なコマンドの一覧を、各コマンドの簡単な説明つきで表示します。</para>
</listitem></varlistentry>
<varlistentry><term><command>print</command> </term><listitem><para>Java オブジェクトおよびプリミティブ値を表示します。プリミティブ型の変数 またはフィールドの場合には、実際の値を出力します。オブジェクトの場合には、短い説明を出力します。オブジェクトについては、以降の <command>dump</command> コマンドの説明を参照してください。<command>print</command> は、メソッドの呼び出しを含む多数の簡単な Java 式をサポートします。次に例を示します。<itemizedlist>
<listitem><para><userinput>print MyClass.myStaticField</userinput></para>
</listitem><listitem><para><userinput>print myObj.myInstanceField</userinput></para>
</listitem><listitem><para><userinput>print <replaceable>i</replaceable> <literal>+</literal> <replaceable>j</replaceable> <literal>+</literal>  <replaceable>k</replaceable></userinput>  (<replaceable>i</replaceable>、<replaceable>j</replaceable>、および <replaceable>k</replaceable> はプリミティブであり、フィールドまたは局所変数のいずれか)</para>
</listitem><listitem><para><userinput>print myObj.myMethod(&thinsp;)</userinput>  (<literal>myMethod</literal> が null 以外を返す場合) </para>
</listitem><listitem><para><userinput>print new java.lang.String("Hello").length(&thinsp;)</userinput></para>
</listitem></itemizedlist></para>
</listitem></varlistentry>
<varlistentry><term remap="15"><command>thread</command> </term><listitem><para>現在のスレッドを選択します。多くの <literal>jdb</literal> コマンドは、現在のスレッドの設定に基づいて実行されます。スレッドは、<command>threads</command> コマンドで説明するスレッドインデックスとともに指定します。</para>
</listitem></varlistentry>
<varlistentry><term><command>threads</command> </term><listitem><para>現在実行中のスレッドを一覧表示します。スレッドごとに、名前と現在の状態、およびほかのコマンドに使用できるインデックスを出力します。次に例を示します。<informalexample>
<para><computeroutput>4. (java.lang.Thread)0x1 main running</computeroutput></para>
</informalexample>この例では、スレッドインデックスは <literal>4</literal> であり、スレッドは <literal>java.lang.Thread</literal> のインスタンスです。スレッドの名前は「<literal>main</literal>」であり、現在実行中です。</para>
</listitem></varlistentry>
<varlistentry><term remap="15"><command>run</command> </term><listitem><para><command>jdb</command> を起動して必要なブレークポイントを設定したあとに、このコマンドを使用して、デバッグするアプリケーションの実行を開始します。このコマンドは、デバッグするアプリケーションを <command>jdb</command> から起動するときにだけ使用できます。既存の VM に接続する場合とは異なります。</para>
</listitem></varlistentry>
<varlistentry><term remap="15"><command>where</command> </term><listitem><para>引数のない <literal>where</literal> コマンドは、現在のスレッド(<command>thread</command> コマンドで設定) のスタックをダンプします。<command>where</command> <literal>all</literal> と指定すると、現在のスレッドグループにある全スレッドのスタックをダンプします。<command>where</command> <replaceable>threadindex</replaceable> と指定すると、<replaceable>threadindex</replaceable> が示すスレッドのスタックだけをダンプします。現在のスレッドが (ブレークポイントなどのイベントや <command>suspend</command> コマンドで) 中断している場合、<command>print</command> コマンドや <command>dump</command> コマンドを使用すれば、局所変数やフィールドを表示できます。どのスタックフレームを現在のフレームにするかは、<command>up</command> および <command>down</command> コマンドで選択できます。</para>
</listitem></varlistentry>
</variablelist>
</refsect2>
<refsect2><title>ブレークポイント用コマンド</title>
<indexterm id="jdb-1-indx-5"><primary sortas="jdb">jdb &mdash; Java debugger</primary><secondary>Breakpoints</secondary></indexterm>
<para><command>jdb</command> では、ブレークポイントを行番号で、またはメソッドの最初の命令で設定できます。次に例を示します。</para>
<variablelist termlength="wholeline"><varlistentry><term remap="25"><userinput>stop at MyClass:22</userinput></term><listitem><para><literal>MyClass</literal> が含まれるソースファイルの <literal>22</literal> 行目の最初の命令にブレークポイントを設定する</para>
</listitem></varlistentry>
<varlistentry><term><userinput>stop in java.lang.String.length</userinput></term><listitem><para><literal>java.lang.String.length</literal> メソッドの最初にブレークポイントを設定する</para>
</listitem></varlistentry>
<varlistentry><term><userinput>stop in MyClass.<replaceable>init</replaceable></userinput></term><listitem><para><replaceable>init</replaceable> は <literal>MyClass</literal> コンストラクタを識別する</para>
</listitem></varlistentry>
<varlistentry><term><userinput>stop in MyClass.<replaceable>clinit</replaceable></userinput> </term><listitem><para><replaceable>clinit</replaceable> は <literal>MyClass</literal> の静的な初期化コードを識別する</para>
</listitem></varlistentry>
</variablelist>
<para>メソッドがオーバーロードされる場合には、メソッドの引数の型も指定して、ブレークポイントに対して適切なメソッドが選択されるようにしなければなりません。たとえば、次のように指定します。<informalexample>
<para><screen><userinput>MyClass.myMethod(int,java.lang.String)</userinput></screen></para>
</informalexample>または<informalexample>
<para><screen><userinput>MyClass.myMethod()</userinput></screen></para>
</informalexample></para>
<para><command>clear</command> コマンドは、「<command>clear</command><literal>MyClass:45</literal>」のような構文を使用してブレークポイントを削除します。引数を指定しないで <command>clear</command> コマンドを使用すると、現在設定されているすべてのブレークポイントが表示されます。<command>cont</command> コマンドで実行が継続します。</para>
</refsect2>
<refsect2><title>コマンドのステップ実行</title>
<indexterm id="jdb-1-indx-6"><primary sortas="jdb">jdb &mdash; Java debugger</primary><secondary>Stepping</secondary></indexterm>
<para><command>step</command> コマンドは、現在のスタックフレームまたは呼び出されたメソッド内で、次の行を実行します。<command>next</command> コマンドは、現在のスタックフレームの次の行を実行します。</para>
</refsect2>
<refsect2><title>例外処理用コマンド</title>
<indexterm id="jdb-1-indx-7"><primary sortas="jdb">jdb &mdash; Java debugger</primary><secondary>Exceptions</secondary></indexterm>
<para>スローしているスレッドの呼び出しスタック上のどこにも catch 文がないような例外が発生すると、VM は通常、例外トレースを出力して終了します。ただし、<command>jdb</command> 環境で実行している場合は、このような例外が発生すると <command>jdb</command> に制御が戻ります。次に、<command>jdb</command> を使用して例外の原因を診断します。</para>
<variablelist termlength="narrow"><varlistentry><term remap="15"><command>catch</command> </term><listitem><para>デバッグ中のアプリケーションは他の例外がスローされたところで停止します。次に例を示します。<informalexample>
<para><screen><userinput>catch java.io.FileNotFoundException</userinput></screen></para>
</informalexample>または<informalexample>
<para><screen><userinput>catch mypackage.BigTroubleException</userinput></screen></para>
</informalexample></para>
</listitem></varlistentry>
</variablelist>
<informalexample>
<para>例外が指定したクラス (または、サブクラス) のインスタンスである場合、アプリケーションはスローされたところで停止します。</para>
</informalexample>
<variablelist termlength="narrow"><varlistentry><term remap="15"><command>ignore</command> </term><listitem><para>以前の <command>catch</command> コマンドの効果を無効にします。なお、この指定によって例外を無視するのはデバッガだけであり、デバッグされた VM は無視しません。</para>
</listitem></varlistentry>
</variablelist>
</refsect2>
</refsect1>
<refsect1><title>&opts-tt;</title>
<para>コマンド行で Java アプリケーション起動ツールの代わりに <command>jdb</command> を使用する場合、<command>jdb</command> は、<option>D</option>、<option>classpath</option>、<option>X</option><replaceable>option</replaceable> など、<command>java</command>(1) コマンドと同じオプションを多数使用できます。</para>
<para><command>jdb</command> は、そのほかに次のオプションも使用できます。</para>
<variablelist termlength="medium"><varlistentry><term remap="15"><option>sourcepath</option> <replaceable>dir1:</replaceable><replaceable>dir2</replaceable> . . .</term><listitem><para>指定されたパスで、ソースファイルを検索します。このオプションが指定されていない場合は、デフォルトパスの「.」を検索します。</para>
</listitem></varlistentry>
<varlistentry><term><option>attach</option> <replaceable>address</replaceable> </term><listitem><para>デフォルトの接続機構を使用して、すでに実行中の VM にデバッガを接続します。</para>
</listitem></varlistentry>
<varlistentry><term><option>launch</option> </term><listitem><para>デバッグするアプリケーションを <command>jdb</command> の起動後ただちに起動します。このオプションを使用すると、<literal>run</literal> コマンドを使用する必要はありません。デバッグするアプリケーションは、起動後、最初のアプリケーションクラスがロードされる直前に停止します。その時点で、必要なブレークポイントを設定できます。実行を継続するには <command>cont</command> コマンドを使用します。</para>
</listitem></varlistentry>
<varlistentry><term><option role="nodash">J</option><replaceable>option</replaceable></term>
<listitem><para>オプションを Java 仮想マシンに渡します。ここで <replaceable>option</replaceable> は、Java アプリケーション起動ツール java(1) のマニュアルページに記載されたオプションの 1 つです。 たとえば、<literal>-J-Xms48m</literal> と指定すると、スタートアップメモリは 48M バイトに設定されます。 <literal>-J</literal> を使って基本となる仮想マシンにオプションを渡すことはよく行われています。 </para>
</listitem></varlistentry>
</variablelist>
<para>これ以外にも、デバッガをデバッグされる VM に接続するための代替機構用のオプションがサポートされています。このような接続の代替機構については、Java Platform Debugger Architecture のマニュアルを参照してください。</para>
</refsect1>
<refsect1><title>&attr-tt;</title>
<para>次の属性については、<citerefentry><refentrytitle>attributes</refentrytitle><manvolnum>5</manvolnum></citerefentry> のマニュアルページを参照してください。</para>
<informaltable frame="all" orient="port"><tgroup cols="2" colsep="1" rowsep="1"><colspec colname="col1" colwidth="198*" align="left"><colspec colname="col2" colwidth="198*" align="left"><thead><row><entry align="center" valign="top">属性タイプ</entry><entry align="center" valign="top">属性値</entry></row></thead><tbody><row><entry align="left" valign="top">使用条件</entry><entry align="left" valign="top">SUNWj3dev</entry></row></tbody></tgroup></informaltable>
</refsect1>
<refsect1><title>&also-tt;</title>
<para><citerefentry><refentrytitle>java</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>javac</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>javadoc</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>javah</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>javap</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>attributes</refentrytitle><manvolnum>5</manvolnum></citerefentry> </para>
</refsect1>
<!--+ 07/27/00 08:34:48
    | tagMorph:  $Id: tagMorph-engine 1.54 1998/01/19 05:44:48 $
    | tagMorph library:  $Id: libtagMorph.a 1.50 1998/01/19 22:02:51 $
    | sunman-to-solbook 1.17
    +-->
</refentry>
<?Pub *0000014616 15531>
