« エラーログの出力 | トップページ | すべてのエディタの内容を保存する »

2004.03.29

デバッグ用コード切り替えスイッチ

プログラムの内部動作というのは,なかなか表向きからはわからない。原因不明のバグも1,2件はめずらしくない。開発途中であれば,開発者が内部の動作状況をトレースするためのコードを埋め込んで検証したりすることは容易だが,一旦リリースしてしまった後となると検証を行うことは非常に難しくなる。リリース時にデバッグ用コードをプログラムから削除してしまうことが多いからだ。

J2SEの1.4から追加されたアサーション機構は,VMの起動時にそれを有効にするかどうかを切り替えられる。それと同じように,プラグインを試験するためのRun-time Workbenchでは,トレース機能などのデバッグ用コードを有効にするかどうかを切り替えるための機構が備わっている

Eclipseを構成するプラグインをいろいろ覗いていくと,.optionsという名前のファイルを持っているのがわかる。この.optionsファイルには,各機能を有効にするかどうかのスイッチとなる名前と,有効にするかどうかの真偽値(trueかfalse)を記述する。スイッチの名前は,プラグインのIDに機能名を加えたものである。

  # Turn on debugging for the yoichiro.myPlugin
  yoichiro.myPlugin/debug=true
  # Displays file name.
  yoichiro.myPlugin/display/filename=false

先頭が「#」の行はコメントとみなされる。上記を見てわかるように,プラグインIDのあとは「/」で機能名を区切って記述する。機能名は任意に決めてよい。プロパティファイルと同じように,trueかfalseかの値を「=」のあとに記述する。

プログラムから上記のファイルにアクセスするために,PlatformクラスのgetDebugOptionメソッドを使用する。一般的には,クラスのstaticイニシャライザで値を読み込んで,実際のコード中で使用する。

  public class Hoge {
    private static boolean debug = false;
    static {
      String value = Platform.getDebugOption(
        "yoichiro.myPlugin/debug");
      if (value != null && value.equalsIgnoreCase("true")) {
        Hoge.debug= = true;
      }
    }
  }

PlatfromクラスのgetDebugOptionメソッドに.optionsファイルに記載した「プラグインID+機能名」の文字列を渡すことで,その値を文字列として取得することができる。そして,文字列がnull(指定された項目が見つからない)ではなく,しかも値がtrueだった場合は,debugフィールドの値を真としている。あとはdebugフィールドの値を使って,

  if (Hoge.debug)
    System.out.println("Debug: ...");

というようにしてデバッグコードを記載すればよい。

次に.optionsファイルに記載された項目のON/OFFを切り替える方法だが,もちろん.optionsファイルを直接書き換えてtrue/falseを切り替えてもよい。しかし,Eclipseではプラグインを試験するためのRun-time Workbench実行では,この.optionsファイルに記載された値をGUIを用いて変更することができる

[Run]-[Run...]メニューで表示される設定画面のRun-time Workbench項目の中には,Tracingという項目がある。Enable tracingチェックボックスにチェックを入れ,プラグインを選択すると,そのプラグインの.optionsファイルに記載された項目が表示される。そのValue列をクリックして,true/falseを切り替えることができ,Run-time Workbenchの実行時にtrueにした項目が有効になる。

さて,上記の機構は基本的にはRun-time Workbenchによる実行時の話であるが,一旦プラグインがリリースされればRun-time Workbenchによる実行ではなく,通常のEclipseの起動によってプラグインが組み込まれる。通常の起動では,.optionsファイルが読み込まれることはなく,一般的にデバッグ機能は有効にならない。しかし,以下のようにEclipseの起動時にオプションを記述すれば.optionsファイルを読み込ませることができ,.optionsファイル中のtrueの項目に関して,デバッグ機能を有効にすることができる。

  eclipse.exe -debug C:\eclipse\plugins\yoichiro.myPlugin\.options

プラグインのリリース後に問題が発生した場合は,上記のコマンドでユーザに起動してもらい,デバッグ情報を採取すると良いだろう。

|

« エラーログの出力 | トップページ | すべてのエディタの内容を保存する »

コメント

static イニシャライザでフィールド値を変更するのではなく、final宣言とともに使用したほうが良いのでは?static final でないと、処理速度に影響がでるのではなかったでしたっけ?以下はorg.eclipse.jdt.internal.ui.javaeditor.ASTProviderクラスのフィールド値の例↓ともかくとても有益な情報をありがとうございます!

private static final boolean DEBUG= "true".equalsIgnoreCase(Platform.getDebugOption("org.eclipse.jdt.ui/debug/ASTProvider"));

投稿: しん | 2005.02.16 07:41 午後

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/12631/366294

この記事へのトラックバック一覧です: デバッグ用コード切り替えスイッチ:

« エラーログの出力 | トップページ | すべてのエディタの内容を保存する »