(57)【要約】【課題】高水準言語の命令を中間言語ではなく、中間言語を木構造で表現したノードを使用して視覚的に分かりやすいデバッグ方法を提供する。【解決手段】高水準言語で記述されたソースプログラムをコンパイラが翻訳し、一命令に対応する内部命令及び内部変数を木構造で表現したテーブルを含むデバッグ情報ファイルと、実行可能ファイルとを作成し出力するステップと、翻訳された一命令を、木構造で表現したテーブルに基づいて木構造のグラフィック表示で画面上に表示するステップと、ノード要素を指定する情報の入力に応じて指定されたノード要素に対応する内部命令または内部変数に関する複数のデバッグ処理内容を画面上に表示するステップと、デバッグ処理内容を指定する情報の入力に応じて実行可能ファイルを用いてデバッグ処理を実行するステップとを備えた高水準言語のデバッグ方法。【選択図】図１
2008047061.tif 000002
【特許請求の範囲】
【請求項１】
高水準言語で記述されたソースプログラムをコンパイラが翻訳し、前記高水準言語の一命令に対応する内部命令及び内部変数を木構造で表現したテーブルを含むデバッグ情報ファイルと、実行可能ファイルとを作成し出力するステップと、
翻訳された前記高水準言語の一命令を、前記木構造で表現したテーブルに基づいてノード要素とこれらの間を連結する枝要素とを含む木構造のグラフィック表示で画面上に表示するステップと、
前記画面上に表示されたノード要素のいずれかを指定するノード要素指定情報の入力に応じて前記デバッグ情報ファイルを参照し、指定されたノード要素に対応する内部命令または内部変数に関する複数のデバッグ処理内容を画面上に表示するステップと、
前記画面上に表示されたデバッグ処理内容のいずれかを指定する処理内容指定情報の入力に応じて前記実行可能ファイルを用いて指定されたデバッグ処理を実行するステップとを備えた高水準言語のデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、C言語やCOBOLなどの高水準言語の命令（特に複雑な算術式や条件式）の内部処理を木構造を用いて視覚的にデバッグできる方法に関するものである。
【背景技術】
【０００２】
C言語やCOBOLなどの高水準言語のデバッガは、ソースプログラムの命令単位にブレイクポイントの設定・解除、ステップ実行、変数の参照・更新を行える。しかし、高水準言語の１命令は一般的に、複数の内部命令から構成されることが多く、コンパイラが生成した内部命令単位でのデバッグは行えない。
【０００３】
特許文献１には、高水準言語で記述されたソースプログラムのデバッグにおいて、コンパイル時に、命令に対して生成した中間言語の行番号、及びコンパイラが内部で自動生成する内部変数のシンボル情報をデバッグ情報として生成し、ソースプログラムをデバッグするにあたり、画面に表示した中間言語単位でのデバッグ操作、すなわち中間言語単位でのブレークポイントの設定・解除、ステップ実行、ならびに内部変数の設定・参照を行えるようにすることが示されている。
【特許文献１】特開２０００−３５３１１２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
特許文献１のデバッガは、高水準言語の命令を中間言語単位でデバッグできる。しかし、コンパイラ内部で生成した中間言語や内部変数は、ソースプログラム中には記述されていないため、デバッガ利用者には分かりにくいという問題がある。
本発明は、これらの問題点に鑑みてなされたもので、高水準言語の命令を中間言語ではなく、中間言語を木構造で表現したノードを使用して視覚的に分かりやすくデバッグできる方法を提供することにある。
【課題を解決するための手段】
【０００５】
本発明は上記課題を解決するため、次のような構成を採用した。
高水準言語で記述されたソースプログラムをコンパイラが翻訳し、前記高水準言語の命令に対応する内部命令及び内部変数を木構造で表現したテーブルを含むデバッグ情報ファイルと、実行可能ファイルとを作成し出力するステップと、
翻訳された前記高水準言語の一命令を、前記木構造で表現したテーブルに基づいてノード要素とこれらの間を連結する枝要素とを含む木構造のグラフィック表示で画面上に表示するステップと、
前記画面上に表示されたノード要素のいずれかを指定するノード要素指定情報の入力に応じて前記デバッグ情報ファイルを参照し、指定されたノード要素に対応する内部命令または内部変数に関する複数のデバッグ処理内容を画面上に表示するステップと、
前記画面上に表示されたデバッグ処理内容のいずれかを指定する処理内容指定情報の入力に応じて前記実行可能ファイルを用いて指定されたデバッグ処理を実行するステップとを備えた高水準言語のデバッグ方法である。
【０００６】
本発明のデバッグ方法は、公知の種々のデバッグ処理を行うデバッガ機能に加え、これと連動してデバッグ処理を支援する機能を用いる。本発明では、高水準言語で記述されたソースプログラムを翻訳するコンパイラが高水準言語の一命令に対する内部命令と内部変数を木構造で表現したテーブルを含むデバッグ情報ファイルを作成してデバッガに対して供給し、同時に実行可能ファイルも出力する。
【０００７】
デバッグ処理を支援する機能としては、上記のデバッグ情報ファイルに含まれるテーブルに基づいて表示装置の画面上にユーザ用のグラフィック表示を行う処理機能と、またその画面上のグラフィック表示を直接指定する形でのユーザ入力の処理機能とを少なくとも有する。  すなわち、デバッグ情報ファイルに保存されたテーブルに基づいて、高水準言語の一命令に対応するノード要素と枝要素をもつ木構造を画面上にグラフィック表示する。ユーザは適宜の入力装置を用いて画面上の木構造のノード要素を指定することにより、ノード要素指定情報を入力することができる。入力されたノード要素指定情報に基づいて上記テーブルを参照し、このノード要素に対応する内部命令または内部変数に関係する１または複数のデバッグ処理内容を画面上にグラフィック表示する。さらに、ユーザは適宜の入力装置を用いて画面上のデバッグ処理内容を指定することにより、処理内容指定情報を入力することができる。入力された処理内容指定情報に応じて実行可能ファイルを用いてデバッグ処理（例えばブレイクポイントの設定・解除、ステップ実行、及び内部変数の参照・更新）を行う。
【発明の効果】
【０００８】
本発明では、ソースプログラムに記述されておらずコンパイラにより生成された内部変数や中間言語を、視覚的に把握し易いノード要素と枝要素からなる木構造形態で画面表示し、各ノード要素を指定することによりデバッグ処理の対象とする箇所を選択することができ、それに応じてさらに画面上に複数のデバッグ処理内容の候補を表示し、その中から所望するデバッグ処理を指定することにより、そのデバッグ処理を実行することができる。これにより、ブレイクポイントの設定・解除、ステップ実行、及び内部変数の参照・更新等のデバッグ作業を効率的に行うことができる。
【発明を実施するための最良の形態】
【０００９】
以下、本発明を実施する場合の一形態について図面を参照して具体的に説明する。
図１は、本発明によるデバッグ方法を適用して構築したデバッグシステムの一実施例を概略的に示す構成図である。この実施例のデバッグシステムは、主として、ソースプログラム１０１を入力して、デバッグに必要な情報を出力するコンパイラ１０２と、コンパイラ１０２が出力した情報をもとにデバッグするデバッガ１０５とから構成される。さらに本発明では、コンパイラ１０２により特徴的なデバッグ情報ファイル１０３が作成され、またデバッガ１０５を支援するための特徴的なデバッガ支援部１０６が設けられる。コンパイラ１０２、デバッガ１０５及びデバッガ支援部１０６の各要素の機能は、いずれもコンピュータに導入された所定のプログラムを実行することにより実現される。
【００１０】
ソースプログラム１０１は、C言語やCOBOLなどの高水準言語で記述されている。
【００１１】
コンパイラ１０２は、ソースプログラム１０１を入力して、構文解析等を行い、中間言語に翻訳する。通常、この工程で内部命令及び内部変数が生成される。本発明では、コンパイラ１０２がソースプログラム１０１の構文解析等の結果に基づいて木構造のテーブルを作成し、デバッグ情報ファイル１０３に格納する。ソースプログラム１０１の一命令（１行）からは、中間言語の複数の内部命令（複数行）及び複数の内部変数が作成される。コンパイラ１０２は、ソースプログラム１０１の一命令から作成された複数の内部命令及び内部変数の間の関係を木構造に対応させ、複数の互いに関連付けられたテーブルを作成してこれらの内部命令及び内部変数（実際にはこれらに対応するコードまたはデータを格納しているメモリ領域のアドレス）を格納する。なお、デバッグ情報ファイル１０３には、中間言語も保存される。
【００１２】
実行可能ファイル１０４には、コンパイラ１０２が木構造に対応する中間言語から生成した機械語命令が格納される。
【００１３】
デバッガ１０５は、公知の種々のデバッグ処理機能を備えている。例えば、コンパイラによるコンパイル時にデバッグ連動を指定してコンパイルを行うことにより、種々のデバッグ処理を行うことができる。例えば、基本的な機能としては、ソースプログラムの特定の行に対するブレイクポイントを設定・解除、ソースプログラムの１行だけのステップ実行、ユーザ変数の参照・更新等である。さらに、デバッグ情報ファイル１０３に保存された中間言語の一命令（１行）に対しても、同様に、特定の行におけるブレイクポイントの設定・解除、ステップ実行、内部変数の参照・更新等を行う機能を有するが、本発明では特にこの機能は、デバッガ支援部１０６と連動して行われる。
【００１４】
デバッガ支援部１０６は、デバッガ１０５と連動しており、デバッグ情報ファイル１０３に保存された上記テーブルに基づいて、ソースプログラムの一命令を表現する中間言語の複数の内部命令を木構造でグラフィック表示する。デバッガ支援部１０６により制御される入出力装置１０７は、適宜の表示装置と入力装置を備えている。グラフィック表示の制御においては、表示対象要素に対して所定の座標位置を割り当て表示装置へ転送する。また、ポインティングデバイス等の入力装置により表示装置の画面上の所定の座標位置が入力された場合は、その座標位置に表示されている表示対象要素を識別する。これらのグラフィック表示の制御技術は公知である。このようなデバッガ支援部１０６の制御により、表示装置の画面上に木構造のノード要素と枝要素とがテーブルに従って配置されて表示される。例えば、ノード要素の位置には、内部命令に対応した適宜の記号、符号、アイコン等が表示され、ノード要素同士の間は、木構造の関係に従って適宜のデザインの枝要素が表示される。ユーザは、このようなグラフィック表示されたノード要素に対して、ポインティングデバイス等の入力装置を用いて指定情報を入力することができる。デバッガ支援部１０６は、入力装置から入力された情報をデバッガ１０５に渡し、デバッガ１０５はそれに応じて次の処理をデバッガ支援部１０６に対して指示する。
【００１５】
以下、図１に示した各構成要素について詳細に説明する。
図２は、コンパイラ１０２がデバッグ情報ファイル１０３に格納する木構造のテーブルの一例を模式的に示した構成図である。木構造とは、基点となるノード要素（ルートとも称される）から１又は複数の枝要素が延びその先端に１段目の１又は複数のノード要素が位置し、１段目のノード要素の一部又は全部からそれぞれ１又は複数の枝要素が延びその先端に２段目の１又は複数のノード要素が位置し、これを繰り返して末端に最終段目のノード要素（リーフとも称される）が位置する構成である。
【００１６】
ソースプログラムに含まれる各命令毎に図２に示すような木構造のテーブルが作成される。図２のテーブルは、ソースプログラムにおける一命令である「A = (B + 1) * (C + 2)」を一例としたものであり、複数のテーブル要素２１１、２１２、２１３及び２１４からなっている。これらのテーブル要素２１１〜２１４はコンパイラ１０２がこの命令を構文解析等した結果に基づいて作成されている。木構造のテーブル要素２１１〜２１４の各々は、内部命令コード領域２０１、内部変数領域２０２、内部命令左辺オペランド領域２０３、内部命令右辺オペランド領域２０４から構成される。内部命令コード領域２０１には内部命令の種類を示すコードが格納され、内部変数領域２０２には内部変数を格納している領域のアドレスが格納されている。内部命令左辺オペランド領域２０３と内部命令右辺オペランド領域２０４には、内部命令のオペランドである変数、定数、及び他の内部命令のテーブル要素のアドレスが格納される。
【００１７】
各テーブル要素における内部命令コード領域２０１が、木構造におけるノード要素に相当する。また、内部命令左辺オペランド領域２０３と内部命令右辺オペランド領域２０４に格納された「他の内部命令のテーブル要素のアドレス」は、他のテーブル要素に接続された黒矢印で模式的に示すように他のテーブル要素との関係を示す情報であり、木構造における枝要素に相当する。
【００１８】
このテーブルの格納例によれば、テーブル要素２１３における「B」と「1」の加算結果とテーブル要素２１４における「C」と「2」の加算結果とを、テーブル要素２１２におけるように乗算し、その結果をテーブル要素２１１における「A」に代入することを表す木構造が示されていることになる。また、「B」と「1」の加算結果は内部変数「IR1」に代入し、「C」と「2」の加算結果は内部変数「IR2」に代入し、「IR1」と「IR2」の乗算結果は内部変数「IR3」に代入することを示している。
【００１９】
図３は、図２の木構造テーブルから生成した「A = (B + 1) * (C + 2)」の中間言語である。この例では、ソースプログラムの一命令（１行）から中間言語の４つの内部命令（４行）が生成されている。図３に示した中間言語もまた図１に示したデバッグ情報ファイル１０３に格納される。
【００２０】
図４（Ａ）は、本発明のデバッグ方法を説明するために、図２に例示したテーブルに対応する「A = (B + 1) * (C + 2)」の内部命令を、木構造の形態で表示装置の画面４００にグラフィック表示した一例を示す図である。本発明のデバッグ方法では、従来の高水準言語のソースプログラムにおける命令単位でのデバッグ処理に加えて、木構造で表現した内部命令単位でのブレークポイントの設定・解除、ステップ実行、及び内部命令の実行結果を設定した内部変数の参照・更新を、簡易なユーザ操作で効率的に行うことを実現する。
【００２１】
図４（Ａ）の画面表示例では、画面４００の向かって左端に木構造の基点となるノード要素４０３ａである「=」が表示され、その右側に２本の棒状の枝要素４０４ａが分岐するように表示され、その先端位置に１段目のノード要素４０３ｂである「A」及び「*」がそれぞれ表示されている。さらにノード要素「*」の右側に２本の棒状の枝要素４０４ｂが分岐するように表示され、その先端位置に２段目のノード要素４０３ｃである「+」及び「+」がそれぞれ表示されている。さらに各「+」の右側に２本の棒状の枝要素４０４ｃがそれぞれ分岐するように表示され、その先端位置に末端のノード要素４０３ｄである「B」と「1」、並びに、「C」と「2」が表示されている。このように木構造でグラフィック表示されることにより、ユーザは中間言語での構成を視覚的に把握し易い。また、木構造のノード要素として表示される命令または変数もしくは数値は、ソースプログラムの一命令中に明示されているものであるのでユーザは把握し易い。
【００２２】
図４（Ａ）で表示した木構造に含まれるいずれかのノード要素を、マウス等のポインティングデバイスで指定する、すなわちクリックすると、そのノード要素を指定するノード要素指定情報が入力される。図１を参照すると、デバッガ支援部１０６はそのノード要素指定情報をデバッガ１０５に渡す。デバッガ１０５は、デバッグ情報ファイル１０３を参照し、指定されたノード要素をテーブルから抽出し、そのノード要素に関して可能な１または複数のデバッグ処理（予め関連付けられ登録されている）の種類を抽出し、それらのデバッグ処理の識別情報をデバッガ支援部１０６に渡す。
【００２３】
図４（Ｂ）に示すように、デバッガ支援部１０６はデバッガ１０５から渡されたデバッグ処理識別情報に基づいて、例えば、当該指定されたノード要素４０３ｃの近傍にポップアップメニュー４０５を表示する。
【００２４】
図５は、図４（Ｂ）に示したポップアップメニュー表示の一例である。各デバッグ処理識別情報に対応する処理名称が表示される。例えば、「ブレイクポイントの設定」５０１、「ブレイクポイントの解除」５０２、「内部変数の表示」５０３、及び「内部変数の更新」５０４が表示される。ユーザは、所望する処理をマウス等で指定する、すなわちクリックすると、そのデバッグ処理を指定するデバッグ処理指定情報が入力される。図１に示したデバッガ支援部１０６はそのデバッグ処理指定情報をデバッガ１０５に渡す。デバッガ１０５は、渡されたデバッグ処理指定情報に応じて適切なデバッグ処理を行い、その結果（完了通知または必要な情報の通知）をデバッガ支援部１０６に渡す。それに応じてデバッガ支援部１０６は、画面上にその処理が実行されたことを示す表示を行う。例えば、再び図４（Ａ）を参照すると、太枠で囲んだ内部命令４０１は、ブレイクポイントが設定されていることを表す。反転表示した内部命令４０２は、現在の実行内部命令を表す。
【００２５】
図６〜図８は、図５に示したポップアップメニュー等の表示に対して所望するデバッグ処理がユーザに指定され、そのデバッグ処理が実行される工程のフローチャートである。以下、図１も参照して説明する。
【００２６】
図６は、ブレイクポイントを設定・解除するデバッグ処理が指定された際のフローチャートである。図５のポップアップメニューで「ブレイクポイントの設定」、または「ブレイクポイントの解除」が選択されると（ステップ６０１）、そのデバッグ処理指定情報がデバッガ支援部１０６からデバッガ１０５に渡される。デバッグ処理指定情報には、デバッグ処理の種類の識別情報と共に対象とするノード要素を識別する情報が含まれている。デバッグ処理指定情報に基づいてデバッガ１０５は、デバッグ情報ファイル１０３に格納されている木構造のテーブルから対象とするノード要素に該当する中間言語を検索し（ステップ６０２）、その中間言語に対してブレイクポイントの設定・解除を行う（ステップ６０３）。ブレイクポイントの設定・解除の処理自体は公知のものである。デバッガ１０５は、ブレイクポイントの設定・解除の処理完了後、デバッガ支援部１０６に完了を通知する。デバッガ支援部１０６は、画面上の対象とするノード要素に対し、ブレイクポイントの設定・解除を示す表示を行う。例えば、設定の場合は太枠で囲み、解除の場合は太枠を消す。
【００２７】
図７は、内部変数の値を表示するデバッグ処理が指定された際のフローチャートである。図５のポップアップメニューで「内部変数の表示」が選択されると（ステップ７０１）、そのデバッグ処理指定情報がデバッガ支援部１０６からデバッガ１０５に渡される。デバッグ処理指定情報には、デバッグ処理の種類の識別情報と共に対象とするノード要素を識別する情報が含まれている。デバッグ処理指定情報に基づいてデバッガ１０５は、デバッグ情報ファイル１０３に格納されている木構造のテーブルから対象とするノード要素に該当する内部命令を検索し、その内部命令が設定した内部変数を取得する（ステップ７０２）。デバッガ１０５は、取得した内部変数の値をデバッガ支援部１０６に通知し、デバッガ支援部１０６は、画面上にその内部変数の値を表示する（ステップ７０３）。
【００２８】
図８は内部変数の値を更新するデバッグ処理が指定された際のフローチャートである。図５のポップアップメニューで「内部変数の更新」が選択されると（ステップ８０１）、デバッグ支援部１０６はさらに、更新する値の入力を求める画面表示を行い、ユーザが適宜の入力装置から更新する値を入力する（ステップ８０２）。そして、デバッグ処理指定情報がデバッガ支援部１０６からデバッガ１０５に渡される。デバッグ処理指定情報には、デバッグ処理の種類の識別情報と共に対象とするノード要素を識別する情報並びに更新する値の情報が含まれている。デバッグ処理指定情報に基づいてデバッガ１０５は、デバッグ情報ファイル１０３に格納されている木構造のテーブルから対象とするノード要素に該当する内部命令を検索し、その内部命令が設定した内部変数を取得する（ステップ８０３）。入力された値で内部変数の値を更新する（ステップ８０４）。
【図面の簡単な説明】
【００２９】
【図１】本デバッグ方法を適用して構築したシステム構成図である。
【図２】デバッグ情報ファイルに格納する木構造のテーブルである。
【図３】図２の木構造のテーブルから生成した中間言語である。
【図４】詳細な表示画面の説明図である。
【図５】木構造の頂点のノード要素をマウスでクリックして表示されるポップアップメニューである。
【図６】ブレイクポイント設定・解除処理の概要を示すフローチャートである。
【図７】内部変数表示処理の概要を示すフローチャートである。
【図８】内部変数更新処理の概要を示すフローチャートである。
【符号の説明】
【００３０】
１０１：ソースプログラム、１０２：コンパイラ、１０３：デバッグ情報ファイル、１０４：実行可能ファイル、１０５：デバッガ、１０６：デバッガ支援部、１０７：入出力装置、２０１：内部命令コード領域、２０２：内部変数領域、２０３：内部命令左辺オペランド領域、２０４：内部命令右辺オペランド領域、２１１〜２１４：テーブル要素、４００：表示画面、４０１：枠で囲んだ内部命令、４０２：反転表示した内部命令、４０３ａ〜４０３ｄ：ノード要素、４０４ａ〜４０４ｃ：枝要素、４０５：ポップアップメニュー
【図１】
2008047061.tif 000003
【図２】
2008047061.tif 000004
【図３】
2008047061.tif 000005
【図４】
2008047061.tif 000006
【図５】
2008047061.tif 000007
【図６】
2008047061.tif 000008
【図７】
2008047061.tif 000009
【図８】
2008047061.tif 000010