2
|
1 |
'\" t
|
|
2 |
.\" Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
|
|
3 |
.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
4 |
.\"
|
|
5 |
.\" This code is free software; you can redistribute it and/or modify it
|
|
6 |
.\" under the terms of the GNU General Public License version 2 only, as
|
|
7 |
.\" published by the Free Software Foundation.
|
|
8 |
.\"
|
|
9 |
.\" This code is distributed in the hope that it will be useful, but WITHOUT
|
|
10 |
.\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
11 |
.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
12 |
.\" version 2 for more details (a copy is included in the LICENSE file that
|
|
13 |
.\" accompanied this code).
|
|
14 |
.\"
|
|
15 |
.\" You should have received a copy of the GNU General Public License version
|
|
16 |
.\" 2 along with this work; if not, write to the Free Software Foundation,
|
|
17 |
.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
18 |
.\"
|
|
19 |
.\" Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
|
20 |
.\" CA 95054 USA or visit www.sun.com if you need additional information or
|
|
21 |
.\" have any questions.
|
|
22 |
.\" `
|
|
23 |
.\"
|
|
24 |
.\" This document was created by saving an HTML file as text
|
|
25 |
.\" from the JavaSoft web site:
|
|
26 |
.\"
|
|
27 |
.\" http://java.sun.com/j2se/1.4/docs/tooldocs/tools.html
|
|
28 |
.\"
|
|
29 |
.\" and adding appropriate troff macros. Because the JavaSoft web site
|
|
30 |
.\" man pages can change without notice, it may be helpful to diff
|
|
31 |
.\" files to identify changes other than new functionality.
|
|
32 |
.\"
|
|
33 |
.TH jdb 1 "2006 年 9 月 4 日" "Java SE 6" "ユーザーコマンド"
|
|
34 |
.SH "名前"
|
|
35 |
jdb \- Java デバッガ
|
|
36 |
.LP
|
|
37 |
|
|
38 |
.LP
|
|
39 |
.LP
|
|
40 |
\f3jdb\fP は、Java 言語プログラムのバグを見つけて修正するために使用するツールです。
|
|
41 |
.LP
|
|
42 |
.SH "形式"
|
|
43 |
.B jdb
|
|
44 |
[
|
|
45 |
.I options
|
|
46 |
] [
|
|
47 |
.I class
|
|
48 |
] [
|
|
49 |
.I arguments
|
|
50 |
]
|
|
51 |
.LP
|
|
52 |
.TP 15
|
|
53 |
.I options
|
|
54 |
以下に指定するコマンド行オプション
|
|
55 |
.TP
|
|
56 |
.I class
|
|
57 |
デバッグを開始するクラス名
|
|
58 |
.TP
|
|
59 |
.I arguments
|
|
60 |
クラスの
|
|
61 |
.B main(\|)
|
|
62 |
メソッドに渡される引数
|
|
63 |
.SH "機能説明"
|
|
64 |
.IX "Java debugger" "" "Java debugger \(em \fLjdb\fP"
|
|
65 |
.IX "jdb" "" "\fLjdb\fP \(em Java debugger"
|
|
66 |
Java デバッガの
|
|
67 |
.BR jdb
|
|
68 |
は、
|
|
69 |
Java
|
|
70 |
クラス用の単純なコマンド行デバッガです。
|
|
71 |
.na
|
|
72 |
「\f2Java Platform Debugger Architecture\fP」
|
|
73 |
.fi
|
|
74 |
(http://java.sun.com/javase/6/docs/technotes/guides/jpda/index.html)
|
|
75 |
を画面に表示しながら実行し、ローカルまたはリモートの Java 仮想マシン
|
|
76 |
の検査とデバッグを行うことができます。
|
|
77 |
.SS "jdb セッションの開始"
|
|
78 |
.IX "jdb" "Starting a jdb Session" "\fLjdb\fP \(em Java debugger"
|
|
79 |
jdb セッションを開始するにはさまざまな方法があります。 もっとも頻繁に使
|
|
80 |
われるのは、アプリケーションのメインクラスをデバッグして、
|
|
81 |
.B jdb
|
|
82 |
から新しく Java 仮想マシン (VM) を起動する方法です。 コマンド行で、
|
|
83 |
.BR java (1)
|
|
84 |
の代わりに
|
|
85 |
.B jdb
|
|
86 |
コマンドを入力します。たとえば、アプリケーションのメインクラスが
|
|
87 |
.BR MyClass
|
|
88 |
の場合は、次のコマンドを使用して jdb 環境でデバッグします。
|
|
89 |
.LP
|
|
90 |
.RS
|
|
91 |
.B % jdb MyClass
|
|
92 |
.RE
|
|
93 |
.LP
|
|
94 |
このようにして起動すると、
|
|
95 |
.B jdb
|
|
96 |
は 2 つ目の Java VM を呼び出し、指定されたパラメータを渡し、
|
|
97 |
指定されたクラスをロードします。そのあと、
|
|
98 |
クラスの最初の命令を実行する前に VM を停止させます。
|
|
99 |
.LP
|
|
100 |
.B jdb
|
|
101 |
のもう 1 つの使用方法は、すでに起動している Java VM に
|
|
102 |
.B jdb
|
|
103 |
を接続することです。
|
|
104 |
jdb が接続する VM を、その実行中に起動するための構文を次に示します。 これは、インプロセスデバッグ用ライブラリをロードし、接続の種類を指定します。
|
|
105 |
.LP
|
|
106 |
.nf
|
|
107 |
\f3
|
|
108 |
.fl
|
|
109 |
\-agentlib:jdwp=transport=dt_socket,server=y,suspend=n
|
|
110 |
.fl
|
|
111 |
\fP
|
|
112 |
.fi
|
|
113 |
|
|
114 |
.LP
|
|
115 |
.LP
|
|
116 |
たとえば、次のコマンドは
|
|
117 |
.B MyClass
|
|
118 |
アプリケーションを実行し、後で
|
|
119 |
.B jdb
|
|
120 |
を接続できるようにします。
|
|
121 |
.LP
|
|
122 |
.nf
|
|
123 |
\f3
|
|
124 |
.fl
|
|
125 |
% java \-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n MyClass
|
|
126 |
.fl
|
|
127 |
\fP
|
|
128 |
.fi
|
|
129 |
|
|
130 |
.LP
|
|
131 |
.LP
|
|
132 |
次のコマンドで
|
|
133 |
.B jdb
|
|
134 |
を VM に接続できます。
|
|
135 |
.LP
|
|
136 |
.RS
|
|
137 |
.B % jdb \-attach 8000
|
|
138 |
.RE
|
|
139 |
.LP
|
|
140 |
このとき、
|
|
141 |
.B jdb
|
|
142 |
は新しい VM を起動するのではなく、既存の VM に接続するので、
|
|
143 |
.B jdb
|
|
144 |
コマンド行で
|
|
145 |
.B MyClass
|
|
146 |
を指定しないことに注意してください。
|
|
147 |
.LP
|
|
148 |
これ以外にもデバッガ (jdb) を VM に接続する方法はたくさんあり、
|
|
149 |
.BR jdb
|
|
150 |
はそのすべての方法をサポートしています。
|
|
151 |
このような接続オプションについては、
|
|
152 |
.fi
|
|
153 |
http://java.sun.com/javase/6/docs/technotes/guides/jpda/conninv.html
|
|
154 |
で Java Platform Debugger Architecture のマニュアルを参照してください。
|
|
155 |
\f3jdb\fP で使用するために J2SE 1.4.2 以前の VM を起動する方法については、
|
|
156 |
.fi
|
|
157 |
http://java.sun.com/j2se/1.4.2/docs/technotes/guides/jpda/conninv.html
|
|
158 |
の 1.4.2 のドキュメントを参照してください。
|
|
159 |
.SS " jdb 基本コマンド"
|
|
160 |
.IX "jdb" "Basic jdb Commands" "\fLjdb\fP \(em Java debugger"
|
|
161 |
以下に
|
|
162 |
.B jdb
|
|
163 |
基本コマンドの一覧を示します。
|
|
164 |
Java
|
|
165 |
デバッガで使用可能なその他のコマンドは、
|
|
166 |
.B help
|
|
167 |
コマンドで表示できます。
|
|
168 |
.TP 15
|
|
169 |
.B help または ?
|
|
170 |
.BR jdb
|
|
171 |
のコマンドの中でもっとも重要なのが、この
|
|
172 |
.B help
|
|
173 |
コマンドです。利用可能なコマンドの一覧を、
|
|
174 |
各コマンドの簡単な説明つきで表示します。
|
|
175 |
.TP 15
|
|
176 |
.B run
|
|
177 |
.BR jdb
|
|
178 |
を起動して必要なブレークポイントを設定したあとに、このコマンドを使用して、
|
|
179 |
デバッグするアプリケーションの実行を開始します。このコマンドは、
|
|
180 |
デバッグするアプリケーションを
|
|
181 |
.B jdb
|
|
182 |
から起動するときにだけ使用できます。
|
|
183 |
既存の VM に接続する場合とは異なります。
|
|
184 |
.TP
|
|
185 |
.B cont
|
|
186 |
ブレークポイント、例外、またはステップ実行のあとで、デバッグ中の
|
|
187 |
アプリケーションの実行を継続します。
|
|
188 |
.TP 15
|
|
189 |
.B print
|
|
190 |
Java オブジェクトおよびプリミティブ値を表示します。 プリミティブ型の変数
|
|
191 |
またはフィールドの場合には、実際の値を出力します。 オブジェクトの場合
|
|
192 |
には、短い説明を出力します。 オブジェクトについては、以降の
|
|
193 |
.B dump
|
|
194 |
コマンドの説明を参照してください。
|
|
195 |
.sp 1n
|
|
196 |
.LP
|
|
197 |
注: 局所
|
|
198 |
(スタック)
|
|
199 |
変数をブラウズするには、そのクラスが
|
|
200 |
.B javac \-g
|
|
201 |
オプションでコンパイルされている必要があります。
|
|
202 |
.sp 1n
|
|
203 |
.LP
|
|
204 |
.B print
|
|
205 |
は、メソッドの呼び出しを含む多数の簡単な Java 式をサポートします。
|
|
206 |
次に例を示します。
|
|
207 |
.RS
|
|
208 |
.TP 3
|
|
209 |
\(bu
|
|
210 |
.B print MyClass.myStaticField
|
|
211 |
.PD 0
|
|
212 |
.TP
|
|
213 |
\(bu
|
|
214 |
.B print myObj.myInstanceField
|
|
215 |
.TP
|
|
216 |
\(bu
|
|
217 |
\f3print\f1 \f2i\f1 \f3+\f1 \f2j\f1 \f3+\f1 \f2k\f1 (
|
|
218 |
.IR i、
|
|
219 |
.IR j 、
|
|
220 |
および
|
|
221 |
.I k
|
|
222 |
はプリミティブであり、フィールドまたは局所変数のいずれか)
|
|
223 |
.TP
|
|
224 |
\(bu
|
|
225 |
\f3print myObj.myMethod(\|)\f1 (
|
|
226 |
.B myMethod
|
|
227 |
が null 以外を返す場合)
|
|
228 |
.TP
|
|
229 |
\(bu
|
|
230 |
.B print new java.lang.String("Hello").length(\|)
|
|
231 |
.RE
|
|
232 |
.PD
|
|
233 |
.TP
|
|
234 |
.B dump
|
|
235 |
プリミティブ値の場合には、このコマンドは
|
|
236 |
.BR print
|
|
237 |
と同じです。オブジェクトの場合には、オブジェクト内に定義されている
|
|
238 |
各フィールドの現在の値を出力します。 static フィールドと instance
|
|
239 |
フィールドを出力します。
|
|
240 |
.sp 1n
|
|
241 |
.LP
|
|
242 |
.B dump
|
|
243 |
コマンドは、
|
|
244 |
.B print
|
|
245 |
コマンドと同じ式をサポートします。
|
|
246 |
.TP
|
|
247 |
.B threads
|
|
248 |
現在実行中のスレッドを一覧表示します。スレッドごとに、名前と現在の状態、
|
|
249 |
およびほかのコマンドに使用できるインデックスを出力します。次に例を
|
|
250 |
示します。
|
|
251 |
.sp 1n
|
|
252 |
.RS 20
|
|
253 |
.LP
|
|
254 |
.B 4. (java.lang.Thread)0x1 main running
|
|
255 |
.RE
|
|
256 |
.RS
|
|
257 |
.sp 1n
|
|
258 |
.LP
|
|
259 |
この例では、スレッドインデックスは
|
|
260 |
.BR 4
|
|
261 |
であり、スレッドは
|
|
262 |
.BR java.lang.Thread
|
|
263 |
のインスタンスです。スレッドの名前は「
|
|
264 |
.BR main
|
|
265 |
」であり、現在実行中です。
|
|
266 |
.RE
|
|
267 |
.TP 15
|
|
268 |
.B thread
|
|
269 |
現在のスレッドを選択します。 多くの
|
|
270 |
.B jdb
|
|
271 |
コマンドは、現在のスレッドの設定に基づいて実行されます。 スレッドは、
|
|
272 |
.B threads
|
|
273 |
コマンドで説明するスレッドインデックスとともに指定します。
|
|
274 |
.TP 15
|
|
275 |
.B where
|
|
276 |
引数のない
|
|
277 |
.B where
|
|
278 |
コマンドは、現在のスレッド
|
|
279 |
(
|
|
280 |
.B thread
|
|
281 |
コマンドで設定)
|
|
282 |
のスタックをダンプします。
|
|
283 |
.B where all
|
|
284 |
と指定すると、現在のスレッドグループにある全スレッドの
|
|
285 |
スタックをダンプします。
|
|
286 |
.BI where " threadindex"
|
|
287 |
と指定すると、
|
|
288 |
.I threadindex
|
|
289 |
が示すスレッドのスタックだけをダンプします。
|
|
290 |
.sp 1n
|
|
291 |
.LP
|
|
292 |
現在のスレッドが (ブレークポイントなどのイベントや
|
|
293 |
.B suspend
|
|
294 |
コマンドで) 中断している場合、
|
|
295 |
.B print
|
|
296 |
コマンドや
|
|
297 |
.B dump
|
|
298 |
コマンドを使用すれば、局所変数やフィールドを表示できます。
|
|
299 |
どのスタックフレームを現在のフレームにするかは、
|
|
300 |
.B up
|
|
301 |
および
|
|
302 |
.B down
|
|
303 |
コマンドで選択できます。
|
|
304 |
.SS "ブレークポイント用コマンド"
|
|
305 |
.IX "jdb" "Breakpoints" "\fLjdb\fP \(em Java debugger"
|
|
306 |
.B jdb
|
|
307 |
では、ブレークポイントを行番号で、
|
|
308 |
またはメソッドの最初の命令で
|
|
309 |
設定できます。次に例を示します。
|
|
310 |
.TP 25
|
|
311 |
.B stop at MyClass:22
|
|
312 |
.BR MyClass
|
|
313 |
が含まれるソースファイルの
|
|
314 |
.B 22
|
|
315 |
行目の最初の命令にブレークポイントを設定する
|
|
316 |
.TP
|
|
317 |
.B stop in java.lang.String.length
|
|
318 |
.BR java.lang.String.length
|
|
319 |
メソッドの最初にブレークポイントを設定する
|
|
320 |
.TP
|
|
321 |
.BI "stop in MyClass." init
|
|
322 |
.I init
|
|
323 |
は
|
|
324 |
.B MyClass
|
|
325 |
コンストラクタを識別する
|
|
326 |
.TP
|
|
327 |
.BI "stop in MyClass." clinit
|
|
328 |
.I clinit
|
|
329 |
は
|
|
330 |
.BR MyClass
|
|
331 |
の静的な初期化コードを識別する
|
|
332 |
.LP
|
|
333 |
メソッドがオーバーロードされる場合には、メソッドの引数の型も指定して、
|
|
334 |
ブレークポイントに対して適切なメソッドが選択されるようにしなければなりませ
|
|
335 |
ん。 たとえば、次のように指定します。
|
|
336 |
.LP
|
|
337 |
.RS 15
|
|
338 |
.B MyClass.myMethod(int,java.lang.String)
|
|
339 |
.RE
|
|
340 |
.LP
|
|
341 |
または
|
|
342 |
.LP
|
|
343 |
.RS 15
|
|
344 |
.B MyClass.myMethod()
|
|
345 |
.RE
|
|
346 |
.LP
|
|
347 |
.B clear
|
|
348 |
コマンドは、「
|
|
349 |
.BR clear MyClass:45
|
|
350 |
」のような構文を使用してブレークポイントを削除します。
|
|
351 |
引数を指定しないで
|
|
352 |
.B clear
|
|
353 |
コマンドを使用すると、現在設定されてい
|
|
354 |
るすべてのブレークポイントが表示されます。
|
|
355 |
.B cont
|
|
356 |
コマンドで実行が継続します。
|
|
357 |
.SS "コマンドのステップ実行"
|
|
358 |
.IX "jdb" "Stepping" "\fLjdb\fP \(em Java debugger"
|
|
359 |
.B step
|
|
360 |
コマンドは、現在のスタックフレームまたは呼び出されたメソッド内で、
|
|
361 |
次の行を実行します。
|
|
362 |
.B next
|
|
363 |
コマンドは、現在のスタックフレームの次の行を
|
|
364 |
実行します。
|
|
365 |
.SS "例外処理用コマンド"
|
|
366 |
.IX "jdb" "Exceptions" "\fLjdb\fP \(em Java debugger"
|
|
367 |
スローしているスレッドの呼び出しスタック上のどこにも catch 文がないような
|
|
368 |
例外が発生すると、VM は通常、例外トレースを出力して終了します。 ただし、
|
|
369 |
.BR jdb
|
|
370 |
環境で実行している場合は、このような例外が発生すると
|
|
371 |
.B jdb
|
|
372 |
に制御が戻ります。 次に、
|
|
373 |
.BR jdb
|
|
374 |
を使用して例外の原因を診断します。
|
|
375 |
.TP 15
|
|
376 |
.B catch
|
|
377 |
デバッグ中のアプリケーションは他の例外がスローされたところで停止します。
|
|
378 |
次に例を示します。
|
|
379 |
.LP
|
|
380 |
.RS 20
|
|
381 |
.B catch java.io.FileNotFoundException
|
|
382 |
.RE
|
|
383 |
.sp 1n
|
|
384 |
.RS 15
|
|
385 |
または
|
|
386 |
.RE
|
|
387 |
.LP
|
|
388 |
.RS 20
|
|
389 |
.B catch mypackage.BigTroubleException
|
|
390 |
.RE
|
|
391 |
.sp 1n
|
|
392 |
.RS 15
|
|
393 |
例外が指定したクラス (または、サブクラス) のインスタンスである場合、
|
|
394 |
アプリケーションはスローされたところで停止します。
|
|
395 |
.RE
|
|
396 |
.TP 15
|
|
397 |
.B ignore
|
|
398 |
以前の
|
|
399 |
.B catch
|
|
400 |
コマンドの効果を無効にします。なお、この指定によって例外を無視するのは
|
|
401 |
デバッガだけであり、デバッグされた VM は無視しません。
|
|
402 |
.SH "コマンド行オプション"
|
|
403 |
コマンド行で Java アプリケーション起動ツールの代わりに
|
|
404 |
.B jdb
|
|
405 |
を使用する場合、
|
|
406 |
.B jdb
|
|
407 |
は、
|
|
408 |
.BR \-D、
|
|
409 |
.BR \-classpath、
|
|
410 |
.BI \-X option\f1
|
|
411 |
など、
|
|
412 |
.BR java (1)
|
|
413 |
コマンドと同じオプションを多数使用できます。
|
|
414 |
.LP
|
|
415 |
.B jdb
|
|
416 |
は、そのほかに次のオプションも使用できます。
|
|
417 |
.TP 3
|
|
418 |
.BI \-help
|
|
419 |
ヘルプメッセージを表示します。
|
|
420 |
.TP 3
|
|
421 |
.BI \-sourcepath " dir1\f1:\f2dir2\f1:..."
|
|
422 |
指定されたパスで、ソースファイルを検索します。 このオプションが
|
|
423 |
指定されていない場合は、デフォルトパスの「.」を検索します。
|
|
424 |
.TP
|
|
425 |
.BI \-attach " address"
|
|
426 |
デフォルトの接続機構を使用して、すでに実行中の VM にデバッガを接続
|
|
427 |
します。
|
|
428 |
.TP
|
|
429 |
.BI \-listen " address"
|
|
430 |
実行中の VM が標準のコネクタを使って指定されたアドレスに接続するのを待機します。
|
|
431 |
.TP
|
|
432 |
.BI \-listenany
|
|
433 |
実行中の VM が標準のコネクタを使って利用可能な任意のアドレスに接続するのを待機します。
|
|
434 |
.TP
|
|
435 |
.B \-launch
|
|
436 |
デバッグするアプリケーションを
|
|
437 |
.BR jdb
|
|
438 |
の起動後ただちに起動します。 このオプションを使用すると、
|
|
439 |
.B run
|
|
440 |
コマンドを使用する必要はありません。 デバッグするアプリケーションは、
|
|
441 |
起動後、最初のアプリケーションクラスがロードされる直前に停止します。
|
|
442 |
その時点で、必要なブレークポイントを設定できます。
|
|
443 |
実行を継続するには
|
|
444 |
.B cont
|
|
445 |
コマンドを使用します。
|
|
446 |
.TP 3
|
|
447 |
\-listconnectors
|
|
448 |
この VM で利用できるコネクタを一覧表示します。
|
|
449 |
.TP 3
|
|
450 |
\-connect
|
|
451 |
<connector\-name>:<name1>=<value1>,...
|
|
452 |
一覧表示された引数の値と指定のコネクタを使ってターゲット VM に接続します。
|
|
453 |
.TP 3
|
|
454 |
\-dbgtrace [flags]
|
|
455 |
jdb のデバッグ情報を出力します。
|
|
456 |
.TP 3
|
|
457 |
\-tclient
|
|
458 |
Java HotSpot(tm) VM (クライアント) 内でアプリケーションを実行します。
|
|
459 |
.TP 3
|
|
460 |
\-tserver
|
|
461 |
Java HotSpot(tm) VM (サーバ) 内でアプリケーションを実行します。
|
|
462 |
.TP
|
|
463 |
.BI \-J "option"
|
|
464 |
jdb の実行に使用される Java 仮想マシンに \f2option\fP を渡します。(アプリケーション Java 仮想マシンに対するオプションは、\f3run\fP コマンドに渡される。)
|
|
465 |
たとえば、
|
|
466 |
.I \-J-Xms48m
|
|
467 |
は、起動時に使用するメモリを 48M バイトに設定します。
|
|
468 |
|
|
469 |
|
|
470 |
.LP
|
|
471 |
これ以外にも、デバッガをデバッグされる VM に接続するための代替機構
|
|
472 |
用のオプションがサポートされています。
|
|
473 |
このような接続の代替機構については、
|
|
474 |
.fi
|
|
475 |
http://java.sun.com/javase/6/docs/technotes/guides/jpda/conninv.html
|
|
476 |
の Java Platform Debugger Architecture のマニュアルを参照してください。
|
|
477 |
.LP
|
|
478 |
.SS
|
|
479 |
デバッグ対象のプロセスに転送されるオプション
|
|
480 |
.LP
|
|
481 |
.TP 3
|
|
482 |
\-v \-verbose[:class|gc|jni]
|
|
483 |
冗長モードにします。
|
|
484 |
.TP 3
|
|
485 |
\-D<name>=<value>
|
|
486 |
システムプロパティを設定します。
|
|
487 |
.TP 3
|
|
488 |
\-classpath <directories separated by
|
|
489 |
":">
|
|
490 |
クラスを検索するディレクトリを一覧表示します。
|
|
491 |
.TP 3
|
|
492 |
\-X<option>
|
|
493 |
非標準ターゲット VM オプションです。
|
|
494 |
.LP
|
|
495 |
.SH "関連項目"
|
|
496 |
.LP
|
|
497 |
|
|
498 |
.LP
|
|
499 |
.LP
|
|
500 |
javac、java、javah、javap、javadoc
|
|
501 |
.LP
|
|
502 |
|
|
503 |
.LP
|
|
504 |
|