(57)【要約】【課題】自由度高くバイナリコードを編集可能なプログラムを提供する。【解決手段】情報処理装置１が備えるＪＷｅａｖｅｒ１２０は、動作パラメータの設定値に従う特定種類の編集処理を編集対象のバイトコードに対して実行するウィーバ１２３を編集処理の種類毎に備える。このＪＷｅａｖｅｒ１２０は、起動時に編集対象のクラス及びメソッドを指定するＰｌａｎファイル１３０を読み出すと共に、Ｐｌａｎファイル１３０の記述内容に従って当該メソッドのバイトコード編集時に使用すべきウィーバ１２３を指定する情報、及び、ウィーバ１２３に対する動作パラメータの設定値の情報を有するＲｕｌｅファイル１２７を読み出す。そして、読み出したファイルが指定するウィーバ１２３に、このファイルが示す動作パラメータに対応する編集処理を、Ｐｌａｎファイル１３０で指定されたメソッドのバイトコードを対象に実行させる。【選択図】図１
2011070533.tif 000002
【特許請求の範囲】
【請求項１】
特定種類の編集処理を、編集対象のバイナリコードに対して実行する手順をコンピュータに実行させるためのプログラム部品である第一プログラム部品
を前記編集処理の種類毎に備えると共に、
バイナリコードを編集する対象のプログラムファイル及び当該プログラムファイル内の編集対象領域を指定する情報である第一指定情報、並びに、使用する前記第一プログラム部品を指定する情報である第二指定情報が記述された単一ファイル、又は、これらの指定情報が分散して記述されたファイル群を取得するファイル取得手順と、
前記ファイル取得手順により取得された前記単一ファイル又はファイル群に記述された前記第一指定情報に従って、当該第一指定情報を通じて指定された前記プログラムファイルのバイナリコードを取得するコード取得手順と、
前記ファイル取得手順により取得された単一ファイル又はファイル群に記述された前記第一指定情報及び前記第二指定情報に従い、前記コンピュータに、前記第二指定情報を通じて指定された前記第一プログラム部品に基づいた前記特定種類の編集処理を、前記コード取得手順により取得されたバイナリコードの前記第一指定情報が示す編集対象領域を前記編集対象のバイナリコードとして、実行させる編集制御手順と、
前記編集制御手順による編集後のバイナリコードを格納したプログラムファイルを、前記第一指定情報により指定された前記プログラムファイルに対応する編集後のプログラムファイルとして、出力する編集後ファイル出力手順と、
を前記コンピュータに実行させるためのプログラム部品である第二プログラム部品を備えること
を特徴とするコード編集用プログラム。
【請求項２】
請求項１記載のコード編集用プログラムであって、
前記編集処理として、前記編集対象のバイナリコードに特定のバイナリコードを追加する処理を前記コンピュータに実行させるためのプログラム部品、
前記編集処理として、前記編集対象のバイナリコードの少なくとも一部を特定のバイナリコードに置換する処理を前記コンピュータに実行させるためのプログラム部品、
及び、
前記編集処理として、前記コード取得手順により取得されたバイナリコードから前記編集対象のバイナリコードの少なくとも一部を削除する処理を前記コンピュータに実行させるためのプログラム部品
の少なくとも二以上を、前記第一プログラム部品として備えることを特徴とするコード編集用プログラム。
【請求項３】
動作パラメータの設定値に従う特定種類の編集処理を、編集対象のバイナリコードに対して実行する手順をコンピュータに実行させるためのプログラム部品である第一プログラム部品
を前記編集処理の種類毎に備えると共に、
バイナリコードを編集する対象のプログラムファイル及び当該プログラムファイル内の編集対象領域を指定する情報である第一指定情報、並びに、使用する前記第一プログラム部品を指定する情報である第二指定情報、並びに、前記第一プログラム部品に対する前記動作パラメータの設定値を表す第三指定情報、が記述された単一ファイル、又は、これらの指定情報が分散して記述されたファイル群を取得するファイル取得手順と、
前記ファイル取得手順により取得された前記単一ファイル又はファイル群に記述された前記第一指定情報に従って、当該第一指定情報を通じて指定された前記プログラムファイルのバイナリコードを取得するコード取得手順と、
前記ファイル取得手順により取得された単一ファイル又はファイル群に記述された前記第一指定情報及び前記第二指定情報及び前記第三指定情報に従い、前記コンピュータに、前記第二指定情報を通じて指定された前記第一プログラム部品に基づいた処理であって、前記第三指定情報が表す前記動作パラメータの設定値に従う前記特定種類の編集処理を、前記コード取得手順により取得されたバイナリコードの前記第一指定情報が示す編集対象領域を前記編集対象のバイナリコードとして、実行させる編集制御手順と、
前記編集制御手順による編集後のバイナリコードを格納したプログラムファイルを、前記第一指定情報により指定された前記プログラムファイルに対応する編集後のプログラムファイルとして、出力する編集後ファイル出力手順と、
を前記コンピュータに実行させるためのプログラム部品である第二プログラム部品を備えること
を特徴とするコード編集用プログラム。
【請求項４】
請求項３記載のコード編集用プログラムであって、
前記動作パラメータの少なくとも一つは、前記編集対象のバイナリコードに追加するバイナリコードに対応したソースコードである追加コード、又は、前記編集対象のバイナリコードの少なくとも一部領域において元のバイナリコードから置換するバイナリコードに対応したソースコードである置換コードが設定される動作パラメータであり、
前記各第一プログラム部品は、前記編集処理として、前記動作パラメータの設定値が示す前記追加コードをバイナリコードに変換して前記編集対象のバイナリコードに追加する処理、又は、前記動作パラメータの設定値が示す前記置換コードをバイナリコードに変換して前記編集対象のバイナリコードの少なくとも一部を前記変換したバイナリコードに置換する処理、を前記コンピュータに実行させるためのプログラム部品であること
を特徴とするコード編集用プログラム。
【請求項５】
請求項３又は請求項４記載のコード編集用プログラムであって、
前記ファイル取得手順は、
前記第二指定情報及び前記第三指定情報が記述されたデータファイルである編集規則記述ファイルの指定情報が前記第一指定情報と共に記述されたデータファイル、である対象記述ファイルを取得する手順と、
前記対象記述ファイルの取得後、当該対象記述ファイルを通じて指定された前記編集規則記述ファイルを取得する手順と、
を含む手順であることを特徴とするコード編集用プログラム。
【請求項６】
請求項３〜請求項５のいずれか一項に記載のコード編集用プログラムであって、
前記第一プログラム部品の一つは、
前記編集処理として、前記動作パラメータの設定値が示すソースコードに従って、前記編集対象のバイナリコードに対し、当該バイナリコードにより実現される一連の処理の開始前後で前記動作パラメータの設定値が示すソースコードに対応した処理を前記コンピュータに実行させるためのバイナリコードを追加する処理
を前記コンピュータに実行させるためのプログラム部品であること
を特徴とするコード編集用プログラム。
【請求項７】
請求項５記載のコード編集用プログラムであって、
前記第一プログラム部品の一つは、
前記編集処理として、前記動作パラメータの設定値が示すソースコードに従って、前記編集対象のバイナリコードに対し、当該バイナリコードにより実現される一連の処理の開始前後で前記動作パラメータの設定値が示すソースコードに対応した処理を前記コンピュータに実行させるためのバイナリコードを追加する処理
を前記コンピュータに実行させるためのプログラム部品である前後追加用プログラム部品として構成され、
当該コード編集用プログラムは、
前記第二指定情報として、前記前後追加用プログラム部品を指定する情報が記述され、前記第三指定情報として、前記編集対象のバイナリコードより実現される一連の処理の開始前後で当該一連の処理の実行時間を計測するための処理を前記コンピュータに実行させるためのソースコードが記述された前記編集規則記述ファイル
を備えることを特徴とするコード編集用プログラム。
【請求項８】
特定種類の編集処理を、編集対象のバイナリコードに対して実行するコード編集手段
を前記編集処理の種類毎に備えると共に、
バイナリコードを編集する対象のプログラムファイル及び当該プログラムファイル内の編集対象領域を指定する情報である第一指定情報、並びに、起動すべき前記コード編集手段を指定する情報である第二指定情報が記述された単一ファイル、又は、これらの指定情報が分散して記述されたファイル群を取得するファイル取得手段と、
前記ファイル取得手段により取得された前記単一ファイル又はファイル群に記述された前記第一指定情報に従って、当該第一指定情報を通じて指定された前記プログラムファイルのバイナリコードを取得するコード取得手段と、
前記ファイル取得手段により取得された単一ファイル又はファイル群に記述された前記第一指定情報及び前記第二指定情報に従い、前記第二指定情報を通じて指定された前記コード編集手段を起動し、前記コード編集手段に、前記特定種類の編集処理を、前記コード取得手段により取得されたバイナリコードの前記第一指定情報が示す編集対象領域を前記編集対象のバイナリコードとして、実行させる編集制御手段と、
前記編集制御手段の動作により得られた編集後のバイナリコードを格納したプログラムファイルを、前記第一指定情報により指定された前記プログラムファイルに対応する編集後のプログラムファイルとして、出力する編集後ファイル出力手段と、
を備えることを特徴とするコード編集装置。
【請求項９】
請求項８記載のコード編集装置であって、
前記編集処理として、前記編集対象のバイナリコードに特定のバイナリコードを追加する処理を実行する手段、
前記編集処理として、前記編集対象のバイナリコードの少なくとも一部を特定のバイナリコードに置換する処理を実行する手段、
及び、
前記編集処理として、前記コード取得手段により取得されたバイナリコードから前記編集対象のバイナリコードの少なくとも一部を削除する処理を実行する手段
の少なくとも二以上を、前記コード編集手段として備えることを特徴とするコード編集装置。
【請求項１０】
動作パラメータの設定値に従う特定種類の編集処理を、編集対象のバイナリコードに対して実行するコード編集手段
を前記編集処理の種類毎に備えると共に、
バイナリコードを編集する対象のプログラムファイル及び当該プログラムファイル内の編集対象領域を指定する情報である第一指定情報、並びに、起動すべき前記コード編集手段を指定する情報である第二指定情報、並びに、前記コード編集手段に対する前記動作パラメータの設定値を表す第三指定情報、が記述された単一ファイル、又は、これらの指定情報が分散して記述されたファイル群を取得するファイル取得手段と、
前記ファイル取得手段により取得された前記単一ファイル又はファイル群に記述された前記第一指定情報に従って、当該第一指定情報を通じて指定された前記プログラムファイルのバイナリコードを取得するコード取得手段と、
前記ファイル取得手段により取得された単一ファイル又はファイル群に記述された前記第一指定情報及び前記第二指定情報及び前記第三指定情報に従い、前記第二指定情報を通じて指定された前記コード編集手段を起動し、前記コード編集手段に、前記第三指定情報が表す前記動作パラメータの設定値に従う前記特定種類の編集処理を、前記コード取得手段により取得されたバイナリコードの前記第一指定情報が示す編集対象領域を前記編集対象のバイナリコードとして、実行させる編集制御手段と、
前記編集制御手段の動作により得られた編集後のバイナリコードを格納したプログラムファイルを、前記第一指定情報により指定された前記プログラムファイルに対応する編集後のプログラムファイルとして、出力する編集後ファイル出力手段と、
を備えることを特徴とするコード編集装置。
【請求項１１】
請求項１０記載のコード編集装置であって、
前記動作パラメータの少なくとも一つは、前記編集対象のバイナリコードに追加するバイナリコードに対応したソースコードである追加コード、又は、前記編集対象のバイナリコードの少なくとも一部領域において元のバイナリコードから置換するバイナリコードに対応したソースコードである置換コードが設定される動作パラメータであり、
前記各コード編集手段は、前記編集処理として、前記動作パラメータの設定値が示す前記追加コードをバイナリコードに変換して前記編集対象のバイナリコードに追加する処理、又は、前記動作パラメータの設定値が示す前記置換コードをバイナリコードに変換して前記編集対象のバイナリコードの少なくとも一部を前記変換したバイナリコードに置換する処理、を実行する手段であること
を特徴とするコード編集装置。
【請求項１２】
請求項１０又は請求項１１記載のコード編集装置であって、
前記ファイル取得手段は、
前記第二指定情報及び前記第三指定情報が記述されたデータファイルである編集規則記述ファイルの指定情報が前記第一指定情報と共に記述されたデータファイル、である対象記述ファイルを取得し、
前記対象記述ファイルの取得後、当該対象記述ファイルを通じて指定された前記編集規則記述ファイルを取得する
手段であることを特徴とするコード編集装置。
【請求項１３】
請求項１０〜請求項１２のいずれか一項に記載のコード編集装置であって、
前記コード編集手段の一つは、
前記編集処理として、前記動作パラメータの設定値が示すソースコードに従って、前記編集対象のバイナリコードに対し、当該バイナリコードにより実現される一連の処理の開始前後で前記動作パラメータの設定値が示すソースコードに対応した処理を前記コンピュータに実行させるためのバイナリコードを追加する処理
を実行する手段であること
を特徴とするコード編集装置。
【請求項１４】
請求項１２記載のコード編集装置であって、
前記コード編集手段の一つは、
前記編集処理として、前記動作パラメータの設定値が示すソースコードに従って、前記編集対象のバイナリコードに対し、当該バイナリコードにより実現される一連の処理の開始前後で前記動作パラメータの設定値が示すソースコードに対応した処理を前記コンピュータに実行させるためのバイナリコードを追加する処理
を実行する前後追加用コード編集手段として構成され、
当該コード編集装置は、
前記第二指定情報として、前記前後追加用コード編集手段を指定する情報が記述され、前記第三指定情報として、前記編集対象のバイナリコードより実現される一連の処理の開始前後で当該一連の処理の実行時間を計測するための処理を前記コンピュータに実行させるためのソースコードが記述された前記編集規則記述ファイル
を備えることを特徴とするコード編集装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コード編集用プログラム及びコード編集装置に関する。
【背景技術】
【０００２】
ソフトウェアのデバッグ作業としては、ソフトウェアのソースコードに対してデバッグコードを追加するなどの編集処理を行い、当該編集後のソースコードをコンパイルして、当該デバッグコードが埋め込まれたバイナリコードを生成する作業が従来知られている。
【０００３】
この他、デバッグ作業を支援するツールとしては、ユーザからの指示に従ってソフトウェアのバイナリコードにブレークコードを埋め込み、当該バイナリコードにブレークポイントを設定するものが知られている（例えば、特許文献１参照）。このツールでは、例えば、バイナリコードに対応するソースコードを参照して、ユーザから指定された位置にブレークコードを埋め込む。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平６−２４２９４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
このような支援ツールを用いることで、従来から、デバッグ作業に伴うバイナリコードの編集作業に際しては、ユーザによるソースコードの編集無しにバイナリコードを編集できることが知られている。
【０００６】
しかしながら、従来の支援ツールでは限られたバイナリコードの編集作業しかできないため、デバッグ作業に際して支援ツールの活用だけでは不足で、結果として、編集対象のバイナリコードに対応するソースコードを編集する作業が必要になる場合が多かった。
【０００７】
本発明は、こうした問題に鑑みなされたものであり、編集対象のバイナリコードに対応するソースコードのユーザによる編集無しに、従来よりも自由度高くバイナリコードを編集可能なコード編集用プログラム及びコード編集装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するためになされた第一の発明に対応するコード編集用プログラムは、「特定種類の編集処理を、編集対象のバイナリコードに対して実行する」手順をコンピュータに実行させるためのプログラム部品である第一プログラム部品を、編集処理の種類毎に備える。尚、本明細書では、ソースコードのコンパイル後データを「バイナリコード」と表現する。
【０００９】
更に、このコード編集用プログラムは、以下に説明するファイル取得手順と、コード取得手順と、編集制御手順と、編集後ファイル出力手順と、をコンピュータに実行させるためのプログラム部品である第二プログラム部品を備える。
【００１０】
ファイル取得手順は、「バイナリコードを編集する対象のプログラムファイル及びプログラムファイル内の編集対象領域を指定する情報である第一指定情報」、並びに、「使用する第一プログラム部品を指定する情報である第二指定情報」が記述された単一ファイル、又は、これらの指定情報が分散して記述されたファイル群を取得する手順である。
【００１１】
また、コード取得手順は、ファイル取得手順により取得された上記単一ファイル又はファイル群に記述された第一指定情報に従って、この第一指定情報を通じて指定されたプログラムファイルのバイナリコードを取得する手順である。
【００１２】
この他、編集制御手順は、ファイル取得手順により取得された上記単一ファイル又はファイル群に記述された第一指定情報及び第二指定情報に従い、コード取得手順により取得されたバイナリコードの上記第一指定情報が示す編集対象領域を上記編集対象のバイナリコードとして、コンピュータに、第二指定情報を通じて指定された第一プログラム部品に基づいた上記特定種類の編集処理を実行させる手順である。
【００１３】
そして、編集後ファイル出力手順は、編集制御手順による編集後のバイナリコードを格納したプログラムファイルを、第一指定情報により指定されたプログラムファイルに対応する編集後のプログラムファイルとして、出力する手順である。
【００１４】
第一の発明では、上述したように、バイナリコードに対して特定種類の編集を加えることのできる第一プログラム部品を、編集処理の種類毎に設けている。このため、本発明のコード編集用プログラムを用いれば、ユーザは、使用する第一プログラム部品を選択し、その指定情報を上記第二指定情報としてデータファイルに書き込むことで、自由度高く編集対象のバイナリコードを編集することができる。そして、本発明によれば、第一プログラム部品を通じて編集対象のバイナリコードを直接編集することができるため、ユーザは、編集対象のバイナリコードに対応するソースコードを入手し、これを編集しなくても、上記編集対象のバイナリコードを編集することができる。
【００１５】
結果、本発明によれば、従来よりも自由度高く、ユーザによる編集対象のバイナリコードに対応するソースコードの編集無しに、バイナリコードを編集可能なコード編集用プログラムを提供することができる。
【００１６】
尚、第一プログラム部品としては、例えば、上記編集処理として、編集対象のバイナリコードに特定のバイナリコードを追加する処理をコンピュータに実行させるためのプログラム部品を挙げることができる。
【００１７】
その他、第一プログラム部品としては、例えば、上記編集処理として、編集対象のバイナリコードの少なくとも一部を特定のバイナリコードに置換する処理をコンピュータに実行させるためのプログラム部品や、上記編集処理として、コード取得手順により取得されたバイナリコードから編集対象のバイナリコードの少なくとも一部を削除する処理をコンピュータに実行させるためのプログラム部品を挙げることができる。
【００１８】
上記第一プログラム部品として、以上に挙げたプログラム部品の少なくとも二以上を
、上記コード編集用プログラムに設ければ、一層、自由度高く編集対象のバイナリコードを編集することができる。
【００１９】
この他、上記目的を達成するためになされた第二の発明は、「動作パラメータの設定値に従う特定種類の編集処理を、編集対象のバイナリコードに対して実行する」手順をコンピュータに実行させるためのプログラム部品である第一プログラム部品を、編集処理の種類毎に備えるコード編集用プログラムである。
【００２０】
更に、本発明のコード編集用プログラムは、以下に説明するファイル取得手順と、コード取得手順と、編集制御手順と、編集後ファイル出力手順と、をコンピュータに実行させるためのプログラム部品である第二プログラム部品を備える。
【００２１】
ファイル取得手順は、「バイナリコードを編集する対象のプログラムファイル及びプログラムファイル内の編集対象領域を指定する情報である第一指定情報」、並びに、「使用する第一プログラム部品を指定する情報である第二指定情報」、並びに、「第一プログラム部品に対する動作パラメータの設定値を表す第三指定情報」、が記述された単一ファイル、又は、これらの指定情報が分散して記述されたファイル群を取得する手順である。
【００２２】
また、コード取得手順は、ファイル取得手順により取得された上記単一ファイル又はファイル群に記述された第一指定情報に従って、この第一指定情報を通じて指定されたプログラムファイルのバイナリコードを取得する手順である。
【００２３】
この他、編集制御手順は、ファイル取得手順により取得された上記単一ファイル又はファイル群に記述された第一指定情報及び第二指定情報及び第三指定情報に従い、コード取得手順により取得されたバイナリコードの上記第一指定情報が示す編集対象領域を上記編集対象のバイナリコードとして、コンピュータに、第二指定情報を通じて指定された第一プログラム部品に基づいた処理であって、第三指定情報が表す動作パラメータの設定値に従う上記特定種類の編集処理を実行させる手順である。
【００２４】
そして、編集後ファイル出力手順は、編集制御手順による編集後のバイナリコードを格納したプログラムファイルを、第一指定情報により指定されたプログラムファイルに対応する編集後のプログラムファイルとして、出力する手順である。
【００２５】
第二の発明では、上述したように、バイナリコードに対して特定種類の編集を加えることのできる第一プログラム部品を、編集処理の種類毎に設けている。また、第一プログラム部品に対しては、編集内容の細部を決定付ける動作パラメータを設定できるように、コード編集用プログラムを構成している。
【００２６】
このため、本発明のコード編集用プログラムを用いれば、ユーザは、動作パラメータ及び使用する第一プログラム部品を選択し、その指定情報を上記第二指定情報及び第三指定情報としてデータファイルに書き込むことで、自由度高く編集対象のバイナリコードを編集することができる。そして、本発明によれば、第一プログラム部品を通じて編集対象のバイナリコードを直接編集することができるため、ユーザは、編集対象のバイナリコードに対応するソースコードを入手し、これを編集しなくても、上記編集対象のバイナリコードを編集することができる。
【００２７】
結果、本発明によれば、従来よりも自由度高く、ユーザによる編集対象のバイナリコードに対応するソースコードの編集無しに、バイナリコードを編集可能なコード編集用プログラムを提供することができる。
【００２８】
尚、このコード編集用プログラムは、例えば、編集対象のバイナリコードに追加するバイナリコードを指定する値を、動作パラメータに設定可能な構成にすることができる。この他、コード編集用プログラムは、編集対象のバイナリコードに追加するバイナリコードに対応したソースコード（以下、追加コードともいう。）を動作パラメータに設定可能な構成にされてもよい。
【００２９】
また、上記コード編集用プログラムは、編集対象のバイナリコードの少なくとも一部領域において元のバイナリコードから置換するバイナリコードに対応したソースコード（以下、置換コードともいう。）を動作パラメータに設定可能な構成にされてもよい。
【００３０】
この場合、各第一プログラム部品は、編集処理として、動作パラメータの設定値が示す追加コードをバイナリコードに変換して編集対象のバイナリコードに追加する処理、又は、動作パラメータの設定値が示す置換コードをバイナリコードに変換して編集対象のバイナリコードの少なくとも一部を上記変換したバイナリコードに置換する処理、をコンピュータに実行させるためのプログラム部品として構成することができる。
【００３１】
このように、上記コード編集用プログラムを構成すれば、ユーザは、追加や置換を希望するバイナリコードに対応したソースコードを第三指定情報として記述して、当該第三指定情報を記述したデータファイルを作成する程度で、任意のバイナリコードを、編集対象のバイナリコードに追加したりすることができる。
【００３２】
即ち、このようにコード編集用プログラムを構成すれば、編集対象のバイナリコードに対応したソースコードを編集して再コンパイルすること無しに、当該編集対象のバイナリコードに対して任意のバイナリコードを追加等することができ、バイナリコードの編集作業の利便性を高めることができる。
【００３３】
また、ファイル取得手順は、「第二指定情報及び第三指定情報が記述されたデータファイルである編集規則記述ファイル」の指定情報が第一指定情報と共に記述されたデータファイル、である対象記述ファイルを取得する手順と、対象記述ファイルの取得後、当該対象記述ファイルを通じて指定された編集規則記述ファイルを取得する手順と、を含む手順とすることができる。
【００３４】
このように第一指定情報を記述するデータファイルと、第二指定情報及び第三指定情報を記述するデータファイルとを分ければ、汎用の編集規則記述ファイルを作成することができて、編集対象の変更がある度に編集規則記述ファイルを作成せずに済み、利便性が向上する。
【００３５】
例えば、汎用の編集規則記述ファイルを、予めコード編集用プログラムの設計者が作成し、これをコード編集用プログラムに内包させて頒布すれば、ユーザ側では、編集規則記述ファイルを作成せずとも、上記第一指定情報及び使用する編集規則記述ファイルの指定情報を記述した対象記述ファイルを作成する程度で、本発明のコード編集用プログラムを利用してバイナリコードを編集することができる。
【００３６】
また、コード編集用プログラムには、上記第一プログラム部品であって、編集処理として、「動作パラメータの設定値が示すソースコードに従って、編集対象のバイナリコードに対し、当該バイナリコードにより実現される一連の処理の開始前後で動作パラメータの設定値が示すソースコードに対応した処理をコンピュータに実行させるためのバイナリコードを追加する処理」をコンピュータに実行させるためのプログラム部品（前後追加用プログラム部品）を搭載するのが好ましい。
【００３７】
また、上述したコード編集用プログラムには、上記編集規則記述ファイルとして、上記前後追加用プログラム部品を指定する第二指定情報が記述され、上記第三指定情報として、編集対象のバイナリコードより実現される一連の処理の開始前後で当該一連の処理の実行時間を計測するための処理をコンピュータに実行させるためのソースコードが記述された編集規則記述ファイルを設けるのがよい。
【００３８】
このように構成されたコード編集用プログラムを用いれば、ユーザは、デバッグ作業時に、特定の関数やメソッドの実行時間を計測したい場合、編集規則記述ファイルを作成せずとも、コード編集用プログラムに内包された上記編集規則記述ファイルを指定する上記対象記述ファイルを作成する程度で、実行時間を計測するためのデバッグコードを編集対象のバイナリコードに追加することができる。即ち、このコード編集用プログラムによれば、デバッグ作業時の利便性が向上する。
【００３９】
また、上述した第一及び第二の発明に対応する技術的思想は、コード編集装置に適用することもできる。
例えば、コード編集装置は、「特定種類の編集処理を、編集対象のバイナリコードに対して実行するコード編集手段」を編集処理の種類毎に備えると共に、バイナリコードを編集する対象のプログラムファイル及び当該プログラムファイル内の編集対象領域を指定する情報である第一指定情報、並びに、起動すべきコード編集手段を指定する情報である第二指定情報が記述された単一ファイル、又は、これらの指定情報が分散して記述されたファイル群を取得するファイル取得手段と、ファイル取得手段により取得された単一ファイル又はファイル群に記述された第一指定情報に従って、当該第一指定情報を通じて指定されたプログラムファイルのバイナリコードを取得するコード取得手段と、ファイル取得手段により取得された単一ファイル又はファイル群に記述された第一指定情報及び第二指定情報に従い、第二指定情報を通じて指定されたコード編集手段を起動し、コード編集手段に、上記特定種類の編集処理を、コード取得手段により取得されたバイナリコードの第一指定情報が示す編集対象領域を編集対象のバイナリコードとして、実行させる編集制御手段と、編集制御手段の動作により得られた編集後のバイナリコードを格納したプログラムファイルを、第一指定情報により指定されたプログラムファイルに対応する編集後のプログラムファイルとして、出力する編集後ファイル出力手段と、を備えた構成とすることができる。
【００４０】
このコード編集装置によれば、上述したコード編集用プログラムと同様の効果を得ることができる。また、上述したコード編集用プログラムに関するその他の技術的思想（請求項２〜請求項７に係る思想）も、コード編集装置に適用することができる。また、上述したコード編集用プログラムは、磁気ディスクや光ディスク等の記録媒体に記録して頒布されてもよい。
【図面の簡単な説明】
【００４１】
【図１】本実施例の情報処理装置１の構成を表すブロック図である。
【図２】Ｒｕｌｅファイル１２７及びＰｌａｎファイル１３０の構成図である。
【図３】Ｒｕｌｅファイル１２７の作成規則に関する説明図である。
【図４】ＪＷｅａｖｅｒ１２０の使用例に関する説明図である。
【図５】ＪＷｅａｖｅｒ１２０によって実現される処理を表すフローチャートである。
【図６】プラン登録処理を表すフローチャートである。
【図７】ウィービング処理を表すフローチャートである。
【図８】実ウィービング処理を表すフローチャートである。
【発明を実施するための形態】
【００４２】
以下に本発明の実施例について、図面と共に説明する。
図１（ａ）は、本実施例の情報処理装置１の構成を表すブロック図である。本実施例の情報処理装置１は、周知のコンピュータと同様のハードウェア構成にされ、ハードディスク装置１５に格納されたコード編集用プログラムであるＪＷｅａｖｅｒ１２０に特徴を有する。
【００４３】
ハードウェア構成について簡単に説明すると、本実施例の情報処理装置１は、ＣＰＵ１１、ＣＰＵ１１によるプログラム実行時に作業領域として使用されるＲＡＭ１３、ＣＰＵ１１が実行するプログラム等を記憶するハードディスク装置１５、キーボードやポインティングデバイス等で構成される入力装置１７、液晶ディスプレイ等で構成される表示装置１８、及び、外部装置との間でのデータを授受するインタフェース１９（例えばＵＳＢインタフェース）等を備える。
【００４４】
ハードディスク装置１５には、ＣＰＵ１１が実行するプログラムであるＪａｖａ（登録商標）実行環境１００が格納され、更に、この実行環境１００で実行されるアプリケーションプログラム（Ｊａｖａ（登録商標）プログラム）１１０が格納されている。また、ハードディスク装置１５には、アプリケーションプログラム１１０の一つとして、ＪＷｅａｖｅｒ１２０が格納されている。
【００４５】
図１（ｂ）は、情報処理装置１が備えるコード編集用プログラムであるＪＷｅａｖｅｒ１２０の構成を示した図である。図１（ｂ）に示すように、ＪＷｅａｖｅｒ１２０は、ＪＷｅａｖｅｒ本体１２１と、ウィーバ１２３の一群と、バイトコード編集用のクラスライブラリであるバイトコードエンハンスクラスライブラリ１２５と、後述するＲｕｌｅファイル１２７の一群を構成要素とするアーカイブファイルとして構成されている。
【００４６】
ＪＷｅａｖｅｒ本体１２１は、ＪＷｅａｖｅｒ１２０としての主たる機能を実現するクラスファイル群から構成される（詳細後述）。
また、ウィーバ１２３は、バイトコードエンハンスクラスライブラリ１２５を利用して、特定種類の編集処理を、編集対象のバイトコードに対して実行するクラスファイルである。以下、クラスファイル等のプログラムを動作主体として表現する場合があるが、プログラムを動作主体とする表現は、対応する処理が、実際にはＣＰＵ１１がプログラムを実行することによって、実現されることを意味する。
【００４７】
このウィーバ１２３は、編集処理の種類毎に、予めＪＷｅａｖｅｒ１２０の設計者により作成され、ＪＷｅａｖｅｒ１２０に格納される。但し、ユーザは、ＪＷｅａｖｅｒ１２０の使用に当って、ウィーバ１２３を自作し、追加することも可能である。ウィーバ１２３を自作する場合には、ウィーバ１２３のソースコードをコンパイルするためのＪａｖａ（登録商標）開発環境が必要である。
【００４８】
また、バイトコードエンハンスクラスライブラリ１２５としては、ｊａｖａｓｓｉｓｔが知られている。ｊａｖａｓｓｉｓｔは、Ｊａｖａ（登録商標）バイトコードを扱うライブラリであり、クラスファイル内のバイトコード編集を実現することのできるライブラリとして知られている。具体的に、ｊａｖａｓｓｉｓｔは、指定されたクラスのバイトコードを取得する機能や、指定されたソースコードをバイトコードに変換して指定されたクラスやメソッドを編集する機能を提供する。
【００４９】
また、Ｒｕｌｅファイル１２７は、バイトコード編集時に用いられるものであり、図２（ａ）に示すように、バイトコード編集に際して用いるべきウィーバ１２３の指定情報、及び、ウィーバ１２３に対する動作パラメータの指定情報が記述されたテキストファイルとして構成されている。図２（ａ）は、Ｒｕｌｅファイル１２７の構成図である。
【００５０】
具体的に、動作パラメータの指定情報としては、編集対象のバイトコードに対して新たに追加するバイトコードに対応したソースコード（追加コード）や、編集対象のバイトコードの一部領域において元のバイトコードから置換するバイトコードに対応したソースコード（置換コード）等が記述される。即ち、本実施例では、Ｒｕｌｅファイル１２７に記述された追加コードや置換コード等に基づき、ウィーバ１２３が、これらのソースコードをバイトコードに変換して、編集対象のバイトコードに追加したり、編集対象のバイトコードの一部領域を置換し、これによって、編集対象のバイトコードを編集する。
【００５１】
このＲｕｌｅファイル１２７については、基本的にＪＷｅａｖｅｒ１２０のユーザがテキストファイルで作成する。但し、本実施例のＪＷｅａｖｅｒ１２０には、基本的なバイトコードの編集処理を実現するためのＲｕｌｅファイル１２７の一群が予め格納されている。例えば、図３（ａ）下段に示すメソッドの実行時間計測用のＲｕｌｅファイル１２７等が予め格納されている。尚、Ｒｕｌｅファイル１２７の詳細については、後述する。
【００５２】
このような構成のＪＷｅａｖｅｒ１２０は、起動されると、引数に設定されたＰｌａｎファイル１３０（詳細後述）の指定情報、編集対象のアーカイブファイル（アプリケーションプログラム１１０）の指定情報、編集後のアーカイブファイルを出力する先の指定情報に基づき、編集対象のアーカイブファイルが内包するクラスファイルのバイトコードを編集し、編集後のバイトコードを格納したアーカイブファイルを、指定された出力先にファイル出力する。
【００５３】
図２（ｂ）は、Ｐｌａｎファイル１３０の構成図である。図２（ｂ）に示すように、Ｐｌａｎファイル１３０は、編集対象のメソッドを指定するターゲット指定情報、及び、ターゲット指定情報にて指定されるメソッドのバイトコードを編集する際に参照すべきＲｕｌｅファイル１２７の指定情報であるルール指定情報が記述されたテキストファイルである。このＰｌａｎファイル１３０は、ＪＷｅａｖｅｒ１２０を使用するユーザによってテキストファイルで作成される。
【００５４】
続いて、Ｒｕｌｅファイル１２７の作成規則について説明する。図３は、Ｒｕｌｅファイル１２７の作成規則に関する説明図である。ここでは、ＪＷｅａｖｅｒ１２０が、次に説明する３つのウィーバ１２３を備えることを前提として、夫々のウィーバ１２３に対応したＲｕｌｅファイル１２７の作成規則について説明する。
【００５５】
まずＪＷｅａｖｅｒ１２０が備える第一のウィーバ１２３ａは、編集対象のメソッドに対応する処理の実行前に、Ｒｕｌｅファイル１２７に記述された第一のソースコード（Ｃｏｄｅ：１）に対応する処理をＣＰＵ１１に実行させるためのバイトコードを、当該編集対象のバイトコードに追加すると共に、編集対象のメソッドに対応する処理の実行後に、Ｒｕｌｅファイル１２７に記述された第二のソースコード（Ｃｏｄｅ：２）に対応する処理をＣＰＵ１１に実行させるためのバイトコードを、当該編集対象のバイトコードに追加する処理、を上記編集処理として実行するウィーバである。尚、本実施例において、このウィーバ１２３ａには、「ＢｅｆｏｒｅＡｆｔｅｒＷｅａｖｅｒ」というクラス名が付与されている。以下では、このウィーバ１２３ａを、「ＢｅｆｏｒｅＡｆｔｅｒＷｅａｖｅｒ」とも表現する。
【００５６】
上述したように、Ｒｕｌｅファイル１２７には、ウィーバ１２３の指定情報が記述されるが、ウィーバ１２３の指定情報は、後続する記述がウィーバ１２３の指定情報であることを示すラベル「＃ｗｅａｖｅｒ」に続いて、Ｒｕｌｅファイル１２７内に記述される。具体的に、ウィーバ１２３の指定情報は、指定するウィーバ１２３のクラス名からなる。
【００５７】
そして、Ｒｕｌｅファイル１２７に、ウィーバ１２３の指定情報として第一のウィーバ１２３ａを指定する情報（ウィーバ１２３ａのクラス名）を記述する場合には、次の動作パラメータの指定情報を、同じＲｕｌｅファイル１２７内に記述する規則となっている。
【００５８】
具体的には、動作パラメータの指定情報として、動作パラメータ「ｖａｒ」「ｃｏｄｅ：１」「ｃｏｄｅ：２」の設定値を記述する。尚、動作パラメータ「ｖａｒ」「ｃｏｄｅ：１」「ｃｏｄｅ：２」の設定値を記述するに際しては、設定値の記述に先駆けて、対応するラベル「＃ｖａｒ」「＃ｃｏｄｅ：１」「＃ｃｏｄｅ：２」を記述する。
【００５９】
図３（ａ）の上段には、ウィーバ１２３の指定情報として第一のウィーバ１２３ａを指定する情報（ウィーバ１２３ａのクラス名）を記述する場合に、併せて記述すべき各動作パラメータ「ｖａｒ」「ｃｏｄｅ：１」「ｃｏｄｅ：２」の役割を示す。
【００６０】
図３（ａ）に示すように、動作パラメータ「ｃｏｄｅ：１」は、メソッドの先頭に挿入する処理に対応したソースコードを表す動作パラメータとして機能し、動作パラメータ「ｃｏｄｅ：２」は、メソッドの末尾に挿入する処理に対応したソースコードを表す動作パラメータとして機能する。即ち、これらの動作パラメータ「ｃｏｄｅ：１」「ｃｏｄｅ：２」には、対応するソースコードが設定される。
【００６１】
この他、動作パラメータ「ｖａｒ」は、動作パラメータ「ｃｏｄｅ：１」「ｃｏｄｅ：２」に設定されたソースコードで新規に使用されるローカル変数を宣言する処理をメソッド先頭に追加するための動作パラメータとして機能し、新規に使用されるローカル変数を宣言する記述文を値として採る。
【００６２】
また、図３（ａ）下段は、Ｒｕｌｅファイル１２７の記述例を示した図である。図３（ａ）下段に示すＲｕｌｅファイル１２７は、「ＢｅｆｏｒｅＡｆｔｅｒＷｅａｖｅｒ」を使用して、メソッドの先頭に、ローカル変数ｎｏｗを宣言してこの変数ｎｏｗに現在時刻をセットする処理を追加し、メソッドの末尾に、メソッドの先頭で変数ｎｏｗにセットした時刻と現在時刻との差分を算出して、その算出値を表示出力する処理を追加するものである。このＲｕｌｅファイル１２７を用いることで、第一のウィーバ１２３ａには、編集前のメソッドにて実現される一連の処理の実行時間を計測する処理を、新たにメソッドに追加するバイトコードの編集処理を実現させることができる。
【００６３】
続いて、ＪＷｅａｖｅｒ１２０が備える第二のウィーバ１２３ｂと、第二のウィーバ１２３ｂに対応したＲｕｌｅファイル１２７の作成規則について、図３（ｂ）を用いて説明する。
【００６４】
第二のウィーバ１２３ｂは、編集対象のメソッドにｔｒｙ−ｃａｔｃｈ節を挿入し、ｃａｔｃｈ節に任意のコードを挿入する処理を、上記編集処理として実行するウィーバである。このウィーバ１２３ｂには、「ＡｄｄＣａｔｃｈＷｅａｖｅｒ」というクラス名が付与されている。
【００６５】
そして、Ｒｕｌｅファイル１２７に、ウィーバ１２３の指定情報として第二のウィーバ１２３ｂを指定する情報（ウィーバ１２３ｂのクラス名）を記述する場合には、次の動作パラメータの指定情報を、同じＲｕｌｅファイル１２７内に記述する規則となっている。
【００６６】
具体的には、動作パラメータの指定情報として、動作パラメータ「ｖａｒ」「ｃｏｄｅ：１」「ｅｘｃｅｐｔｉｏｎ」の設定値を記述する。図３（ｂ）には、ウィーバ１２３の指定情報として、第二のウィーバ１２３ｂを指定する情報を記述する場合に、併せて記述すべき各動作パラメータ「ｖａｒ」「ｃｏｄｅ：１」「ｅｘｃｅｐｔｉｏｎ」の役割を示す。図３（ｂ）に示すように、動作パラメータ「ｃｏｄｅ：１」は、ｃａｔｃｈ節に挿入するコードを示すものであり、動作パラメータ「ｅｘｃｅｐｔｉｏｎ」は、ｃａｔｃｈする例外の型を指定するものである。また、動作パラメータ「ｖａｒ」は、新規に使用されるローカル変数を示すものである。
【００６７】
この他、ＪＷｅａｖｅｒ１２０が備える第三のウィーバ１２３ｃと、第三のウィーバ１２３ｃに対応したＲｕｌｅファイル１２７の作成規則について、図３（ｃ）を用いて説明する。
【００６８】
第三のウィーバ１２３ｃは、編集対象のメソッドが実装されたクラスにおいて、当該メソッドを新たなメソッドに置き換える処理、を上記編集処理として実行するウィーバである。このウィーバ１２３ｃには、「ＲｅｐｌａｃｅＭｅｔｈｏｄＷｅａｖｅｒ」というクラス名が付与されている。
【００６９】
そして、Ｒｕｌｅファイル１２７に、ウィーバ１２３の指定情報として第三のウィーバ１２３ｃを指定する情報（ウィーバ１２３ｃのクラス名）を記述する場合には、次の動作パラメータの指定情報を、同じＲｕｌｅファイル１２７内に記述する規則となっている。
【００７０】
具体的には、動作パラメータの指定情報として、動作パラメータ「ｃｏｄｅ：１」の設定値を記述する。図３（ｃ）には、ウィーバ１２３の指定情報として、第三のウィーバ１２３ｃを指定する情報を記述する場合に、併せて記述すべき動作パラメータ「ｃｏｄｅ：１」の役割を示す。図３（ｃ）に示すように、動作パラメータ「ｃｏｄｅ：１」は、新たなメソッドの実装を定義するものであり、この動作パラメータ「ｃｏｄｅ：１」には、新たに実装するメソッドのソースコードが設定される。
【００７１】
続いて、Ｐｌａｎファイル１３０の作成規則及び作成したＰｌａｎファイル１３０を用いたＪＷｅａｖｅｒ１２０の利用手順について、図４（ａ）を用いて説明する。図４（ａ）は、Ｐｌａｎファイル１３０の作成規則及び作成したＰｌａｎファイル１３０を用いたＪＷｅａｖｅｒ１２０の利用手順に関する説明図である。
【００７２】
具体的に、図４（ａ）は、「Ｈｅｌｌｏ」との文字列を表示出力するクラスの「ｓａｙＨｅｌｌｏ（）」メソッドに、図３（ａ）下段に示すＲｕｌｅファイル１２７を適用することで、デバッグコードとして「Ｈｅｌｌｏ」との文字列を表示出力する処理の実行時間を計測するためのコードを挿入する場合のＰｌａｎファイル１３０の作成例と、このＰｌａｎファイル１３０を用いたＪＷｅａｖｅｒ１２０の利用手順を説明したものである。
【００７３】
Ｐｌａｎファイル１３０は、上述したように、ターゲット指定情報及びルール指定情報を有するが、ターゲット指定情報は、編集対象のメソッドが実装されたクラス名、及び、当該編集対象のメソッド名の情報からなる。また、ルール指定情報は、指定するＲｕｌｅファイル１２７のファイル名の情報からなる。
【００７４】
例えば、編集対象のクラスファイルが「Ｔａｒｇｅｔｘ」というクラス名であり、編集対象のメソッドが「Ｔａｒｇｅｔｘ」クラスの「ｓａｙＨｅｌｌｏ（）」メソッドであり、このメソッドに適用するＲｕｌｅファイル１２７のファイル名が「ｐｅｒｆｏｒｍａｎｃｅ＿ｌｏｇ．ｊｗｒ」である場合、Ｐｌａｎファイル１３０に対しては、文字列「△△△.Ｔａｒｇｅｔｘ＃ｓａｙＨｅｌｌｏ（）＝ｐｅｒｆｏｒｍａｎｃｅ＿ｌｏｇ．ｊｗｒ」にて、ターゲット指定情報及びルール指定情報を記述する。尚、「△△△」は、パッケージ名を表す。
【００７５】
本実施例では、このように、ターゲット指定情報及びルール指定情報を等号で繋げて記述することにより、これらの情報を関連付けて記述する。尚、このように記述するのは、Ｐｌａｎファイル１３０に、複数のターゲット指定情報、及び、各ターゲット指定情報に対応したルール指定情報を記述することができるためである。
【００７６】
Ｐｌａｎファイル１３０に複数のターゲット指定情報を記載する場合には、ターゲット指定情報毎に行を代えて、ターゲット指定情報及びルール指定情報に対応した文字列を記述する。例えば、次の例１、例２、例３及び例４に示すようにＰｌａｎファイル１３０を作成する。
【００７７】
Ｐｌａｎファイル１３０の例１：
△△△．Ｃｌａｓｓ１＃ｍｅｔｈｏｄ１（）＝Ｒｕｌｅｆｉｌｅ１．ｊｗｒ
△△△．Ｃｌａｓｓ１＃ｍｅｔｈｏｄ２（）＝Ｒｕｌｅｆｉｌｅ２．ｊｗｒ
Ｐｌａｎファイル１３０の例２：
△△△．Ｃｌａｓｓ１＃ｍｅｔｈｏｄ１（）＝Ｒｕｌｅｆｉｌｅ１．ｊｗｒ
△△△．Ｃｌａｓｓ１＃ｍｅｔｈｏｄ１（）＝Ｒｕｌｅｆｉｌｅ２．ｊｗｒ
Ｐｌａｎファイル１３０の例３：
△△△．Ｃｌａｓｓ１＃ｍｅｔｈｏｄ１（）＝Ｒｕｌｅｆｉｌｅ１．ｊｗｒ
△△△．Ｃｌａｓｓ１＃ｍｅｔｈｏｄ２（）＝Ｒｕｌｅｆｉｌｅ１．ｊｗｒ
Ｐｌａｎファイル１３０の例４：
△△△．Ｃｌａｓｓ１＃ｍｅｔｈｏｄ１（）＝Ｒｕｌｅｆｉｌｅ１．ｊｗｒ
△△△．Ｃｌａｓｓ２＃ｍｅｔｈｏｄ２（）＝Ｒｕｌｅｆｉｌｅ１．ｊｗｒ
尚、上記「Ｐｌａｎファイル１３０の例２」は、同一メソッドに対して、複数のＲｕｌｅファイル１２７を適用する場合のＰｌａｎファイル１３０の記述例を示し、「Ｐｌａｎファイル１３０の例３」は、異なるメソッドに対して、同一のＲｕｌｅファイル１２７を適用する場合のＰｌａｎファイル１３０の記述例を示し、「Ｐｌａｎファイル１３０の例４」は、異なるクラスの異なるメソッドに対して、同一のＲｕｌｅファイル１２７を適用する場合のＰｌａｎファイル１３０の記述例を示す。
【００７８】
例えば、編集対象のクラスファイル内の複数メソッドに、実行時間を計測するためのデバッグコードを挿入したい場合には、例３に習って、ルール指定情報として「ｐｅｒｆｏｒｍａｎｃｅ＿ｌｏｇ．ｊｗｒ」を記述したＰｌａｎファイル１３０を作成する。このようにＰｌａｎファイル１３０を作成すると、一度のＪＷｅａｖｅｒ１２０の実行で、複数のメソッドの夫々に対して実行時間計測用のデバッグコードを挿入することができる。
【００７９】
また、編集対象のアーカイブファイル（アプリケーションプログラム１１０）に格納された複数のクラスファイルの夫々に実装されたメソッドに対して、メソッド毎に、実行時間を計測するためのデバッグコードを挿入したい場合には、例４に習って、ルール指定情報として「ｐｅｒｆｏｒｍａｎｃｅ＿ｌｏｇ．ｊｗｒ」を記述したＰｌａｎファイル１３０を作成する。これによって、一度のＪＷｅａｖｅｒ１２０の実行で、アーカイブファイル内の複数のクラスファイルに実装された各メソッドに対して実行時間計測用のデバッグコードを挿入することができる。
【００８０】
Ｐｌａｎファイル１３０については、このような規則で作成する。また、Ｐｌａｎファイル１３０を作成した後、ユーザは、図４（ａ）下段に示すように、コンソールを通じてＪＷｅａｖｅｒ１２０を起動する。具体的には、Ｐｌａｎファイル１３０の指定情報、編集対象のクラスファイルが格納されたアーカイブファイル（即ち、アプリケーションプログラム１１０）の指定情報、編集後アーカイブファイルの出力先の指定情報を引数に設定して、ＪＷｅａｖｅｒ１２０を起動する。これら引数に設定する指定情報は、対応するデータファイルのパス及びファイル名で表現することができる。
【００８１】
このような引数を設定してコンソールからＪＷｅａｖｅｒ１２０を起動すると、ＪＷｅａｖｅｒ１２０は、引数に設定されたＰｌａｎファイル１３０を一行ずつ読み取り、各行のターゲット指定情報が示すメソッドに対して、同じ行のルール指定情報が示すＲｕｌｅファイル１２７内で指定されたウィーバ１２３に基づく編集処理を実行する。具体的には、Ｒｕｌｅファイル１２７が示す動作パラメータの設定値に従う編集処理を実行する。
【００８２】
その後、ＪＷｅａｖｅｒ１２０は、編集後のバイトコードを格納したクラスファイルを新たに作成し、当該新たに作成したクラスファイルを元のクラスファイルに代えて格納した新たなアーカイブファイルを作成して、指定された出力先に、このアーカイブファイルを出力する。
【００８３】
尚、図４（ｂ）は、図４（ａ）上段に示すクラスファイルに、図３（ａ）下段に示すＲｕｌｅファイル１２７を適用して、バイトコード編集を行った前後のクラスファイルの実行結果を示す説明図であり、図４（ｂ）上段は、バイトコード編集前のクラスファイルの出力を示す図であり、図４（ｂ）下段は、バイトコード編集後のクラスファイルの出力を示す図である。このように、ＪＷｅａｖｅｒ１２０を用いれば、簡単にバイトコードを編集することができる。また、バイトコード編集時に、編集対象のクラスファイルに対応したソースコードが必要ないのが、ＪＷｅａｖｅｒ１２０の一つの特徴である。Ｒｕｌｅファイル１２７に記述されたソースコードは、上述したバイトコードエンハンスクラスライブラリ１２５の機能によってコンパイルされ、編集対象のバイトコードに書き込まれる。
【００８４】
続いて、ＪＷｅａｖｅｒ１２０によって実行される処理の詳細を、図５以降の図面を用いて説明する。図５は、ＪＷｅａｖｅｒ本体１２１を構成するクラスファイル群によって実現される処理であって、コンソールを通じてＪＷｅａｖｅｒ１２０が起動されると実行される処理を表すフローチャートである。
【００８５】
ＪＷｅａｖｅｒ１２０が起動されると、ＣＰＵ１１は、引数で指定されたＰｌａｎファイル１３０を取得して、このＰｌａｎファイル１３０の先頭行を読み取り、先頭行に記述されたターゲット指定情報及びルール指定情報を取得する（Ｓ１００）。そして、取得したターゲット指定情報及びルール指定情報に基づき、図６に示すプラン登録処理を実行する（Ｓ２００）。
【００８６】
具体的には、ルール指定情報が指定するＲｕｌｅファイル１２７の記述内容を保持するＲｕｌｅクラスのインスタンス（以下、Ｒｕｌｅインスタンスと表現する。）を生成すると共に、ターゲット指定情報を保持するＰｌａｎクラスのインスタンス（以下、Ｐｌａｎインスタンスと表現する。）を生成し、このＰｌａｎインスタンスに、対応するＲｕｌｅインスタンスを登録する。これによって、ターゲット指定情報と、ターゲット指定情報が示すメソッドのバイトコード編集時に用いるべきウィーバ１２３及びウィーバ１２３に対する動作パラメータの設定値と、の対応付けを行う。即ち、ここでいう「プラン登録」とは、Ｐｌａｎインスタンス及びＲｕｌｅインスタンスの生成及び関連付けのことをいう。
【００８７】
図６は、ＣＰＵ１１が実行するプラン登録処理を表すフローチャートである。Ｓ２００でプラン登録処理を開始すると、ＣＰＵ１１は、Ｓ１００で取得したターゲット指定情報及びルール指定情報の内、ルール指定情報に基づき、当該ルール指定情報を通じて指定されたＲｕｌｅファイル１２７に対応するＲｕｌｅインスタンスが既に存在するか否かをチェックする（Ｓ２１０）。尚、Ｒｕｌｅインスタンスは、対応するＲｕｌｅファイル１２７のファイル名を値として保持している。従って、ここでは、既に存在するＲｕｌｅインスタンスが保持するＲｕｌｅファイル１２７のファイル名に基づき、ルール指定情報を通じて指定されたＲｕｌｅファイル１２７に対応するＲｕｌｅインスタンスが既に存在するか否かをチェックする。
【００８８】
そして、該当するＲｕｌｅインスタンスが存在しないと判断すると（Ｓ２２０でＮｏ）、ルール指定情報を通じて指定されたＲｕｌｅファイル１２７を取得し、このＲｕｌｅファイル１２７の記述を読み出して、Ｒｕｌｅファイル１２７に記述されたウィーバ１２３の指定情報及び動作パラメータの指定情報を保持するＲｕｌｅインスタンスを生成する（Ｓ２３０）。尚、Ｒｕｌｅクラスは、Ｒｕｌｅファイル１２７の記述内容を保持するためのクラスであるが、上述したように、対応するＲｕｌｅファイル１２７のファイル名も保持する。
【００８９】
一方、該当するＲｕｌｅインスタンスが存在すると判断した場合には（Ｓ２２０でＹｅｓ）、ルール指定情報を通じて指定されたＲｕｌｅファイル１２７に対応するＲｕｌｅインスタンスを取得する（Ｓ２３５）。
【００９０】
このようにしてＲｕｌｅインスタンスを生成又は取得すると、ＣＰＵ１１は、Ｓ１００で取得したターゲット指定情報と同じ編集対象の情報を保持するＰｌａｎインスタンスが既に存在するか否かをチェックする（Ｓ２４０）。
【００９１】
そして、該当するＰｌａｎインスタンスが存在しない場合には（Ｓ２５０でＮｏ）、ターゲット指定情報（編集対象のクラス及びメソッドの情報）を保持するＰｌａｎインスタンスを生成する（Ｓ２６０）。上述したように、Ｐｌａｎクラスは、ターゲット指定情報を構成する編集対象のクラス及びメソッドの情報を保持するためのクラスである。
【００９２】
一方、該当するＰｌａｎインスタンスが存在する場合には（Ｓ２５０でＹｅｓ）、ターゲット指定情報と同じ編集対象の情報を保持するＰｌａｎインスタンスを取得する（Ｓ２６５）。
【００９３】
その後、ＣＰＵ１１は、Ｓ２６０で生成又はＳ２６５で取得したＰｌａｎインスタンスに対してＳ２３０で生成又はＳ２３５で取得したＲｕｌｅインスタンスを登録して、ＰｌａｎインスタンスとＲｕｌｅインスタンスの関連付けを行う（Ｓ２７０）。その後、当該プラン登録処理を完了する。
【００９４】
また、プラン登録処理が完了すると、ＣＰＵ１１は、Ｐｌａｎファイル１３０の次行を読み取り（Ｓ３００）、次行があれば（Ｓ４００でＹｅｓ）、読み取った次行について、上述したＳ２００の処理を行うことにより、この行に記述されたターゲット指定情報及びルール指定情報に基づいたＰｌａｎインスタンス及びＲｕｌｅインスタンスの生成及び関連付けを行う。
【００９５】
一方、次行がなければ（Ｓ４００でＮｏ）、Ｐｌａｎファイル１３０に記載されたターゲット指定情報及びルール指定情報を全て読み取ったものとして、Ｓ５００に移行する。そして、Ｓ５００では、ＪＷｅａｖｅｒ１２０の起動時に引数に設定された編集対象のアーカイブファイルを最下層まで走査して、アーカイブファイルに含まれるクラスファイルの全てを、メモリ（ＲＡＭ１３）にロードする。
【００９６】
また、この処理を終えると、Ｓ６００に移行して、ウィービング処理を実行する。図７は、ＣＰＵ１１が実行するウィービング処理を表すフローチャートである。
ウィービング処理を開始すると、ＣＰＵ１１は、編集対象のアーカイブファイルにあるエントリの一つを処理対象に選択し（Ｓ６１０）、処理対象に選択したエントリのファイル形式をチェックする（Ｓ６２０）。
【００９７】
そして、処理対象のエントリがｅａｒ形式、ｗａｒ形式、ｊａｒ形式等のアーカイブファイルあると判断すると（Ｓ６３０でＹｅｓ）、Ｓ６１０に移行し、このエントリに対応するアーカイブファイル内を参照して、下層のアーカイブファイル内のエントリを新たに処理対象に選択する。即ち、Ｓ６１０〜Ｓ６３０では、編集対象のアーカイブファイル内を最下層まで走査して、エントリを順に処理対象に選択する。尚、下層のアーカイブファイル内のエントリを全て処理対象に選択した後のＳ６１０では、上層のエントリであって、処理対象に未選択のエントリの一つを、処理対象に選択する。
【００９８】
一方、Ｓ６３０で処理対象のエントリがアーカイブファイルではないと判断すると（Ｓ６３０でＮｏ）、ＣＰＵ１１は、Ｓ６４０に移行し、処理対象のエントリがクラスファイルであるか否かを判断する。
【００９９】
そして、処理対象のエントリがクラスファイルでないと判断すると（Ｓ６３５でＮｏ）、このエントリを、ＪＷｅａｖｅｒ１２０の起動時に引数に設定された出力先のアーカイブファイルに追加する（Ｓ６５５）。尚、本実施例では、上述したように、編集対象のアーカイブファイルが、下層にアーカイブファイルを備えるツリー構造を採る。このため、Ｓ６５５では、編集対象のアーカイブファイルのツリー構造を承継するように、出力先のアーカイブファイル内にエントリを登録する。
【０１００】
Ｓ６５５の処理後、ＣＰＵ１１は、Ｓ６９０に移行し、編集対象のアーカイブファイルに登録されている最下層までのエントリの全てについて、当該エントリを処理対象に選択したか否かを判断し、処理対象に選択していないエントリがあれば、Ｓ６１０に移行し、処理対象に選択していないエントリがなくなった時点で、当該ウィービング処理を終了する。
【０１０１】
一方、Ｓ６３５で処理対象のエントリがクラスファイルであると判断すると（Ｓ６３５でＹｅｓ）、Ｓ６４０に移行し、当該処理対象のエントリを編集対象のクラスファイルとするＰｌａｎインスタンスの有無をチェックする。
【０１０２】
そして、該当するＰｌａｎインスタンスが存在しない場合には（Ｓ６５０でＮｏ）、Ｓ６５５に移行し、処理対象のエントリを出力先のアーカイブファイルに追加する。その後、Ｓ６９０に移行する。
【０１０３】
この他、該当するＰｌａｎインスタンスが存在する場合には（Ｓ６５０でＹｅｓ）、処理対象のエントリが編集対象のクラスファイルであると取り扱って、このエントリに対応するクラスのバイトコードを取得すると共に（Ｓ６６０）、処理対象のエントリを編集対象のクラスファイルとする上記Ｐｌａｎインスタンスを取得し（Ｓ６６５）、このＰｌａｎインスタンスに基づいた実ウィービング処理を実行する（Ｓ６７０）。
【０１０４】
図８は、ＣＰＵ１１が実行する実ウィービング処理を表すフローチャートである。実ウィービング処理を開始すると、ＣＰＵ１１は、Ｐｌａｎインスタンスに登録されているＲｕｌｅインスタンスの一つを取得する（Ｓ６７１）。但し、Ｓ６７１では、Ｐｌａｎファイルに登録された順に、Ｒｕｌｅインスタンスを取得する。
【０１０５】
そして、取得したＲｕｌｅインスタンスが保持するウィーバ１２３の指定情報に基づいて、該当するウィーバ１２３を起動する（Ｓ６７３）。尚、ウィーバ１２３には、編集対象クラスのバイトコード及び編集対象メソッドの指定情報及びＲｕｌｅインスタンスが保持する動作パラメータの設定値を付与する。
【０１０６】
これによって、編集対象のクラスファイルにおける編集対象のメソッドに対応する領域を編集対象のバイトコードに設定し、ウィーバ１２３に、上記付与した動作パラメータの設定値に従う特定種類の編集処理を実行させて、編集後のバイトコード（詳述すれば編集対象のクラスファイルに対応する編集後のバイトコード）を取得する。具体的には、ＣＰＵ１１が、ウィーバ１２３に対応する処理を、バイトコードエンハンスクラスライブラリ１２５を利用して実行して、対応するクラスファイルのバイトコードを編集することになる。尚、ウィーバ１２３のフローチャートについては省略するが、ウィーバ１２３は、外部から与えられるこれらの情報に基づき、周知のバイトコードエンハンスクラスライブラリ１２５を利用して、対応するバイトコードの編集処理を実行するようにプログラミングされればよい。
【０１０７】
また、この処理を終えると、ＣＰＵ１１は、Ｐｌａｎインスタンスに登録された全てのＲｕｌｅインスタンスについてのＳ６７１，Ｓ６７３の処理を実行したか否かを判断し（Ｓ６７５）、実行していない場合には（Ｓ６７５でＮｏ）、Ｓ６７１に移行して、次のＲｕｌｅインスタンスを取得する（Ｓ６７１）。
【０１０８】
そして、Ｓ６７３では、このＲｕｌｅインスタンスが保持するウィーバ１２３の指定情報に基づいて、該当するウィーバ１２３を起動し、ウィーバ１２３に、このＲｕｌｅインスタンスが示す動作パラメータの設定値に従う特定種類の編集処理を実行させるのであるが、この際、ウィーバ１２３には、先のＳ６７３で取得した編集後のバイトコードを付与して、このバイトコードを対象に編集処理を実行させることで、複数のＲｕｌｅインスタンスが登録されている場合には、各Ｒｕｌｅインスタンスに基づくバイトコードの編集結果を累積的に反映させるようにして、クラスファイルのバイトコードを編集する。
【０１０９】
一方、ＣＰＵ１１は、Ｐｌａｎインスタンスに登録された全てのＲｕｌｅインスタンスについてのＳ６７１，Ｓ６７３の処理を実行したと判断すると（Ｓ６７５でＹｅｓ）、最終的に生成された編集後のバイトコードを、実ウィービング処理の実行結果として、図７に示すウィービング処理に渡す（Ｓ６７７）。
【０１１０】
ＣＰＵ１１は、このようにして、Ｓ６７０で実ウィービング処理を実行し、この処理を終えると、Ｓ６８０に移行して、Ｓ６７０の処理で得られた実ウィービング処理の実行結果としての上記編集後のバイトコードを格納した新たなクラスファイルを生成し、これを、出力先のアーカイブファイルに追加する（Ｓ６８０）。その後、Ｓ６９０に移行し、編集対象のアーカイブファイルに登録されている最下層までのエントリの全てについて、当該エントリを処理対象に選択したか否かを判断し、全てを処理対象に選択していない場合には、Ｓ６１０に移行する。そして、全てのエントリを処理対象に選択し、Ｓ６２０以降の処理を実行すると、Ｓ６９０で肯定判断して、当該ウィービング処理を終了する。
【０１１１】
また、このようにしてウィービング処理を終了すると、このウィービング処理の結果を画面に表示出力して（Ｓ７００）、ＪＷｅａｖｅｒ１２０としての一連の処理を完了する。
【０１１２】
以上、本発明の実施例について説明したが、本実施例によれば、バイトコードに対して特定種類の編集を加えることのできるウィーバ１２３を、編集処理の種類毎に設けると共に、各ウィーバ１２３に対しては、編集内容の細部を決定付ける動作パラメータを設定できるように、コード編集用プログラムであるＪＷｅａｖｅｒ１２０を構成している。
【０１１３】
このため、ＪＷｅａｖｅｒ１２０を用いれば、ユーザは、動作パラメータ及びウィーバを選択し、その指定情報をＲｕｌｅファイル１２７に書き込み、このＲｕｌｅファイル１２７の指定情報と共に編集対象の情報をＰｌａｎファイル１３０に書き込む程度で、自由度高くクラスファイルを編集することができる。そして、本実施例によれば、ウィーバ１２３を通じてバイナリコードであるクラスファイルを直接編集することができるため、ユーザは、編集対象のクラスファイルに対応するソースコードを入手し、これを編集しなくても、上記編集対象のクラスファイルを編集することができる。
【０１１４】
特に、このＪＷｅａｖｅｒ１２０によれば、ソースコードを、動作パラメータとしてＲｕｌｅファイル１２７に記述することで、任意のコード（デバッグコード等）を、編集対象のクラスファイルに注入することができる。
【０１１５】
結果、本実施例によれば、クラスファイルに対応するソースコードのユーザによる編集無しに、従来よりも自由度高く、クラスファイルを編集可能な利便性の高いツール（ＪＷｅａｖｅｒ１２０）を提供することができる。
【０１１６】
また、本実施例では、編集対象の情報、ウィーバ１２３の指定情報、及び、動作パラメータの指定情報を、Ｐｌａｎファイル１３０とＲｕｌｅファイル１２７とに分けて記述する手法を採用しているので、Ｒｕｌｅファイル１２７については、特定の編集対象に限定されない汎用のデータファイルとして構成することができる。従って、本実施例によれば、バイトコード編集が必要なデバッグ対象のクラスファイルが生じる度に、Ｒｕｌｅファイル１２７を作成する必要がなく、大変便利である。
【０１１７】
特に、ＪＷｅａｖｅｒ１２０のアーカイブファイル内に、図３（ａ）下段に示すような、メソッドの実行時間を計測する処理を追加するためのＲｕｌｅファイル１２７を予め設けておけば、デバッグ作業時に、ユーザがメソッドの実行時間計測用のＲｕｌｅファイル１２７を作成しなくても済み、簡単に、メソッドの実行時間を計測する処理を、デバッグ対象のクラスファイルに搭載することができて、大変便利である。
【０１１８】
尚、「特許請求の範囲」記載の第一プログラム部品（又はコード編集手段）は、上記実施例において、ＪＷｅａｖｅｒ１２０が備えるウィーバ１２３に対応し、ファイル取得手順（又はファイル取得手段）は、Ｐｌａｎファイル１３０及びＲｕｌｅファイル１２７を取得する処理に対応する。また、第一指定情報は、編集対象のプログラムファイルとして、編集対象のクラスファイルを指定し、編集対象領域として、当該クラスファイルにおける特定メソッドを指定するＰｌａｎファイル１３０に記述される情報に対応し、第二指定情報及び第三指定情報は、Ｒｕｌｅファイル１２７に記述される情報に対応する。
【０１１９】
この他、コード取得手順（又はコード取得手段）は、Ｓ６６０の処理に対応し、編集制御手順（又は編集制御手段）は、Ｓ６７３の処理に対応し、編集後ファイル出力手順（又は編集後ファイル出力手段）は、Ｓ６８０の処理に対応する。更に、前後追加用プログラム部品は、第一のウィーバ１２３ａ（ＢｅｆｏｒｅＡｆｔｅｒＷｅａｖｅｒ）に対応する。また、「実行時間を計測するための処理をコンピュータに実行させるためのソースコードが記述された編集規則記述ファイル」は、図３（ａ）下段に示すＲｕｌｅファイル１２７に対応する。
【０１２０】
また、本発明は、上記実施例に限定されるものではなく、種々の態様を採ることができる。例えば、上記実施例では、Ｊａｖａ（登録商標）のアプリケーションプログラム１１０に、本発明の概念を適用した例を示したが、本発明は、プログラミング言語に限定されるものではない。
【０１２１】
この他、ＪＷｅａｖｅｒ１２０には、編集対象クラスのバイトコードから、編集対象メソッドのバイトコードを削除する処理を実行することにより、編集対象メソッドに対応する処理が実行されないように編集対象クラスのバイトコードを編集するウィーバ１２３を設けることができる。尚、このウィーバ１２３を使用するに際しては、Ｒｕｌｅファイル１２７に、バイトコード編集に際して用いるべきウィーバ１２３の指定情報として、当該ウィーバ１２３を指定する情報のみを記述すればよく、動作パラメータの指定情報についての記述は不要である。
【符号の説明】
【０１２２】
１…情報処理装置、１１…ＣＰＵ、１３…ＲＡＭ、１５…ハードディスク装置、１７…入力装置、１８…表示装置、１９…インタフェース、１００…実行環境、１１０…アプリケーションプログラム、１２０…ＪＷｅａｖｅｒ、１２１…ＪＷｅａｖｅｒ本体、１２３（１２３ａ，１２３ｂ，１２３ｃ）…ウィーバ、１２５…バイトコードエンハンスクラスライブラリ、１２７…Ｒｕｌｅファイル、１３０…Ｐｌａｎファイル
【図１】
2011070533.tif 000003
【図２】
2011070533.tif 000004
【図３】
2011070533.tif 000005
【図４】
2011070533.tif 000006
【図５】
2011070533.tif 000007
【図６】
2011070533.tif 000008
【図７】
2011070533.tif 000009
【図８】
2011070533.tif 000010