(57)【特許請求の範囲】
【請求項１】
プリコンパイルの対象となるプリコンパイル記述とターゲット言語で記述されるターゲット言語記述との関係を定義するマッピング情報を格納するマッピング情報記憶手段と、
ターゲット言語記述の中にプリコンパイラ記述が埋め込まれたプリコンパイル前ソースと、当該プリコンパイル前ソースをプリコンパイルして得られたプリコンパイル後ソースとに基づいて、前記マッピング情報記憶手段に格納されているマッピング情報を参照することにより、前記プリコンパイル前ソースと前記プリコンパイル後ソースとの対応関係を表すソース対応情報を生成する生成手段と、
前記プリコンパイル前ソースに対するデバッグ指示を受け付けると、当該デバッグ指示によって指定されたプリコンパイル前ソースの実行箇所を、前記ソース対応情報を参照することにより、プリコンパイル後ソースの実行箇所へ変換する第１変換手段と、
前記変換されたプリコンパイル後ソースの実行箇所に対するデバッグ実行結果を受け付けると、当該受け付けたデバッグ実行結果によって特定されるプリコンパイル後ソースの実行箇所を、前記ソース対応情報を参照することにより、プリコンパイル前ソースの実行箇所へ変換する第２変換手段と、
を備えることを特徴とするデバッグ装置。
【請求項２】
前記第１変換手段は、前記デバッグ指示によって指定されたプリコンパイル前ソースの実行箇所に該当する行番号を、前記ソース対応情報を参照することにより、前記プリコンパイル後ソースの実行箇所の行番号へ変換し、
前記第２変換手段は、前記デバッグ実行結果によって特定されるプリコンパイル後ソースの実行箇所の行番号を、前記ソース対応情報を参照することにより、前記プリコンパイル前ソースの実行箇所の行番号へ変換することを特徴とする請求項１に記載のデバッグ装置。
【請求項３】
前記マッピング情報は、
ターゲット言語記述中にプリコンパイル記述を埋め込む際の位置を示すキーワードを格納したキーワードテーブルを含むことを特徴とする請求項１または２に記載のデバッグ装置。
【請求項４】
前記マッピング情報は、
ターゲット言語記述中にプリコンパイル記述をコメントアウトする場合の位置を示すコメントアウト情報を格納するコメント記述テーブルを含むことを特徴とする請求項１から３いずれか１項に記載のデバッグ装置。
【請求項５】
前記マッピング情報には、
プリコンパイル前の表現とプリコンパイル後の表現とを対応付けて格納する変換テーブルを含むことを特徴とする請求項１から４いずれか１項に記載のデバッグ装置。
【請求項６】
第１プリコンパイラによるプリコンパイルの対象となる第１プリコンパイラ記述と、ターゲット言語で記述されるターゲット言語記述との関係を規定する第１マッピング情報と、第２プリコンパイラによるプリコンパイルの対象となる第２プリコンパイラ記述と前記ターゲット言語記述との関係を規定する第２マッピング情報と、を格納するマッピング情報記憶手段と、
ターゲット言語記述の中に第１プリコンパイラ記述及び第２プリコンパイル記述が埋め込まれたプリコンパイル前ソースと、当該プリコンパイル前ソース中の第１プリコンパイラ記述をプリコンパイルすることにより得られた第１プリコンパイル後ソースとに基づいて、前記第１マッピング情報を参照することにより、前記プリコンパイル前ソースと前記第１プリコンパイル後ソースとの対応関係を表す第１ソース対応情報を生成する第１ソース情報生成手段と、
前記第１プリコンパイル後ソースと、当該第１プリコンパイル後ソース中の第２プリコンパイラ記述をプリコンパイルすることにより得られた第２プリコンパイル後ソースとに基づいて、前記第２マッピング情報を参照することにより、前記第１プリコンパイル後ソースと前記第２プリコンパイル後ソースとの対応関係を表す第２ソース対応情報を生成する第２ソース情報生成手段と、
前記プリコンパイル前ソースに対するデバッグ指示を受け付けると、当該受け付けたデバッグ指示によって指定されたプリコンパイル前ソースの実行箇所を、前記第１ソース対応情報を参照することにより、第１プリコンパイル後ソースの実行箇所へ変換し、変換後の第１プリコンパイル後ソースの実行箇所を、前記第２ソース対応情報を参照することにより、第２プリコンパイル後ソースの実行箇所へ変換する第３変換手段と、
前記変換された第２プリコンパイル後ソースの実行箇所に対するデバッグ実行結果を受け付けると、当該受け付けたデバッグ実行結果によって特定される第２プリコンパイル後ソースの実行箇所を、前記第２ソース対応情報を参照することにより、第１プリコンパイル後ソースの実行箇所へ変換し、変換後の第１プリコンパイル後ソースの実行箇所を、前記第１ソース対応情報を参照することにより、プリコンパイル前ソースの実行箇所へ変換する第２変換手段と、
を備えることを特徴とするデバッグ装置。
【請求項７】
デバッグ装置におけるデバッグ方法であって、当該デバッグ装置は、プリコンパイルの対象となるプリコンパイル記述とターゲット言語で記述されるターゲット言語記述との関係を定義するマッピング情報を格納するマッピング情報記憶手段を備え、前記デバッグ方法は、
ターゲット言語記述の中にプリコンパイラ記述が埋め込まれたプリコンパイル前ソースと、当該プリコンパイル前ソースをプリコンパイルして得られたプリコンパイル後ソースとに基づいて、前記マッピング情報記憶手段に格納されているマッピング情報を参照することにより、前記プリコンパイル前ソースと前記プリコンパイル後ソースとの対応関係を表すソース対応情報を生成する生成ステップと、
前記プリコンパイル前ソースに対するデバッグ指示を受け付けると、当該デバッグ指示によって指定されたプリコンパイル前ソースの実行箇所を、前記ソース対応情報を参照することにより、プリコンパイル後ソースの実行箇所へ変換する第１変換ステップと、
前記変換されたプリコンパイル後ソースの実行箇所に対するデバッグ実行結果を受け付けると、当該受け付けたデバッグ実行結果によって特定されるプリコンパイル後ソースの実行箇所を、前記ソース対応情報を参照することにより、プリコンパイル前ソースの実行箇所へ変換する第２変換ステップと、
を備えることを特徴とするデバッグ方法。
【請求項８】
請求項７に記載のデバッグ方法に記載の各ステップをコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムをデバッグする技術に係り、特に、プリコンパイラの対象となる言語で記述されたプログラムがターゲット言語で記述されたプログラムの中に埋め込まれている場合のデバッグ技術に関する。
【背景技術】
【０００２】
プリコンパイラを使用してアプリケーションを作成する場合、アプリケーション作成者は、ターゲット言語で記述されたプログラムの中にプリコンパイラの対象となるプログラム（以下、「プリコンパイラ記述」という。）を含むソースプログラムを作成する。そして、作成したプリコンパイラ記述を含むソースプログラムを、プリコンパイラを使用して、ターゲット言語のソースプログラムへ変換し、変換後のソースプログラムを、ターゲット言語のコンパイラでコンパイルする。プリコンパイラを利用する場合、作成者が作業しているソースは、プリコンパイラ記述を含むソースプログラムであるため、デバッグ作業についてもプリコンパイラ記述を含むソースプログラム上で行うことが望ましい。
【０００３】
このようなプリコンパイラ記述を含むプログラムのデバッグに関する技術の一例として、下記の特許文献１には、プリコンパイル時に、原始プログラムの行番号と生成ソースプログラムの生成行番号との対応関係を保持する行番号対応表を生成し、生成した行番号対応表を用いてデバッグを行うデバッグ装置が開示されている。下記の特許文献２には、プリコンパイル時に、オリジナル言語ソースプログラムとターゲット言語ソースプログラムとの変数対応を示す変数データ格納領域対応情報を出力しておき、この変数データ格納領域対応情報を用いてデバッグを行うデバッグ方法が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平３−１４４８３２号公報
【特許文献２】特開２０００−３２２２８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記特許文献１に記載のデバッグ装置では、行番号対応表を生成する行番号対応表作成手段をプリコンパイラに設けている。また、上記特許文献２に記載のデバッグ方法では、変数データ格納領域対応情報の出力をプリコンパイラが行うように構成している。
【０００６】
したがって、既存のプリコンパイラが、これらの機能を備えていない場合には、既存のプリコンパイラの実装内容を変更しなければならない。しかしながら、既存のプリコンパイラの実装内容を変更する場合には、変更作業に労力や時間を要するという問題がある。また、既存のプリコンパイラの実装内容を変更することができない場合には、プリコンパイラ記述を含むソースプログラム上でデバッグ作業を行うことが困難である。
【０００７】
そこで、本発明は、既存のプリコンパイラの内容を変更することなく、プリコンパイラ記述を含むプログラム上で効率的にデバッグを実行することができるデバッグ装置、デバッグ方法、デバッグ処理プログラムを提供することにある。
【課題を解決するための手段】
【０００８】
本発明に係る第１のデバッグ装置は、プリコンパイルの対象となるプリコンパイル記述とターゲット言語で記述されるターゲット言語記述との関係を定義するマッピング情報を格納するマッピング情報記憶手段と、ターゲット言語記述の中にプリコンパイラ記述が埋め込まれたプリコンパイル前ソースと、当該プリコンパイル前ソースをプリコンパイルして得られたプリコンパイル後ソースとに基づいて、前記マッピング情報記憶手段に格納されているマッピング情報を参照することにより、前記プリコンパイル前ソースと前記プリコンパイル後ソースとの対応関係を表すソース対応情報を生成する生成手段と、前記プリコンパイル前ソースに対するデバッグ指示を受け付けると、当該デバッグ指示によって指定されたプリコンパイル前ソースの実行箇所を、前記ソース対応情報を参照することにより、プリコンパイル後ソースの実行箇所へ変換する第１変換手段と、前記変換されたプリコンパイル後ソースの実行箇所に対するデバッグ実行結果を受け付けると、当該受け付けたデバッグ実行結果によって特定されるプリコンパイル後ソースの実行箇所を、前記ソース対応情報を参照することにより、プリコンパイル前ソースの実行箇所へ変換する第２変換手段と、を備える。
【０００９】
また、本発明に係る第２のデバッグ装置は、第１プリコンパイラによるプリコンパイルの対象となる第１プリコンパイラ記述と、ターゲット言語で記述されるターゲット言語記述との関係を規定する第１マッピング情報と、第２プリコンパイラによるプリコンパイルの対象となる第２プリコンパイラ記述と前記ターゲット言語記述との関係を規定する第１マッピング情報と、を格納するマッピング情報記憶手段と、ターゲット言語記述の中に第１プリコンパイラ記述及び第２プリコンパイル記述が埋め込まれたプリコンパイル前ソースと、当該プリコンパイル前ソース中の第１プリコンパイラ記述をプリコンパイルすることにより得られた第１プリコンパイル後ソースとに基づいて、前記第１マッピング情報を参照することにより、前記プリコンパイル前ソースと前記第１プリコンパイル後ソースとの対応関係を表す第１ソース対応情報を生成する第１ソース情報生成手段と、前記第１プリコンパイル後ソースと、当該第１プリコンパイル後ソース中の第２プリコンパイラ記述をプリコンパイルすることにより得られた第２プリコンパイル後ソースとに基づいて、前記第２マッピング情報を参照することにより、前記第１プリコンパイル後ソースと前記第２プリコンパイル後ソースとの対応関係を表す第２ソース対応情報を生成する第２ソース情報生成手段と、前記プリコンパイル前ソースに対するデバッグ指示を受け付けると、当該受け付けたデバッグ指示によって指定されたプリコンパイル前ソースの実行箇所を、前記第１ソース対応情報を参照することにより、第１プリコンパイル後ソースの実行箇所へ変換し、変換後の第１プリコンパイル後ソースの実行箇所を、前記第２ソース対応情報を参照することにより、第２プリコンパイル後ソースの実行箇所へ変換する第３変換手段と、前記変換された第２プリコンパイル後ソースの実行箇所に対するデバッグ実行結果を受け付けると、当該受け付けたデバッグ実行結果によって特定される第２プリコンパイル後ソースの実行箇所を、前記第２ソース対応情報を参照することにより、第１プリコンパイル後ソースの実行箇所へ変換し、変換後の第１プリコンパイル後ソースの実行箇所を、前記第１ソース対応情報を参照することにより、プリコンパイル前ソースの実行箇所へ変換する第２変換手段と、を備えることを特徴とする。
【００１０】
また、本発明に係るデバッグ方法は、デバッグ装置におけるデバッグ方法であって、当該デバッグ装置は、プリコンパイルの対象となるプリコンパイル記述とターゲット言語で記述されるターゲット言語記述との関係を定義するマッピング情報を格納するマッピング情報記憶手段を備え、前記デバッグ方法は、ターゲット言語記述の中にプリコンパイラ記述が埋め込まれたプリコンパイル前ソースと、当該プリコンパイル前ソースをプリコンパイルして得られたプリコンパイル後ソースとに基づいて、前記マッピング情報記憶手段に格納されているマッピング情報を参照することにより、前記プリコンパイル前ソースと前記プリコンパイル後ソースとの対応関係を表すソース対応情報を生成する生成ステップと、前記プリコンパイル前ソースに対するデバッグ指示を受け付けると、当該デバッグ指示によって指定されたプリコンパイル前ソースの実行箇所を、前記ソース対応情報を参照することにより、プリコンパイル後ソースの実行箇所へ変換する第１変換ステップと、前記変換されたプリコンパイル後ソースの実行箇所に対するデバッグ実行結果を受け付けると、当該受け付けたデバッグ実行結果によって特定されるプリコンパイル後ソースの実行箇所を、前記ソース対応情報を参照することにより、プリコンパイル前ソースの実行箇所へ変換する第２変換ステップと、を備えることを特徴とする。
【００１１】
また、本発明のプログラムは、上記方法の各処理ステップをコンピュータに実行させることを特徴とする。本発明のプログラムは、ＣＤ−ＲＯＭ等の光学ディスク、磁気ディスク、半導体メモリなどの各種の記録媒体を通じて、又は通信ネットワークなどを介してダウンロードすることにより、コンピュータにインストール又はロードすることができる。
【００１２】
なお、本明細書等において、手段とは、単に物理的手段を意味するものではなく、その手段が有する機能をソフトウェアによって実現する場合も含む。また、１つの手段が有する機能が２つ以上の物理的手段により実現されても、２つ以上の手段の機能が１つの物理的手段により実現されてもよい。
【発明の効果】
【００１３】
本発明のデバッグ装置によれば、既存のプリコンパイラの実装内容を変更することなく、プリコンパイラ記述を含むプログラム上で効率的にデバッグを実行することが可能になる。
【図面の簡単な説明】
【００１４】
【図１】第１実施形態に係るデバッグ装置の概略構成を示すブロック図である。
【図２】プリコンパイル前後のソースの一例を表す図である。
【図３】キーワードテーブルの一例を表す図である。
【図４】コメント記述テーブルの一例を表す図である。
【図５】変換テーブルの一例を表す図である。
【図６】ソース対応情報生成処理の流れの一例を示すフローチャートである。
【図７】ソース対応情報の一例を表す図である。
【図８】デバッグ処理の流れの一例を示すフローチャートである。
【図９】デバッグ処理の流れの一例を示すフローチャートである。
【図１０】第２実施形態に係るデバッグ装置の概略構成を示すブロック図である。
【図１１】第２実施形態に係る複数のプリコンパイル前後のソースの一例を表す図である。
【図１２】第２実施形態に係るキーワードテーブルの一例を表す図である。
【図１３】第２実施形態に係る第１対応情報の一例を表す図である。
【図１４】第２実施形態に係る第２対応情報の一例を表す図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施の形態について図面を参照しつつ詳細に説明する。なお、同一の要素には同一の符号を付し、重複する説明を省略する。
【００１６】
［第１の実施形態］
まず、図１を参照して、第１実施形態におけるデバッグ装置の機能構成について説明する。デバッグ装置１００は、機能的には、例えば、プリコンパイラ部１と、コンパイラ部２と、ソース解析部５と、デバッグエンジン８と、デバッグエンジンラッパ９と、マッピング情報記憶部１１と、を有する。デバッグ装置１００は、デバッグ装置１００の処理及び動作を制御するＣＰＵ、ＲＯＭやＲＡＭ等のメモリ、各種の情報を格納する外部記憶装置、入出力装置１０、通信装置及びこれらを結ぶバスを備える汎用のコンピュータを適用することができる。デバッグ装置１００は、例えば、ＣＰＵが、メモリなどに記憶された所定のプログラムを実行することにより、後述する各種機能を実現する。
【００１７】
プリコンパイラ部１は、ターゲット言語で記述されたプログラム（ターゲット言語記述）の中にプリコンパイル記述を含むプリコンパイル前ソース３を、所定の方式に従ってプリコンパイルし、プリコンパイル後ソース４を生成する。プリコンパイラ部１は、生成したプリコンパイル後ソース４を、コンパイラ部２に送出する。なお、プリコンパイルには、プリコンパイル記述とターゲット言語（対象言語）に対応したものを適用することができ、例えば、プリコンパイル記述がＳＱＬ記述であり、対象言語がＣＯＢＯＬである場合は、Ｐｒｏ＊ＣＯＢＯＬプリコンパイラなどの既存のプリコンパイラを適用して実現することができる。
【００１８】
コンパイラ部２は、プリコンパイルにより生成されたプリコンパイル後ソース４を、所定の方式に従ってコンパイルし、アプリケーション６とデバッグ情報７を生成する。コンパイラ部２は、生成したアプリケーション６とデバッグ情報７を、デバッグエンジン８に送出する。デバッグ情報７には、プリコンパイル後ソース４が埋め込まれている。なお、コンパイラ部２には、対象言語に対応した既存のコンパイラを適用することができる。
【００１９】
デバッグエンジン８は、アプリケーション６に対して、デバッグ情報７を利用して、デバッグを行う。デバッグエンジン８には、対象言語に対応した既存のデバッグエンジンを適用することができる。
【００２０】
ソース解析部５は、マッピング情報記憶部１１のマッピング情報を参照しながら、プリコンパイル前ソース３とプリコンパイル後ソース４とを比較し、プリコンパイル前ソース３とプリコンパイル後ソース４の対応関係を表すソース対応情報１２（以下、単に「対応情報１２」ともいう。）を生成する。ソース解析部５は、同図に示すように、プリコンパイラ部１とは独立した別個の要素として構成されており、プリコンパイラ部１から出力されるプリコンパイル後ソース４を使用してソース対象情報１２を作成する。ソース解析部５は、生成したソース対応情報１２を、所定の記憶手段に格納するとともにデバッグエンジンラッパ９に送出する。なお、ソース解析部５によるソース対応情報１２の生成処理の詳細については、後述する。
【００２１】
デバッグエンジンラッパ９は、ソース対応情報１２を利用することにより、デバッグ操作者が、プリコンパイル前ソース３上でプリコンパイル後ソース４に対するデバッグを行うことが可能なように構成されている。具体的には、デバッグエンジンラッパ９は、変換部１９と操作部２９とを有している。
【００２２】
変換部１９は、プリコンパイル前ソース３の実行箇所とプリコンパイル後ソース４の実行箇所を、ソース対応情報１２を参照することにより、相互に変換可能に構成されており、変換結果を操作部２９に送出する。プリコンパイル前ソース３及びプリコンパイル後ソース４の実行箇所は、たとえば、行番号によって特定することができる。変換部１９は、プリコンパイル前ソース３の行番号をプリコンパイル後ソース４の行番号に変換する第１変換部と、プリコンパイル後ソース４の行番号をプリコンパイル前ソース３の行番号に変換する第２変換部と、有している。なお、変換部１９による変換処理の詳細については、後述する。
【００２３】
操作部２９は、デバッグエンジン８または入出力装置１０からの情報（プリコンパイル前ソース３またはプリコンパイル後ソース４の行番号）を変換部１９へ送出する一方、変換部１９からの変換結果をデバッグエンジン８または入出力装置１０へ送出する。
【００２４】
ここで、上記のように構成されるデバッグ装置１００において、デバッグ操作者が、プリコンパイル前ソース３を見ながらデバッグを実行する場合の流れについて説明する。
【００２５】
まず、プリコンパイラ部１が、プリコンパイル前ソース３をプリコンパイルし、プリコンパイル後ソース４を生成する。コンパイル部２は、プリコンパイル後ソース４をコンパイルし、目的のアプリケーション６と、そのデバッグ情報７を生成する。なお、デバッグ情報７には、プリコンパイル後ソース４の情報が埋め込まれている。デバッグエンジン８は、生成したアプリケーション６とデバッグ情報７を実行し、デバッグを実行することができる。なお、ここまでは、通常のアプリケーションを作成しデバッグする際の手順と同様である。
【００２６】
次に、プリコンパイル前ソース３とプリコンパイル後ソース４は、共に、ソース解析部５に送られる。ソース解析部５は、プリコンパイル前ソース３とプリコンパイル後ソース４を比較し、マッピング情報記憶部１１のマッピング情報を参照することにより、両者の対応関係を表すソース対応情報１２を生成する。マッピング情報を用いてソース対応情報１２を生成する方法については、後に詳述する。生成されたソース対応情報１２は、ソース解析部５からデバッグエンジンラッパ９の変換部１９へ送られる。
【００２７】
デバッグ実行者は、入出力装置１０上でプリコンパイル前ソース３を参照しながらデバッグ指示を入力する。例えば、デバッグ実行者が、プリコンパイル前ソース３に対して、所定の対象行（例えば、１行）をデバッグの実行対象として指定すると、指定された行番号は、デバッグ実行情報として、入出力装置１０からデバッグエンジンラッパ９の操作部２９を通して、変換部１９へ送られる。
【００２８】
変換部１９では、プリコンパイル前ソース３に対するデバッグ実行情報（デバッグ対象の行番号）に基づいて、ソース対応情報１２を参照し、デバッグ対象であるプリコンパイル前ソース３の行番号の実行が、プリコンパイル後ソース４上ではどの行番号の実行に該当するかを計算する。そして、プリコンパイル前ソース３の行番号を、プリコンパイル後ソース４の対応する行番号に変換する。変換部１９は、変換結果、すなわち、プリコンパイル後ソース４の行番号を、デバッグエンジン８に送出する。
【００２９】
デバッグエンジン８は、プリコンパイル後ソース４の行番号を受け付けると、当該行番号に基づいてアプリケーション６に対してデバッグを行い、その実行結果（プリコンパイル後ソース４の行番号）をデバッグエンジンラッパ９の操作部２９に出力する。操作部２９は、実行結果（プリコンパイル後ソース４の行番号）を、変換部１９へ送出する。変換部１９は、ソース対応情報１２を参照し、実行結果（プリコンパイル後ソース４における行番号）が、プリコンパイル前ソース３上では、どの行番号に該当するのかを計算し、プリコンパイル後ソース４の行番号を、プリコンパイル前ソース３の対応する行番号に変換する。変換部１９は、変換結果、すなわち、プリコンパイル前ソース３の行番号を、操作部２９を介して入出力装置１０へ出力する。入出力装置１０は、プリコンパイル前ソース３に対するデバッグ実行指示に応答して、プリコンパイル前ソース３上の行番号を、表示する。
【００３０】
次に、マッピング情報記憶部１１のデータ構成と、ソース解析部５によるソース対応情報の生成について、図２、３、４、５、６を用いて詳細に説明する。
【００３１】
図２では、プリコンパイル前ソース３と、プリコンパイル後ソース４の一例が記載されている。同図では、プリコンパイル前ソース３の一例として、ＣＯＢＯＬ言語（ターゲット言語）のソースにＳＱＬ言語で記述されたプリコンパイラ記述３Ａ（プリコンパイル前ソース３の４〜８行目）が含まれている。プリコンパイル後ソース４は、プリコンパイル後の展開ソースである。プリコンパイル前ソース３におけるプリコンパイラ記述３Ａに該当する部分は、プリコンパイル後ソース４ではコメントアウト４Ａ（プリコンパイル後ソース４の４〜８行目）されており、プリコンパイラ記述を展開した後の内容は、ターゲット言語による記述４Ｂ（９〜１３行目）として記述されている。
【００３２】
図３〜図５は、マッピング情報記憶部１１に含まれる各種テーブルの一例を示している。本実施形態では、マッピング情報には、キーワードテーブルと、コメント記述テーブルと、変換テーブルと、を含んでいる。なお、各種テーブルのデータ構造は、図３〜図５に示すものに限られず、例えば、設計に応じて、任意のデータ項目を設けることができる。
【００３３】
図３は、プリコンパイル記述を特定するためのキーワードを格納したキーワードテーブルの一例である。本実施形態では、ターゲット言語のソース（プリコンパイル前ソース３）の一部にプリコンパイル記述を含むように構成されている。したがって、ターゲット言語による記述とプリコンパイル記述を区別するために、プリコンパイル記述の埋め込み位置を特定するためのキーワードが用いられる。同図では、プリコンパイラを特定する情報と、当該プリコンパイラが対象とするプリコンパイラ記述の開始位置と終了位置（ＥＮＤ）をそれぞれ特定するキーワードが、対応づけて格納されている。このキーワードテーブルを参照することで、例えば、プリコンパイル前ソース３又はプリコンパイル後ソース４から、プリコンパイル記述の位置（開始位置および終了位置）を特定することができる。
【００３４】
また、図４は、コメントアウトに関する情報を格納したコメント記述テーブルの一例である。本実施形態では、プリコンパイル記述をプリコンパイル後のソース中に残す場合、プリコンパイル記述は、プリコンパイル後ソースの言語仕様（ターゲット言語の仕様）に従ってコメントアウトされるように構成されている。同図では、ターゲット言語を特定する情報（ＬＡＮＧ）と、コメント開始位置（ＳＴＡＲＴ、ＬＩＮＥ）及び終了位置（ＥＮＤ、ＬＩＮＥ）を特定するコメント開始情報及び終了情報が、対応付けて格納されている。このコメント記述テーブルを利用することで、例えば、プリコンパイル後ソース４から、コメントアウトされたプリコンパイル記述の開始位置及び終了位置を特定することができる。
【００３５】
さらに、図５は、プリコンパイル前の表現とプリコンパイル後の表現とを対応付けた変換テーブルの一例を示している。本実施形態のプリコンパイラは、プリコンパイル前の表現とプリコンパイル後の表現が、規定条件に従って規則的に変換されるように構成されている。同図には、プリコンパイラを特定するプリコンパイラ情報と、変換前（ＢＥＦＯＲＥ）の表現及び変換後（ＡＦＴＥＲ）の表現とを、対応付けて格納している。この変換テーブルを利用することで、例えば、プリコンパイル前の表現とプリコンパイル後の表現が、同一表現であるか否かを判断することができる。
【００３６】
次に、ソース解析部５による対応情報の生成処理について、図６のフローチャートを参照しながら説明する。なお、後述するフローチャートに示す各処理ステップは処理内容に矛盾を生じない範囲で任意に順番を変更して又は並列に実行することができる。また、各処理ステップ間に他のステップを追加してもよい。また、便宜上１ステップとして記載されているステップは、複数ステップに分けて実行することができる一方、便宜上複数ステップに分けて記載されているものは、１ステップとして把握することができる。
【００３７】
まず、ソース解析部５は、プリコンパイル前ソース３とプリコンパイル後ソース４について、対象行（例えば、１行）を読み込み（Ｒ０１）、両者を比較する。対象行が文末である場合（Ｒ０２；Ｙｅｓ）は、処理を終了し、対象行が文末でない場合（Ｒ０２；Ｎｏ）は、処理を続行する。
【００３８】
ソース解析部５は、対象行の内容が同一内容であるか否かを判断し（Ｒ０３）、対象行同士が同一内容であれば（Ｒ０３；Ｙｅｓ）、プリコンパイルに関係のない記述と判断し（Ｒ１０）、次行を読み込む（Ｒ０１）。
【００３９】
ソース解析部５は、対象行同士が同一内容でない場合（Ｒ０３；Ｎｏ）、プリコンパイル後ソース４の対象行の記述が、プリコンパイル前ソース３の対象行の記述をコメントアウトしたものか否かを、コメント記述テーブルを参照して判断する（Ｒ０４）。
【００４０】
ソース解析部５は、プリコンパイル後ソース４の対象行の記述が、コメント記述テーブルの内容に合致すると判断した場合（Ｒ０４；Ｙｅｓ）、プリコンパイル後ソース４の対象行の記述は、コメントアウトされたものであると判断して（Ｒ１１）、次行を読み込む（Ｒ０１）。
【００４１】
ソース解析部５は、対象行の記述が、コメント記述テーブルの内容に合致しないと判断した場合（Ｒ０４；Ｎｏ）、対象行の記述が、キーワード中の記述であるか否かを、キーワードテーブルを参照して判断する（Ｒ０５）。ソース解析部５は、対象行の記述がキーワード中の記述であると判断した場合（Ｒ０５；Ｙｅｓ）、プリコンパイル前ソース３の対象行の記述は、プリコンパイル記述であると判断し（Ｒ０８）、プリコンパイル後ソース４には、プリコンパイラで変更された記述だけが残り、プリコンパイル前の内容はコメントアウトされていないことになるため、プリコンパイル前ソースについて、プリコンパイル記述が終わるまで対象行を進める（Ｒ０９）。
【００４２】
一方、キーワード中の記述ではない場合（Ｒ０５；Ｎｏ）、ソース解析部５は、プリコンパイル後ソース４の内容が、プリコンパイラで変換された内容と判断し（Ｒ０６）、プリコンパイル後ソース４を１行読み込み（Ｒ０７）、プリコンパイルで変換した記述が終了するまで繰り返す。
【００４３】
以上の処理により、ソース解析部５は、プリコンパイル前ソース３とプリコンパイル後ソース４を行単位で比較し、図７に示すようなソース対応情報１２を作成する。ソース対応情報１２には、プリコンパイラの情報と、プリコンパイル前ソース３（ＳｏｕｒｃｅＦｉｌｅ）のファイル名及び行番号と、プリコンパイル後ソース４（ＤｅｓｔＦｉｌｅ１）のファイル名及び行番号とが、それぞれ対応付けて格納されている。
【００４４】
次に、変換部１９による、プリコンパイル前ソース３における行番号とプリコンパイル後ソース４における行番号との変換処理について、図７、８、９を使用して説明する。
【００４５】
まず、入出力装置１０を通して、デバッグ操作者が、デバッグエンジン８に命令を送信する場合、デバッグ操作者は、プリコンパイル前ソース３を見ながら操作をする。従って、プリコンパイル前ソース３の行番号をプリコンパイル後ソース４の行番号へ変換する処理（第１変換処理）について説明する。
【００４６】
図８は、プリコンパイル前ソース３の行番号を、プリコンパイル後ソース４の行番号へ、変換する場合の処理の流れの一例を示すフローチャートである。
【００４７】
変換部１９は、ソース対応情報１２を読み込み（Ｓ０１）、プリコンパイル前ソース３の行番号を示すＬＩＮＥ０の値に基づいてソース対応情報１２を検索し、該当した行のＬＩＮＥ１の行番号へ変換をする。
【００４８】
具体的には、変換部１９は、ＬＩＮＥ０行のＬＩＮＥ１の記述が、複数行に該当するか否かを判断し（Ｓ０２）、ＬＩＮＥ０行のＬＩＮＥ１の記述が、１、１００、１０００などの単一行である場合は、複数行に該当しないため（Ｓ０２；Ｎｏ）、そのままＬＩＮＥ１の値に変換をする（Ｓ０７）。例えば、プリコンパイルに関係のない箇所や複数のプリコンパイル記述が単一行に変換された場合などが該当する。
【００４９】
一方、変換部１９は、該当したＬＩＮＥ０行のＬＩＮＥ１の記述が、ＬＩＮＥ９−１３のような複数行の場合は（Ｓ０２；Ｙｅｓ）、ＬＩＮＥ０が複数行か否かを判断する（Ｓ０４）。
【００５０】
変換部１９は、ＬＩＮＥ０が単一行である場合、すなわち、複数行ではない場合（Ｓ０４；Ｎｏ）、単一のプリコンパイル記述が複数の行へ変換されたことを意味しているため、プリコンパイル前の１行の実行は、プリコンパイル後ソースの複数行の実行に相当する。そのため、変換部１９は、ＬＩＮＥ０１の複数行の最終行の行番号に変換する（Ｓ０５）。例えば、ＬＩＮＥ０１が９−１３の場合は、１３行に変換する。
【００５１】
変換部１９は、ＬＩＮＥ０が複数行の場合（Ｓ０４；Ｙｅｓ）、プリコンパイル前ソースの実行として意味があるのは、プリコンパイル前ソースのプリコンパイル記述が終わる箇所であるため、ＬＩＮＥ０の複数行の最終行であるか否かを判断する（Ｓ０３）。
【００５２】
変換部１９は、最終行である場合は（Ｓ０３;Ｙｅｓ）、ＬＩＮＥ０１の複数行の最終行の行番号に変換する（Ｓ０５）。一方、ＬＩＮＥ０の最終行以外の場合は（Ｓ０３；Ｎｏ）、ＬＩＮＥ１の複数行の最初の行の行番号とする（Ｓ０６）。例えば、ＬＩＮＥ１が９−１３の場合は、９行目となる。この場合、プリコンパイル後ソース４ではプリコンパイル記述は実行されない。プリコンパイル前ソース３のプリコンパイル記述の最終行を実行する場合に初めて、プリコンパイル後ソース４中で該当の内容が実行される。
【００５３】
次に、デバッグエンジン８が、デバッグを実行すると、デバッグ情報が送出される。この場合のデバッグ情報は、プリコンパイル後ソース４の行番号である。したがって、プリコンパイル後ソース４の行番号をプリコンパイル前ソース３の行番号へ変換する場合（第２の変換処理）について説明する。
【００５４】
図９は、プリコンパイル後ソース４の行番号を、プリコンパイル前ソース３の行番号へ、変換する場合の処理の流れの一例を示すフローチャートである。
【００５５】
変換部１９は、ソース対応情報１２を読み込み（Ｔ０１）、プリコンパイル後ソース４の行番号を示すＬＩＮＥ１の値に基づいてソース対応情報１２を検索し、該当した行のＬＩＮＥ０へ変換をする。
【００５６】
具体的には、変換部１９は、図８に示すフローとは逆に、ＬＩＮＥ１で該当する行を検索し、該当した行のＬＩＮＥ０が複数行かどうかを判断する（Ｔ０２）。ＬＩＮＥ０が単一行であれば（Ｔ０２；Ｎｏ）、ＬＩＮＥ０の該当行へと変換する（Ｔ０７）。
【００５７】
変換部１９は、ＬＩＮＥ０が複数行である場合（Ｔ０２；Ｙｅｓ）、ＬＩＮＥ１が複数行かどうかを判断し（Ｔ０４）、ＬＩＮＥ１が単一行であれば（Ｔ０４；Ｎｏ）、複数のプリコンパイル記述が単一行へ変換されたことを示しているので、ＬＩＮＥ０の最終行の行番号へ変換する（Ｔ０５）。
【００５８】
変換部１９は、ＬＩＮＥ１が複数行である場合（Ｔ０４；Ｙｅｓ）、当該行が最終行かどうかを判断する（Ｔ０３）。ＬＩＮＥ１が最終行である場合（Ｔ０３；Ｙｅｓ）、プリコンパイル前ソースのプリコンパイル記述が全て実行されたことになるため、ＬＩＮＥ０の最終行へ変換する（Ｔ０５）。一方、ＬＩＮＥ１が最終行でない場合（Ｔ０３；Ｎｏ）、プリコンパイル記述の実行途中を意味しているため、変換部１９は、ＬＩＮＥ０の最初の行の行番号へと変換する（Ｔ０６）。
【００５９】
以上、上記第１の実施形態によれば、ソース解析部５が、プリコンパイル前ソース３とプリコンパイル後ソース４とに基づいてソース対応情報１２を生成し、変換部１９は、プリコンパイル前ソース３に対するデバッグ指示が入力された場合は、ソース対応情報１２を参照して、プリコンパイル前ソース３の行番号をプリコンパイル後ソース４の行番号に変換する。一方、変換部１９は、デバッグエンジン８からデバッグ結果が入力された場合は、ソース対応情報１２を参照して、プリコンパイル後ソース４の行番号をプリコンパイル前ソース３の行番号に変換するようにしている。したがって、プリコンパイラの実装内容を変更することなく、デバッグ操作者は、プリコンパイル前ソース上でデバッグを実行することが可能となる。
【００６０】
また、ソース対応情報１２とマッピング情報１１は、デバッグ操作者が編集可能なように構成することができる。これによれば、例えば、ソース解析部５で解析できなかった所を、デバッグ時に設定できるようになるので、微調整が可能となる。また、マッピング情報１１については、新しいプリコンパイラやプリコンパイラのバージョンアップなどで動作が変更可能になった場合でも、後から編集することができるため、柔軟な対応が可能である。
【００６１】
また、マッピング情報１１のテーブルは、プリコンパイルの対象となるプリコンパイル記述とターゲット言語で記述されるターゲット言語記述との関係を定義するものであればよく、上述した３つのテーブルに限られない。例えば、設計に応じて、他のテーブルを適宜追加することもできる。
【００６２】
［第２の実施形態］
次に、図１０を参照して、第２実施形態におけるデバッグ装置１００Ａの機能構成について説明する。第２実施形態におけるデバッグ装置１００Ａが、上述した第１実施形態におけるデバッグ装置と相違する点は、プリコンパイラ部２２とプリコンパイル後ソース２３が追加になっている点である。プリコンパイラ部１とプリコンパイル後ソース４は、第１のプリコンパイラ部と第１プリコンパイル後ソース、プリコンパイラ部２２とプリコンパイル後ソース２３は、第２のプリコンパイラ部と第２プリコンパイル後ソースともいう。このように、第２実施形態では、複数のプリコンパイラを備える場合に好適なデバッグ装置を開示する。なお、プリコンパイラ部２２とプリコンパイル後ソース２３以外の構成については、第１実施形態におけるデバッグ装置１００の各構成と実質的に同様であるため、各構成要素には同一の符合を付し、その説明は省略する。以下においては、主に第１実施形態との相違点について説明する。
【００６３】
図１１は、複数のプリコンパイラを説明するための図である。本実施形態では、第１のプリコンパイラの一例として、ＳＱＬ記述のプリコンパイラを、第２のプリコンパイラの一例として、ＭａｃｒｏＣｏｍｐｉｌｅｒ（登録商標）を利用する場合について説明する。同図に示すように、第１のプリコンパイラであるＳＱＬ記述のプリコンパイラを用いて、プリコンパイル前ソース３に埋め込まれたプリコンパイラ記述３Ａ（ＥＸＥＣ  ＳＱＬ  〜  ＥＮＤ−ＥＸＥＣ  の内容）を展開する。展開後の内容は、プリコンパイル後ソース２３中に、コメントアウト２３Ａされるとともに、ターゲット言語２３Ｂで展開されている。また、プリコンパイル前ソース３に埋め込まれたプリコンパイラ記述３Ｃ（プリコンパイル後ソース２３中のプリコンパイラ記述２３Ｃ）（ＳＴ−ＭＡＣ〜ＥＮＤ−ＭＡＣ  の部分）は、第２のプリコンパイラであるＭａｃｒｏＣｏｍｐｉｌｅｒを用いて展開する。展開後の内容は、プリコンパイル後ソース４中で、ターゲット言語４Ｃに展開されている。
【００６４】
このように、プリコンパイラが複数ある場合、ソース解析部５では、図１４に示すように、それぞれのプリコンパイラのキーワードが追加されたキーワードテーブルを利用し、プリコンパイル前ソース３とプリコンパイル後ソース２３のソース対応情報１２１を生成する。同様に、ソース解析部５は、プイコンパイル後ソース２３とプリコンパイル後ソース４のソース対応情報１２２を同様に生成する。図１２は、生成されたソース対応情報１２１の一例を示し、図１３は、ソース対応情報１２２の一例を示している。変換部１９は、プリコンパイルする順番に従って、ソース対応情報１２１又は１２２を参照して、行番号の変換を実施する。
【００６５】
操作者からの入力の場合、変換部１９は、まずソース対応情報１２１を利用し、プリコンパイル前ソース３の行番号を、プリコンパイル後ソース２３の行番号に変換する。次に、ソース対応情報１２２を利用して、プリコンパイル後ソース２３の行番号から、プリコンパイル後ソース４の行番号へ変換する。
【００６６】
逆に、デバッグエンジン８からの出力の場合、変換部１９は、先にソース対応情報１２２を利用して、プリコンパイル後ソース４の行番号をプリコンパイル後ソース２３の行番号へと変換し、次に、ソース対応情報１２１を利用し、プリコンパイル後ソース２３の行番号を、プリコンパイル前ソース３の行番号へと変換する。
【００６７】
なお、上記第２の実施形態では、プリコンパイラが２つある場合について説明したが、プリコンパイラの数は２つに限られず、設計に応じて３つ以上のプリコンパイラを対象とすることができる。ソース解析部は、プリコンパイラの数に応じてソース対応情報を生成し、変換部１９は、プリコンパイルする順番に従って、該当するソース対応情報を参照することにより、行番号の変換を実施する。
【００６８】
以上、上記第２の実施形態によれば、複数のプリコンパイルについて、それぞれ対応する対応情報を生成している。したがって、プリコンパイルが複数ある場合でも、プリコンパイラの実装を変更することなく、デバッグ操作者は、プリコンパイル前のソースでデバッグを実行することが可能となる。
【００６９】
［その他の実施形態］
なお、本発明は、上記した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内において、他の様々な形で実施することができる。このため、上記実施形態はあらゆる点で単なる例示にすぎず、限定的に解釈されるものではない。
【００７０】
例えば、上述した実施形態では一つのデバッグ装置で本発明を実施しているが、本発明は複数のデバッグ装置で実施することもできる。この場合には、上述した実施形態におけるデバッグ装置が有する各機能を複数の装置に分散し、これら複数の装置群を上述した実施形態におけるデバッグ装置と同様に機能させればよい。
【００７１】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【００７２】
（付記１）
プリコンパイルの対象となるプリコンパイル記述とターゲット言語で記述されるターゲット言語記述との関係を定義するマッピング情報を格納するマッピング情報記憶手段と、ターゲット言語記述の中にプリコンパイラ記述が埋め込まれたプリコンパイル前ソースと、当該プリコンパイル前ソースをプリコンパイルして得られたプリコンパイル後ソースとに基づいて、前記マッピング情報記憶手段に格納されているマッピング情報を参照することにより、前記プリコンパイル前ソースと前記プリコンパイル後ソースとの対応関係を表すソース対応情報を生成する生成手段と、前記プリコンパイル前ソースに対するデバッグ指示を受け付けると、当該デバッグ指示によって指定されたプリコンパイル前ソースの実行箇所を、前記ソース対応情報を参照することにより、プリコンパイル後ソースの実行箇所へ変換する第１変換手段と、前記変換されたプリコンパイル後ソースの実行箇所に対するデバッグ実行結果を受け付けると、当該受け付けたデバッグ実行結果によって特定されるプリコンパイル後ソースの実行箇所を、前記ソース対応情報を参照することにより、プリコンパイル前ソースの実行箇所へ変換する第２変換手段と、を備えることを特徴とするデバッグ装置。
【００７３】
（付記２）
前記第１変換手段は、前記デバッグ指示によって指定されたプリコンパイル前ソースの実行箇所に該当する行番号を、前記ソース対応情報を参照することにより、前記プリコンパイル後ソースの実行箇所の行番号へ変換し、前記第２変換手段は、前記デバッグ実行結果によって特定されるプリコンパイル後ソースの実行箇所の行番号を、前記ソース対応情報を参照することにより、前記プリコンパイル前ソースの実行箇所の行番号へ変換することを特徴とする付記１に記載のデバッグ装置。
【００７４】
（付記３）
前記マッピング情報は、ターゲット言語記述中にプリコンパイル記述を埋め込む際の位置を示すキーワードを格納したキーワードテーブルを含むことを特徴とする付記１または２に記載のデバッグ装置。
【００７５】
（付記４）
前記マッピング情報は、ターゲット言語記述中にプリコンパイル記述をコメントアウトする場合の位置を示すコメントアウト情報を格納するコメント記述テーブルを含むことを特徴とする付記１から３いずれか１項に記載のデバッグ装置。
【００７６】
（付記５）
前記マッピング情報には、プリコンパイル前の表現とプリコンパイル後の表現とを対応付けて格納する変換テーブルを含むことを特徴とする付記１から４いずれか１項に記載のデバッグ装置。
【００７７】
（付記６）
第１プリコンパイラによるプリコンパイルの対象となる第１プリコンパイラ記述と、ターゲット言語で記述されるターゲット言語記述との関係を規定する第１マッピング情報と、第２プリコンパイラによるプリコンパイルの対象となる第２プリコンパイラ記述と前記ターゲット言語記述との関係を規定する第１マッピング情報と、を格納するマッピング情報記憶手段と、ターゲット言語記述の中に第１プリコンパイラ記述及び第２プリコンパイル記述が埋め込まれたプリコンパイル前ソースと、当該プリコンパイル前ソース中の第１プリコンパイラ記述をプリコンパイルすることにより得られた第１プリコンパイル後ソースとに基づいて、前記第１マッピング情報を参照することにより、前記プリコンパイル前ソースと前記第１プリコンパイル後ソースとの対応関係を表す第１ソース対応情報を生成する第１ソース情報生成手段と、前記第１プリコンパイル後ソースと、当該第１プリコンパイル後ソース中の第２プリコンパイラ記述をプリコンパイルすることにより得られた第２プリコンパイル後ソースとに基づいて、前記第２マッピング情報を参照することにより、前記第１プリコンパイル後ソースと前記第２プリコンパイル後ソースとの対応関係を表す第２ソース対応情報を生成する第２ソース情報生成手段と、前記プリコンパイル前ソースに対するデバッグ指示を受け付けると、当該受け付けたデバッグ指示によって指定されたプリコンパイル前ソースの実行箇所を、前記第１ソース対応情報を参照することにより、第１プリコンパイル後ソースの実行箇所へ変換し、変換後の第１プリコンパイル後ソースの実行箇所を、前記第２ソース対応情報を参照することにより、第２プリコンパイル後ソースの実行箇所へ変換する第３変換手段と、前記変換された第２プリコンパイル後ソースの実行箇所に対するデバッグ実行結果を受け付けると、当該受け付けたデバッグ実行結果によって特定される第２プリコンパイル後ソースの実行箇所を、前記第２ソース対応情報を参照することにより、第１プリコンパイル後ソースの実行箇所へ変換し、変換後の第１プリコンパイル後ソースの実行箇所を、前記第１ソース対応情報を参照することにより、プリコンパイル前ソースの実行箇所へ変換する第２変換手段と、を備えることを特徴とするデバッグ装置。
【００７８】
（付記７）
デバッグ装置におけるデバッグ方法であって、当該デバッグ装置は、プリコンパイルの対象となるプリコンパイル記述とターゲット言語で記述されるターゲット言語記述との関係を定義するマッピング情報を格納するマッピング情報記憶手段を備え、前記デバッグ方法は、ターゲット言語記述の中にプリコンパイラ記述が埋め込まれたプリコンパイル前ソースと、当該プリコンパイル前ソースをプリコンパイルして得られたプリコンパイル後ソースとに基づいて、前記マッピング情報記憶手段に格納されているマッピング情報を参照することにより、前記プリコンパイル前ソースと前記プリコンパイル後ソースとの対応関係を表すソース対応情報を生成する生成ステップと、前記プリコンパイル前ソースに対するデバッグ指示を受け付けると、当該デバッグ指示によって指定されたプリコンパイル前ソースの実行箇所を、前記ソース対応情報を参照することにより、プリコンパイル後ソースの実行箇所へ変換する第１変換ステップと、前記変換されたプリコンパイル後ソースの実行箇所に対するデバッグ実行結果を受け付けると、当該受け付けたデバッグ実行結果によって特定されるプリコンパイル後ソースの実行箇所を、前記ソース対応情報を参照することにより、プリコンパイル前ソースの実行箇所へ変換する第２変換ステップと、を備えることを特徴とするデバッグ方法。
【００７９】
（付記８）
付記７に記載のデバッグ方法に記載の各ステップをコンピュータに実行させるためのプログラム。
【符号の説明】
【００８０】
１…プリコンパイラ部、２…コンパイラ部、３…プリコンパイル前ソース、４…プリコンパイル後ソース、５…ソース解析部、６…アプリケーション、７…デバッグ情報、８…デバッグエンジン、９…デバッグエンジンラッパ、１０…入出力装置、１１…マッピング情報記憶部、１２…ソース対応情報、１９…変換部、２９…操作部、１００…デバッグ装置
【図１】
0005565563.tif 000002
【図２】
0005565563.tif 000003
【図３】
0005565563.tif 000004
【図４】
0005565563.tif 000005
【図５】
0005565563.tif 000006
【図６】
0005565563.tif 000007
【図７】
0005565563.tif 000008
【図８】
0005565563.tif 000009
【図９】
0005565563.tif 000010
【図１０】
0005565563.tif 000011
【図１１】
0005565563.tif 000012
【図１２】
0005565563.tif 000013
【図１３】
0005565563.tif 000014
【図１４】
0005565563.tif 000015