目次


Eclipse Platformを使ってデバッグする

Eclipse を使ってソフトウェア・プロジェクトをデバッグする

Comments

編集者の注記: 以下の記事は元々 2003年5月に Pawel Leszek が執筆したものですが、2007年4月に Chris Aniszczyk が更新を行いました。

Eclipse のデバッガーと Debug ビュー

Eclipse の SDK、特に JDT (Java™ Development Tools) プロジェクトは、組み込みの Java デバッガーを持っていることが特徴です。このデバッガーには、ステップ実行や、ブレークポイントや値の設定、変数や値の検証、スレッドの中断や再開といった、標準的なデバッグ機能のすべてが含まれています。また、リモート・マシンで実行するアプリケーションをデバッグすることもできます。Eclipse Platform は非常にしっかりと作られており、他のプログラミング言語がこのデバッグ機能を使ってその言語のランタイムをデバッグすることもできます。これから説明するとおり、同じ Eclipse の Debug ビューを C/C++ プログラミング言語でも利用することができます。

Eclipse Platform Workbench とそのツールは、JDT コンポーネントを中心に作られています。これらのコンポーネントによって、Eclipse は下記の機能を提供することができます。

  • プロジェクト管理ツール
  • パースペクティブとビュー
  • ビルダーやエディター、検索、ビルドなどの機能
  • デバッガー

Eclipse のデバッガー自体は、Eclipse の中に含まれる標準のプラグイン・セットとして存在します。また Eclipse には特別な Debug ビューがあり、このビューを利用して Eclipse Platform Workbench の中のプログラムのデバッグや実行を管理することができます。このビューは、デバッグが行われている各ターゲットについて、中断されているスレッドのスタック・フレームを表示することができます。プログラムの中の各スレッドはツリーのノードとして表示され、そして Debug ビューは実行中の各ターゲットのプロセスを表示します。もしスレッドが中断されていると、そのスタック・フレームは子要素として表示されます。

Eclipse のデバッガーを使い始めるための前提として、適切な Java SDK/JRE (Java VM V1.4 が推奨です) と Eclipse Platform SDK V3.3 がインストールされており、どちらも問題なく実行している必要があります。一般的に、まず Eclipse のサンプルを使ってデバッグ・オプションをテストするのが賢明です。もし C/C++ プロジェクトの開発とデバッグを行いたい場合には、CDT (C/C++ Development Tools) も入手してインストールする必要があります。Java SDK/JRE や Eclipse Platform とそのサンプル、CDT へのリンクは、「参考文献」を参照してください。図 1 は Debug パースペクティブの一般的なビューを示しています。

図 1. Eclipse の Debug パースペクティブの一般的なビュー
Eclipse の Debug パースペクティブの一般的なビュー
Eclipse の Debug パースペクティブの一般的なビュー

Java 言語プログラムのデバッグ

プロジェクトをデバッグするためには、そのコードをコンパイルでき、クリーンに実行できる必要があります。最初に、アプリケーションを実行するための構成を作成し、そのアプリケーションが適切に起動することを確認する必要があります。次に、それと同じような方法で、Run > Debug メニューを使ってデバッグの構成を設定する必要があります。また、デバッガーがメインの Java クラスとして使用するためのクラスも選択する必要があります (図 2)。1 つのプロジェクトに対して、好きなだけの数のデバッグ構成を持つことができます。デバッガーが (Run > Debug から) 起動すると新しいウィンドウが開き、これでデバッグを開始することができます。

図 2. デバッグ構成の中で使用する、プロジェクトのメイン Java クラスの設定
デバッグ構成の中で使用する、プロジェクトのメイン Java クラスの設定
デバッグ構成の中で使用する、プロジェクトのメイン Java クラスの設定

次に、Eclipse における一般的なデバッグ作業について説明します。

ブレークポイントの設定

デバッグ対象のアプリケーションを起動すると、Eclipse は自動的に Debug パースペクティブに切り替わります。当然ながら、大部分の一般的なデバッグ手順では、条件文あるいはループ内の変数や値を調べるためのブレークポイントを設定します。Java パースペクティブの Package Explorer ビューでブレークポイントを設定するためには、選択されたソース・コード・ファイルをダブル・クリックし、そのファイルをエディターで開きます。コードをウォークスルーし、そしてカーソルを、疑わしいコードが含まれている行の上のマーカー・バー (エディター領域の左端にあります) の上に置きます。そしてダブル・クリックしてブレークポイントを設定します。

図 3. エディターの左マージンに表示されている 2 つのブレークポイント・マーカー
エディターの左マージンに表示されている 2 つのブレークポイント・マーカー
エディターの左マージンに表示されている 2 つのブレークポイント・マーカー

今度は Run > Debug メニューからデバッグ・セッションを起動します。1 つの行に複数の文を記述しないことが重要で、そうしてしまうと、同じ行の上の複数の命令に対してステップオーバー実行したり、行ブレークポイントを設定したりすることはできないためです。

図 4. 現在実行中の行を示すビュー (左マージンに矢印が付いています)
現在実行中の行を示すビュー (左マージンに矢印が付いています)
現在実行中の行を示すビュー (左マージンに矢印が付いています)

また、すべてのブレークポイントを管理するための、便利な Breakpoints ビューもあります。

図 5. Breakpoints ビュー
Breakpoints ビュー
Breakpoints ビュー

条件付きブレークポイント

どこでエラーが発生するかがわかると、今度はプログラムが停止する直前にそのプログラムが何をしているのかを知りたくなります。そのための 1 つの方法として、そのプログラムのすべての命令を、問題の点に達するまで、1 度に 1 命令ずつのステップ実行する方法があります。しかし場合によると、あるコード部分を普通に実行し、その問題の点で実行を停止した方がよいことがあります (そうすれば、その位置でデータを検証することができます)。そのために、ある式の値が変化するたびにトリガーされる条件付きブレークポイントを宣言することができます (図 6)。さらに、条件式を入力する際にはコード・アシストも用意されています。

図 6. 条件付きブレークポイントのトリガーの設定
条件付きブレークポイントのトリガーの設定
条件付きブレークポイントのトリガーの設定

式の評価

Debug パースペクティブのエディターで式を評価するためには、ブレークポイントが設定されている行全体を選択します。そしてコンテキスト・メニューから、Ctrl+Shift+I を使って Inspect オプションを選択するか、あるいは対象の変数を右クリックします (図 7)。その式は現在のスタック・フレームのコンテキストで評価され、その結果が Display ウィンドウの Expression ビューに表示されます。

図 7. Inspect オプションを使った式の評価
Inspect オプションを使った式の評価
Inspect オプションを使った式の評価

実行中のコードのスクラップブック化

Display ビューでは、スクラップブックのような方法で実行中のコードを操作することができます (図 8)。ある変数を操作するためには、Display ビューの中で単純にその変数の名前を入力します。そうすると、おなじみのコンテンツ・アシストが表示されます。

図 8. Display ビュー
Display ビュー
Display ビュー

デバッガーがブレークポイントで停止したら、Debug ビューのツールバーから Step Over オプションを選択することで、そのデバッガー・セッションを継続することができます (図 9)。これによって、強調されたコード行がステップオーバー実行され、同じメソッドの次の行で (あるいは現在のメソッドを呼び出す元となったメソッドで) 実行が継続されます。最後のステップを実行した結果、変更された変数は、色付き (デフォルトは黄色) の表示で強調されます。この色は、デバッグのプリファレンスのページで変更することができます。

図 9. 色が変わった変数
色が変わった変数
色が変わった変数

Debug ビューでスレッドの実行を中断するためには、実行中のスレッドを選択し、Debug ビューのツールバーで Suspend をクリックします。そうすると、そのスレッドに対する現在のコール・スタックが表示され、現在実行中の行が Debug パースペクティブのエディターの中で強調表示されます。スレッドが中断されると、カーソルは Java エディターの変数の上に置かれ、その変数の値が小さな移動ウィンドウに表示されます。また、そのスレッドの最上位スタック・フレームが自動的に選択され、そのスタック・フレームの中に見える変数が Variables ビューの中に表示されます。Variables ビューの中の適当な変数を検証するためには、その変数の名前をクリックします。

Hotswap Bug Fixing: 即時処理によるコード修正

JVM (Java Virtual Machine) V1.4 以降のバージョンが実行されている場合には、Eclipse は Hotswap Bug Fixing と呼ばれる機能をサポートします (JVM V1.3 以前のバージョンではサポートされません)。この機能を利用すると、デバッガー・セッション中にソース・コードを変更することができます。これはアプリケーションを終了してコードを変更し、再コンパイルし、そして別のデバッガー・セッションを開始するよりも優れています。この機能を利用するためには、単純にエディターの中でコードを変更し、そしてデバッグを再開します。この機能を利用できるようになったのは、JVM V1.4 が JPDA (Java Platform Debugger Architecture) に準拠しているためです。JPDA は、実行中のアプリケーションの中で修正されたコードに置き換えることができる機能を実装しています。当然ながら、この機能は、アプリケーションの起動や失敗した場所に達するまでに長い時間がかかる場合に特に便利です。

もしデバッグを終えた後でもそのプログラムの実行が完全に終了しない場合には、Debug ビューのコンテキスト・メニューから Terminate オプションを選択します。よくある間違いとして、デバッガー・セッション中に Resume の代わりに Debug や Run を使ってしまうことがあります。これを間違えると、現在のセッションが継続される代わりに別のデバッガー・セッションが開始されてしまいます。

リモート・デバッグ

Eclipse のデバッガーには、リモート・アプリケーションをデバッグするための興味深いオプションが提供されています。このオプションを使うと、Java アプリケーションを実行するリモートの VM に接続し、そのアプリケーションにデバッガー自体を付加することができます。リモート・デバッグ・セッションの扱い方は、ローカルのデバッグとほとんど同じです。しかしリモート・デバッグ用の構成を行うには、Run > Debug ウィンドウで異なる設定をする必要があります。最初に左側のビューで Remote Java Application エントリーを選択し、次に New をクリックします。そうすると、リモート起動用の新しい構成が作成され、Connect と Source、Common という 3 つのタブが表示されます。

Connect タブの Project フィールドで、どのプロジェクトを (ソース・コードを参照するための) 起動用の基準として使用するかを選択します。Connect タブの Host フィールドには、Java プログラムが実行されるリモート・ホストの IP アドレスあるいはドメイン名を入力します。そして Connect タブの Port フィールドでは、リモート VM が接続を受け付けるためのポートを入力します。一般的に、このポートはリモート VM が起動される時に指定されます。リモート・セッションで Terminate コマンドを利用できるかどうかをデバッガーに判断させたいときには、Allow termination of remote VM オプションを選択します。接続先の VM を終了できるようにしたい時には、このオプションを選択します。これで Debug オプションを選択すると、デバッガーは指定されたアドレスとポートにあるリモート VM に接続しようとし、その結果が Debug ビューに表示されます。

もし指定されたアドレスの VM にランチャーが接続できない場合には、エラー・メッセージが表示されます。一般的に、リモート・デバッグの機能を利用できるかどうかは、そのリモート・ホストで実行する Java VM のみによって決まります。図 10 はリモート・デバッグ・セッションに対する接続プロパティーの設定を示しています。

図 10. リモート・デバッグ・セッションに対する接続プロパティーを設定する
リモート・デバッグ・セッションに対する接続プロパティーを設定する
リモート・デバッグ・セッションに対する接続プロパティーを設定する

他の言語をデバッグする

Eclipse では Java 言語が最も広く使われていますが、Eclipse は拡張可能なプラットフォームであり、数多くの他の言語をサポートすることができます。例えば Eclipse は、CDT (C/C++ Development Tools) プロジェクトを利用することで C/C++ をサポートします。CDT は標準の Eclipse Debug ビューを、C/C++ コードをデバッグするための機能で拡張します。また CDT の Debug ビューでは、ワークベンチ内にある C/C++ プロジェクトのデバッグの管理をすることができます。CDT は内部デバッガーを含んでいませんが、ローカルにあるはずの GNU GDB デバッガーに対するフロントエンドを提供しています。また、PDT (PHP Development Tools) のような、それぞれ独自のデバッガーを提供する他のプロジェクトもあります (図 11)。

図 11. PHP デバッガー
PHP デバッガー
PHP デバッガー

まとめ

Eclipse Platform には、ステップ実行や、ブレークポイントや値の設定、変数や値の検証、スレッドの中断と再開といった標準的なデバッグ機能を持つ Java 言語デバッガーが組み込みで提供されています。また、このデバッグ機能を使って、リモート・マシン上で実行するアプリケーションをデバッグすることもできます。Eclipse Platform は主に Java 用の開発環境ですが、同じ Eclipse Debug ビューを、C/C++ や PHP など数多くのプログラミング言語用にも利用することができます。

謝辞

図11 を作成してくださった Tyler Anderson 氏に感謝いたします。


ダウンロード可能なリソース


関連トピック

  • Eclipse.org には、プログラムに関する包括的な情報やそれらの使い方が用意されています。
  • PlanetEclipse.org を訪れ、Eclipse コミュニティーの最新のできごとを知ってください。
  • Eclipse.org の CDT プロジェクトで C/C++ 開発ツールについて学んでください。
  • Ajax Tools Framework (ATF) のフラッシュ・ページプロジェクトのページを調べ、JavaScript のデバッグについて学んでください。
  • EclipseCon のチュートリアルで Eclipse の Debug Framework を詳しく学んでください。
  • developerWorks の「Eclipse オススメ情報リスト」を調べてください。
  • developerWorks には他にも Eclipse 関係の記事が豊富に用意されています。
  • Eclipse の初心者ユーザーは、Eclipse project resources の「start here」を見るとよいでしょう。
  • IBM developerWorks の Eclipse project resources を利用して Eclipse のスキルを磨いてください。
  • Eclipse プラットフォームへの入門記事として、「Eclipse Platform 入門」を読んでください。
  • developerWorks の Open source ゾーンをご覧ください。オープンソース技術を使った開発や、IBM 製品でオープンソース技術を使用するためのハウ・ツー情報やツール、プロジェクトの更新情報など、豊富な情報が用意されています。
  • IBM alphaWorks に用意された最新の Eclipse technology downloads を調べてください。
  • IBM 製品の試用版をダウンロードし、DB2®; や Lotus®;、Rational®;、Tivoli®;、WebSphere®; などのアプリケーション開発ツールやミドルウェア製品を実際に試してみてください。
  • 皆さんの次期オープンソース開発プロジェクトを IBM trial software で革新してください。ダウンロード、あるいは DVD で入手することができます。

コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Open source
ArticleID=232907
ArticleTitle=Eclipse Platformを使ってデバッグする
publish-date=05012007