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