16 バグ・レポートの提出

この章では、バグ・レポートを提出する方法を示します。これには、レポートを提出する前に試すこと、およびレポート用に収集するデータに関する提案が含まれています。

この章の構成は、次のとおりです。

更新リリースに含まれる修正のチェック

各リリースへの定期的にスケジュールされた更新には、そのプラットフォームの初期リリース以降に確認された一連のクリティカルなバグの修正が含まれています。

更新リリースが利用可能になると、Java SEダウンロードにあるデフォルトのダウンロードになります。

このダウンロード・サイトには、そのリリースにおけるバグ修正のリストを示すリリース・ノートへのリンクが含まれています。リストにある各バグは、バグ・データベース内のバグの説明にリンクされています。リリース・ノートには、以前の更新リリースにおける修正のリストも含まれています。問題が発生した場合やバグの疑いがある場合には、診断の初期ステップとして、最新の更新リリースで使用可能な修正のリストをチェックしてください。

ある問題が、すでに修正されたバグと同じものであるか明確でない場合があります。

ノート:

利用可能な最新の更新リリースでテストし、問題が引き続き発生するかどうか確認することを常にお薦めします。

バグ・レポートの提出の準備

バグ・レポートの提出方法に関する推奨手順。

バグ・レポートを提出する前に、次の推奨事項を検討してください。

  • 最初に、最新の更新リリースでテストし、その問題が引き続き発生するかどうかを確認してください。古いリリースに対してバグ・レポートが提出されている場合は、利用可能な最新の更新リリースまたは利用可能な最新のアーリー・アクセス(EA)リリースでテストします。EAリリースには新機能やバグ修正が含まれている場合があります。
  • できるだけ多くの関連データを収集します。たとえば、デッドロックが発生した場合はスレッド・ダンプを生成し、クラッシュが発生した場合はコア・ファイル(該当する場合)とhs_errファイルを見つけます。いずれの場合も、環境と、問題が発生する直前に実行されていたアクションを文書化することが重要です。
  • 適用可能な場合は、元の状態を復元し、文書化したステップを使って問題を再現してみます。これにより、その問題が再現可能なものであるか、間欠的なものであるかを判断できます。
  • 問題が再現可能な場合は、問題を絞り込んでみてください。場合によっては、小規模なスタンドアロンのテスト・ケースを使ってバグを再現できます。小規模なテスト・ケースで再現されるバグは通常、大規模で複雑なアプリケーションで構成されているテスト・ケースに比べて診断が容易です。
  • バグ・データベースを検索して、このバグまたは同様のバグが報告されているかどうかを確認します。バグがすでに報告されている場合は、次のような詳細情報がバグ・レポートに記載されている可能性があります。
    • バグがすでに修正されている場合、それが修正されたリリース。

    • その問題の回避方法。

    • バグが発生する環境についてさらに詳しく説明する、評価内のコメント。

  • バグがすでに報告されていると判断した場合は、新しいバグを提出します。

バグを提出する前に、問題が発生した環境が、サポートされている構成であることを確認します。サポートされているシステム構成を参照してください。

システム構成のほかに、サポート対象のロケールのリストも確認します。サポート対象のロケールのWebページを参照してください。

Oracle Solarisの場合は、そのオペレーティング・システム用の推奨パッチ・クラスタを調べて、推奨パッチがインストールされていることを確認します。

バグ・レポート用のデータの収集

一般に、利用可能な最新の更新リリースまたは利用可能な最新のアーリー・アクセス(EA)リリースでテストして、問題が引き続き発生するかどうかを確認してから、できるだけ多くの関連データを収集して、バグ・レポートを作成するかサポート・コールを行うことをお薦めします。

次の各セクションでは、収集する必要があるデータを提案し、該当する場合は、データを取得するためのコマンドや一般的な手順に関する推奨事項を説明します。

ハードウェアの詳細

致命的なエラーが発生すると、エラー・ログにハードウェアの詳細が保存されます。

特定のハードウェア構成でのみバグが発生したり再現できたりすることがあります。致命的なエラーが発生した場合は、エラー・ログにハードウェアの詳細が含まれている可能性があります。エラー・ログを入手できない場合は、マシンのプロセッサの番号と種類、クロック速度、および該当する場合かつ既知の場合は、そのプロセッサの機能に関するいくつかの詳細をバグ・レポートにまとめます。たとえばIntelプロセッサの場合、ハイパースレッディングが使用可能であることがそれに該当します。

オペレーティング・システムの詳細

オペレーティング・システムの詳細を取得するために使用できるコマンド。

Oracle Solarisオペレーティング・システムでは、showrev -aコマンドはオペレーティング・システムのバージョンおよびパッチ情報を出力します。

Linuxでは、使用されているディストリビューションとバージョンを知ることが重要です。/etc/*releaseファイルがリリース情報を示している場合がありますが、コンポーネントとパッケージは個別にアップグレードできるため、必ずしもそれが信頼できる構成を示しているとはかぎりません。そのため、*releaseファイルからの情報に加えて、次の情報も収集してください。

  • カーネルのバージョン。これはuname -aコマンドを使って取得できます。
  • glibcのバージョン。rpm -q glibcコマンドは、glibcのパッチ・レベルを示します。
  • スレッド・ライブラリ。Linuxには、LinuxThreadsおよびNPTLという2つのスレッド・ライブラリがあります。LinuxThreadsライブラリは2.4以前のカーネルで使用され、固定スタックと浮動スタックのバリアントがあります。Native POSIX Thread Library (NPTL)は2.6カーネルで使用されます。一部のLinuxリリース(RHEL3など)には、NPTLの2.4カーネルへのバックポートが含まれています。使用されているスレッド・ライブラリを確認するには、コマンドgetconf GNU_LIBPTHREAD_VERSIONを使用します。getconfコマンドが、その変数が存在しないことを示すエラーを返す場合は、古いカーネルをLinuxThreadsライブラリとともに使用している可能性があります。

Java SEのバージョン

Java SEのバージョン文字列は、java -versionコマンドを使用すると取得できます。

同じマシン上にJava SEのバージョンが複数インストールされている可能性があります。したがって、適切なバージョンのjavaコマンドが間違いなく使用されるように、そのインストールのbinディレクトリがPATH環境変数内で他のインストールよりも前にあることを確認してください。

コマンド行オプション

バグ・レポートに致命的エラー・ログが含まれていない場合は、コマンド行全体とそのすべてのオプションを文書化することが重要です。これには、ヒープ設定を指定するオプション(たとえば、-mxオプション)や、HotSpot固有のオプションを指定する-XXオプションが含まれます。

Java SEの機能の1つに、ガベージ・コレクタ・エルゴノミクスがあります。サーバークラス・マシンでは、javaコマンドはHotSpot Server VMとパラレル・ガベージ・コレクタを起動します。マシンがサーバー・マシンと見なされるのは、少なくとも2基のプロセッサと2GB以上のメモリーを備えている場合です。

-XX:+PrintCommandLineFlagsオプションを使用すると、コマンド行オプションを検証できます。このオプションは、コマンド行のVMに対するすべてのフラグを出力します。jmapユーティリティを使用すると、実行中のVMまたはコア・ファイルのコマンド行オプションを取得することもできます。

環境変数

環境変数の設定が原因で問題が発生する場合があります。バグ・レポートの作成時に、次のJava環境変数の値(設定されている場合)を記入してください。

  • JAVA_TOOL_OPTIONS

  • _JAVA_OPTIONS

  • CLASSPATH

  • JAVA_COMPILER

  • PATH

  • USERNAME

また、次のオペレーティング・システム固有の環境変数も収集してください。

  • Oracle SolarisおよびLinuxオペレーティング・システムでは、次の環境変数の値を収集します。
    • LD_LIBRARY_PATH

    • LD_PRELOAD

    • SHELL

    • DISPLAY

    • HOSTTYPE

    • OSTYPE

    • ARCH

    • MACHTYPE

  • Linuxでは、次の環境変数の値も収集します。
    • LD_ASSUME_KERNEL

    • _JAVA_SR_SIGNUM

  • Windowsでは、次の環境変数の値を収集します。
    • OS

    • PROCESSOR_IDENTIFIER

    • _ALT_JAVA_HOME_DIR

致命的エラー・ログ

致命的エラー・ログは、致命的エラーの発生時に作成されます。

最新の更新リリースでテストし、問題が引き続き発生するかどうか確認することをお薦めします。

致命的エラーが発生すると、エラー・ログが作成されます。「致命的エラー・ログ」を参照してください。

このエラー・ログには、致命的エラーの発生時に得られた情報(バージョンや環境の情報、クラッシュを引き起こしたスレッドの詳細など)が含まれています。

致命的エラー・ログが生成される場合は、必ずそれをバグ・レポートに含めるか、サポート・コール時に報告してください。

コア・ダンプおよびクラッシュ・ダンプ

コア・ダンプやクラッシュ・ダンプは、システム・クラッシュまたはハングアップ・プロセスの診断を試みる際に非常に役立つ可能性があります。

ダンプの生成手順は、「コア・ダンプの収集」で説明されています。

問題の詳細な説明

問題の説明を作成するときは、できるだけ多くの関連情報を含めるようにしてください。

アプリケーション、環境、そして問題が発生した時点につながる最も重要なイベントを記述します。

複雑なアプリケーション環境でしか問題を再現できない場合があります。その場合は、ログ、コア・ファイル、およびその他の関連情報を伴う説明が問題を診断する唯一の手段になる可能性があります。このような状況では、提出者が問題の発生しているシステムでさらなる診断を行ったり、テスト・バイナリを実行したりする意志があるかどうかをその説明で示すようにしてください。

  • 問題が再現可能な場合は、その問題を再現するために必要なステップの一覧を示します。
  • 問題を小さなテスト・ケースで再現できる場合は、そのテスト・ケースと、そのテスト・ケースをコンパイルして実行するためのコマンドを含めます。
  • テスト・ケースまたは問題にサード・パーティのコード(商用またはオープン・ソースのライブラリやパッケージなど)が必要な場合は、そのライブラリの場所と入手方法についての詳細を提供します。

ログおよびトレース

ログまたはトレース出力が問題の原因を迅速に特定するのに役立つ可能性があります。

たとえば、パフォーマンスの問題の場合、-verbose:gcオプションの出力が問題の診断に役立つ可能性があります。(これは、ガベージ・コレクタからの出力を有効にするオプションです。)

別のケースでは、jstatコマンドからの出力を使用すると、問題の発生に至るまでの期間にわたる統計情報を取得できます。

VMのデッドロックまたはハング・アップ(ループが原因など),の場合は、スレッド・スタックが問題の診断に役立つ可能性があります。スレッド・スタックを取得するには、Oracle SolarisおよびLinuxでは[Ctrl]+[\]、Windowsでは[Ctrl]+[Break]を押します。

通常は、関連のあるすべてのログ、トレース、およびその他の出力をバグ・レポートまたはサポート・コール時に提供します。

トラブルシューティング・ステップの結果

すでに行ったすべてのトラブルシューティングのステップと結果を報告します

前提条件: バグ・レポートを提出する前に、必ず、実行したトラブルシューティング・ステップをすべて文書化してください。

たとえば、問題がクラッシュであり、アプリケーションにネイティブ・ライブラリが含まれている場合は、バグがネイティブ・コード内にある可能性を減らすために、すでに-Xcheck:jniオプションを使用してアプリケーションを実行している場合があります。別のケースとして、HotSpot Server VM (-serverオプション)で発生するクラッシュが考えられます。HotSpot Client VM (-clientオプション)でもテストを行い、問題が発生しない場合は、バグがHotSpot Server VMに固有のものである可能性があることの目安になります。

一般に、すでに行われたトラブルシューティング・ステップと結果をすべてバグ・レポートに含めます。この種の情報によって、問題の診断に要する時間が短縮されることが頻繁にあります。

コア・ダンプの収集

コア・ダンプ(クラッシュ・ダンプとも呼ばれる)の生成および収集の手順。コア・ダンプまたはクラッシュ・ダンプとは、実行中のプロセスのメモリー・スナップショットです。

コア・ダンプは、致命的エラーまたは処理できないエラー(シグナルまたはシステム例外など)の発生時にオペレーティング・システムによって自動的に作成されることがあります。また、コア・ダンプはシステム提供のコマンド行ユーティリティを使用して強制的に取得することもできます。ハングアップしているように見えるプロセスを診断する際にコア・ダンプが役立つ場合があります。つまり、コア・ダンプによってハングアップの原因に関する情報が明らかになることがあります。

コア・ダンプを収集する場合は、コア・ファイルを解析できるように、必ず環境に関するその他の情報(OSバージョン、パッチ情報、致命的エラー・ログなど)も収集してください。

コア・ダンプには通常、クラッシュまたはハング・アップしたプロセスのメモリー・ページがすべて含まれているとはかぎりません。ここで取り上げている各オペレーティング・システムでは、プロセスのテキスト(またはコード)ページはコア・ダンプに含まれません。しかし、少なくともヒープとスタックのページがコア・ダンプに含まれていないと役に立ちません。クラッシュのポストモーテム解析には、切り詰められていない完全なコア・ダンプ・ファイルの収集が不可欠です。

次の項では、コア・ダンプの収集シナリオについて説明します。

Oracle Solarisでのコア・ダンプの収集

Oracle Solarisオペレーティング・システムでは、セグメンテーション違反や不正な命令などの処理できないシグナルによってコア・ダンプが作成されます。

デフォルトでは、コア・ダンプはプロセスの現在の作業ディレクトリに作成され、コア・ダンプ・ファイルの名前はcoreになります。ユーザーは、コア・ファイル管理ユーティリティcoreadmを使用すると、そのコア・ダンプの場所と名前を構成できます。この手順については、coreadmユーティリティのマニュアル・ページに詳しく説明されています。

ulimitユーティリティは、現在のシェルとその子孫で利用できるシステム・リソースへの制限を設定または取得するために使用されます。コア・ファイルのサイズ制限をチェックまたは設定するには、ulimit -cコマンドを使用します。その制限が必ずunlimitedに設定されるようにしてください。そうしないと、コア・ファイルが切り詰められる可能性があります。

ノート:

ulimitはBashシェルの組込みコマンドです。Cシェルでは、limitコマンドを使用してください。

VMまたはアプリケーションの起動に使用されるスクリプトがコア・ダンプの作成を無効にしないようにしてください。

gcoreユーティリティを使用すると、実行中のプロセスのコア・イメージを取得できます。このユーティリティは、コア・ダンプを強制的に作成させるプロセスのプロセスID (pid)を受け入れます。

マシン上で実行されているJavaプロセスのリストを取得するには、次のいずれかのコマンドを使用できます。

  • ps -ef | grep java
  • pgrep java
  • jps

    ノート:

    jpsコマンド行ユーティリティでは、名前の照合(つまり、プロセスのコマンド名の中に「java」がないか検索する)を行わないため、Javaプロセスだけでなく、Java VMの埋込みプロセスも一覧表示できます。

次は、Oracle Solarisでコア・ダンプを収集するための2つの方法です。

  • Oracle SolarisでのShowMessageBoxOnErrorオプション:

    Javaプロセスは、-XX:+ShowMessageBoxOnErrorコマンド行オプションを使って起動できます。致命的エラーが発生すると、そのプロセスは標準エラーにメッセージを出力し、標準入力からの「yes」または「no」の応答を待ちます。次の例は、予期しないシグナルが発生した場合の出力を示しています。

    =======================================================================
    Unexpected Error
    -----------------------------------------------------------------------
    SIGSEGV (0xb) at pc=0xfeba31ac, pid=8677, tid=2
    Do you want to debug the problem?
    To debug, run 'dbx - 8677'; then switch to thread 2
    Enter 'yes' to launch dbx automatically (PATH must include dbx)
    Otherwise, press RETURN to abort...
    =======================================================================
    

    yes」と応答するか、[Return]([Enter])キーを押す前に、gcoreユーティリティを使用してコア・ダンプを強制します。その後、「yes」と入力してdbxデバッガを起動できます。

  • trussユーティリティによるプロセスの中断:

    -XX:+ShowMessageBoxOnErrorオプションを指定できない場合は、trussユーティリティを使用できる可能性があります。このOracle Solarisオペレーティング・システムのユーティリティは、システム・コールおよびシグナルをトレースするために使用されます。このユーティリティを使用すると、特定の関数またはシステム・コールに達した時点でプロセスを中断できます。

    次の例のコマンドは、trussユーティリティを使用して、exitシステム・コールが実行される(つまり、プロセスが終了しようとしている)ときにプロセスを中断する方法を示しています。

    $ truss -t \!all -s \!all -T exit -p pid
    

    プロセスがexitを呼び出すと、そのプロセスが中断されます。この時点で、デバッガをプロセスに接続することも、gcoreを呼び出してコア・ダンプを強制することもできます。

Linuxでのコア・ダンプの収集

Linuxオペレーティング・システムでは、セグメンテーション違反や不正な命令などの処理できないシグナルによってコア・ダンプが作成されます。

デフォルトでは、コア・ダンプはプロセスの現在の作業ディレクトリに作成され、コア・ダンプ・ファイルの名前はcore.pidになります(pidはクラッシュしたJavaプロセスのプロセスID)。

ulimitユーティリティは、現在のシェルとその子孫で利用できるシステム・リソースへの制限を設定または取得するために使用されます。コア・ファイルのサイズ制限をチェックまたは設定するには、ulimit -cコマンドを使用します。その制限が必ずunlimitedに設定されるようにしてください。そうしないと、コア・ファイルが切り詰められる可能性があります。

ノート:

ulimitはBashシェルの組込みコマンドです。Cシェルでは、limitコマンドを使用してください。

VMまたはアプリケーションの起動に使用されるスクリプトがコア・ダンプの作成を無効にしないようにしてください。

gcoreコマンドをgdb (GNUデバッガ)インタフェースで使用すると、実行中のプロセスのコア・イメージを取得できます。このユーティリティは、コア・ダンプを強制的に作成させるプロセスのpidを受け入れます。

マシン上で実行されているJavaプロセスのリストを取得するには、次のいずれかのコマンドを使用できます。

  • ps -ef | grep java
  • pgrep java
  • jps

    ノート:

    jpsコマンド行ユーティリティでは、名前の照合(つまり、プロセスのコマンド名の中に「java」がないか検索する)を行わないため、Javaプロセスだけでなく、Java VMの埋込みプロセスも一覧表示できます。

次は、Linuxでコア・ダンプを収集するための1つのオプションです。
  • LinuxでのShowMessageBoxOnErrorオプション:

    Javaプロセスは、-XX:+ShowMessageBoxOnErrorコマンド行オプションを使って起動できます。致命的エラーが発生すると、そのプロセスは標準エラーにメッセージを出力し、標準入力からの「yes」または「no」の応答を待ちます。次の例は、予期しないシグナルが発生した場合の出力を示しています。

    =======================================================================
    Unexpected Error
    -----------------------------------------------------------------------
    SIGSEGV (0xb) at pc=0x06232e5f, pid=11185, tid=8194
    Do you want to debug the problem?
    To debug, run 'gdb /proc/11185/exe 11185'; then switch to thread 8194
    Enter 'yes' to launch gdb automatically (PATH must include gdb)
    Otherwise, press RETURN to abort...
    =======================================================================
    

    示されたエラー・レポートで示唆されているように、gdb (GNUデバッガ)インタフェースを起動するには、「yes」と入力します。gdbプロンプトで、gcoreコマンドを指定できます。このコマンドは、デバッグされたプロセスのコア・ダンプをcore.pidという名前で作成します(pidはクラッシュしたプロセスのプロセスID)。使用しているgdbバージョンでgdb gcoreコマンドがサポートされていることを確認してください。gdbコマンド・プロンプトで、help gcoreを確認してください。

コア・ファイルを取得しない理由

コア・ファイルが生成されない場合がある理由のリスト。

特に断りがないかぎり、このリストはOracle SolarisとLinuxオペレーティング・システムの両方に関連します。

  • ユーザーに、そのプロセスの現在の作業ディレクトリへの書込み権がありません。

  • ユーザーには現在の作業ディレクトリへの書込み権がありますが、読取り専用の権限を持つcoreという名前のファイルがすでに存在しています。

  • 現在のディレクトリに十分な空き領域がないか、空き領域がまったく残っていません。

  • 現在のディレクトリに、coreという名前のサブディレクトリがあります。

  • 現在の作業ディレクトリがリモートです。ネットワーク・ファイル・システム(NFS)によってマップされている可能性があり、コア・ダンプが作成されようとしているときにNFSが失敗しました。

  • Oracle Solarisオペレーティング・システムのみ: coreadmツールを使用してコア・ファイルのディレクトリと名前が構成されましたが、構成されたディレクトリに前述の1つ以上の理由が当てはまります。

  • コア・ファイルのサイズ制限が低すぎます。ulimit -cコマンド(Bashシェル)またはlimit -cコマンド(Cシェル)を使用して、コア・ファイル・サイズの制限をチェックしてください。このコマンドからの出力がunlimitedでない場合、コア・ダンプのファイル・サイズが十分な大きさでない可能性があります。その場合は、切り詰められたコア・ダンプが作成されるか、コア・ダンプがまったく作成されません。また、VMまたはアプリケーションの起動に使用されるスクリプトがコア・ダンプの作成を無効にしないようにしてください。

  • プロセスがsetuidプログラムを実行しているため、オペレーティング・システムは、明示的に構成されないかぎり、コアをダンプしません。

  • Java固有: プロセスがSIGSEGVまたはSIGILLを受信してもコアがダンプされなかった場合、プロセスがそれを処理した可能性があります。たとえば、HotSpot VMはSIGSEGVシグナルを、正当な目的(NullPointerExceptionのスローや最適化解除など)のために使用します。Java VMによってシグナルが処理されないのは、現在の命令(PC)がJava VM生成コードから外れる場合だけです。これらが、HotSpotでコアがダンプされる唯一の場合になります。

  • Java固有: VMの作成に、JNI呼び出しAPIが使用されました。標準のJavaランチャは使用されませんでした。カスタムJavaランチャ・プログラムが、シグナルを消費してその処理をすませ、ログ・エントリを暗黙のうちに生成しました。この状況は、特定のアプリケーション・サーバーやWebサーバーで発生しました。これらのJava VM埋め込みプログラムは、異常終了後にシステムの再起動(フェイルオーバー)を透過的に試行します。この場合、コア・ダンプが生成されないという事実は、機能であってバグではありません。

Windowsでのクラッシュ・ダンプの収集

Windowsオペレーティング・システムでは、ワトソン博士ログ・ファイル、ユーザー・ミニダンプおよびワトソン博士フル・ダンプの3種類のクラッシュ・ダンプがあります。

  • ワトソン博士のログ・ファイル。これは、障害時のスタック・トレースとその他のいくつかの詳細を含むテキスト・エラー・ログ・ファイルです。

  • ユーザーのミニダンプ。これは部分的なコア・ダンプと見なされます。このダンプにはプロセスの有用なメモリー・ページがすべて含まれているわけではないため、完全なコア・ダンプではありません。

  • ワトソン博士の完全ダンプ。これは、UNIXコア・ダンプと同等のものです。このダンプには、プロセスのほとんどのメモリー・ページが含まれています(コード・ページを除く)。

Windowsで予期しない例外が発生した場合、実行されるアクションは次のレジストリ・キーの2つの値によって異なります。

\\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AeDebug

それらの2つの値には、DebuggerおよびAutoという名前が付いています。Auto値は、アプリケーション・エラーが発生したときに、Debuggerエントリの値で指定されたデバッガが自動的に起動するかどうかを示します。

  • Auto値が0の場合は、アプリケーション・エラーが発生したときにシステムがメッセージ・ボックスを表示してユーザーに知らせることを示します。

  • Auto値が1の場合は、デバッガが自動的に起動することを示します。

Debuggerの値は、プログラム・エラーのデバッグに使用されるデバッガ・コマンドです。

Windowsでは、プログラム・エラーが発生すると、Auto値を調べて、その値が0の場合に、Debugger値に含まれるコマンドを実行します。Debuggerの値が有効なコマンドである場合は、「OK」「キャンセル」の2つのボタンを含むメッセージ・ボックスが作成されます。ユーザーが「OK」をクリックすると、プログラムが終了します。ユーザーが「キャンセル」をクリックすると、指定されたデバッガが開始されます。Autoエントリの値が1に設定され、Debuggerエントリの値が有効なデバッガを表すコマンドを指定している場合、システムはそのデバッガを自動的に起動し、メッセージ・ボックスを生成しません。

次は、Windowsでクラッシュ・ダンプを収集するための2つの方法です。

  • ワトソン博士の構成:

    ワトソン博士のデバッガは、クラッシュ・ダンプ・ファイルの作成に使用されます。デフォルトでは、ワトソン博士のデバッガ(drwtsn32.exe)はWindowsシステム・フォルダ(%SystemRoot%\System32)にインストールされます。

    ワトソン博士をポストモーテム・デバッガとしてインストールするには、次のコマンドを実行します。

    drwtsn32 -i
    

    クラッシュ・ダンプ・ファイルの名前と場所を構成するには、オプションを付けずにdrwtsn32を実行します。

    ワトソン博士のGUIウィンドウで、「クラッシュ・ダンプ・ファイルの作成」チェック・ボックスが選択されていること、およびクラッシュ・ダンプ・ファイル・パスとログ・ファイル・パスがそれぞれのテキスト・フィールドに構成されていることを確認します。

    レジストリを使用すると、フル・ダンプを作成するようにワトソン博士を構成できます。レジストリ・キーを次の例に示します。

    System Key: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DrWatson]
    Entry Name: CreateCrashDump
    Value: (0 = disabled, 1 = enabled)
    

    ノート:

    アプリケーションが例外を処理する場合は、レジストリで構成されたデバッガは呼び出されません。その場合は、-XX:+ShowMessageBoxOnErrorコマンド行オプションを使用することで、致命的エラーの状態ではユーザーが介入するまで待つようにプロセスを強制するのが適切である可能性があります。
  • クラッシュ・ダンプの強制:

    Windowsオペレーティング・システムでは、userdumpコマンド行ユーティリティを使って実行中のプロセスのDr. Watsonダンプを強制できます。userdumpユーティリティはWindowsに同梱されていません。OEM Support Toolsパッケージのコンポーネントとして提供されています。

    クラッシュ・ダンプを強制する別の方法は、windbgデバッガを使用することです。windbgを使用することの主な利点は、非侵入的な方法(つまり読取り専用)でプロセスに接続できることです。通常、Windowsはクラッシュ・ダンプの取得後にプロセスを終了させますが、非侵入型の接続ではクラッシュ・ダンプの取得後もプロセスを続行できます。デバッガを接続するには、「Attach to Process」オプションを選択し、「Noninvasive」チェック・ボックスを選択します。

    デバッガが接続されたら、次の例に示されたコマンドを使用してクラッシュ・ダンプを取得できます。

    .dump /f crash.dmp
    

    windbgデバッガは、Debugging Tools for Windowsのダウンロードに含まれています。

    このダウンロードに含まれる追加のdumpchk.exeユーティリティは、メモリー・ダンプ・ファイルが正しく作成されたことを検証できます。

    userdump.exewindbgのどちらにも、プロセスのpidが必要です。userdump -pコマンドは、すべてのプロセスのプロセスとプログラムを一覧表示します。これは、アプリケーションがjava.exeランチャで起動されることがわかっている場合に役立ちます。ただし、カスタム・ランチャが使用される場合(埋込みVM)、プロセスの認識が困難である可能性があります。その場合は、JavaプロセスのPIDのみを一覧表示するjpsコマンド行ユーティリティを使用できます。

    Oracle SolarisおよびLinuxオペレーティング・システムと同様に、Windowsでも-XX:+ShowMessageBoxOnErrorコマンド行オプションを使用できます。致命的エラーが発生すると、プロセスはメッセージ・ボックスを表示し、ユーザーからのyesまたはnoの応答を待ちます。

    「はい」または「いいえ」をクリックする前に、userdump.exeユーティリティを使用して、そのJavaプロセスのワトソン博士のダンプを生成できます。このユーティリティは、プロセスがハングアップしているように見える場合にも使用できます。