(57)【要約】【課題】本発明は、コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラムに関し、デバッグのためにコンパイル時の最適化に影響を与えることなく、実行速度を低下させることなく、プログラムのデバッグやその振舞いの調査を効率的かつ迅速に実現することを目的とする。【解決手段】ソースプログラムを解析して生成した引数の変数名、添字情報、および変数の型情報を少なくともテキストとしたデバッガ用引数情報をオブジェクトプログラムに格納するステップを有する。また、実行時に所定のサブルーチンの個所で中断されたときに、テキストのデバッガ用引数情報を参照して、実行時に生成されたパラメタリストを介して引数の変数の値、添字の値、および配列の大きさのうちの少なくとも１つ以上の値を参照するステップと、参照した値を提示するステップとを有する。【選択図】  図１
2004227103.tif 000002
【特許請求の範囲】
【請求項１】
ソースプログラムを解析してオブジェクトプログラムを生成するコンパイル方法において、
前記ソースプログラム中のサブルーチンを解析して、引数の変数名を表す文字列と、配列引数の添字情報を表す文字列と、引数の型情報とを含むデバッガ用引数情報をオブジェクトプログラム中に埋め込むステップ
を有することを特徴とするコンパイル方法。
【請求項２】
ソースプログラムをコンパイルしたオブジェクトプログラムを実行してデバッグするデバッグ方法において、
サブルーチンの引数の変数名を表す文字列と、配列引数の添字情報を表す文字列と、引数の型情報とを含むデバッガ用引数情報が埋め込まれたオブジェクトプログラムを実行するステップと、
前記実行時にサブルーチンの所定の箇所で実行が中断された際に、前記デバッガ用引数情報を参照して、サブルーチンが呼び出された際に動的に生成され各引数の格納領域へのポインタと配列引数の大きさに関する情報へのポインタからなるパラメタリストを介して引数の変数の値、配列引数の添字の値、および配列引数の大きさのうち少なくとも１つの値を求めるステップと、
前記求めた値をもとに引数情報を提示するステップと
を有するデバッグ方法。
【請求項３】
前記実行の中断時に、前記デバッガ用引数情報を参照して引数の一覧を表示するステップと、
前記一覧から選択された引数について、前記デバッガ用引数情報を参照して、サブルーチンが呼び出された際に動的に生成され各引数の格納領域へのポインタと配列引数の大きさに関する情報へのポインタからなるパラメタリストを介して引数の変数の値、配列引数の添字の値、および配列引数の大きさのうち該当するものの値を求めるステップと、
前記求めた値をもとに引数情報を提示するステップと
を有する請求項２記載のデバッグ方法。
【請求項４】
ソースプログラムを解析してオブジェクトプログラムを生成するコンパイラプログラムにおいて、
コンピュータに、
前記ソースプログラム中のサブルーチンを解析して、引数の変数名を表す文字列と、配列引数の添字情報を表す文字列と、引数の型情報とを含むデバッガ用引数情報をオブジェクトプログラム中に埋め込ませる機能
を有することを特徴とするコンパイル方法。
【請求項５】
ソースプログラムをコンパイルしたオブジェクトプログラムを実行してデバッグするデバッグプログラムにおいて、
コンピュータに、
サブルーチンの引数の変数名を表す文字列と、配列引数の添字情報を表す文字列と、引数の型情報とを含むデバッガ用引数情報が埋め込まれたオブジェクトプログラムを実行させる機能と、
前記実行時にサブルーチンの所定の箇所で実行が中断された際に、前記デバッガ用引数情報を参照して、サブルーチンが呼び出された際に動的に生成され各引数の格納領域へのポインタと配列引数の大きさに関する情報へのポインタからなるパラメタリストを介して引数の変数の値、配列引数の添字の値、および配列引数の大きさのうち少なくとも１つの値を求めさせる機能と、
前記求めた値をもとに引数情報を提示させる機能と
を動作させるデバッグプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ソースプログラムを解析してオブジェクトプログラムを生成するコンパイル方法、およびソースプログラムをコンパイルしたオブジェクトプログラムを実行してデバッグするデバッグ方法、デバッグプログラムに関するものである。
【０００２】
【従来の技術】
従来、デバッガはアプリケーションプログラムの実行中に、ユーザの指示により途中で実行を一時的に中断させ、中断時に実行していた個所の情報（手続名、その呼出先の手続名など）や、変数の値を参照したり、変更したりできる。
【０００３】
また、ライトウェイトデバッガは、変数の参照のために、コンパイラがオブジェクト中に出力した情報を参照することができる。
【０００４】
【発明が解決しようとする課題】
しかし、上述した前者のデバッガは、ソースプログラムのコンパイル時にデバッガ用のオプションを指定する必要があるため、実際に運用されているアプリケーションプログラムをデバッグするときは、デバッガ用のオプションを指定してソースプログラムを再コンパイルしなければならないという面倒な作業が必要になってしまうと共に、デバッガ用のオプションにより、最適化機能が一部抑止あるいは非常に制限されてしまうなどの問題があった。また、当該デバッガは、ソースプログラムの１行ごとに実行を判断して、変数を参照したり値を変更したりなどの詳細なデバッグ操作ができるが、最適化機能と両立できないために、再コンパイルして実行を開始すると、デバッグしたいところに実行が進むまでに長時間が必要になって待たされてしまうなどの問題もあった。
【０００５】
また、後者のライトウェイトデバッガは変数の参照のために、コンパイラがオブジェクト中に出力した情報を参照できるが、最適化によって影響を受ける情報を得ることができないために、前者のデバッガに比較すると利用できなくなる機能が生じてしまうなどの問題があった。
【０００６】
本発明は、これらの問題を解決するため、コンパイル時にソースプログラムを解析して生成した変数、添字などの情報をテキストのデバッガ用引数情報として格納しておき、デバッグ時に中断したときに当該デバッガ用引数情報をもとにパラメタリストを経由して実行時の変数の値、添字の値、配列の大きさなどを参照して表示し、デバッグのためにコンパイル時の最適化に影響を与えることなく、実行速度を低下させることなく、プログラムのデバッグやその振舞いの調査を効率的かつ迅速に実現することを目的としている。
【０００７】
【課題を解決するための手段】
図１および図４を参照して課題を解決するための手段を説明する。
【０００８】
図１および図４において、ソースプログラム１は、コンパイルしてデバッグする対象のソースプログラムである。
【０００９】
コンパイラ２は、ソースプログラム１を解析してオブジェクトプログラム７を生成すると共に本発明に係るデバッガ用引数情報を当該オブジェクトプログラム７にテキストとして格納するものであって、構文解析部３、デバッガ用情報出力部５およびコード生成部６などから構成されるものである。
【００１０】
構文解析部３は、ソースプログラム１を形態素解析、構文解析などして、変数情報、配列情報などを生成するものである。
【００１１】
デバッガ用情報出力部５は、本発明に係るものであって、構文解析部３が解析したソースプログラム１のサブルーチンなどの引数に関する情報をテキストとしたデバッガ用引数情報１１をオブジェクトプログラム７に格納するものである。
【００１２】
コード生成部６は、実行可能形式のオブジェクトプログラム７を生成するものである。
【００１３】
オブジェクトプログラム７は、ソースプログラム１をコンパイルしたコードおよびテキストのデバッガ用引数情報１１を格納したものである。
【００１４】
デバッガ１０は、オブジェクトプログラム７を実行してデバッグするものである。
【００１５】
デバッガ用引数情報１１は、コンパイル時に収集された引数情報である。
パラメタリスト１３は、オブジェクトプログラム７の実行時にシステムにより生成して保持されたものであって、例えばＵＮＩＸインタフェースを介して参照されるものである。
【００１６】
次に、動作を説明する。
コンパイラ２を構成する構文解析部３がソースプログラム１を形態素解析、構文解析し、コード生成部６が実行可能形式のオブジェクトプログラム７を生成すると共にデバッガ用情報出力部５が解析されたサブルーチンなどの引数の変数名、配列情報などを収集してテキストのデバッガ用引数情報１１としてオブジェクトプログラム７に格納する。そして、デバッガ１０がオブジェクトプログラム７を実行開始し、所定のサブルーチンなどの個所で中断させたときに、テキストのデバッガ用引数情報１１を参照して、実行時に生成されたパラメタリスト１２を介して引数の変数の値、添字の値、および配列の大きさのうちの少なくとも１つ以上の値を参照し、参照した値をもとに引数情報を提示するようにしている。
【００１７】
この際、デバッガ１０が実行時に所定のサブルーチンなどの個所で中断させたときにテキストのデバッガ用引数情報１１を参照してサブルーチンなどで現れる引数の一覧を表示し、一覧から選択された引数について、デバッガ用引数情報１１を参照して、実行時に生成されたパラメタリスト１２を介して引数の変数の値、添字の値、および配列の大きさのうちの該当するものの値を参照し、参照した値をもとに引数情報を提示するようにしている。
【００１８】
また、デバッガ１０が一覧から選択された引数が形状引継ぎ配列であった場合に、デバッガ用引数情報１１を参照して、実行時に生成されたパラメタリスト１２を介して引数の当該形状引継ぎ配列の大きさの値を参照し、参照した値をもとに引数情報を提示するようにしている。
【００１９】
また、デバッガ１０が一覧から選択された引数が割り付け配列あるいはポインタ配列であった場合に、デバッガ用引数情報１１を参照して、実行時に生成されたパラメタリスト１２を介して引数の割り付け配列あるいはポインタ配列の次元の添字の下限値および上限値を参照し、参照した値をもとに引数情報を提示するようにしている。
【００２０】
従って、コンパイル時にソースプログラム１を解析して生成した変数、添字などの情報をテキストのデバッガ用引数情報１１として格納しておき、デバッグ時に中断したときにデバッガ用引数情報１１をもとにパラメタリスト１２を経由して実行時の変数の値、添字の値、配列の大きさなどを参照して表示することにより、デバッグのためにコンパイル時の最適化に影響を与えることなく、実行速度を低下させることなく、プログラムのデバッグやその振舞いの調査を効率的かつ迅速に実現することが可能となる。
【００２１】
【発明の実施の形態】
次に、図１から図６を用いて本発明の実施の形態および動作を順次詳細に説明する。
【００２２】
図１は、本発明のシステム構成図（コンパイル）を示す。
図１において、ソースプログラム１は、コンパイルしてデバッグする対象のソースプログラムであって、例えば後述する図２に示すようなソースプログラムである。
【００２３】
コンパイラ２は、ソースプログラム１を解析して実行可能形式のオブジェクトプログラム７を生成すると共に本発明に係るデバッガ用引数情報を当該オブジェクトプログラム７にテキストとして格納するものであって、構文解析部３、最適化部４、デバッガ用情報出力部５、およびコード生成部６などから構成されるものである。
【００２４】
構文解析部３は、ソースプログラム１を形態素解析、構文解析などして変数情報、配列情報などを生成するものである。
【００２５】
最適化部４は、構文解析部３が解析した結果をもとに最適化を行うものである。
【００２６】
デバッガ用情報出力部５は、構文解析部３などで解析されたルーチンなどの引数の変数情報、配列情報などを収集し、デバッガ用引数情報１１として生成するものである。
【００２７】
コード生成部６は、ソースプログラム１の最適化した後の情報をもとに実行可能形式のオブジェクトプログラム７を生成すると共に、デバッガ用引数情報１１をテキストとしてオブジェクトプログラム７に格納するものである。
【００２８】
図２は、本発明のソースプログラム例（要部）を示す。
図２の（ａ）は呼び出し元のソースプログラムの例を示し、図２の（ｂ）は呼び出し先のソースプログラムの例を示す。これは、図２の（ａ）の呼び出し元のソースプログラム中の▲１▼のＣＡＬＬ文で、図２の（ｂ）の呼び出し先のソースプログラムを呼び出し、当該呼び出された図２の（ｂ）の呼び出し先のソースプログラムの例えば先頭で実行を中断し、図４のデバッガ１０が図３のフローチャートの順番に従い、当該図２の（ｂ）の呼び出し先のソースプログラム（サブルーチン）中の引数の情報を、図６の（ｂ）から（ｅ）に示すように提示（表示）する例として使用するソースプログラム例を示す。
【００２９】
図２の（ｂ）の呼び出し先のソースプログラム（サブルーチン）は、右側に記載したように、
・第２行目の引数１”Ａ（Ｎ＋１）”は整合配列
・第３行目の引数２”Ｎ”はスカラ引数
・第４行目の引数３”Ｂ（１：，Ｎ＋１：）”は形状引継ぎ配列
・第５行目の引数４”Ｃ（：，：）”は割り付け配列
をそれぞれ表す（これら配列の記述は公知であるが、その要部を下記に記す）。
【００３０】
例えば、引数１”Ａ（Ｎ＋１）”の整合配列は変数名”Ａ”、配列の添字情報である、次元数が”１”（１次元）（省略されている）、下限値が”１”（省略されている）、上限値が”Ｎ＋１”（Ｎは変数で、実行時にプログラムから与えられて決定される）である。この引数情報は、図１の構文解析部３によって解析されてデバッガ用情報出力部５によって後述する図４のデバッガ用引数情報１１の▲２▼の部分に格納される。
【００３１】
同様に、引数２”Ｎ”はスカラ引数であり、図４の▲３▼の部分に格納される。
同様に、引数３”Ｂ（１：，Ｎ＋１：）”は形状引継ぎ配列であり、図４の▲４▼の部分に格納される。
【００３２】
同様に、引数４”Ｃ（：，：）”は割り付け配列であり、図４の▲５▼の部分に格納される。
【００３３】
尚、？は未定、Ａ，Ｎ，Ｂは変数であって、それぞれ実行時にそれぞれの値が決まる。
【００３４】
以上のように図２の（ｂ）の呼び出し先のソースプログラム（サブルーチン）について構文解析などしてその引数情報を収集してオブジェクトプログラム７に格納すると後述する図４のデバッガ用引数情報１１となる。
【００３５】
次に、図４のデバッガ用引数情報１１がオブジェクトプログラム７に格納されている状態で、当該オブジェクトプログラム７の実行可能形式の部分を実行し、既述した図２の（ａ）のソースプログラム中の▲１▼のＣＡＬＬ文で、図２の（ｂ）の呼び出し先のソースプログラムが呼び出され、その先頭の部分で実行が中断された状態で、デバッガ１０が図３のフローチャートに従い、当該呼び出し先のソースプログラム（図２の（ｂ））中の引数の情報を提示するときの動作を順次詳細に説明する。
【００３６】
図３は、本発明の動作説明フローチャート（引数の表示）を示す。
図３において、Ｓ１は、ｎ＝引数総数、ｉ＝１と初期設定する。
【００３７】
Ｓ２は、ｉ≦ｎとなり、全ての引数にＳ３以降を繰り返したか判別する。ＹＥＳの場合には、終了する。ＮＯの場合には、Ｓ３に進む。
【００３８】
Ｓ３は、静的配列ｏｒ整合配列か判別する。ＹＥＳの場合、例えば図４の▲２▼の引数１の”Ａ（Ｎ＋１）”（整合配列）の場合には、Ｓ１１に進む。ＮＯの場合には、Ｓ４に進む。
【００３９】
Ｓ１１は、Ｓ３のＹＥＳの場合、例えば図４の▲２▼の引数１の”Ａ（Ｎ＋１）”（整合配列）の場合に、宣言添字に変数名を含むか判別する。この例では、変数Ａの添字”Ｎ＋１”に変数”Ｎ”を含むのでＹＥＳとなり、Ｓ１２でスカラ変数値の取得（ここでは、変数”Ｎ”のスカラ変数値を”２”として取得する（図４の変数名”Ｎ”である引数２からパラメタリストの引数２を経由してスカラ変数情報１４のスカラ変数Ｎ：２から当該変数Ｎの値”２”を取得））する。一方、Ｓ１１のＮＯの場合には、Ｓ１４に進む。
【００４０】
Ｓ１３は、宣言添字の計算を行う。これは、例えばＳ１２で取得したスカラ変数値Ｎ＝２をもとに、配列Ａの上限値＝Ｎ＋１＝２＋１＝３として計算する。これらにより、整合配列Ａの次元数＝１、下限値＝１、上限値＝３として決定（算出）されたこととなる。
【００４１】
Ｓ１４は、配列の先頭アドレスを取得する。この例では、引数１が配列Ａのアドレスを指している。
【００４２】
Ｓ１５は、配列データを表示する。これは、Ｓ１２、Ｓ１３で算出した値をもとに、例えば後述する図６の（ｃ）に示すように、
Ａ    ／整合配列Ａ
ｍｉｎ    １    ／下限値１
ｍａｘ    ３    ／上限値３
と表示する。図６の（ｆ）のように、配列Ａの要素の値を表示する。
【００４３】
以上のＳ３のＹＥＳ，Ｓ１１からＳ１５によって、図２の（ｂ）の整合配列”Ａ（Ｎ＋１）”について、図４の▲２▼の情報および▲３▼の情報をもとにパラメタリストを経由して該当する情報（ここでは、整合配列情報１３、スカラ変数情報１４）を参照し、図６の（ｃ）の上述したように引数情報を表示することが可能となる。
【００４４】
Ｓ４は、形状引継ぎ配列か判別する。ＹＥＳの場合、例えば図４の▲４▼の引数３の”Ｂ（１：，Ｎ＋１：）”（形状引継ぎ配列）の場合には、Ｓ２１に進む。ＮＯの場合には、Ｓ５に進む。
【００４５】
Ｓ２１は、Ｓ４のＹＥＳの場合、例えば図４の▲４▼の引数３の”Ｂ（１：，Ｎ＋１：）”（形状引継ぎ配列）の場合に、ｎ＋ｉ番目のパラメタリストから引数情報を取得する。例えば図４の▲４▼の引数３からｎ＋ｉ番目の引数情報３を経由して形状引継ぎ配列情報１５を参照し、ここでは、１次元の大きさ：５、２次元の大きさ：１０（実行時に決った値）を取得する。
【００４６】
Ｓ２２は、宣言添字に変数名を含むか判別する。図４の▲４▼の引数３の場合には、変数  ”Ｎ”を含むので、ＹＥＳとなり、Ｓ２３、Ｓ２４で既述したＳ１２、Ｓ１３と同様にして、Ｎ＝２の値を取得して宣言添字Ｎ＋１＝２＋１＝３として計算し、Ｓ２５に進む。Ｓ２２のＮＯの場合には、Ｓ２５に進む。
【００４７】
Ｓ２５は、配列形状の計算を行う。これは、Ｓ２３、Ｓ２４で計算したＮ＝２の値をもとに、形状引継ぎ配列Ｂの配列形状を計算、ここでは、
１次元  下限値＝１  上限値＝１＋５（１次元の大きさ）−１＝５
２次元  下限値＝Ｎ＋１＝２＋１＝３  上限値＝３＋１０（２次元の大きさ）−１＝１２
として計算する。
【００４８】
Ｓ１４は、配列の先頭アドレスを取得する。この例では、引数３が配列Ｂのアドレスを指している。
【００４９】
Ｓ１５は、配列データを表示する。これは、Ｓ２１、Ｓ２３で取得した値、およびＳ２３からＳ２５で算出した値をもとに、例えば後述する図６の（ｄ）に示すように、
Ｂ    ／形状引継ぎ配列Ｂ
ｍｉｎ    １    ／１次元の下限値１
ｍａｘ    ５    ／１次元の上限値５
ｍｉｎ    ３    ／２次元の下限値３
ｍａｘ    １２  ／２次元の上限値１２
と表示する。図６の（ｇ）に示すように、配列Ｂの要素の値を表示する。
【００５０】
以上のＳ４のＹＥＳ，Ｓ２１からＳ２５、Ｓ１４、Ｓ１５によって、図２の（ｂ）の形状引継ぎ”Ｂ（１：、Ｎ＋１：）”について、図４の▲４▼の情報および▲３▼の情報をもとにパラメタリストを経由して該当する情報（ここでは、形状引継ぎ配列情報１５、スカラ変数情報１４）を参照し、図６の（ｄ）の上述したように引数情報を表示することが可能となる。
【００５１】
Ｓ５は、ポインタ配列ｏｒ割り付け配列か判別する。ＹＥＳの場合、例えば図４の▲５▼の引数４の”Ｃ（：，：）”（割り付け配列）の場合には、Ｓ３１に進む。ＮＯの場合には、Ｓ６に進む。
【００５２】
Ｓ３１は、Ｓ５のＹＥＳの場合、例えば図４の▲５▼の引数４の”Ｃ（：，：）”（割り付け配列）の場合に、ｎ＋ｉ番目のパラメタリストから引数情報を取得する。例えば図４の▲５▼の引数４からｎ＋ｉ番目の引数情報４を経由して割り付け配列情報１６を参照し、ここでは、１次元の下限値：３、１次元の上限値：７、２次元の下限値：２、２次元の上限値；８（実行時に決った値）を取得する。
【００５３】
Ｓ１４は、配列の先頭アドレスを取得する。この例では、引数４が配列Ｃのアドレスを指している。
【００５４】
Ｓ１５は、配列データを表示する。これは、Ｓ３１で取得した値をもとに、例えば後述する図６の（ｅ）に示すように、
Ｃ    ／割り付け配列Ｃ
ｍｉｎ    ３    ／１次元の下限値３
ｍａｘ    ７    ／１次元の上限値７
ｍｉｎ    ２    ／２次元の下限値２
ｍａｘ    ８    ／２次元の上限値８
と表示する。図６の（ｈ）に示すように、配列Ｃの要素の値を表示する。
【００５５】
以上のＳ５のＹＥＳ，Ｓ３１、Ｓ１４、Ｓ１５によって、図２の（ｂ）の割り付け配列”Ｃ（：、：）”について、図４の▲５▼の情報をもとにパラメタリストを経由して該当する情報（ここでは、割り付け配列情報１６）を参照し、図６の（ｅ）の上述したように引数情報を表示することが可能となる。
【００５６】
Ｓ６は、スカラ変数か判別する。ＹＥＳの場合、例えば図４の▲３▼の引数２の”Ｎ”（スカラ引数）の場合には、Ｓ４１に進む。ＮＯの場合には、Ｓ７でエラー処理し、Ｓ８でｉ＝ｉ＋１し、Ｓ２に戻り繰り返す。
【００５７】
Ｓ４１は、Ｓ６のＹＥＳの場合、例えば図４の▲３▼の引数２の”Ｎ”（スカラ引数）の場合に、パラメタリストのｉ番目のエントリから引数アドレスを取り出し、その内容を取得する。例えば図４の▲３▼の引数２からｉ番目の引数２を経由してスカラ変数情報１４を参照し、ここでは、スカラ変数Ｎ：２（実行時に決った値）を取得する。
【００５８】
Ｓ４２は、スカラデータを表示する。これは、Ｓ４１で取得した値をもとに、例えば後述する図６の（ｂ）に示す、上段から２段目の変数”Ｎ”のエントリの右側の値／ボタンの欄に、値”２”を表示する。
【００５９】
以上のＳ６のＹＥＳ，Ｓ４１、Ｓ４２によって、図２の（ｂ）のスカラ引数”Ｎ”について、図４の▲３▼の情報をもとにパラメタリストを経由して該当する情報（ここでは、スカラ変数情報１４）を参照し、図６の（ｂ）の上述したように引数情報を表示することが可能となる。
【００６０】
図４は、本発明の説明図（デバッグ）を示す。
図４において、デバッガ１０は、既述した図３のフローチャートに従い、デバッガ用引数情報１１をもとにパラメタリスト１２を経由して該当する１３から１６の情報を参照し、後述する図６の（ｂ）から（ｅ）の引数情報を表示するものである。
【００６１】
デバッガ用引数情報（オブジェクト）１１は、図１のデバッガ用情報出力部５がオブジェクトプログラム７中にテキストとして出力したものであって、既述した図２の（ｂ）のサブルーチン中で現れる引数の情報（ソースプログラム上の情報）を設定したものである。
【００６２】
情報１３から１６は、実行可能形式のオブジェクトプログラム７を実行したときにシステムが生成して保持するものであって、例えばＵＮＩＸインタフェースによってパラメタリスト１２を介して当該情報１３から１６を参照することが可能な、実行時に保持されている情報である。
【００６３】
パラメタリスト１２は、デバッガ用引数情報１１から当該パラメタリスト１２を経由して該当する情報１３から１６を参照するためのものである。
【００６４】
整合配列情報１３は、整合配列の実行時の情報を保持したものである。
スカラ変数情報１４は、スカラ変数の実行時の情報を保持したものである。
【００６５】
形状引継ぎ配列情報１５は、形状引継ぎ配列の実行時の情報を保持したものである。
【００６６】
割り付け配列情報１６は、割り付け配列の実行時の情報を保持したものである。
【００６７】
図５は、本発明の動作説明フローチャートを示す。これは、図３のＳ１２、Ｓ２３のスカラ変数値の取得のフローチャートである。
【００６８】
図５において、Ｓ５１は、ｎ＝引数総数、ｉ＝１と初期設定する。
Ｓ５２は、ｉ≦ｎとなり、全ての引数にＳ５３以降を繰り返したか判別する。ＹＥＳの場合には、終了する。ＮＯの場合には、Ｓ５３に進む。
【００６９】
Ｓ５３は、スカラ変数か判別する。ＹＥＳの場合には、Ｓ５４に進む。ＮＯの場合には、Ｓ５６でｉ＝ｉ＋１し、Ｓ５２以降を繰り返す。
【００７０】
Ｓ５４は、変数名を照合する。これは、Ｓ５３のＹＥＳでスカラ変数と判明したので、当該スカラ変数の変数名について、既述した図４のデバッガ用引数情報１１を検索して一致するものがあるか照合する。一致した場合には、Ｓ５５に進む  ＮＯの場合には、Ｓ５６でｉ＝ｉ＋１し、Ｓ５２に戻り繰り返す。
【００７１】
Ｓ５５は、パラメタリストのｉ番目のエントリから引数アドレスを取り出し、その内容を取得する。これは、既述した図４のデバッガ用引数情報１１中で一致するとして見つけたスカラ変数について、パラメタリスト１２のｉ番目のエントリから引数アドレスを取り出しその内容を取得（例えば図４のスカラ変数情報１４中のスカラ変数Ｎ：２から、値”２”を取得）する。
【００７２】
以上によって、スカラ変数についてその実行時の値を取得することが可能となる。
【００７３】
図６は、本発明の表示例を示す。
図６の（ａ）は、ソースビューウィンドウ例を示す。これは、デバッガ１０で、既述した図２の（ａ），（ｂ）のプログラムを１ファイルとし、デバッグ操作をしている時のソースプログラムを表示した例を示す。ここで、矢印⇒で示す、サブルーチンＳＵＢの先頭で実行を中断していることを示す。
【００７４】
図６の（ｂ）は、データ（変数）表示の例としパラメタウィンドウを示す。ここでは、左側に図６の（ａ）で矢印で示す既述した図２の（ｂ）の呼び出し先のソースプログラムの先頭で実行を中断し、当該呼び出し先の図２の（ｂ）のソースプログラム中の引数の変数名を左欄に表示し、右側にその値（変数がスカラ変数のとき）／ボタン（詳細情報を表示するボタン）を表示している。
【００７５】
図６の（ｃ）は、配列Ａのデータビジュアライズダイアログ例を示す。これは、既述した図６の（ｂ）の変数名Ａの右側のボタンを押下して表示させた詳細情報であって、図示の下記のように表示する。
【００７６】
Ａ          ／整合配列Ａ
ｍｉｎ    １      ／下限値１
ｍａｘ    ３      ／上限値３
図６の（ｄ）は、配列Ｂのデータビジュアライズダイアログ例を示す。これは、既述した図６の（ｂ）の変数名Ｂの右側のボタンを押下して表示させた詳細情報であって、図示の下記のように表示する。
【００７７】
Ｂ          ／形状引継ぎ配列Ｂ
ｍｉｎ    １      ／１次元の下限値１
ｍａｘ    ５      ／１次元の上限値５
ｍｉｎ    ３      ／２次元の下限値３
ｍａｘ    １２    ／２次元の上限値１２
図６の（ｅ）は、配列Ｃのデータビジュアライズダイアログ例を示す。これは、既述した図６の（ｂ）の変数名Ｃの右側のボタンを押下して表示させた詳細情報であって、図示の下記のように表示する。
【００７８】
Ｃ          ／割り付け配列Ｃ
ｍｉｎ    ３      ／１次元の下限値３
ｍａｘ    ７      ／１次元の上限値７
ｍｉｎ    ２      ／２次元の下限値２
ｍａｘ    ８      ／２次元の上限値８
（付記１）
ソースプログラムを解析してオブジェクトプログラムを生成するコンパイル方法において、
前記ソースプログラム中のサブルーチンを解析して、引数の変数名を表す文字列と、配列引数の添字情報を表す文字列と、引数の型情報とを含むデバッガ用引数情報をオブジェクトプログラム中に埋め込むステップ
を有することを特徴とするコンパイル方法。
【００７９】
（付記２）
ソースプログラムをコンパイルしたオブジェクトプログラムを実行してデバッグするデバッグ方法において、
サブルーチンの引数の変数名を表す文字列と、配列引数の添字情報を表す文字列と、引数の型情報とを含むデバッガ用引数情報が埋め込まれたオブジェクトプログラムを実行するステップと、
前記実行時にサブルーチンの所定の箇所で実行が中断された際に、前記デバッガ用引数情報を参照して、サブルーチンが呼び出された際に動的に生成され各引数の格納領域へのポインタと配列引数の大きさに関する情報へのポインタからなるパラメタリストを介して引数の変数の値、配列引数の添字の値、および配列引数の大きさのうち少なくとも１つの値を求めるステップと、
前記求めた値をもとに引数情報を提示するステップと
を有するデバッグ方法。
【００８０】
（付記３）
前記実行の中断時に、前記デバッガ用引数情報を参照して引数の一覧を表示するステップと、
前記一覧から選択された引数について、前記デバッガ用引数情報を参照して、サブルーチンが呼び出された際に動的に生成され各引数の格納領域へのポインタと配列引数の大きさに関する情報へのポインタからなるパラメタリストを介して引数の変数の値、配列引数の添字の値、および配列引数の大きさのうち該当するものの値を求めるステップと、
前記求めた値をもとに引数情報を提示するステップと
を有する付記２記載のデバッグ方法。
【００８１】
（付記４）
前記一覧から選択された引数が形状引継ぎ配列であった場合には、前記デバッガ用引数情報を参照して、サブルーチンが呼び出された際に動的に生成され各引数の格納領域へのポインタと配列引数の大きさに関する情報へのポインタからなるパラメタリストを介して当該配列引数の大きさの値を求めるステップと、
前記求めた値を元に引数情報を提示するステップと
を有する付記３記載のデバッグ方法。
【００８２】
（付記５）
前記一覧から選択された引数が割り付け配列あるいはポインタ配列であった場合には、前記デバッガ用引数情報を参照して、サブルーチンが呼び出された際に動的に生成され各引数の格納領域へのポインタと配列引数の大きさに関する情報へのポインタからなるパラメタリストを介して当該配列引数の添字の下限値および上限値の値を求めるステップと、
前記求めた値を元に引数情報を定時するステップと
を有する付記３記載のデバッグ方法。
【００８３】
（付記６）
ソースプログラムを解析してオブジェクトプログラムを生成するコンパイラプログラムにおいて、
コンピュータに、
前記ソースプログラム中のサブルーチンを解析して、引数の変数名を表す文字列と、配列引数の添字情報を表す文字列と、引数の型情報とを含むデバッガ用引数情報をオブジェクトプログラム中に埋め込ませる機能
を有することを特徴とするコンパイル方法。
【００８４】
（付記７）
ソースプログラムをコンパイルしたオブジェクトプログラムを実行してデバッグするデバッグプログラムにおいて、
コンピュータに、
サブルーチンの引数の変数名を表す文字列と、配列引数の添字情報を表す文字列と、引数の型情報とを含むデバッガ用引数情報が埋め込まれたオブジェクトプログラムを実行させる機能と、
前記実行時にサブルーチンの所定の箇所で実行が中断された際に、前記デバッガ用引数情報を参照して、サブルーチンが呼び出された際に動的に生成され各引数の格納領域へのポインタと配列引数の大きさに関する情報へのポインタからなるパラメタリストを介して引数の変数の値、配列引数の添字の値、および配列引数の大きさのうち少なくとも１つの値を求めさせる機能と、
前記求めた値をもとに引数情報を提示させる機能と
を動作させるデバッグプログラム。
【００８５】
【発明の効果】
以上説明したように、本発明によれば、コンパイル時にソースプログラム１を解析して生成した変数、添字などの情報をテキストのデバッガ用引数情報１１として格納しておき、デバッグ時に中断したときにデバッガ用引数情報１１をもとにパラメタリスト１２を経由して実行時の変数の値、添字の値、配列の大きさなどを参照して表示する構成を採用しているため、デバッグのためにコンパイル時の最適化に影響を与えることなく、実行速度を低下させることなく、プログラムのデバッグやその振舞いの調査を効率的かつ迅速に実現することが可能となる。
【図面の簡単な説明】
【図１】本発明のシステム構成図（コンパイル）である。
【図２】本発明のソースプログラム例（要部）である。
【図３】本発明の動作説明フローチャート（引数の表示）である。
【図４】本発明の説明図（デバッグ）である。
【図５】本発明の動作説明フローチャートである。
【図６】本発明の表示例である。
【符号の説明】
１：ソースプログラム
２：コンパイラ
３：構文解析部
４：最適化部
５：デバッガ用情報出力部
６：コード生成部
７：オブジェクトプログラム
１１：デバッガ用引数情報
１２：パラメタリスト
１３：整合配列情報
１４：スカラ変数情報
１５：形状引継ぎ配列情報
１６：割り付け配列情報
【図１】
2004227103.tif 000003
【図２】
2004227103.tif 000004
【図３】
2004227103.tif 000005
【図４】
2004227103.tif 000006
【図５】
2004227103.tif 000007
【図６】
2004227103.tif 000008