(57)【要約】【課題】デバッグ作業の効率が上がるデバック装置を提供すること。【解決手段】コンパイラ処理部４０８は、ソースファイル４０７に対して、プログラムと、関数名と変数が格納されている箇所を表す情報と変数名と代入／参照を示す情報とが複数対応付けられたライン情報テーブルとを生成する。変数値履歴管理部４０６は、過去にプログラムを実行して停止したときの変数値、変数名を履歴情報として、関数履歴テーブルに格納する。変数値表示制御部４０４は、プログラムが停止している時点での関数内で代入／参照されている変数の箇所を取得箇所としてライン情報テーブルから取得し、複数の変数の箇所を表す情報と複数の変数値とが格納されたメモリ／レジスタ管理部４０５から、取得箇所に対応する変数値を取得変数値として取得し、関数履歴テーブルから、取得変数値に該当する履歴情報を該当履歴情報として取得し、それを表示装置に表示する。【選択図】図４
2011107883.tif 000002
【特許請求の範囲】
【請求項１】
ソースファイルに対して、プログラムと、関数名と変数が格納されている箇所を表す情報と変数名と代入／参照を示す情報とが複数対応付けられたライン情報テーブルとを生成するコンパイラ処理部と、
複数の変数が格納されている箇所を表す情報と複数の変数値とが格納されたメモリ／レジスタ管理部と、
前記プログラムを実行／停止する実行制御部と、
関数履歴テーブルを備え、前記実行制御部が過去に前記プログラムを実行して停止したときの変数値と、その変数値に対する変数名とを履歴情報として、前記関数履歴テーブルに格納する変数値履歴管理部と、
前記プログラムが停止している時点での関数内で代入／参照されている変数の箇所を取得箇所として前記ライン情報テーブルから取得し、前記メモリ／レジスタ管理部に格納された前記複数の変数値の中から、前記取得箇所に対応する変数値を取得変数値として取得し、前記関数履歴テーブルに格納された前記履歴情報の中から、前記取得変数値に該当する履歴情報を該当履歴情報として取得し、前記該当履歴情報を前記表示装置に表示する変数値表示制御部と
を具備するデバック装置。
【請求項２】
前記変数値履歴管理部は、前記実行制御部が過去に前記プログラムを実行して停止したときの関数コール・スタック情報と前記履歴情報とを対応付けて前記関数履歴テーブルに格納し、
前記関数コール・スタック情報は、前記プログラムを実行するときに呼び出される関数の順番を示し、
前記変数値表示制御部は、前記実行制御部が前記プログラムを実行して停止したときの対象関数コール・スタック情報を取得し、前記履歴情報のうちの、前記対象関数コール・スタック情報に対応し、且つ、前記取得変数値に該当する履歴情報を前記該当履歴情報として前記関数履歴テーブルから取得する
請求項１に記載のデバック装置。
【請求項３】
前記変数値表示制御部は、前記該当履歴情報に含まれる前記取得変数値と、その変数名と、前記取得箇所に対する代入／参照を示す情報とを対応付けて前記表示装置に表示する
請求項１又は２に記載のデバック装置。
【請求項４】
前記変数値表示制御部は、前記該当履歴情報を前記履歴情報として前記変数値履歴管理部の前記関数履歴テーブルに格納することにより、前記関数履歴テーブルを更新する
請求項１〜３のいずれかに記載のデバック装置。
【請求項５】
前記ライン情報テーブルは、更に、グローバル／ローカルを示すスコープ情報が複数対応付けられている
請求項１〜４のいずれかに記載のデバック装置。
【請求項６】
前記ライン情報テーブルは、行番号が更に複数対応付けられ、
前記関数履歴テーブルに格納された前記履歴情報は、更に、前記実行制御部が過去に前記プログラムを実行して停止したときの変数値に対する行番号を更に含む
請求項１〜５のいずれかに記載のデバック装置。
【請求項７】
ソースファイルに対して、プログラムと、関数名と変数が格納されている箇所を表す情報と変数名と代入／参照を示す情報とが複数対応付けられたライン情報テーブルとを生成するステップと、
前記プログラムを実行／停止するステップと、
過去に前記プログラムを実行して停止したときの変数値と、その変数値に対する変数名とを履歴情報として、関数履歴テーブルに格納するステップと、
前記ライン情報テーブルを参照して、前記プログラムが停止している時点での関数内で代入／参照されている変数の箇所を取得箇所として取得するステップと、
複数の変数が格納されている箇所を表す情報と複数の変数値とが格納されたメモリ／レジスタ管理部を参照して、前記複数の変数値の中から、前記取得箇所に対応する変数値を取得変数値として取得するステップと、
前記関数履歴テーブルを参照して、前記履歴情報の中から、前記取得変数値に該当する履歴情報を該当履歴情報として取得するステップと、
前記該当履歴情報を前記表示装置に表示するステップと
を具備するデバック方法。
【請求項８】
前記履歴情報を前記関数履歴テーブルに格納するステップは、
過去に前記プログラムを実行して停止したときの関数コール・スタック情報と前記履歴情報とを対応付けて前記関数履歴テーブルに格納するステップ
を含み、
前記関数コール・スタック情報は、前記プログラムを実行するときに呼び出される関数の順番を示し、
前記該当履歴情報を前記関数履歴テーブルから取得するステップは、
前記プログラムを実行して停止したときの対象関数コール・スタック情報を取得するステップと、
前記履歴情報のうちの、前記対象関数コール・スタック情報に対応し、且つ、前記取得変数値に該当する履歴情報を前記該当履歴情報として前記関数履歴テーブルから取得するステップと
を含む請求項７に記載のデバック方法。
【請求項９】
前記該当履歴情報を前記表示装置に表示するステップは、
前記該当履歴情報に含まれる前記取得変数値、変数名、行番号と、前記取得箇所に対する代入／参照を示す情報とを対応付けて前記表示装置に表示するステップ
を含む請求項７又は８に記載のデバック方法。
【請求項１０】
前記該当履歴情報を前記履歴情報として前記変数値履歴管理部の前記関数履歴テーブルに格納することにより、前記関数履歴テーブルを更新するステップ
を更に具備する請求項７〜９のいずれかに記載のデバック方法。
【請求項１１】
前記ライン情報テーブルは、更に、グローバル／ローカルを示すスコープ情報が複数対応付けられている
請求項７〜１０のいずれかに記載のデバック方法。
【請求項１２】
前記ライン情報テーブルは、行番号が更に複数対応付けられ、
前記関数履歴テーブルに格納された前記履歴情報は、更に、過去に前記プログラムを実行して停止したときの変数値に対する行番号を更に含む
請求項７〜１１のいずれかに記載のデバック方法。
【請求項１３】
請求項７〜１２のいずれかに記載のデバック方法の各ステップをコンピュータに実行させるデバック用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｃ言語で記述されたソースプログラム（以下、Ｃソースプログラムと称する）をデバッグする装置及び方法に関する。
【背景技術】
【０００２】
既存のデバッガの機能の１つに、変数の値（以下、変数値と称する）を表示する機能（ウォッチ・ウインドウ、ローカル変数ウインドウｅｔｃ）がある。この機能で表示される変数値は、最新の変数値のみである。プログラムをデバッグする際には、最新の変数値だけではなく、過去の変数値が必要な場合がある。
【０００３】
プログラムをデバッグする際には、最新の変数値だけではなく、過去の変数値が必要な場合がある。過去の変数値を表示するものとして、任意の変数への代入を監視して履歴として保存／表示するデバック装置が、特開２００７−３４８２５号公報に記載されている。
【０００４】
図１は、従来のデバック装置として、特開２００７−３４８２５号公報に記載されているデバック装置を示している。プロセッサ制御部１０２は、実行形式ファイル１０１中のプログラムをプロセッサ上で実行／停止する。
【０００５】
プロセッサ制御部１０２は、プログラムのデバックを開始すると、命令をフェッチして実行する。この際、フェッチした命令がＣソースプログラムの行（以下、Ｃソース行）の先頭の命令である場合、プロセッサ制御部１０２は、その時点でのプロセッサレジスタの内容（データ）をレジスタ履歴メモリ１０４に記録し、実行中のソースプログラムの行番号をソース行履歴メモリ１０５に記録して、変数監視部１０５を起動する。
【０００６】
変数監視部１０５は、起動されると、Ｃソース行が代入文であるか否かを判定する。代入文の場合、それを変数履歴メモリ１０６に記録して、その動作を終了する。プロセッサ制御部１０２は、ブレーク・ポイントを検出するとプログラムを停止する。
【０００７】
レジスタ表示部１０７、プログラム表示部１０８、変数表示部１０９は、レジスタ履歴メモリ１０４、ソース行履歴メモリ１０５、変数履歴メモリ１０６に記録された内容に基づいて、履歴の結果を表示する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００７−３４８２５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
従来のデバック装置は、図２に示されるように、ＣソースプログラムのＬ７から実行を開始してＬ１４で停止する。この場合に表示される変数の変更履歴は、図３のようになる。
【００１０】
変数に対する代入の履歴が全て表示されるため、プログラムをデバッグするための情報がある程度揃っているが、以下の面で、問題点がある。
【００１１】
第１の問題点として、従来のデバック装置では、変数の代入に関する履歴しか保存／表示しないことである。図２に示されるように、ＣソースプログラムのＬ１３にて、グローバル変数ｂの値をすぐに確認できない。確認するためには、Ｌ１３の処理の直前のグローバル変数ｂへの代入を行っている箇所を探す必要がある。
【００１２】
第２の問題点として、従来のデバック装置では、同名の変数を区別していないことである。図３では、変数名ａの値にて、値１はグローバル変数ａの値を表示し、値２はローカル変数ａの値を表示している。図３の表示結果からは異なるスコープの変数値を表示していることが一目で分からない。確認するには、Ｃソースプログラムを見る必要がある。
【００１３】
第３の問題点として、従来のデバック装置では、全ての履歴を表示することである。図２に示されるように、Ｃソースプログラムのｍａｉｎ関数についてデバッグを行っている際には、ｍａｉｎ関数内にて代入／参照されている変数のみがデバッグに必要な情報となる。図３における変数名ｅに関する情報は、ｍａｉｎ関数についてデバッグを行っている際には、不要な情報である。
【課題を解決するための手段】
【００１４】
以下に、発明を実施するための形態で使用される符号を括弧付きで用いて、課題を解決するための手段を記載する。この符号は、特許請求の範囲の記載と発明を実施するための形態の記載との対応を明らかにするために付加されたものであり、特許請求の範囲に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１５】
本発明のデバック装置は、コンパイラ処理部（４０８）と、メモリ／レジスタ管理部（４０５）と、実行制御部（４０２）と、変数値履歴管理部（４０６）と、変数値表示制御部（４０４）とを具備している。コンパイラ処理部（４０８）は、ソースファイル（４０７）に対して、プログラムとライン情報テーブルとを生成する。ライン情報テーブルには、関数名と変数が格納されている箇所を表す情報と変数名と代入／参照を示す情報とが複数対応付けられている。メモリ／レジスタ管理部（４０５）には、複数の変数が格納されている箇所を表す情報と複数の変数値とが格納されている。実行制御部（４０２）は、プログラムを実行／停止する。変数値履歴管理部（４０６）は、関数履歴テーブルを備え、実行制御部（４０２）が過去にプログラムを実行して停止したときの変数値と、その変数値に対する変数名とを履歴情報として、関数履歴テーブルに格納する。変数値表示制御部（４０４）は、プログラムが停止している時点での関数内で代入／参照されている変数の箇所を取得箇所としてライン情報テーブルから取得する。変数値表示制御部（４０４）は、メモリ／レジスタ管理部（４０５）に格納された複数の変数値の中から、取得箇所に対応する変数値を取得変数値として取得する。変数値表示制御部（４０４）は、関数履歴テーブルに格納された履歴情報の中から、取得変数値に該当する履歴情報を該当履歴情報として取得し、該当履歴情報を表示装置に表示する。
【発明の効果】
【００１６】
従来では、第１の問題点として、変数の代入に関する履歴しか表示していなかったが、本発明では、変数の代入／参照箇所に関する情報を取得して、代入箇所だけでなく、参照箇所での変数値も表示装置に表示するようにしている。これにより、変数の代入先を探す作業を省くことができ、デバッグ作業の効率が上がる。
【００１７】
また、従来では、第２の問題点として、プログラム停止時点での全ての変数の変更履歴を表示しているため、同名の変数が区別しにくいが、本発明では、上記の取得変数値（デバッグ対象となっている関数にて代入／参照している変数値）に該当する履歴情報を該当履歴情報として、即ち、変更履歴として表示装置に表示するようにしている。これにより、スコープの異なる同名の変数が表示されなくなり、デバッグ時に異なる変数を参照することによる作業ミスを回避できる。
【００１８】
また、従来では、第３の問題点として、全ての履歴が表示されているが、本発明では、デバッグ対象となっている関数のデバッグに必要な変数の変更履歴のみを表示装置に表示するようにしている。これにより、デバッグ作業の効率が上がる。
【図面の簡単な説明】
【００１９】
【図１】図１は、従来のデバック装置として、特開２００７−３４８２５号公報に記載されているデバック装置を示している。
【図２】図２は、Ｃソースファイル２０７の例である。
【図３】図３は、従来のデバック装置を用いたときの変数の変更履歴の表示結果を示している。
【図４】図４は、本発明の実施形態によるデバック装置の構成を示している。
【図５】図５は、実行制御部４０２の動作として、デバック処理を示すフローチャートである。
【図６】図６は、変数値表示制御部４０４の動作として、変数値表示処理を示すフローチャートである。
【図７】図７は、変数値表示制御部４０４の動作として、変数値表示処理を示すフローチャートである。
【図８】図８は、変数値履歴管理部４０６の動作として、第１変数値履歴管理処理を示すフローチャートである。
【図９】図９は、変数値履歴管理部４０６の動作として、第２変数値履歴管理処理を示すフローチャートである。
【図１０】図１０は、本発明を適用して、図２に示されるＣソースファイル４０７のＬ７から実行を開始してＬ１４で停止した場合に、変数値履歴管理部４０６が生成する関数履歴テーブルの例である。
【図１１】図１１は、デバッグ情報管理部４０３の動作として、第１デバック情報管理処理を示すフローチャートである。
【図１２】図１２は、デバッグ情報管理部４０３の動作として、第２デバック情報管理処理を示すフローチャートである。
【図１３】図１３は、図２に示されるＣソースファイル４０７に対して、コンパイラ処理部４０８によって生成されるライン情報テーブルの例である。
【図１４】図１４は、本発明を適用して、図２に示されるＣソースファイル４０７のＬ７から実行を開始してＬ１４で停止した場合に、変数値表示制御部４０４が表示装置に表示する表示結果の例である。
【発明を実施するための形態】
【００２０】
以下に添付図面を参照して、本発明の実施形態によるデバック装置について詳細に説明する。
【００２１】
［構成］
図４は、本発明の実施形態によるデバック装置の構成を示している。本発明の実施形態によるデバック装置は、コンピュータであり、図示しないＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、記録媒体である記憶部（図示しない）と、を具備している。記憶部には、コンピュータに実行させるためのコンピュータプログラムであるデバック用プログラムが記憶されている。ＣＰＵは、起動時などに記憶部からデバック用プログラムを読み取って実行する。デバック用プログラムは、ダウンロード部４０１、実行制御部４０２、デバッグ情報管理部４０３、変数値表示制御部４０４、メモリ／レジスタ管理部４０５、変数値履歴管理部４０６、コンパイラ処理部４０８を含んでいる。
【００２２】
コンパイラ処理部４０８は、図２に示されるＣソースファイル（Ｃソースプログラム）４０７に対して、プログラムとライン情報テーブルとを含む実行形式ファイル４０９を生成する。図１３に示されるように、ライン情報テーブルには、実行形式ファイル４０９の名称を表すファイル名と、プログラムに用いられる関数の名称を表す関数名と、プログラムの行を表す行番号と、プログラムに用いられる変数が格納されている箇所（メモリ上のアドレス、又は、レジスタ）を表すアドレス範囲と、上記の変数の名称を表す変数名と、代入／参照を示す状態情報と、グローバル／ローカルを示すスコープ情報とが複数対応付けられて格納されている。ここで、“／”は“又は”を意味している。
【００２３】
ダウンロード部４０１は、実行形式ファイル４０９中のプログラムを取得する。
【００２４】
デバッグ情報管理部４０３は、実行形式ファイル４０９中のライン情報テーブルを取得して管理する。
【００２５】
メモリ／レジスタ管理部４０５は、複数の変数が格納されている箇所を表す情報と、複数の変数値とを格納している。
【００２６】
実行制御部４０２は、ダウンロード部４０１によって取得されたプログラムを実行／停止する。実行制御部４０２は、プログラム停止時に、変数値表示制御部４０４を呼び出す。
【００２７】
変数値履歴管理部４０６は、関数履歴テーブルを備えている。変数値履歴管理部４０６は、実行制御部４０２が過去にプログラムを実行して停止したときの変数値と、その変数値に対する変数名、行番号、ファイル名とを履歴情報とし、そのときの関数コール・スタック情報と履歴情報とを対応付けて関数履歴テーブルに格納する。関数コール・スタック情報は、プログラムを実行するときに呼び出される関数の順番を示している。
【００２８】
変数値表示制御部４０４は、プログラムが停止している時点での関数内で代入／参照されている変数の箇所を取得箇所としてデバッグ情報管理部４０３、即ち、ライン情報テーブルから取得する。変数値表示制御部４０４は、メモリ／レジスタ管理部４０５に格納された複数の変数値の中から、上記取得箇所に対応する変数値を取得変数値として取得する。また、変数値表示制御部４０４は、実行制御部４０２がプログラムを実行して停止したときの対象関数コール・スタック情報を取得し、関数履歴テーブルに格納された履歴情報の中から、対象関数コール・スタック情報に対応し、且つ、上記取得変数値に該当する履歴情報を該当履歴情報として取得する。変数値表示制御部４０４は、該当履歴情報に含まれる取得変数値、変数名、行番号と、上記の取得箇所に対する代入／参照を示す情報とを対応付けて表示装置に表示する。変数値表示制御部４０４は、該当履歴情報を上記の履歴情報として変数値履歴管理部４０６の関数履歴テーブルに格納することにより、関数履歴テーブルを更新する。
【００２９】
［動作］
本発明の実施形態によるデバック装置の動作について説明する。
【００３０】
図５は、実行制御部４０２の動作として、デバック処理を示すフローチャートである。
【００３１】
実行制御部４０２は、デバッグ対象となっている実行形式ファイル４０９中のプログラムをカレントＰＣの位置からＣソース・レベルでステップ実行する（ステップＳ５０１）。Ｃソース・レベルでステップ実行とは、図２に示されるＣソースファイル４０７のＬ７、Ｌ８といった各行を１行分実行することを意味する。
【００３２】
次に、実行制御部４０２は、変数値表示制御部４０４を呼び出す。変数値表示制御部４０４の処理が終了すると、次の処理を行う（ステップＳ５０２）。
【００３３】
実行制御部４０２は、次に実行するＣソースファイル４０７の行にブレークが設定されているか否かを判定する（ステップＳ５０３）。ブレークとは、図２のＣソースファイル４０７のＬ７、Ｌ８といった行に設定されるプログラム実行の停止を指示するイベントで、一般的なデバッグ装置が持つ機能の一つである。
【００３４】
設定されている場合（ステップＳ５０３−ＹＥＳ）、実行制御部４０２は、デバック処理を終了する。
【００３５】
一方、設定されていない場合（ステップＳ５０３−ＮＯ）、実行制御部４０２は、プログラムの実行停止要求が発生していないか否かを判定する（ステップＳ５０４）。プログラムの実行停止要求とは、任意の箇所でプログラムの実行を停止する指示で、一般的なデバッグ装置が持つ機能の一つである。
【００３６】
発生している場合（ステップＳ５０４−ＹＥＳ）、実行制御部４０２は、デバック処理を終了する。
【００３７】
一方、発生していない場合（ステップＳ５０４−ＮＯ）、実行制御部４０２は、ステップＳ５０１の処理を行う。
【００３８】
図６、図７は、変数値表示制御部４０４の動作として、変数値表示処理を示すフローチャートである。
【００３９】
変数値表示制御部４０４は、実行制御部４０２がプログラムを実行して停止したときに、カレントＰＣの値、関数コール・スタック情報をそれぞれ対象カレントＰＣ値、対象関数コール・スタック情報として実行制御部４０２から取得して表示装置に表示する（ステップＳ６０１）。図２に示されるＣソースファイル４０７を基に、以下にいくつか例を示す。
［１］  Ｌ７からプログラムを実行して、Ｌ１０行目でプログラム停止している場合は、対象関数コール・スタック情報は、「ｍａｉｎ」となる。
［２］  Ｌ７からプログラムを実行して、Ｌ１０行目にてｆｕｎｃＡを呼び出し、Ｌ１８行目で停止している場合は、対象関数コール・スタック情報は、「ｍａｉｎ→ｆｕｎｃＡ」となる。
［３］  Ｌ７からプログラムを実行して、Ｌ１２行目にてｆｕｎｃＢを呼び出し、Ｌ２６行目でｆｕｎｃＡを呼び出し、Ｌ１８行目で停止している場合は、対象関数コール・スタック情報は、「ｍａｉｎ→ｆｕｎｃＡ→ｆｕｎｃＢ」となる。
【００４０】
次に、変数値表示制御部４０４は、上記の対象関数コール・スタック情報に対応する履歴情報を該当履歴情報として変数値履歴管理部４０６から取得して表示装置に表示する。変数値の履歴がない場合は表示しない（ステップＳ６０２）。
【００４１】
次に、変数値表示制御部４０４は、上記の対象カレントＰＣ値に対する行番号、変数名の一覧、代入／参照を示す情報の一覧をデバッグ情報管理部４０３（ライン情報テーブル）から取得する（ステップＳ６０３）。
【００４２】
ここで、変数名の一覧を取得できなかった場合（ステップＳ６０４−ＮＯ）、変数値表示制御部４０４は、後述のステップＳ６０５〜Ｓ６０９の処理を行わずに、後述のステップＳ７０１を行う。
【００４３】
一方、変数名の一覧を取得できた場合（ステップＳ６０４−ＹＥＳ）、変数値表示制御部４０４は、取得した変数の一覧を基に、変数の１つ１つに対して、以下の処理を行う（ステップＳ６０５）。
【００４４】
上述のように、ライン情報テーブルは、変数名と変数が格納されている箇所（アドレス範囲）とを対応付ける。そこで、変数値表示制御部４０４は、変数名に従って、プログラムが停止している関数内で代入／参照されている全ての変数が格納されている箇所を取得箇所としてデバッグ情報管理部４０３、即ち、ライン情報テーブルから割り出す（ステップＳ６０６）。
【００４５】
次に、変数値表示制御部４０４は、複数の変数値のうちの、取得箇所に対応する変数値を取得変数値としてメモリ／レジスタ管理部４０５から取得する（ステップＳ６０７）。
【００４６】
次に、変数値表示制御部４０４は、履歴情報のうちの、取得変数値に該当する履歴情報を該当履歴情報として変数値履歴管理部４０６（関数履歴テーブル）から取得し、該当履歴情報に含まれる取得変数値、変数名、行番号と、上記の取得箇所に対する代入／参照を示す情報とを対応付けて表示装置に表示する（ステップＳ６０８）。
【００４７】
次に、変数値表示制御部４０４は、デバッグ情報管理部４０３から取得した変数名の一覧の全ての変数に対して処理を行っていない場合（ステップＳ６０９−ＮＯ）、ステップＳ６０６〜Ｓ６０８の処理を行う。
【００４８】
一方、変数値表示制御部４０４は、上記の全ての変数に対して処理した場合（ステップＳ６０９−ＹＥＳ）、後述のステップＳ７０１の処理を行う。
【００４９】
図１４は、本発明を適用して、図２に示されるＣソースファイル４０７のＬ７から実行を開始してＬ１４で停止した場合に、変数値表示制御部４０４が表示装置に表示する表示結果の例である。ステップＳ６０９までの処理終了時点では、図１４の符号１４０１、１４０２で囲まれた部分が表示される。
【００５０】
変数値表示制御部４０４は、関数コール・スタック情報と現在表示している変数値の履歴情とを対応付けて変数値履歴管理部４０６に登録する（ステップＳ７０１）。
【００５１】
上述のように、ライン情報テーブルは、関数名と変数名とグローバル／ローカルを示すスコープ情報とを対応付ける。そこで、変数値表示制御部４０４は、関数名が対象カレントＰＣ値によりカレント関数を示し、スコープ情報がローカルを示すときの変数名をローカル変数名とし、その一覧をデバッグ情報管理部４０３（ライン情報テーブル）から取得する（ステップＳ７０２）。
【００５２】
上述のように、ライン情報テーブルは、関数名と変数名と代入／参照を示す状態情報とグローバル／ローカルを示すスコープ情報とを対応付ける。そこで、変数値表示制御部４０４は、関数名が対象カレントＰＣ値によりカレント関数を示し、状態情報が代入／参照を示し、スコープ情報がグローバルを示しているときの変数名をグローバル変数名とし、その一覧をデバッグ情報管理部４０３（ライン情報テーブル）から取得する（ステップＳ７０３）。
【００５３】
変数値表示制御部４０４は、グローバル／ローカル変数名の一覧を取得できなかった場合（ステップＳ７０４−ＮＯ）、ステップＳ７０５〜Ｓ７０９の処理を行わない。即ち、変数値表示処理を終了する。
【００５４】
一方、変数値表示制御部４０４は、グローバル／ローカル変数名のどちらか１つでも一覧を取得できた場合（ステップＳ７０４−ＹＥＳ）、取得したグローバルとローカル変数の一覧を基に、変数の１つ１つに対して、以下の処理を行う（ステップＳ７０５）。
【００５５】
変数値表示制御部４０４は、グローバル／ローカル変数名に従って、変数が格納されている箇所（アドレス範囲）を取得箇所としてデバッグ情報管理部４０３（ライン情報テーブル）から割り出す（ステップＳ７０６）。
【００５６】
次に、変数値表示制御部４０４は、複数の変数値のうちの、取得箇所に対応する変数値を取得変数値としてメモリ／レジスタ管理部４０５から取得する（ステップＳ７０７）。
【００５７】
次に、変数値表示制御部４０４は、履歴情報のうちの、取得変数値に該当する履歴情報を該当履歴情報として変数値履歴管理部４０６（関数履歴テーブル）から取得し、該当履歴情報に含まれる取得変数値、変数名を表示装置に表示する（ステップＳ７０８）。
【００５８】
次に、変数値表示制御部４０４は、デバッグ情報管理部４０３から取得した変数名の一覧の全ての変数に対して処理を行っていない場合（ステップＳ７０９−ＮＯ）、ステップＳ７０６〜Ｓ７０８の処理を行う。
【００５９】
一方、変数値表示制御部４０４は、上記の全ての変数に対して処理した場合（ステップＳ７０９−ＹＥＳ）、変数値表示処理を終了する。全ての処理が終了すると、図１４の符号１４０１、１４０２で囲まれた部分に加えて、符号１４０３で囲まれた部分が表示される。
【００６０】
図１１、図１２は、デバッグ情報管理部４０３の動作として、それぞれ、第１、２デバック情報管理処理を示すフローチャートである。
【００６１】
まず、第１デバック情報管理処理から説明する。第１デバック情報管理処理は、変数値表示制御部４０４から、対象カレントＰＣ値を渡されて、行番号、変数名一覧、代入／参照を示す情報の一覧を、変数値表示制御部４０４に渡す際の動作フローである。
【００６２】
デバッグ情報管理部４０３は、対象カレントＰＣ値を使用して、上述のライン情報テーブルのアドレス範囲を検索する（ステップＳ１１０１）。
【００６３】
次に、デバッグ情報管理部４０３は、ライン情報テーブル中に、対象カレントＰＣ値が該当するアドレス範囲が登録されているか否かを判定する（ステップＳ１１０２）。
【００６４】
登録されていない場合（ステップＳ１１０２−ＮＯ）、デバッグ情報管理部４０３は、第１デバック情報管理処理を終了する。第１デバック情報管理処理を終了した場合、行番号、変数名の一覧、代入／参照を示す情報の一覧を変数値表示制御部４０４に渡さない。
【００６５】
一方、登録されている場合（ステップＳ１１０２−ＹＥＳ）、デバッグ情報管理部４０３は、該当するアドレス範囲に対応する行番号、変数名の一覧、代入／参照を示す情報の一覧を変数値表示制御部４０４に渡す（ステップＳ１１０３）。
【００６６】
対象カレントＰＣ値として、０ｘ１５０が指定されている場合は、アドレス範囲の「０ｘ１５０−０ｘ１８０」が検索として該当する。この場合、行番号として「Ｌ１１」、変数名の一覧として「ａ，ｂ，ｃ，ｄ」、代入／参照を示す情報の一覧として「参照，参照，参照，代入」を変数値表示制御部４０４に渡す。
【００６７】
次に、第２デバック情報管理処理について説明する。第２デバック情報管理処理は、変数値表示制御部４０４から、対象カレントＰＣ値を渡されて、カレント関数で代入／参照しているグローバル変数名の一覧を、変数値表示制御部４０４に渡す際の動作フローである。
【００６８】
デバッグ情報管理部４０３は、対象カレントＰＣ値を使用して、ライン情報テーブルのアドレス範囲を検索する（ステップＳ１２０１）。図１３に示されるように、対象カレントＰＣ値として、０ｘ２２０が指定されている場合は、アドレス範囲の「０ｘ２００−０ｘ２３０」が検索として該当することになる。
【００６９】
次に、デバッグ情報管理部４０３は、ライン情報テーブル中に、対象カレントＰＣ値が該当するアドレス範囲が登録されているか否かを判定する（ステップＳ１２０２）。
【００７０】
登録されていない場合（ステップＳ１２０２−ＮＯ）、デバッグ情報管理部４０３は、第２デバック情報管理処理を終了する。終了した場合、グローバル変数名の一覧を変数値表示制御部４０４に渡さない（ステップＳ１２０２）。
【００７１】
一方、登録されている場合（ステップＳ１２０２−ＹＥＳ）、デバッグ情報管理部４０３は、該当するアドレス範囲に対応する関数名を取得する（ステップＳ１２０３）。
【００７２】
対象カレントＰＣ値として、０ｘ２２０が指定されている場合は、アドレス範囲の「０ｘ２００−０ｘ２３０」が検索として該当する。この場合、関数名として「ｍａｉｎ」を取得する。
【００７３】
次に、デバッグ情報管理部４０３は、取得した関数名に対応する変数名の一覧を取得する（ステップＳ１２０４）。
【００７４】
関数名として「ｍａｉｎ」を取得している場合は、変数名の一覧として、「ａ，ｂ，ｃ，ｄ」を取得する。同名が存在する場合は、１つにマージする。
【００７５】
次に、デバッグ情報管理部４０３は、取得した変数名の一覧のうち、スコープ情報がグローバルとなっている変数名を一覧として、変数値表示制御部に渡す（ステップＳ１２０５）。
【００７６】
関数名として「ｍａｉｎ」、変数名の一覧として、「ａ，ｂ，ｃ，ｄ」を取得している場合、変数名の一覧として、「ａ，ｂ，ｃ，ｄ」を変数値表示制御部４０４に渡す。関数名として「ｆｕｎｃＢ」、変数名の一覧として、「ａ，ｂ，ｅ」を取得している場合、変数名の一覧として、「ｂ」を変数値表示制御部４０４に渡す。
【００７７】
図８、図９は、変数値履歴管理部４０６の動作として、それぞれ、第１、２変数値履歴管理処理を示すフローチャートである。
【００７８】
まず、第１変数値履歴管理処理から説明する。第１変数値履歴管理処理は、変数値表示制御部４０４から対象関数コール・スタック情報を渡されて、履歴情報を該当履歴情報として変数値表示制御部４０４に渡す際の動作フローである。
【００７９】
変数値履歴管理部４０６は、関数履歴テーブルの関数コール・スタック情報を検索する（ステップＳ８０１）。
【００８０】
図１０は、本発明を適用して、図２に示されるＣソースファイル４０７のＬ７から実行を開始してＬ１４で停止した場合に、変数値履歴管理部４０６が生成する関数履歴テーブルの例である。図１０に示されるように、関数コール・スタック情報として、「ｍａｉｎ」が指定されている場合は、複数の関数コール・スタック情報のうちの１番目の関数コール・スタック情報１００１が該当することになる。関数コール・スタック情報として、「ｍａｉｎ→ｆｕｎｃＢ」が指定されている場合は、複数の関数コール・スタック情報のうちの３番目の関数コール・スタック情報１００２が該当することになる。
【００８１】
次に、変数値履歴管理部４０６は、関数履歴テーブル中に、変数値履歴管理部４０４から渡された関数コール・スタック情報が登録されているか否かを判定する（ステップＳ８０２）。
【００８２】
登録されていない場合（ステップＳ８０２−ＮＯ）、変数値履歴管理部４０６は、第１変数値履歴管理処理を終了する。終了した場合、履歴情報を変数値表示制御部４０４に渡さない（ステップＳ８０２）。
【００８３】
登録されている場合（ステップＳ８０２−ＹＥＳ）、変数値履歴管理部４０６は、対象関数コール・スタック情報に対する履歴情報を該当履歴情報として変数値表示制御部４０４に渡す（ステップＳ８０３）。
【００８４】
対象関数コール・スタック情報１００１として、「ｍａｉｎ」が指定されている場合は、該当履歴情報として、１番目から１０番目までの履歴情報１００３が該当することになる。対象関数コール・スタック情報として、「ｍａｉｎ→ｆｕｎｃＢ」が指定されている場合は、該当履歴情報として、１４番目から１６番目までの履歴情報１００４が該当することになる。
【００８５】
次に、第２変数値履歴管理処理について説明する。第２変数値履歴管理処理は、変数値表示制御部４０４から対象関数コール・スタック情報と該当履歴情報を渡されて、関数履歴テーブルを更新する際の動作フローである。
【００８６】
変数値履歴管理部４０６は、関数履歴テーブル内の対象関数コール・スタック情報を検索する（ステップＳ９０１）。
【００８７】
次に、変数値履歴管理部４０６は、関数履歴テーブル中に、変数値履歴管理部４０４から渡された対象関数コール・スタック情報が登録されているか否かを判定する（ステップＳ９０２）。
【００８８】
登録されている場合（ステップＳ９０２−ＹＥＳ）、変数値履歴管理部４０６は、関数履歴テーブル内の対象関数コール・スタック情報に対する履歴情報を、変数値表示制御部４０４から渡された該当履歴情報に更新する（ステップＳ９０３）。変数値履歴管理部４０６は、対象関数コール・スタック情報として、「ｍａｉｎ」が指定されている場合は、該当履歴情報として１番目から１０番目までの履歴情報１００３が該当することになり、現在登録されている情報を削除して、変数値表示制御部４０４から渡された該当履歴情報に更新する。
【００８９】
一方、登録されていない場合（ステップＳ９０２−ＮＯ）、変数値履歴管理部４０６は、新規に、変数値表示制御部４０４から渡された対象関数コール・スタック情報と該当履歴情報を関数履歴テーブルに登録する（ステップＳ９０４）。変数値履歴管理部４０６は、対象関数コール・スタック情報として「ｍａｉｎ→ｆｕｎｃＤ」、該当履歴情報として「変数名：ｆ，行番号：Ｌ３０，ファイル名：ｓｕｂ．ｃ，値：１００」が指定されている場合は、関数履歴テーブル内の最後尾のデータとして登録する。
【００９０】
変数値履歴テーブルは、ダウンロード部４０１が実行形式ファイル４０９をダウンロードするタイミングでクリアされる。
【００９１】
［効果］
以上の説明により、本発明の実施形態によるデバック装置では、コンパイラ処理部４０８は、Ｃソースファイル４０７に対して、プログラムとライン情報テーブルとを含む実行形式ファイル４０９を生成する。ライン情報テーブルには、ファイル名、関数名、行番号、変数が格納されている箇所を表す情報、変数名、代入／参照を示す情報、グローバル／ローカルを示すスコープ情報を複数対応付けられている。メモリ／レジスタ管理部４０５は、複数の変数が格納されている箇所を表す情報と、複数の変数値とを格納している。変数値履歴管理部４０６は、実行制御部４０２が過去にプログラムを実行して停止したときの変数値と、その変数値に対する変数名、行番号、ファイル名とを履歴情報とし、そのときの関数コール・スタック情報と履歴情報とを対応付けて関数履歴テーブルに格納する。変数値表示制御部４０４は、プログラムが停止している時点での関数内で代入／参照されているグローバル変数、ローカル変数の箇所を取得箇所としてデバッグ情報管理部４０３（ライン情報テーブル）から取得する。変数値表示制御部４０４は、メモリ／レジスタ管理部４０５に格納された複数の変数値の中から、上記取得箇所に対応する変数値を取得変数値として取得する。また、変数値表示制御部４０４は、実行制御部４０２がプログラムを実行して停止したときの対象関数コール・スタック情報を取得し、関数履歴テーブルに格納された履歴情報の中から、対象関数コール・スタック情報に対応し、且つ、上記取得変数値に該当する履歴情報を該当履歴情報として取得する。変数値表示制御部４０４は、該当履歴情報に含まれる取得変数値、変数名、行番号と、上記の取得箇所に対する代入／参照を示す情報とを対応付けて表示装置に表示する。変数値表示制御部４０４は、該当履歴情報を上記の履歴情報として変数値履歴管理部４０６の関数履歴テーブルに格納することにより、関数履歴テーブルを更新する。
【００９２】
このように、従来では、第１の問題点として、変数の代入に関する履歴しか表示していなかったが、本発明では、変数値表示制御部４０４は、デバッグ情報管理部４０３から変数の代入／参照箇所に関する情報を取得して、代入箇所だけでなく、参照箇所での変数値も表示装置に表示するようにしている。これにより、変数の代入先を探す作業を省くことができ、デバッグ作業の効率が上がる。
【００９３】
また、従来では、第２の問題点として、プログラム停止時点での全ての変数の変更履歴を表示しているため、同名の変数が区別しにくいが、本発明では、上記の取得変数値（デバッグ対象となっている関数にて代入／参照している変数値）に該当する履歴情報を該当履歴情報として、即ち、変更履歴として表示装置に表示するようにしている。これにより、スコープの異なる同名の変数が表示されなくなり、デバッグ時に異なる変数を参照することによる作業ミスを回避できる。
【００９４】
また、従来では、第３の問題点として、全ての履歴が表示されているが、本発明では、デバッグ対象となっている関数のデバッグに必要な変数の変更履歴のみを表示装置に表示するようにしている。これにより、デバッグ作業の効率が上がる。
【００９５】
更に、本発明では、変数名に、変数に対して代入／参照を行っている行番号を追加して表示装置に表示することで、該当行番号が実行された時点でのローカル変数の変数値を一瞬で判断できる。
【符号の説明】
【００９６】
１０１    実行形式ファイル、
１０２    プロセッサ制御部、
１０３    変数監視部、
１０４    レジスタ履歴メモリ、
１０５    ソース行履歴メモリ、
１０６    変数履歴メモリ、
１０７    レジスタ表示部、
１０８    プログラム表示部、
１０９    変数表示部、
４０１    ダウンロード部、
４０２    実行制御部、
４０３    デバッグ情報管理部、
４０４    変数値表示制御部、
４０５    メモリ／レジスタ管理部、
４０６    変数値履歴管理部、
４０７    Ｃソースファイル、
４０８    コンパイラ処理部、
４０９    実行形式ファイル、
１００１    関数コール・スタック情報、
１００２    関数コール・スタック情報、
１００３    履歴情報、
１００４    履歴情報、
１４０１    部分（表示結果）、
１４０２    部分（表示結果）、
１４０３    部分（表示結果）
【図１】
2011107883.tif 000003
【図２】
2011107883.tif 000004
【図３】
2011107883.tif 000005
【図４】
2011107883.tif 000006
【図５】
2011107883.tif 000007
【図６】
2011107883.tif 000008
【図７】
2011107883.tif 000009
【図８】
2011107883.tif 000010
【図９】
2011107883.tif 000011
【図１０】
2011107883.tif 000012
【図１１】
2011107883.tif 000013
【図１２】
2011107883.tif 000014
【図１３】
2011107883.tif 000015
【図１４】
2011107883.tif 000016