(57)【特許請求の範囲】
【請求項１】
ソースプログラム内で使用される変数と前記変数の配置情報とを用いて、参照アドレスにおける参照変数の内容表示を行なうデバッグ方法であって、
前記参照変数に対応する複数のエントリから、前記配置情報において定義される資源の生存区間に前記参照アドレスを含む少なくとも２つのエントリを検出するエントリ検出ステップと、
前記少なくとも２つのエントリにおける配置情報の各々に含まれる選択情報の真偽を検査する条件検査ステップと、
前記選択情報の真偽に応じて、前記少なくとも２つのエントリから参照する１つのエントリを選択するエントリ選択ステップと、を有することを特徴とするデバッグ方法。
【請求項２】
前記選択情報は、前記生存区間のアドレス範囲において構成された命令に付加された条件フラグであることを特徴とする、請求項１に記載のデバッグ方法。
【請求項３】
前記選択情報は、前記生存区間のアドレス範囲において構成された命令に付加された複数の条件フラグと演算子の組み合わせであることを特徴とする、請求項１に記載のデバッグ方法。
【請求項４】
ソースプログラム内で使用される変数と前記変数の配置情報とを用いて、参照アドレスにおける参照変数の内容表示を行なうデバッグ装置であって、
前記参照変数に対応する複数のエントリから、前記配置情報において定義される資源の生存区間に前記参照アドレスを含む少なくとも２つのエントリを検出するエントリ検出手段と、
前記少なくとも２つのエントリにおける配置情報の各々に含まれる選択情報の真偽を検査する条件検査手段と、
前記選択情報の真偽に応じて、前記少なくとも２つのエントリから参照する１つのエントリを選択するエントリ選択手段と、を備えたことを特徴とするデバッグ装置。
【請求項５】
前記選択情報は、前記生存区間のアドレス範囲において構成された命令に付加された条件フラグであることを特徴とする、請求項４に記載のデバッグ装置。
【請求項６】
前記選択情報は、前記生存区間のアドレス範囲において構成された命令に付加された複数の条件フラグと演算子の組み合わせであることを特徴とする、請求項４に記載のデバッグ装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、条件付き命令を有するアーキテクチャに於けるプログラム開発のためのデバッグ方法およびデバッグ装置に関する。
【０００２】
【従来の技術】
一般的にコンパイラが生成するデバッグ情報には、ソースプログラムの内容と翻訳後のアセンブラコードの内容とを対応づけるための情報が含まれている。その中で、ソースプログラム中に出現する変数と該変数に割り付けられるハードウェア資源（レジスタやメモリ）についての情報を、配置情報と呼ぶ。
【０００３】
従来、コンパイラによって生成される配置情報は、変数名と該変数が割り付けられた資源と資源が有効となるアドレスと資源が無効となるアドレスとからなるエントリを単位とする列で構成されていた。
【０００４】
図２に示したソースプログラムを一般的なアーキテクチャ用のコンパイラでコンパイルすると、図２４に示すアセンブラコードを得る。この際にコンパイラでは、図２５に示すような配置情報を含むデバッグ情報をアセンブラファイル内に生成する。例えば、図２５に示す配置情報のエントリ２５０４では、変数ａに関して、アドレス0x40000022 からアドレス0x40000039の区間では、割付資源はレジスタＲ１であることを意味する。
【０００５】
デバッグ情報を含むアセンブラファイルからアセンブラ及びリンカを用いて実行形式のオブジェクトファイルが生成される。デバッグ装置では、オブジェクトファイルを入力として読み込んで実行する。デバッグ装置は、ステップ実行やブレークで実行が停止している際に、ユーザによる変数内容の表示要求に対して、上記デバッグ情報を解析し、変数名とその時停止中のアドレスとから該変数の割付資源を求め、該資源に格納されている値を取り出して表示する。例えばアドレス0x4000002Dで、デバッグ装置上での実行が停止している時に、ユーザが変数ｂの内容を表示する要求をデバッグ装置に対して行った時、デバッグ装置は、前記配置情報にある変数ｂのエントリのうち、現在のアドレス0x4000002Dが含まれるエントリを探す。図２５の配置情報ではエントリ２５０３がこれに該当する。次に当該エントリに含まれる資源の情報を取り出し、当該変数に割り付けられている資源を得る。図２５の配置情報のエントリ２５０３では、変数ｂはレジスタＲ０に割り付けられている事を示している。デバッグ装置では、当該資源（この場合はレジスタＲ０）が保持している値を調べて、画面上に変数ｂの保持する値としてこの値を表示する。
【０００６】
【発明が解決しようとする課題】
しかし、条件付き命令を有するアーキテクチャ用のコンパイラでコンパイルされたプログラムに対して図２５と同様の配置情報を用いると、デバッグ装置でユーザによる変数内容表示の要求に答えることができない場合がある。図２のソースプログラムを、条件付き命令を有するアーキテクチャ用のコンパイラでコンパイルすると、図２６のアセンブラコードを得る。命令２６０３〜２６０８の命令は条件付き命令になっている。この時、従来のデバッグ情報生成方法で配置情報を生成すると、図２７のような配置情報となる。
【０００７】
このように生成されたアセンブラコードから生成されたオブジェクトファイルをデバッグ装置で入力として読み込んで実行し、例えばアドレス0x4000002Bでユーザによって変数ａの内容を表示する要求がデバッグ装置に対してなされたとする。この時デバッグ装置は図２７の配置情報にある変数ａのエントリのうち、アドレス0x4000002Bが含まれるエントリを探すが、この場合２７０４と２７０５の二つのエントリがこれに該当する。このためデバッグ装置において、変数ａに対する割付資源がレジスタＲ０なのかレジスタＲ１なのかが判断できず、ユーザの変数内容表示要求に正しく答えられないことになる。
【０００８】
本発明の目的は、変数内容の参照を正しく行うことを可能にするデバッグ方法およびデバッグ装置を提供することである。
【０００９】
【課題を解決するための手段】
本発明のデバッグ方法は、ソースプログラム内で使用される変数と変数の配置情報とを用いて、参照アドレスにおける参照変数の内容表示を行なうデバッグ方法であって、参照変数に対応する複数のエントリから、配置情報において定義される資源の生存区間に参照アドレスを含む少なくとも２つのエントリを検出するエントリ検出ステップと、少なくとも２つのエントリにおける配置情報の各々に含まれる選択情報の真偽を検査する条件検査ステップと、選択情報の真偽に応じて、少なくとも２つのエントリから参照する１つのエントリを選択するエントリ選択ステップと、を有することを特徴とする。
また、本発明のデバッグ方法において、選択情報は、生存区間のアドレス範囲において構成された命令に付加された条件フラグであることや、生存区間のアドレス範囲において構成された命令に付加された複数の条件フラグと演算子の組み合わせであることも好ましい。
本発明のデバッグ装置は、ソースプログラム内で使用される変数と変数の配置情報とを用いて、参照アドレスにおける参照変数の内容表示を行なうデバッグ装置であって、参照変数に対応する複数のエントリから、配置情報において定義される資源の生存区間に参照アドレスを含む少なくとも２つのエントリを検出するエントリ検出手段と、少なくとも２つのエントリにおける配置情報の各々に含まれる選択情報の真偽を検査する条件検査手段と、選択情報の真偽に応じて、少なくとも２つのエントリから参照する１つのエントリを選択するエントリ選択手段と、を備えたことを特徴とする。
また、本発明のデバッグ装置において、選択情報は、生存区間のアドレス範囲において構成された命令に付加された条件フラグであることや、生存区間のアドレス範囲において構成された命令に付加された複数の条件フラグと演算子の組み合わせであることも好ましい。
【００１０】
（削除）
【００１１】
（削除）
【００１２】
（削除）
【００１３】
上記のデバッグ方法およびデバッグ装置によって、変数内容の参照を正しく行うことができる。
【００１４】
（削除）
【００１５】
【発明の実施の形態】
以下、本発明の実施の形態について説明する。
【００１６】
［語句説明］
まず、説明文中の語句について説明する。
【００１７】
「プロセッサ」
コンパイラが対象とするプロセッサは、単一命令発行形式、複数命令同時発行形式のいずれでも良く、従来のプロセッサが備える命令メモリ、プログラムカウンタ、命令フェッチ回路、命令レジスタ、命令デコーダ、演算器、汎用レジスタ、データメモリ、データやアドレス転送用のバス等を備える。
【００１８】
「条件付き命令」
プロセッサの命令には実行条件フラグを付けることができるものとする。条件フラグは真または偽の値を持つレジスタである。条件フラグは、比較命令のオペランドに指定し、その比較演算の結果によって値が変化する。条件付き命令の動作は、指定された条件フラグの値が真の時にはその命令を発行し、偽の時には何も実行しない命令を発行する。
【００１９】
「ｉｆ変換」
条件付き命令を有するアーキテクチャ用のコンパイラに於ける最適化手法の一つで、Ｃ言語のif文(条件分岐文)の構造に対して適用される。if文は、条件部と、前記条件部での判定が真の場合に実行されるthen部と、前記条件部での判定が偽の場合に実行されるelse部とからなる。通常のコンパイラでは、then部とelse部をそれぞれ基本ブロックとするアセンブラコードを出力するが、条件付き命令を有するアーキテクチャにおいて行うｉｆ変換最適化は、ｉｆ文の構造を実現するための分岐命令を削除し、then部とelse部を一つの基本ブロックで構成し、then部とelse部に属する命令を条件付き命令に変換したアセンブラコードとして出力する。これにより、if文のアセンブラコード生成において、分岐命令をなくすことができる。
【００２０】
以下、本発明の実施の形態について図面を参照しながら説明する。
【００２１】
図１は、本発明の実施の形態におけるコンパイラの構成図である。本図に示すように、コンパイラ１は、構文解析手段１０２と最適化・資源割付手段１０３とスケジューリング手段１０４とアセンブラコード生成手段１０５と中間コード管理手段１０６とデバッグ情報生成手段１０７とで構成される。コンパイラ１は、ソースプログラム１０１を入力として、目的プログラム１０８であるアセンブラコードを出力する。
【００２２】
構文解析手段１０２は、ソースプログラム１０１を入力として、プログラムの字句解析と、構文解析と、意味解析とを行い、中間コードプログラムを生成する。中間コードプログラムは後述の中間コード管理手段１０６に格納する。また、この中間コードに対応したデバッグ情報を後述のデバッグ情報生成手段１０７によって生成し保持させる。例えば、図２のソースプログラムを入力として構文解析手段１０２を動作させると、図３のような中間コードが中間コード管理手段１０６に格納される。中間コードの中に登場するr0,r1,r2は、プロセッサ上の実レジスタではなく、中間コードにおける仮想レジスタである。
【００２３】
最適化・資源割付手段１０３は、不要コード削除、定数の畳み込み、誘導変数最適化など、コードサイズ削減／実行速度向上のための最適化を行う。本発明において効果が現れるｉｆ変換最適化もここで行う。最適化は後述の中間コード管理手段１０６によって保持されている中間コードプログラムに対して行う。また、最適化のために変更した中間コードの状態を後述のデバッグ情報生成手段１０７で保持しているデバッグ情報に反映させるため、デバッグ情報の修正も行う。
【００２４】
スケジューリング手段１０４は、後述の中間コード管理手段１０６によって保持している中間コードプログラムを入力としてスケジューリングを行う。また、スケジューリングのために変更した中間コードの状態を後述のデバッグ情報生成手段１０７に知らせて、保持しているデバッグ情報の修正をする。
【００２５】
アセンブラコード生成手段１０５は、後述の中間コード管理手段１０６で保持している中間コードをアセンブラコードに変換する。また、後述のデバッグ情報生成手段１０７で格納しているデバッグ情報を該アセンブラコード上にデータ列として出力する。
【００２６】
中間コード管理手段１０６は、構文解析手段１０２から中間コードプログラムを受取り、格納する。また、最適化・資源割付手段１０３とスケジューリング手段１０４に対して保持している中間コードプログラムを提供し、処理後の中間コードプログラムを受取り、格納する。さらに、アセンブラコード生成手段１０５に対して保持している中間コードプログラムを提供する。
【００２７】
デバッグ情報生成手段１０７は、構文解析手段１０２と最適化・資源割付手段１０３とスケジューリング手段１０４とで行われる中間コードの生成／最適化に伴って、デバッグ情報を生成し格納する。管理するデバッグ情報には、配置情報の他に、各アセンブラ命令に対してソースプログラムの行番号を対応づける行番号情報や、ソースプログラムに現れる関数や変数の名前や型名などについての情報などがある。以降では、本発明の主眼である配置情報についてのみ述べる。
【００２８】
図４は、デバッグ情報生成手段１０７による配置情報を生成する手順を示したフローチャートである。以下、ステップ毎に処理内容を説明する。第１のケースとして、配置情報は、図５に示したような構造をしており、変数名５０１と開始アドレス５０２と終了アドレス５０３と資源５０４と条件フラグ５０５とを示すフィールドから成る情報の組の列である。
【００２９】
ステップ４０１は、変数と該変数の生存区間の開始アドレスと生存区間の終了アドレスと該生存区間に対する割付資源の情報（以降、生存区間情報と称す）を構文解析手段１０２から得て、そのそれぞれについて配置情報エントリを生成するためのループを構成している。なお、変数の生存区間とは、変数の値が定義されてからその値を保持した変数が最後に参照されるまでの区間である。
【００３０】
ステップ４０２は、生存区間情報を構文解析手段１０２から得て、配置情報エントリを生成する。生成方法は、変数名のフィールド５０１は生存区間情報の変数名に、開始アドレスのフィールド５０２は生存区間情報の開始アドレスに、終了アドレスのフィールド５０３は生存区間情報の終了アドレスに、資源のフィールド５０４は生存区間情報の割付資源にそれぞれセットする。そして条件フラグのフィールド５０５は「１」とし、条件フラグによらずに有効な生存区間であることを示す。
【００３１】
ステップ４０３は、最適化の対象となった変数の生存区間情報を最適化・資源割付手段１０３から得て、そのそれぞれについて配置情報エントリの内容を修正するためのループを構成している。
【００３２】
ステップ４０４は、最適化の対象となった変数の生存区間情報を最適化・資源割付手段１０３から得て、保持している配置情報の修正を行う。ｉｆ変換最適化などで生存区間内の命令に条件フラグが付加された場合には、条件フラグのフィールド５０５に該条件フラグをセットする。
【００３３】
ステップ４０５は、スケジューリングによってアドレス区間が変化した変数の生存区間についての情報をスケジューリング手段１０４から得て、そのそれぞれについて配置情報エントリの内容を修正するためのループを構成している。
【００３４】
ステップ４０６は、スケジューリングによってアドレス区間が変化した変数の生存区間についての情報をスケジューリング手段１０４から得て、配置情報の開始アドレスフィールド５０２、終了アドレスフィールド５０３の修正を行う。
【００３５】
また、第２のケースとして、条件付き命令が持つことができる条件が、二つの条件フラグと二項演算子（&&または||）からなる条件式である場合を考える。この場合、配置情報は図１２に示したような構造をしており、変数名１２０１と開始アドレス１２０２と終了アドレス１２０３と資源１２０４と第一の条件フラグ１２０５と演算子１２０６と第二の条件フラグ１２０７とを示すフィールドから成る情報の組の列である。処理手順としては、ステップ４０３のループ内の処理がステップ４０７とステップ４０８になるが、その他の処理は第１のケースと同様である。
【００３６】
ステップ４０７は、ｉｆ変換最適化などで生存区間内の命令に条件式が付加された変数の生存区間情報を最適化・資源割付手段１０３から得て、配置情報の第一の条件フラグのフィールド１２０５と第二の条件フラグのフィールド１２０７に条件式に含まれる二つの条件フラグをそれぞれセットする。
【００３７】
ステップ４０８は、最適化により条件式が付加された変数の生存区間に対応する変数の配置情報について、演算子のフィールド１２０６に該条件式に含まれている演算子をセットする。
【００３８】
図１８は、本発明の実施の形態におけるデバッグ装置の構成図である。このデバッグ装置１８は、デバッガ起動手段１８０２、ファイル読み込み手段１８０３、デバッグ情報管理手段１８０４、実行制御手段１８０５、ユーザコマンド実行手段１８０６を備えている。
【００３９】
まず、起動コマンドが入力されるとデバッガ起動手段１８０２により、デバッグ装置を起動し、ユーザに指定されたターゲット環境により、エミュレータ、シミュレータなどを選択する。
【００４０】
ファイル読み込み手段１８０３は、リンカにより出力されたオブジェクトファイル１８０１をデバッグ装置に読み込む。オブジェクトファイル１８０１内に存在するプログラムやデータをメモリ上にロードし、デバッグ情報を後述のデバッグ情報管理手段１８０４に渡す。
【００４１】
デバッグ情報管理手段１８０４は、ファイル読み込み手段１８０３から、読み込んだオブジェクトファイルに含まれているデバッグ情報を受取り、当該デバッグ情報を解析して、後述のユーザコマンド実行手段１８０６からの種々の情報要求に答える。当該デバッグ情報管理手段１８０４が保持するデバッグ情報には、配置情報の他に、各アセンブラ命令に対してソースプログラムの行番号を対応づける行番号情報や、ソースプログラムに現れる関数や変数の名前や型名などについての情報などがある。以降では、本発明の主眼である配置情報についてのみ述べる。
【００４２】
実行制御手段１８０５は、エミュレータ、シミュレータなど各ターゲット上でのプログラムの実行状況（実行／停止）の管理、ブレークポイントの管理を行う。
ユーザコマンド実行手段１８０６は、実行制御手段１８０５においてプログラムの実行が停止しているときに、ユーザからのコマンドを受け付けて実行結果を返す処理を行う。当該ユーザコマンド実行手段１８０６が提供しているユーザコマンド群には、ブレークポイント設定、ソース表示、ディスアセンブル表示、シンボル名表示、変数の内容表示などがある。以降では、本発明の主眼である変数の内容表示についてのみ述べる。
【００４３】
図１９は、ユーザコマンド実行手段１８０６による変数の内容表示コマンドを実行する手順を示すフローチャートである。以下、ステップ毎に処理内容を説明する。この時、内容表示を行う変数の名前をｘとする。
【００４４】
ステップ１９０１では、現在のアドレスに相当するソースプログラムのソースファイルと関数と行を求める。これにより、配置情報におけるスコープを決定する。
【００４５】
ステップ１９０２では、現在のスコープ中に、内容を参照したい変数ｘがあるかどうかを判定する。判定には、デバッグ情報管理手段１８０４で保持している配置情報を用い、現在のスコープ中の配置情報の中に変数ｘの配置情報エントリが存在するかどうかを検索する。その結果、変数ｘの情報が存在すれば変数ｘは参照可能と判定してステップ１９０４へ進み、変数ｘの情報が存在しなければ変数ｘは参照不可能と判定してステップ１９０３へ進む。
【００４６】
ステップ１９０３では、変数ｘが現在のアドレスでは参照不可能である旨のメッセージを表示し、変数の内容表示コマンドの処理を終了する。
【００４７】
ステップ１９０４では、現在のアドレスにおける変数ｘに対応する配置情報エントリを検索する。検索方法は、ステップ１９０２で検索した変数ｘに関する配置情報エントリの中で、現在のアドレスが該配置情報の開始アドレスと終了アドレスの間にあるエントリを検索する。
【００４８】
ステップ１９０５では、ステップ１９０４での配置情報検索の結果見つかった配置情報エントリそれぞれについて、条件フラグのフィールドを評価して有効なエントリを検索するためのループを構成する。該配置情報エントリの条件フラグのフィールドが一つの条件フラグの場合（第１のケース）にはステップ１９０６で評価し、条件フラグのフィールドが二つの条件フラグで構成されている場合（第２のケース）はステップ１９０７、１９０８で評価する（これについては後述する）。
【００４９】
ステップ１９０６では、該配置情報エントリの条件フラグのフィールドにある条件フラグを調べて、該条件フラグの値が真の時には、該エントリは候補として残し、偽の時には、該エントリは候補ではないとして棄却する。
【００５０】
ステップ１９０９では、ステップ１９０５のループにおいて、該当する配置情報エントリが存在する場合にはステップ１９１１へ進み、存在しない場合はステップ１９１０へ進む。
【００５１】
ステップ１９１０では、現在位置では変数ｘには資源が割付けられていないという旨のメッセージを表示し、変数の内容表示コマンドの処理を終了する。
ステップ１９１１では、ステップ１９０５のループで検索した配置情報の資源が現在格納している値を調べる。
【００５２】
ステップ１９１２では、ステップ１９１１で調べた値を、変数ｘの値として表示する。
【００５３】
また、第２のケースとして、条件付き命令が持つことができる条件が、二つの条件フラグと二項演算子（&&または||）からなる条件式である場合を考える（図１２の配置情報参照）。この場合の処理手順としては、ステップ１９０５のループ内の処理がステップ１９０７とステップ１９０８になるが、その他の処理は第１のケースと同様である。
【００５４】
ステップ１９０７では、該配置情報エントリの第一の条件フラグのフィールド１２０５と第二の条件フラグのフィールド１２０７にある条件フラグの値を調べる。
【００５５】
ステップ１９０８では、ステップ１９０７で調べた２つの条件フラグの値を元に、演算子のフィールド１２０６で指定された演算子で演算を行い、その結果が真の時には、該エントリは候補として残し、偽の時には、該エントリは候補ではないとして棄却する。
【００５６】
［具体的動作］
以下では、特徴的な構成要素の動作について、具体的なソースプログラム、アセンブラコードを例にあげて記述する。
【００５７】
まず、第１のケースについて、図２のソースプログラムを例にあげて説明する。このソースプログラムをコンパイラ１に入力として与えると、まず構文解析手段１０２が起動する。構文解析手段１０２は、図３の中間コードを生成し、中間コード管理手段１０６に格納する。また、デバッグ情報生成手段１０７は、図６に示す配置情報などのデバッグ情報を生成し、格納する（ステップ４０１、ステップ４０２）。
【００５８】
次に、最適化・資源割付手段１０３が起動する。ここでは中間コード管理手段１０６に格納されている図３に示した中間コードに対して最適化を適用するとｉｆ変換最適化が適用され、その後、中間コードのレジスタに対して資源割付が行われて、その結果、図７に示した中間コードが得られ、再び中間コード管理手段１０６に格納される。図７に現れる中間コードで、命令７０２（cmpgq R0,R1,C0,C1）は、レジスタR0とR1の内容を比較し、レジスタR0の内容がレジスタR1の内容以上であれば、条件フラグC0を真に、条件フラグC1を偽にセットし、レジスタR0の内容がレジスタR1の内容未満であれば、条件フラグC0を偽に、条件フラグC1
を真にセットする命令である。また、命令７０４（mov [C0] 10,R0）は、条件フラグC0 の値が真の時のみレジスタR0に値10を入れる命令である。最適化の結果、分岐命令３０３、３０８が取り除かれて、命令３０４、３０５などには条件フラグが付加される。また、中間コードの最適化と資源割付に伴って、デバッグ情報生成手段１０７は、格納しているデバッグ情報の変更を行う（ステップ４０３）。資源の項は、中間コードの仮想レジスタを資源割付の結果割付けられた実資源に変更し、条件フラグが付加された命令で構成されるアドレス範囲にあるエントリは、該条件フラグを条件フラグの項に設定する（ステップ４０４）。この場合、図６の配置情報エントリのうち、エントリ６０３、６０４、６０５が持つ変数の生存区間を表すアドレス範囲の命令に条件フラグが付加されたため、それぞれ条件フラグのフィールドに該当する条件フラグをセットする。その結果、図７の中間コードに対応する配置情報は図８のようになる。
【００５９】
次に、スケジューリング手段１０４が起動する。ここでは、中間コード管理手段１０６に格納されている図７の中間コードに対してスケジューリングを行い、その結果図９に示した中間コードが得られ、再び中間コード管理手段１０６に格納される。また、スケジューリングに伴って、デバッグ情報生成手段１０７は、格納しているデバッグ情報の変更を行う（ステップ４０５、ステップ４０６）。図９の中間コードに対応する配置情報は図１０のようになる。
【００６０】
次に、アセンブラコード生成手段１０５が起動する。ここでは、図９に示した中間コード管理手段１０６に格納されている中間コードと、図１０に示したデバッグ情報生成手段１０７に格納されている配置情報をはじめとするデバッグ情報とをアセンブルプログラム（目的プログラム１０８）として出力する。この例では、中間コードプログラムはアセンブラプログラムと１対１対応しており、そのまま出力される。配置情報をはじめとするデバッグ情報については、図１１のような形でアセンブルプログラムの中に含める。
【００６１】
以上の処理によって、図２のソースプログラムからアセンブラプログラムが生成される。このアセンブラプログラムをアセンブラ、リンカで処理して、デバッグ装置でロード可能なオブジェクトファイルを生成する。以降では、該オブジェクトファイルをデバッグ装置に与えて、プログラムを実行させる過程および本発明での特徴的な動作について述べる。
【００６２】
デバッグ装置１８は、デバッガ起動手段１８０２によって初期設定が完了すると、ユーザからのコマンド待ちの状態となる。ここでユーザがオブジェクトファイル読み込みの指示を与えると、ファイル読み込み手段１８０３が起動する。ここでは、オブジェクトファイル１８０１から、プログラム、データ、デバッグ情報を取り出して、プログラム、データはメモリにロードし、デバッグ情報は、デバッグ情報管理手段１８０４に格納する。図２０に示したのが、オブジェクトファイル１８０１をデバッグ装置１８で読み込んだときにメモリ上に置かれるプログラムの逆アセンブルイメージである。デバッグ情報管理手段１８０４では、ファイル読み込み手段１８０３から渡されたバイナリ形式データを元のデバッグ情報に復元する。図２１に示したのが、オブジェクトファイル１８０１をデバッグ装置１８で読み込んだ時にデバッグ情報管理手段１８０４で保持される配置情報である。
【００６３】
ユーザによってプログラムの実行が開始され、ブレークポイントやユーザによる停止要求でプログラムの実行が停止すると、デバッグ装置はユーザからのコマンド入力待ちの状態に入る。ここでは、図２０に示すアセンブラプログラムでのアドレス0x4000002B でプログラムの実行が停止しているとし、条件フラグＣ０の値が偽、条件フラグＣ１の値が真であると考える。
【００６４】
ユーザコマンド実行手段１８０６に対して、ユーザから変数参照のコマンドが入力されて、参照する変数が"ａ"の場合を例に挙げ、図１９に示したフローチャートに基づいて動作を説明する。
【００６５】
まず、現在のアドレスに相当するソースプログラムのソースファイルと関数と行を求めて、配置情報におけるスコープを決定する（ステップ１９０１）。
【００６６】
次に、デバッグ情報管理手段１８０４で保持している配置情報の中に変数"ａ"の情報が存在するかどうかを判定する（ステップ１９０２）。図２１に示した配置情報の中に３つの変数"ａ"に関するエントリが存在するので、yesと判定し、ステップ１９０４に進む。
【００６７】
次に、デバッグ情報管理手段１８０４で保持している変数"ａ"の配置情報のエントリ中から、現在のアドレスが開始アドレスと終了アドレスの範囲に含まれるようなエントリを探す（ステップ１９０４）。アドレス0x4000002Bをアドレス範囲に含むエントリには、エントリ２１０４とエントリ２１０５がある。さらに、これらのエントリの条件フラグの項にある条件フラグの値が真となるエントリがあるかを探す（ステップ１９０５）。条件フラグＣ１が真なので、エントリ２１０５が該当するエントリである（ステップ１９０６）。
【００６８】
そして、エントリ２１０５の資源の項が示す資源、レジスタＲ０の値を調べる（ステップ１９１１）。そしてその値を変数"ａ"の値として表示する（ステップ１９１２）。
【００６９】
次に第２のケースの場合について、具体的なソースプログラム、アセンブラコードを例にあげて記述する。
【００７０】
図１３のソースプログラムから構文解析手段１０２によって生成される中間コードプログラムは図１４のようになり、配置情報は図１５のようになる。ここで、最適化・資源割り付け手段１０３によりｉｆ変換が適用されると、いくつかの命令には条件フラグと演算子からなる条件式が付加される。その結果、中間コードは図１６のようになり、いくつかの命令には、２つの条件フラグを含む条件式が付加される。条件式が付加された命令をアドレス範囲に含む変数の配置情報エントリそれぞれについて（ステップ４０３）、付加された条件式に含まれる条件フラグ二つをそれぞれ第一の条件フラグのフィールドと第二の条件フラグのフィールドに格納する（ステップ４０７）。そして、演算子のフィールドに該条件式に含まれる演算子を格納する（ステップ４０８）。その結果得られる配置情報は図１７のようになる。
【００７１】
このようにコンパイルして得られたオブジェクトファイルをデバッグ装置に入力して実行させる過程で、変数の内容を参照する時のデバッグ装置の動作について述べる。
【００７２】
デバッグ装置１８で図２２に示したプログラムを読みこみ、アドレス0x4000002Bでプログラムの実行が停止しているとし、条件フラグＣ０、Ｃ１、Ｃ２、Ｃ３の値がそれぞれ偽、真、偽、真であると考える。ユーザコマンド実行手段１８０６に対して、ユーザから変数参照のコマンドが入力されて、参照する変数が"ａ"の場合を例に挙げる。ステップ１９０４までの動作は、第１のケースの場合と同様に動作し、その結果、図２３に示した配置情報のエントリ２３０４とエントリ２３０５が調べるべきエントリとして残る。
【００７３】
これらのエントリそれぞれに対して（ステップ１９０５）、第一の条件フラグと第二の条件フラグのフィールドの値を調べる（ステップ１９０７）と、エントリ２３０４はそれぞれ偽と偽、エントリ２３０５はそれぞれ真と真となる。そして二つの条件フラグの値と、演算子のフィールドに格納されている演算子（&&：論理積演算子）とからなる条件式の値を評価する（ステップ１９０８）と、エントリ２３０４は偽、エントリ２３０５は真となる。すなわち、エントリ２３０５が求めるエントリとなる（ステップ１９０９）。そして、エントリ２３０５の資源の項が示す資源、レジスタＲ０の値を調べる（ステップ１９１１）。そしてその値を変数"ａ"の値として表示する（ステップ１９１２）。
【００７４】
以上のように本実施の形態のデバッグ方法およびデバッグ装置を用いることで、変数内容の参照を正しく行うことができる。
【００７５】
【発明の効果】
以上の説明から明らかなように、本発明のコンパイラにより生成した配置情報を、本発明の条件付き命令を有するアーキテクチャ用のデバッグ装置に入力することで、変数内容の参照を正しく行うことができる。
【図面の簡単な説明】
【図１】本発明の実施の形態のコンパイラの構成を示す図である。
【図２】Ｃ言語によるソースプログラムの例を示す図である。
【図３】図２に示したプログラムをソースプログラムとして構文解析手段１０２が生成する中間コードを示す図である。
【図４】デバッグ情報生成手段１０７の配置情報を生成する処理手順を示すフローチャートである。
【図５】本発明の実施の形態の第１のケースにおける配置情報の構造を示す図である。
【図６】図２に示したプログラムをソースプログラムとする図３に示した中間コードに対する配置情報を示す図である。
【図７】図３に示した中間コードに対して、最適化・資源割付を行った結果得られる中間コードを示す図である。
【図８】図７に示した中間コードに対する配置情報を示す図である。
【図９】図７に示した中間コードに対して、スケジューリングを行った結果得られる中間コードを示す図である。
【図１０】図９に示した中間コードに対する配置情報を示す図である。
【図１１】図１０に示した配置情報がアセンブラコード生成手段１０５によってアセンブルプログラムの形式に変換されたものを示す図である。
【図１２】本発明の実施の形態の第２のケースにおける配置情報の構造を示す図である。
【図１３】Ｃ言語によるソースプログラムの第２の例を示す図である。
【図１４】図１３に示したプログラムをソースプログラムとして構文解析手段１０２が生成する中間コードを示す図である。
【図１５】図１３に示したプログラムをソースプログラムとし、図１４に示した中間コードに対する配置情報を示す図である。
【図１６】図１４に示した中間コードに対して、最適化・資源割付を行った結果得られる中間コードを示す図である。
【図１７】図１６に示した中間コードに対する配置情報を示す図である。
【図１８】本発明の実施の形態のデバッグ装置の構成を示す図である。
【図１９】ユーザコマンド実行手段１８０６の変数の内容参照の処理手順を示すフローチャートである。
【図２０】図２に示したプログラムの並列化コンパイラによるコンパイル結果であるアセンブルコードの例を示す図である。
【図２１】図２０に示したアセンブラコードに対する配置情報を示す図である。
【図２２】図１３に示したプログラムのコンパイラによるアセンブルコードの例を示す図である。
【図２３】図１３に示したプログラムをソースプログラムとする図２２に示したアセンブラコードに対する配置情報を示す図である。
【図２４】図２に示したプログラムの従来コンパイラによるアセンブルコードの例を示す図である。
【図２５】図２に示したプログラムをソースプログラムとする図２４に示したアセンブラコードに対する配置情報を示す図である。
【図２６】図２に示したプログラムの並列化コンパイラによるコンパイル結果であるアセンブルコードの例を示す図である。
【図２７】図２に示したプログラムをソースプログラムとする図２６に示したアセンブラコードに対する配置情報を示す図である。
【符号の説明】
１        コンパイラ
１０１    ソースプログラム
１０２    構文解析手段
１０３    最適化・資源割付手段
１０４    スケジューリング手段
１０５    アセンブラコード生成手段
１０６    中間コード管理手段
１０７    デバッグ情報生成手段
１０８    目的プログラム
３０１〜３１０    中間命令
５０１    変数名のフィールド
５０２    開始アドレスのフィールド
５０３    終了アドレスのフィールド
５０４    資源のフィールド
５０５    条件フラグのフィールド
６０１〜６０５          配置情報のエントリ
７０１〜７１０          中間命令
８０１〜８０５          配置情報のエントリ
９０１〜９０８          中間命令
１００１〜１００５    配置情報のエントリ
１２０１    変数名のフィールド
１２０２    開始アドレスのフィールド
１２０３    終了アドレスのフィールド
１２０４    資源のフィールド
１２０５    第一の条件フラグのフィールド
１２０６    演算子のフィールド
１２０７    第二の条件フラグのフィールド
１４０１〜１４１０    中間命令
１６０１〜１６１２    中間命令
１８        デバッグ装置
１８０１    オブジェクトファイル
１８０２    デバッガ起動手段
１８０３    ファイル読み込み手段
１８０４    デバッグ情報管理手段
１８０５    実行制御手段
１８０６    ユーザコマンド実行手段
２００１〜２００８    アセンブラ命令
２１０１〜２１０５    配置情報のエントリ
２２０１〜２２０９    アセンブラ命令
２３０１〜２３０５    配置情報のエントリ
２４０１〜２４１１    アセンブラ命令
２５０１〜２５０５    配置情報のエントリ
２６０１〜２６０９    アセンブラ命令
２７０１〜２７０５    配置情報のエントリ
【図１】
0003612294.tif 000002
【図２】
0003612294.tif 000003
【図３】
0003612294.tif 000004
【図４】
0003612294.tif 000005
【図５】
0003612294.tif 000006
【図６】
0003612294.tif 000007
【図７】
0003612294.tif 000008
【図８】
0003612294.tif 000009
【図９】
0003612294.tif 000010
【図１０】
0003612294.tif 000011
【図１１】
0003612294.tif 000012
【図１２】
0003612294.tif 000013
【図１３】
0003612294.tif 000014
【図１４】
0003612294.tif 000015
【図１５】
0003612294.tif 000016
【図１６】
0003612294.tif 000017
【図１７】
0003612294.tif 000018
【図１８】
0003612294.tif 000019
【図１９】
0003612294.tif 000020
【図２０】
0003612294.tif 000021
【図２１】
0003612294.tif 000022
【図２２】
0003612294.tif 000023
【図２３】
0003612294.tif 000024
【図２４】
0003612294.tif 000025
【図２５】
0003612294.tif 000026
【図２６】
0003612294.tif 000027
【図２７】
0003612294.tif 000028