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

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

Eclipse Platform に組み込まれたデバッグ機能を使ってソフトウェア・プロジェクトをデバッグする方法を学びましょう。デバッグはプログラマーにとって避けられないものです。デバッグの方法は数多くありますが、基本的にはバグの原因となっているコードを見つけることにつきます。例えば、Linux®; アプリケーションで最も一般的なエラーの 1 つは、セグメンテーション・フォールトとして知られています。これは、プログラムが、そのプログラム用に割り当てられていないメモリーにアクセスしようとし、セグメンテーション違反を起こして終了することで起こります。この種類のエラーを修正するためには、この動作を引き起こしているコード行を見つける必要があります。問題のコード行が見つかったら、エラーが発生するコンテキストや、関連する値や変数、メソッドなどもわかった方が問題を修正する上で役立ちます。デバッガーを使用すれば、こうした情報を非常に容易に見つけることができます。

Chris Aniszczyk, Software Engineer, FIT Team, IBM China Development Lab 

Chris AniszczykChris AniszczykはIBM Lotusのソフトウェア技術者であり、IBMのExtreme Blueインターンシップ・プログラムの卒業生でもあります。オープンソースの信奉者であり、現在はGentoo Linux (http://www.gentoo.org) ディストリビューションに取り組んでいます。またEMFT(Eclipse Modeling Framework Technology)プロジェクトのコミッターでもあります。



Pawel Leszek (pawel.leszek@ipgate.pl), Independent Software Consultant, Freelance

Studio B の著作者であるPaul Leszek氏は、独立ソフトウェア・コンサルタントであると同時に、Linux/Win/Mac OSのシステム・アーキテクチャーと管理を専門とする著作家です。同氏は多数のオペレーティング・システム、プログラミング言語、ネットワーク・プロトコルで豊かな経験を持ち、特にLotus DominoとDB2に関する深い知識を持っています。また、「LinuxWorld」のシリーズ記事の著者であるとともに、ポーランド版「PC World」のLinux関連コラムニストでもあります。同氏は、ワルシャワで夫人とかわいい娘と共に暮らしています。質問やコメントを是非お寄せください。



2007年 5月 01日

編集者の注記: 以下の記事は元々 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 パースペクティブの一般的なビュー

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

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

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

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

ブレークポイントの設定

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

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

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

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

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

図 5. Breakpoints ビュー
Breakpoints ビュー

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

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

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

式の評価

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

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

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

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

図 8. 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 デバッガー

まとめ

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 のスキルを磨いてください。
  • developerWorks podcasts では、ソフトウェア開発者のための興味深いインタビューや議論を聞くことができます。
  • Eclipse プラットフォームへの入門記事として、「Eclipse Platform 入門」を読んでください。
  • developerWorks の Technical events and webcasts で最新情報を入手してください。
  • IBM オープンソース開発者にとって関心のある、世界中で今後開催される会議や業界展示会、ウェブキャスト、その他のイベントについて調べてみてください。
  • developerWorks の Open source ゾーンをご覧ください。オープンソース技術を使った開発や、IBM 製品でオープンソース技術を使用するためのハウ・ツー情報やツール、プロジェクトの更新情報など、豊富な情報が用意されています。

製品や技術を入手するために

  • IBM alphaWorks に用意された最新の Eclipse technology downloads を調べてください。
  • IBM 製品の試用版をダウンロードし、DB2®; や Lotus®;、Rational®;、Tivoli®;、WebSphere®; などのアプリケーション開発ツールやミドルウェア製品を実際に試してみてください。
  • 皆さんの次期オープンソース開発プロジェクトを IBM trial software で革新してください。ダウンロード、あるいは DVD で入手することができます。

議論するために

  • C/C++ のデバッグに関連する開発のヘルプとして、Eclipse CDT newsgroups を調べてください (このリンクをクリックすると、デフォルトの Usenet ニュース・リーダー・アプリケーションが起動し、eclipse.tools.cdt が開きます)。
  • JavaScript のデバッグに関連する開発のヘルプとして、Eclipse ATF newsgroups を調べてください (このリンクをクリックすると、デフォルトの Usenet ニュース・リーダー・アプリケーションが起動し、eclipse.webtools.atf が開きます)。
  • Eclipse でのデバッグに関する質問や、その他 Eclipse プラットフォームに関して質問するために、Eclipse platform newsgroups を調べてください (このリンクをクリックすると、デフォルトの Usenet ニュース・リーダー・アプリケーションが起動し、eclipse.platform が開きます)。
  • Eclipse に関する質問を議論するための最初の場所として、Eclipse Platform newsgroups があります (このリンクをクリックすると、デフォルトの Usenet ニュース・リーダー・アプリケーションが起動し、eclipse.platform が開きます)。
  • Eclipse newsgroups には、Eclipse を利用し、拡張することに関心を持つ人達のために、さまざまなリソースが用意されています。
  • developerWorks blogs からdeveloperWorks コミュニティーに加わってください。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


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