(57)【要約】【課題】デバッグ作業者の負担を軽減し、デバッグ作業の効率を向上させるプログラムデバッグ装置を提供する。【解決手段】  プログラムデバッグ装置は、実行条件付き命令を含むプログラムをデバッグするためのデバッグ装置であって、当該プログラムの全体に亘って、前記実行条件とは無関係の停止条件により停止した命令が実行条件付き命令であるか否かを判定し、実行条件付き命令であると判定された場合に、当該実行条件の成否を判定し、実行条件が成立していると判定された場合に当該命令を停止命令と決定し、実行条件が不成立であると判定された場合に、当該命令の次に実行される命令を停止命令と決定する。【選択図】図８
2005063429.tif 000002
【特許請求の範囲】
【請求項１】
実行条件付き命令を含むプログラムをデバッグするためのプログラムデバッグ装置であって、
当該プログラムの全体に亘って、前記実行条件とは無関係の停止条件により停止した命令が実行条件付き命令であるか否かを判定する命令判定手段と、
実行条件付き命令であると判定された場合に、当該実行条件の成否を判定する条件判定手段と、
実行条件が成立していると判定された場合に当該命令を停止命令と決定し、実行条件が不成立であると判定された場合に当該命令の次に実行される命令を停止命令と決定する決定手段と
を備えることを特徴とするプログラムデバッグ装置。
【請求項２】
前記決定手段は、次に最も早く実行される命令であって、実行条件が成立している命令または実行条件のない命令のアドレスを算出し、算出されたアドレスを停止命令の命令アドレスと決定する
ことを特徴とする請求項１記載のプログラムデバッグ装置。
【請求項３】
プログラムデバッグ装置は、さらに、
前記条件判定手段によって実行条件が不成立であると判定された場合に、次に最も早く実行される命令であって、実行条件が成立している命令または実行条件のない命令の直前までプログラム実行を制御する再実行手段を備える
ことを特徴とする請求項１記載のプログラムデバッグ装置。
【請求項４】
前記再実行手段は、
前記命令判定手段によって実行条件付き命令と判定された場合に、ブレーク対象の命令が実行条件付き命令であり、かつ実行条件が成立しているときのみプログラムの実行をブレークする実行条件付きブレークを、前記停止条件により停止した命令のアドレスに設定する実行条件付きブレーク設定部と、
実行条件が成立している実行条件付き命令または実行条件のない命令のステップ実行によりブレークする、条件付きシングルステップ実行を行う条件付きシングルステップ実行部と、
前記条件付きシングルステップ実行部による条件付きシングルステップ実行後、前記実行条件付きブレーク設定部によって設定されたブレークを解除するブレーク解除部と
を備えることを特徴とする請求項３記載のプログラムデバッグ装置。
【請求項５】
プログラムデバッグ装置は、さらに、
ユーザにより設定可能なフラグを保持するフラグ保持手段と、
前記フラグ保持手段のフラグが所定の値のとき、前記命令判定手段、条件判定手段および決定手段の動作を禁止する禁止手段と
を備えることを特徴とする請求項１記載のプログラムデバッグ装置。
【請求項６】
プログラムデバッグ装置は、さらに、
表示部におけるプログラムの表示状態に応じてフラグ保持手段のフラグの値を変更するフラグ変更手段を備えることを特徴とする請求項５記載のプログラムデバッグ装置。
【請求項７】
前記フラグ変更手段は、
前記表示状態として、ソースプログラムを表示するウィンドウが表示されているとき、前記フラグを前記所定の値に設定し、前記表示状態としてソースプログラムの表示ウィドウが表示されていないとき、前記フラグを前記所定の値以外に設定する
ことを特徴とする請求項６記載のプログラムデバッグ装置。
【請求項８】
前記フラグ変更手段は、
前記表示状態としてソースプログラムの表示ウィドウが選択されているとき、前記フラグを前記所定の値に設定し、前記表示状態としてソースプログラムの表示ウィドウが選択されていないとき、前記フラグを前記所定の値以外に設定する
ことを特徴とする請求項６記載のプログラムデバッグ装置。
【請求項９】
前記フラグ変更手段は、
前記表示状態としてソースプログラムの表示ウィドウが選択されているとき、前記フラグを前記所定の値に設定し、前記表示状態としてアセンブリプログラムの表示ウィドウが選択されているとき、前記フラグを前記所定の値以外に設定する
ことを特徴とする請求項６記載のプログラムデバッグ装置。
【請求項１０】
前記命令判定手段は、ユーザに通知されずプログラムデバッグ装置の管理下で設定されるブレークであって、実行条件の成否に関わらないテンポラリブレークによって停止した命令について、前記判定を行う
ことを特徴とする請求項１記載のプログラムデバッグ装置。
【請求項１１】
前記プログラムデバッグ装置は、さらに、ユーザ設定可能な規定数を保持する規定数保持手段を備え、
前記決定手段は、前記条件判定手段によって実行条件が不成立であると判定された場合、前記停止条件により停止した命令に、実行条件が不成立の条件付き命令が前記規定数以上後続する場合には、当該停止した命令を停止命令と決定する
ことを特徴とする請求項１記載のプログラムデバッグ装置。
【請求項１２】
前記プログラムデバッグ装置は、さらに、決定手段によって停止命令が決定されたときに、プログラム停止前に最後に実行した命令であって、実行条件が成立している実行条件付き命令あるいは実行条件のない命令を検索する最終実行命令検索手段と、
前記最終実行命令検索手段において検索された命令のアドレスを基に高級言語のソースコード中のいずれの行で停止しているかを判定する停止行判定手段と、
判定された行を表示するよう表示部を制御する表示制御手段と
を備えることを特徴とする請求項１記載のプログラムデバッグ装置。
【請求項１３】
前記停止行判定手段は、最終実行命令検索手段が前記最終実行の検索に失敗した場合に、現在のプログラムカウンタが指すアドレスを基に高級言語のソースコード中のいずれの行で停止しているかを判定し、
前記表示制御手段は、前記最終実行の検索が失敗した場合に、ソースコード行が実行されていないことを表示するよう表示部を制御する
ことを特徴とする請求項１２記載のプログラムデバッグ装置。
【請求項１４】
前記プログラムデバッグ装置は、さらに、
コンパイラから出力されるデバッグ情報から、連続する実行条件付き命令の最大個数を取得する取得手段と、
実行条件が成立していない実行条件付き命令をいくつ連続して通過したかを示す連続通過命令数をカウントする連続通過命令数カウント手段と、
前記連続通過命令数が前記最大個数を上回った場合にブレーク割込みを発生させるブレーク割込み発生手段とを備える
ことを特徴とする請求項１記載のプログラムデバッグ装置。
【請求項１５】
プログラムデバッグ装置に接続され、デバッグ対象プログラムを実行するデータ処理装置であって、
実行条件が成立している実行条件付き命令が実行された場合および実行条件のない通常の命令が実行された場合にセットされる命令実行フラグを保持する実行フラグ保持手段と、
最後に実行された、実行条件が成立している実行条件付き命令または実行条件のない通常の命令のいずれかの命令のアドレスを保持する最終実行命令アドレスレジスタと
を備えることを特徴とするデータ処理装置。
【請求項１６】
前記データ処理装置は、さらに、
任意に選択された１つ以上の割込み要因を指定するイベント指定レジスタと、
割込み要求信号を保持するための割込み要因レジスタと、
前記イベント指定レジスタで指定された割込みの要因の少なくともひとつが前記割込み要因レジスタに保持されている場合に、前記最終実行命令アドレスレジスタと前記実行フラグ保持手段の更新を禁止する更新禁止手段と
を備えることを特徴とする前記請求項１５記載のデータ処理装置。
【請求項１７】
前記データ処理装置は複数命令を同時に実行し、
前記データ処理装置は、さらに、
同時に実行される複数命令のアドレスを比較するアドレス比較器と、
前記比較器によるアドレス比較の結果、最も高位のアドレスを選択して最終実行命令アドレスレジスタへ出力する選択出力手段と
を備えることを特徴とする請求項１５記載のデータ処理装置。
【請求項１８】
前記データ処理装置は、さらに、
実行条件が成立していない実行条件付き命令をいくつ連続して通過したかを示す連続通過命令数をカウントする連続通過命令数カウント手段と、
前記連続通過命令数が規定の値を上回った場合にブレーク割込みを発生させるブレーク割込み発生手段と
を備えることを特徴とする請求項１５記載のデータ処理装置。
【請求項１９】
前記データ処理装置は、さらに、
実行条件が不成立の実行条件付き命令に設定されたブレークポイントを有効にしないブレークポイント通過手段と、
実行条件が不成立の実行条件付き命令がブレークポイントを通過した後に前記連続通過命令数カウント手段を有効にする有効化手段と
を備えることを特徴とする請求項１８記載のデータ処理装置。
【請求項２０】
前記ブレーク割込み発生手段は、ブレーク割込み発生時に連続通過命令数カウント手段をリセットする
ことを特徴とする請求項１９記載のデータ処理装置。
【請求項２１】
前記データ処理装置は、さらに、
前記ブレークポイント通過手段により通過されたブレークポイントの対象命令と、実行条件が成立している実行条件付き命令あるいは実行条件付きでない命令とを同時に実行している際に、前者の命令のアドレスが後者の命令のアドレスより低位にある場合は、前記連続通過命令数カウント手段を有効にしない無効化手段を備える
ことを特徴とする請求項２０記載のデータ処理装置。
【請求項２２】
プログラムデバッグ装置に接続され、デバッグ対象プログラムを実行するデータ処理装置であって、
実行条件が成立していない実行条件付き命令をいくつ連続して通過したかを示す連続通過命令数をカウントする連続通過命令数カウント手段と、
前記連続通過命令数が規定の値を上回った場合にブレーク割込みを発生させるブレーク割込み発生手段と
を備えることを特徴とするデータ処理装置。
【請求項２３】
ソースプログラムに基づいてオブジェクトプログラムを生成するコンパイラであって、
生成されたオブジェクトプログラムにおいて連続する実行条件付き命令の最大個数をカウントするカウント手段と、
前記最大個数を含むデバッグ情報を生成する生成手段と
を備えることを特徴とするコンパイラ。
【請求項２４】
実行条件付き命令を含むプログラムをデバッグするためのデバッグ方法であって、
当該プログラムの全体に亘って、前記実行条件とは無関係の停止条件により停止した命令が実行条件付き命令であるか否かを判定する命令判定ステップと、
実行条件付き命令であると判定された場合に、当該実行条件の成否を判定する条件判定ステップと、
実行条件が成立していると判定された場合に当該命令を停止命令と決定し、実行条件が不成立であると判定された場合に、当該命令の次に実行される命令を停止命令と決定する決定ステップと
を有することを特徴とするプログラムデバッグ方法。
【請求項２５】
請求項１ないし請求項１４の何れか１項に記載のプログラムデバッグ装置における各手段の機能をコンピュータに発揮させることを特徴とするプログラム。
【請求項２６】
プログラムデバッグ装置によるデバッグ対象となるプログラムであって、
前記プログラムは、プログラムに含まれる連続する実行条件付き命令の最大個数を示すデバッグ情報を含む
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを任意に実行及び停止させながらプログラムの実行状態を表示することによりソフトウェア開発者のプログラム開発を支援するプログラムデバッグ装置に関し、特に、実行条件付き命令を有するプロセッサを対象とするデバッグ装置に関する。
【背景技術】
【０００２】
プロセッサ上で動作するプログラムの実行を一時的に停止させてプログラムの実行状態を表示するデバッグ装置は、プログラム開発において有用である。プログラムデバッグ装置では、プログラムの任意の命令にブレークポイントを設定し、プログラムを一時的に停止させる。これに関する先行技術文献として特許文献１がある。
【０００３】
この特許文献１に開示された割込制御装置（プログラムデバッグ装置）は、実行条件付き命令の条件の成否を判定する判定部を有し、その判定結果に基づいてブレーク割込みの発生を制御する構成が開示されている。ここで、実行条件付き命令とは実行条件の指定を含む命令であり、実行条件が成立していない場合には実行されず、実行条件が成立している場合にのみ実行される命令をいう。また、実行条件としては、プロセッサ内の状態レジスタ中の１つのフラグの値が指定される。上記特許文献１の割り込み制御装置は、ブレークポイントと一致する命令であっても、実行条件が不成立である実行条件付き命令である場合には、ブレーク割り込みを発生させないようにすることができる。その結果、当該実行条件付き命令でプログラムが停止しないようにすることができる。これにより、デバッグ動作に不要な箇所でプログラムを中断させないようにすることができる。
【特許文献１】特開２００１−１５４８７７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上記従来技術によれば、ブレークポイントを設定する際に、全てのブレークポイントに対しブレーク対象命令の実行条件を評価するか否かを指定せねばならず、十分な注意を払わなければ、デバッグ作業者が停止を期待する箇所でプログラムが停止しない場合がある。このためデバッグ作業者の負担が増し、デバッグ作業の効率が落ちるという問題がある。
【０００５】
例えば、ブレークポイントに対し実行条件を評価するか否かを個別に指定するという作業が生じることになる。また、実行条件付き命令で停止した場合に、デバッグ作業者は当該実行条件付き命令が、どのブレークポイントであるか、本当に実行条件を評価すると指定していたのか、本当に実行条件の成立により停止したのか等をその都度確認するという作業が余分に発生する場合がある。
【０００６】
また、デバッグ装置においてプログラムリストにおける停止した実行条件付き命令の位置を表示する場合において、当該実行条件付き命令が、本当に実行条件を評価すると指定していたのか、本当に実行条件の成立により停止したのかデバッグ作業者は即座に判断できないという問題がある。
【０００７】
本発明は、デバッグ作業者の負担を軽減し、デバッグ作業の効率を向上させるプログラムデバッグ装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するため本発明のプログラムデバッグ装置は、実行条件付き命令を含むプログラムをデバッグするためのプログラムデバッグ装置であって、当該プログラムの全体に亘って、前記実行条件とは無関係の停止条件により停止した命令が実行条件付き命令であるか否かを判定する命令判定手段と、実行条件付き命令であると判定された場合に、当該実行条件の成否を判定する条件判定手段と、実行条件が成立していると判定された場合に当該命令を停止命令と決定し、実行条件が不成立であると判定された場合に当該命令の次に実行される命令を停止命令と決定する決定手段とを備える。
【０００９】
この構成によれば、デバッグ対象プログラムの実行に影響を与えない命令で停止しないため、デバッグ作業者のデバッグ作業の効率化に役立つ。例えば、デバッグ作業者がシングルステップ実行を行ないながらデバッグ対象プログラムの動作を確認する場合、実行条件付き命令の実行条件の成否を確認することなく、デバッグ対象プログラムの挙動を追うことができる。
【００１０】
ここで、プログラムデバッグ装置は、さらに、前記条件判定手段によって実行条件が不成立であると判定された場合に、次に最も早く実行される命令であって、実行条件が成立している命令または実行条件のない命令の直前までプログラム実行を制御する再実行手段を備える構成にしてもよい。
【００１１】
この構成によれば、デバッグ対象プログラムが通過命令を実行中だとしても、デバッグ対象プログラムを停止させることができ、デバッグ作業者によるデバッグ対象プログラムの強制停止操作が任意の箇所で行なうことができるのでデバッグ作業が効率化される。
【００１２】
以下、断り無く「実行される（実行された）命令」と記述されている場合、「実行条件が成立している（成立していた）命令あるいは実行条件がない（なかった）命令」を指すとする。以下、断り無く「次実行命令」と記述されている場合、「次に最も早く実行される命令」を指すとする。
【００１３】
ここで、前記決定手段は、次に最も早く実行される命令であって、実行条件が成立している命令または実行条件のない命令のアドレスを算出し、算出されたアドレスを停止命令の命令アドレスと決定する構成にしてもよい。
【００１４】
この構成によれば、デバッグ対象プログラムが通過命令で停止した後、デバッグ対象プログラムを再実行するオーバーヘッドを省略でき、デバッグ作業者のデバッグ作業時間を短縮できるのでデバッグ作業が効率化される。
【００１５】
ここで、前記再実行手段は、命令判定手段によって実行条件付き命令と判定された場合に、ブレーク対象の命令が実行条件付き命令であり、かつ実行条件が成立しているときのみプログラムの実行をブレークする実行条件付きブレークを、前記停止条件により停止した命令のアドレスに設定する実行条件付きブレーク設定部と、実行条件が成立している実行条件付き命令または実行条件のない命令のステップ実行によりブレークする、条件付きシングルステップ実行を行う条件付きシングルステップ実行部と、前記条件付きシングルステップ実行部による条件付きシングルステップ実行後、前記実行条件付きブレーク設定部によって設定されたブレークを解除するブレーク解除部とを備える構成にしてもよい。
【００１６】
この構成によれば、デバッグ対象プログラムが実行条件が非成立の実行条件付き命令で停止しているか否かを解析する処理が不要となり、デバッグ対象プログラムが動作するプロセッサの命令セットに依存する処理が減るため、前記第１のプログラムデバッグ装置を多種のプロセッサに対応させることが容易になる。これにより、前記第１のプログラムデバッグ装置の開発工数を削減できる。
【００１７】
ここで、プログラムデバッグ装置は、さらに、ユーザにより設定可能なフラグを保持するフラグ保持手段と、前記フラグ保持手段のフラグが所定の値のとき、前記命令判定手段、条件判定手段および決定手段の動作を禁止する禁止手段とを備える構成にしてもよい。
【００１８】
この構成によれば、デバッグ作業者は、プログラムカウンタの変更に着目した命令実行フローのデバッグ作業と、実行される命令に着目した論理デバッグ作業のどちらを行なうかに応じて柔軟にデバッグ作業のスタイルを変更でき、デバッグ作業が効率化される。また、デバッグ作業者は、前記フラグをリセットしてプログラムカウンタの変更に着目した命令実行フローのデバッグ作業を行なう際に、ブレークポイントが設定された箇所を命令実行フローが通過したときには必ずデバッグ対象プログラムを停止させることができ、自動的に、ブレークポイントがより命令実行フローのデバッグ作業に効果的となる。これにより、デバッグ作業が効率化される。
【００１９】
ここで、プログラムデバッグ装置は、さらに、表示部におけるプログラムの表示状態に応じてフラグ保持手段のフラグの値を変更するフラグ変更手段を備えｔもよい。
ここで、前記フラグ変更手段は、前記表示状態として、ソースプログラムを表示するウィンドウが表示されているとき、前記フラグを前記所定の値に設定し、前記表示状態としてソースプログラムの表示ウィドウが表示されていないとき、前記フラグを前記所定の値以外に設定するようにしてもよい。
【００２０】
ここで、前記フラグ変更手段は、前記表示状態としてソースプログラムの表示ウィドウが選択されているとき、前記フラグを前記所定の値に設定し、前記表示状態としてソースプログラムの表示ウィドウが選択されていないとき、前記フラグを前記所定の値以外に設定するようにしてもよい。
【００２１】
ここで、前記フラグ変更手段は、前記表示状態としてソースプログラムの表示ウィドウが選択されているとき、前記フラグを前記所定の値に設定し、前記表示状態としてアセンブリプログラムの表示ウィドウが選択されているとき、前記フラグを前記所定の値以外に設定するようにしてもよい。
【００２２】
この構成によれば、ユーザがわざわざフラグを明示的に設定しなくても、ユーザがソースプログラムに着目している際には、実行条件非成立の命令による停止がなくなり、ソースコード上のどの位置でプログラムが停止しているかを誤解することなく把握することができる。さらに、ユーザがアセンブリコードに着目している際には、全ての命令で停止するため、どのアセンブラコードがフェッチされて命令パイプライン中に存在するかを容易に把握することができる。
【００２３】
ここで、前記命令判定手段は、ユーザに通知されずプログラムデバッグ装置の管理下で設定されるブレークであって、実行条件の成否に関わらないテンポラリブレークによって停止した命令について、前記判定を行う構成にしてもよい。
【００２４】
この構成によれば、Ｃソースコードレベルのシングルステップ実行や関数が終了するまで実行を継続するリターン実行を行なう際に、テンポラリブレークを設定する命令に関わらず、テンポラリブレークを通過してデバッグ対象プログラムが実行されることがなくなるため、デバッグ作業者が期待する箇所で停止することができ、また、テンポラリブレークを設定する命令の種別を判定しなくても良いので、デバッガ開発における複雑さが軽減され、デバッガ開発工数が削減される。
【００２５】
ここで、前記プログラムデバッグ装置は、さらに、ユーザ設定可能な規定数を保持する規定数保持手段を備え、前記決定手段は、前記条件判定手段によって実行条件が不成立であると判定された場合、前記停止条件により停止した命令に、実行条件が不成立の条件付き命令が前記規定数以上後続する場合には、当該停止した命令を停止命令と決定する構成にしてもよい。
【００２６】
この構成によれば、停止アドレスが変更される際に、停止アドレスが実行中の命令からデバッグ作業者が直感的に認識できないほど離れたアドレスに変更されることがなくなり、デバッグ作業者にとって予測しやすい結果を示すことができ、デバッグ作業が効率化される。
【００２７】
ここで、前記プログラムデバッグ装置は、さらに、決定手段によって停止命令が決定されたときに、プログラム停止前に最後に実行した命令であって、実行条件が成立している実行条件付き命令あるいは実行条件のない命令を検索する最終実行命令検索手段と、前記最終実行命令検索手段おいて検索された命令のアドレスを基に高級言語のソースコード中のいずれの行で停止しているかを判定する停止行判定手段と、判定された行を表示するよう表示部を制御する表示制御手段とを備える構成としてもよい。
【００２８】
この構成によれば、通過命令に対応するソースコード行すなわち実行されないソースコード行を停止ソースコード行としないため、デバッグ作業者はいずれのソースコードが実行されているかを正確に認識することができ、デバッグ作業が効率化される。また、通過命令に基づいて停止アドレスを変更しないため、デバッグ作業者は、デバッグ対象プログラム停止時の正確なプログラムカウンタを観測することができる。
【００２９】
ここで、前記停止行判定手段は、最終実行命令検索手段が前記最終実行の検索に失敗した場合に、現在のプログラムカウンタが指すアドレスを基に高級言語のソースコード中のいずれの行で停止しているかを判定し、前記表示制御手段は、前記最終実行の検索が失敗した場合に、ソースコード行が実行されていないことを表示するよう表示部を制御する構成にしてもよい。
【００３０】
この構成によれば、デバッグ対象プログラム中に実行された命令がなかったとしても、デバッグ対象プログラム中における現在位置をデバッグ作業者が直感的に認識しやすくなり、デバッグ作業が効率化される。また、実行されないソースコード行にも常に停止する場合に比べ、実行されないソースコード行で停止するのが最終実行命令の検索が失敗したときのみなので、デバッグ作業者が実行されないソースコード行を意識する時間が短縮され、デバッグ作業が効率化される。
【００３１】
前記課題を解決するため本発明のデータ処理装置は、プログラムデバッグ装置に接続され、デバッグ対象プログラムを実行するデータ処理装置であって、実行条件が成立している実行条件付き命令が実行された場合および実行条件のない通常の命令が実行された場合にセットされる命令実行フラグを保持する実行フラグ保持手段と、最後に実行された、実行条件が成立している実行条件付き命令または実行のない通常の命令のいずれかの命令のアドレスを保持する最終実行命令アドレスレジスタとを備える。
【００３２】
この構成によれば、前記最終実行命令検索手段において、最終実行命令を検索する際に、プロセッサに依存した命令解析をする必要がなくなり、デバッガ開発におけるプロセッサ依存の箇所が減るため、デバッガが別のプロセッサ対応を行なう場合の工数が削減される。また、トレースデータを用いて最終実行命令を検索する前記第２のプログラムデバッグ装置に比べ、トレースデータに対する検索処理が省略できるので、前記第３のプログラムデバッグ装置が簡単化できる。
【００３３】
ここで、前記データ処理装置は、さらに、任意に選択された１つ以上の割込み要因を指定するイベント指定レジスタと、割込み要求信号を保持するための割込み要因レジスタと、前記イベント指定レジスタで指定された割込みの要因の少なくともひとつが前記割込み要因レジスタに保持されている場合に、前記最終実行命令アドレスレジスタと前記実行フラグ保持手段の更新を禁止する更新禁止手段とを備える構成にしてもよい。
【００３４】
この構成によれば、前記最終実行命令アドレスレジスタと前記命令実行フラグは、ブレークポイント割込み発生時など、デバッグイベント割込み要求発生時の状態を自動的に保持され、また、割込み検出後、割込み要求の登録をリセットする際に、自動的に更新が再会されることになるため、特別なステップを踏まなくとも前記最終実行命令検索手段において検出すべき命令を検出することができる。
【００３５】
ここで、前記データ処理装置は複数命令を同時に実行し、さらに、同時に実行される複数命令のアドレスを比較するアドレス比較器と、前記比較器によるアドレス比較の結果、最も高位のアドレスを選択して最終実行命令アドレスレジスタへ出力する選択出力手段とを備える構成にしてもよい。
【００３６】
この構成によれば、複数の命令を同時に実行可能なプロセッサで動作するデバッグ対象プログラムの中で、最も前方にある実行された命令のアドレスを保持することが可能で、デバッグ対象プログラム中のどの部分までが既に実行されているかを、デバッグ作業者に詳細に示すことができる。これにより、デバッグ作業が効率化される。
【００３７】
ここで、前記データ処理装置は、さらに、実行条件が成立していない実行条件付き命令をいくつ連続して通過したかを示す連続通過命令数をカウントする連続通過命令数カウント手段と、前記連続通過命令数が規定の値を上回った場合にブレーク割込みを発生させるブレーク割込み発生手段とを備える構成にしてもよい。
【００３８】
この構成によれば、例えば、実行条件が成立しない命令が延々と連続するような停止位置からシングルステップ実行を行った場合でも、適度な箇所でブレークすることができ、デバッグ作業を効率化させる。
【００３９】
ここで、前記データ処理装置は、さらに、実行条件が不成立の実行条件付き命令に設定されたブレークポイントを有効にしないブレークポイント通過手段と、実行条件が不成立の実行条件付き命令がブレークポイントを通過した後に前記連続通過命令数カウント手段を有効にする有効化手段とを備える構成にしてもよい。
【００４０】
この構成によれば、例えば、命令メモリ中のデバッグ対象プログラムがおかれている領域以外の領域が、通過命令で埋められている状態で、ブレークポイントがデバッグ対象プログラムの最後の命令に設定されており、且つ前記最後の命令が通過命令であったとしても、ブレークポイント通過後、一定の範囲内でブレークするため、デバッグ作業者が前記最後の命令を実行したことを認識しやすくなる。これにより、デバッグ作業が効率化される。
【００４１】
ここで前記ブレーク割込み発生手段は、ブレーク割込み発生時に連続通過命令数カウント手段をリセットする構成にしてもよい。
【００４２】
この構成によれば、前記第４のプログラム実行装置が、実行条件の成立していない実行条件付き命令に対してブレーク割込みを発生させる手段を実装していなくとも、通過する命令にブレークポイントが設定されていれば、前記通過命令数超過ブレーク割込みが必ず発生する。これにより、ブレーク対象命令が実行条件の成立していない実行条件付き命令に対してブレークを発生させるか否かを指定する専用の手段を用意する必要がなくなり、前記第４のプログラム実行装置を簡単化できる。
【００４３】
ここで、前記データ処理装置は、さらに、前記ブレークポイント通過手段により通過されたブレークポイントの対象命令と、実行条件が成立している実行条件付き命令あるいは実行条件付きでない命令とを同時に実行している際に、前者の命令のアドレスが後者の命令のアドレスより低位にある場合は、前記連続通過命令数カウント手段を有効にしない無効化手段を備える構成にしてもよい。
【００４４】
この構成によれば、複数の命令を同時に実行可能なプロセッサで動作するデバッグ対象プログラムの中で、同時に実行条件を評価される命令同士の中での前後関係を正確に反映することができ、デバッグ作業者が前記通過命令数超過ブレーク割込みの発生理由を直感的に理解することが可能となるため、デバッグ作業が効率化される。
【００４５】
また、本発明のコンパイラは、ソースプログラムに基づいてオブジェクトプログラムを生成するコンパイラであって、生成されたオブジェクトプログラムにおいて連続する実行条件付き命令の最大個数をカウントするカウント手段と、前記最大個数を含むデバッグ情報を生成する生成手段とを備える。
【００４６】
また、本発明のプログラムは、プログラムデバッグ装置によるデバッグ対象となるプログラムであって、前記プログラムは、プログラムに含まれる連続する実行条件付き命令の最大個数を示すデバッグ情報を含む。
【００４７】
このコンパイラ及びプログラムによれば、プログラムデバッグ装置あるいはデータ処理装置に対して、プログラムの暴走検知の精度を向上させるデバッグ情報を提供することができる。
【００４８】
また、本発明のプログラムデバッグ方法、コンピュータに実現させるプログラムについても、上記と同様の構成、作用、効果を有する。
【発明の効果】
【００４９】
上記のように構成された本発明の実施例によれば、実行条件付き命令をブレーク対象とするブレークポイントが、どの場合に有効になるかをデバッグ作業者が意識しなくとも、プログラムデバッグ装置が、自動的に、実行条件が成立していない実行条件付き命令をブレーク対象とするブレークポイントを通過するか否かを制御するため、実行されない命令に対応するソースコード行においてデバッグ対象プログラムが停止しているように表示される状態がほぼなくなり、デバッグ作業者が直感的にデバッグ対象プログラムの実行経路を認識しやすくなり、デバッグ作業が効率化される。
【００５０】
また、通過命令が連続する箇所にブレークポイントを設定するなど、特別な場合においても、デバッグ作業者がデバッグ対象プログラムの実行経路を見失うことがないように、デバッグ作業者の予想範囲内でデバッグ対象プログラムを自動的にブレークさせることができる。
【発明を実施するための最良の形態】
【００５１】
＜実施の形態１＞
＜プログラムデバッグシステムの外観＞
図１は、本発明の実施の形態１におけるプログラムデバッグシステムの外観を示す図である。同図のプログラムデバッグシステム１は、プログラムデバッグ装置２とプログラム実行装置３とからなる。
【００５２】
プログラムデバッグ装置２は、本体装置２ａ、表示装置２ｂ、入力装置２ｃを備える。本体装置２ａは、デバッグ作業者からの入力を入力装置２ｃを介して受け、プログラム実行装置３に対してデバッグ対象プログラムの実行を制御し、実行状態を表示装置２ｂにより表示する装置である。
【００５３】
このプログラムデバッグ装置２は、デバッグ対象プログラム実行の停止に関して、実行条件が成立していない実行条件付き命令での停止をデバッグ対象プログラムの全体に亘って一律に禁止するよう構成されている。ここで、実行条件付き命令とは、実行条件の指定を含む命令であり、実行条件が成立していない場合には実行されず、実行条件が成立している場合にのみ実行される命令をいう。実行条件としてはプロセッサ内の状態レジスタ中の１つのフラグの値が指定される。また、実行条件の成立していない実行条件付き命令を、以下、通過命令と呼ぶ。
【００５４】
本実施の形態ではプログラムデバッグ装置２は、特別なフラグ（以下、スキップフラグと呼ぶ。）を有し、スキップフラグが１のときには、通過命令での停止をデバッグ対象プログラムの全体に亘って一律に禁止し、スキップフラグが０のときには、通過命令での停止をデバッグ対象プログラムの全体に亘って一律に許可する構成としている。スキップフラグのデフォルト値は１である。
【００５５】
プログラム実行装置３は、本体装置３ａ、表示装置３ｂ、入力装置３ｃを備え、デバッグ対象プログラムを実行するプロセッサ（またはプロセッサを備える評価用ボード）の動作を模倣するシミュレーションソフトウェアを実行するデータ処理装置であり、ＬＡＮケーブル４を介してプログラムデバッグ装置２から制御される。プログラム実行装置３は、ターゲットシステムが設計段階でまだ存在しない場合にその代役を務めることできる。
【００５６】
図２は、他のプログラムデバッグシステム５の外観を示す図である。同図のプログラムデバッグシステム５は、図１と比べて、プログラム実行装置３の代わりにプログラム実行装置６を備える点が異なっている。プログラム実行装置６は、プロセッサまたはプロセッサを備える評価用ボードであり、接続ケーブル７を介して、プログラムデバッグ装置２から制御される。
【００５７】
プログラムデバッグ装置２は、図１のようにシミュレータであるプログラム実行装置３に接続されている場合も、図２のようにプロセッサ（または評価用ボード）であるプログラム実行装置６に接続されている場合も、本質的に同様に動作する。
【００５８】
また、プログラムデバッグ装置２のコンピュータ上で、上記シミュレーションソフトウェアをも実行し、プログラム実行装置３と兼用してもよい。
図３はプログラム実行装置３においてシミュレーションソフトウェア起動直後の表示内容の一例を示す。同図のように、Ｗ６はコンソールウィンドウＷ６であり、シミュレーションソフトウェアが実行中であることを表示している。この状態でプログラム実行装置は、デバッグ対象プログラムを実行する（シミュレーションする）。ソフトウェア開発者は、プログラムデバッグ装置２を介して本プログラム実行装置３を利用可能となる。
【００５９】
図４は、プログラムデバッグ装置２においてデバッグソフトウェア実行中の表示内容の一例を示す。同図において、Ｗ１はデバッグ対象のプログラムの命令コードを表示するコード表示ウィンドウ、Ｗ２はレジスタデータを表示するレジスタ内容表示ウィンドウ、Ｗ３はユーザ操作により各種シミュレーション用のコマンドを入力するためのコマンド入力ウィンドウ、Ｗ４はデバッグ対象のソースプログラムを表示するソース表示ウィンドウ、Ｗ５はメモリデータを表示するメモリ内容表示ウィンドウである。
【００６０】
Ｍ１は実行を停止しているデバッグ対象プログラムにおける未実行の先頭命令（以下、停止命令と呼ぶ）を示す停止命令マークであり、Ｍ２は停止命令に対応するソースプログラム中のソースコード行を示す停止行マークである。
【００６１】
コード表示ウィンドウＷ１は、デバッグ対象のプログラムについて命令アドレスを示すプログラムカウンタ値（同図のＰＣ欄）、行番号（ＬＩＮＥ欄）、フラグ（ＦＬＧ欄）、ニーモニック（ＭＮＥＭＯＮＩＣ欄）等を表示するとともに、停止命令マークＭ１を表示している。図中、１０４行目の命令（［Ｆ］ｍｏｖ  Ｒ３，１）および１０５行目の命令（［Ｆ］ｍｏｖ  Ｒ０，５）は、実行条件付き命令である。ここで、フラグ［Ｆ］は、デバッグ対象プログラムが動作するプロセッサに備えられた状態フラグレジスタ中のフラグＦの値を示し、実行条件付き命令の条件を示す。同図のプログラム例では、フラグＦは、条件付き実行命令の直前（１０３行目）の比較命令（ｃｍｐ命令）によって、比較結果に応じてセットまたはリセットされる。１０４行目および１０５行目の実行条件付き命令は、フラグＦがセットされている場合のみ命令が実行される。このように、フラグＦは、条件分岐における条件の成否をフラグＦの値に反映させることにより、例えばソース表示ウィンドウＷ４中の１０３行目のｉｆ文の条件に依存する実行文などに利用される。また、フラグＦがリセットされている場合のみ命令が実行される場合は、［Ｆ］の代わりに［！Ｆ］という表示がされる。
【００６２】
＜第１の実施の形態におけるデバッグ対象プログラム＞
デバッグ対象プログラムは、Ｃ言語を用いて書かれる場合があり、Ｃ言語で記述されたプログラムは、Ｃ言語コンパイラによりプロセッサが理解可能な機械語とほぼ１対１に対応するアセンブリ言語に変換される。さらに、アセンブリ言語はアセンブラとリンカによりプロセッサ上で実行可能な機械語に変換される。
【００６３】
図５は、Ｃ言語ソースコード１０の一部がＣ言語コンパイラによりどのようにアセンブリ言語コード１１に変換されるかの一例を示す。
Ｃ言語ソースコード１０の点線内に示すｉｆ文およびその条件に依存する実行文は、アセンブリ言語コード１１の点線内に示す部分に対応する。前述のとおり、条件分岐における条件の成否はフラグＦの値に反映される。これにより、アセンブリ言語コード１１から分岐命令が排除されるので、プロセッサ上でプログラムを実行させる際に発生する分岐による性能劣化を回避している。
【００６４】
アセンブリ言語コード１１中の［Ｆ］が付く命令は、ｉｆ文のｔｈｅｎ側の実行文に対応するコードであり、［！Ｆ］が付く命令は、ｉｆ文のｅｌｓｅ側の実行文に対応するコードである。
【００６５】
デバッグ対象プログラムは、Ｃ言語ソースコード１０等をソースコードの一部として含み、前記ソースコードをコンパイラ、アセンブラ、リンカを用いてプログラム実行装置３あるいはプログラム実行装置６上で実行できる形式の実行形式ファイルに変換したものである。
【００６６】
この実行形式ファイルおよびＣ言語ソースコードは、プログラムデバッグ装置３に入力される。実行形式ファイルは、プログラム実行装置３または６上で実行される。デバッグ作業者はプログラムデバッグ装置３を介してプログラム実行装置２または６のプログラム実行を制御しつつデバッグ作業を行なう。
【００６７】
＜プログラム実行装置６およびプログラムデバッグ装置３の構成＞
図６は、プログラム実行装置６およびプログラムデバッグ装置３の主要部の構成を示すブロック図である。
【００６８】
プログラム実行装置６は、レジスタファイル３０と、命令メモリ３１と、命令実行部３２と、バス３３を備え、パイプライン処理により命令を実行する。
命令実行部３２は、命令メモリ３１からバス３３を経由して命令をフェッチするフェッチステージ、フェッチされた命令を解読するデコードステージ、デコードされた命令を実行する実行ステージ、実行結果を命令メモリ３１に書き戻すライトバックステージの４ステージをパイプライン処理する。その際、レジスタファイル３０への実行結果の書き戻しは、実行ステージで行われる。
【００６９】
この命令実行部３２は実行条件付き命令を次のように処理する。すなわち、実行条件付き命令は、フェッチおよびデコードされた後、実行ステージにおいて条件の成否に応じて完全に実行されるかどうかが定められる。条件が成立している場合には、 命令実行部３２は、実行ステージにおいて（ａ）レジスタデータの読み出し、（ｂ）当該データの演算、（ｃ）演算結果のレジスタファイルへの書き戻しを行い、ライトバックステージにおいて必要に応じてメモリへライトバックする。また、条件が不成立の場合には、 上記（ａ）〜（ｃ）のうち（ｃ）が禁止される。また、ライトバックステージにおける動作も禁止される。このように、条件不成立の場合に、実行条件付き命令は、実質的に実行されず、分岐が発生しないのでパイプラインのインターロックを生じさせない。
【００７０】
プログラムデバッグ装置２は、制御部２０と、スキップフラグ保持部２１と、通過命令カウンタ２２を備える。
制御部２０は、デバッグ作業者からの操作を入力装置２ｃを介して受け取った制御コマンドに従って、プログラム実行装置６のプログラム実行を制御し、実行状態を制御コマンドに対する応答メッセージとして表示装置２ｂに表示する。
【００７１】
スキップフラグ保持部２１は、通過命令を停止命令の対象とするか否かを選択するためのスキップフラグを保持する。
通過命令カウンタ２２は、実行条件が成立していない実行条件付き命令をいくつ連続して通過したかを示す連続通過命令数をカウントする。例えば、通過命令カウンタ２２は、規定数を初期値としてダウンカウントし、０までカウントすると初期値に戻るダウンカウンタである。この通過命令カウンタはプログラム暴走の検知のために用いられる。そのため、規定数は、プログラム暴走と看做すべき連続通過命令の最大個数とすればよい。あるいは、プログラムデバッグ装置２は、コンパイラからデバッグ情報としてデバッグ対象プログラムに含まれる連続する実行条件付き命令の最大個数を取得し、その最大個数を上記規定数として通過命令カウンタ２２に設定してもよい。
【００７２】
スキップフラグ保持部２１と上記規定数は、デバッグ作業者が、図７に示すようにコマンド入力ウィンドウＷ３に対し制御コマンドを入力することにより、自由に変更、参照できる。同図において「set skipmode,1」はスキップフラグを１に設定する制御コマンドであり、「show skipmode」はスキップフラグの値を表示させる制御コマンドである。「set passinst,10」は上記の規定数を１０に設定する制御コマンドであり、「show passinst」は現在設定されている規定数を表示させる制御コマンドである。
【００７３】
上記の制御部２０は、プログラム実行装置６のプログラム実行を制御する際に、スキップフラグが１のとき、デバッグ対象プログラムの全体に亘って通過命令を停止命令の対象としない。ただし、制御部２０は、連続通過命令数が規定数に達した場合には、実行条件が成立していない実行条件付き命令を停止命令の対象とする。これによりプログラムが暴走した場合や無限ループに陥った場合にプログラムの実行を停止させることができる。
これにより、デバッグ作業者は、デバッグ対象プログラムの実行経路に着目したデバッグ作業を行なうことができる。
【００７４】
また、スキップフラグが０のとき、通過命令も停止命令の対象とするため、デバッグ作業者は、命令ストリームに着目したデバッグ作業を行なうことができる。よって、スキップフラグ保持部２１を備えることで、デバッグ作業者が意図するデバッグ作業に応じ、プログラムデバッグ装置の動作を容易に選択することができる。
【００７５】
プログラムデバッグ装置２は、プログラム実行装置６の命令メモリ３１から命令コードを読み出したり、レジスタファイル３０からレジスタデータを読み出すことができる。
プログラムデバッグ装置２は、プログラム実行装置６に対しデバッグ対象プログラムの実行制御ができ、プログラム実行装置６は実行制御への応答を返す。
【００７６】
＜第１の実施の形態における停止後処理Ｓ１の構成＞
まず、本発明の第１の実施の形態において特徴的なプログラムデバッグ方法として、停止後処理Ｓ１について説明する。
【００７７】
図８は、停止後処理Ｓ１の内容を示すフローチャートである。この停止後処理Ｓ１は、プログラムデバッグ装置２において、命令単位のシングルステップ実行、ソース行単位のシングルステップ実行、強制停止処理、ブレークポイント処理などに含まれる処理であって、デバッグ対象プログラムをデコードＰＣ（プログラムカウンタ）の命令アドレスを判定基準として停止させた直後に実施される。ここでいう、デコードＰＣの命令アドレスを判定基準とする停止は、周知の技術であり、実行条件付き命令の条件の成否とは無関係に判定される。以下、説明の便宜上、この停止を仮停止と呼び、仮停止時の未実行の先頭命令を仮停止命令と呼び、仮停止命令のアドレスを仮停止アドレスと呼ぶ。
【００７８】
制御部２０は、仮停止命令が通過命令である場合に、デバッグ対象プログラムの停止位置を、次に最も早く実行される命令（つまり通過命令以外の未実行の命令で、次に最も早く実行される命令）の命令アドレスに変更するために停止後処理Ｓ１を行う。
【００７９】
同図において、制御部２０は、停止後処理Ｓ１が開始されると、スキップフラグ保持部２１がセットされているか否かを判定する（ステップＳ５０）。この結果、スキップフラグ保持部２１がセットされていない場合は、停止後処理を終了する。この場合、仮停止命令が、実行条件のない通常の命令、実行条件が成立した実行条件付き命令、実行条件が不成立の実行条件付き命令（通過命令）の何れであっても停止命令となりうる。
【００８０】
スキップフラグ保持部２１がセットされている場合は、制御部２０は、次実行命令のアドレスを算出し（ステップＳ４）、算出された次実行命令のアドレスと停止アドレス（仮停止命令のアドレス）が同じかどうか判定し（ステップＳ５１）し、算出アドレスと停止アドレスが同じ場合は、停止後処理を終了する。算出アドレスと停止アドレスが同じ場合は仮停止命令が通過命令ではなかったことを意味するので、仮停止命令が正式な停止命令となる。
【００８１】
一方、算出アドレスと停止アドレスが同じでない場合は、制御部２０は、算出された次実行命令の直前までデバッグ対象プログラムをプログラム実行装置６に実行させる（ステップＳ６０）。この場合、仮停止命令が通過命令であったことを意味するので、算出アドレスの命令が停止命令となる。ステップ６０では、制御部２０は、プログラム実行装置６に通過命令の実行を指示することになる。通過命令自身は実行されないので、この指示によりプログラム実行装置６ではプログラムカウンタの値が進み、デコードＰＣが上記算出アドレス（停止命令の命令アドレス）を指すことになる。
【００８２】
上記のような停止後処理Ｓ１により、通過命令以外の命令を停止命令とすることができる。
図９は、停止後処理Ｓ１の変形例である停止後処理Ｓ１ａを示すフローチャートである。同図に示すフローチャートは、図８と比べて、ステップＳ５１とステップＳ６０の代わりにステップＳ６１を備える。ステップＳ６１において、制御部２０は、ステップＳ４で算出した次実行命令を停止命令と決定し、そのアドレスを停止アドレスと決定する。図９では、ステップＳ６０が省略されているので、仮停止命令が通過命令であった場合、プログラム実行装置６では仮停止命令で停止した状態であるが、プログラムデバッグ装置２内部では、仮停止した通過命令ではなく次実行命令を停止命令と決定し、そのアドレスを命令アドレスとしている。その結果、プログラムデバッグ装置２は、通過命令を停止命令として表示することを防止することができる。この場合、プログラム実行装置６とプログラムデバッグ装置２とでは停止命令が食い違うことになるけれども、その食い違いは、通過命令を通過したか否かだけの違いであり、プログラム実行を再開後に解消されるので、なんら問題がない。
【００８３】
図９によれば、図８に示す方法と比べて、デバッグ対象プログラムを実行するステップが不要なため、より簡単に実現が可能となる。
図１０は、停止後処理Ｓ１の他の変形例である停止後処理Ｓ１ｂを示すフローチャートである。
【００８４】
同図における停止後処理Ｓ１ｂにおいて、制御部２０は、ステップＳ５０でスキップフラグ保持部２１がセットされていないと判定された場合は、停止後処理を終了する。また、制御部２０は、スキップフラグ保持部２１がセットされている場合は、仮停止命令のアドレスに、通過命令ではブレークしない条件付きブレークを設定し（ステップＳ６２）、仮停止命令を実行あるいは通過した後、次に実行される命令で停止する条件付きシングルステップ実行を行ない（ステップＳ６３）、ステップＳ６２で設定された条件付きブレークを解除する（ステップＳ６４）。
【００８５】
図１０に示す停止後処理Ｓ１ｂで、仮停止命令が通過命令であった場合は、ステップＳ６２で設定した条件付きブレークでブレークはせず、ステップＳ６３による条件付きシングルステップ実行で、次に実行される命令までプログラムカウンタが進み、仮停止命令が通過命令でない場合は、ステップＳ６２で設定した条件付きブレークでブレークする。このように、仮停止命令が実行されるか通過されるかに関わり無く同じ手順で、停止後処理Ｓ１、Ｓ１ａと同じ機能が実現可能である。
【００８６】
上記の停止後処理Ｓ１、Ｓ１ａまたはＳ１ｂによれば、制御部２０は、仮停止命令が通過命令だった場合、デバッグ対象プログラムの停止位置を次実行命令が存在するアドレスに変更する。その結果プログラムデバッグ装置２において、通過命令に対して停止命令マークＭ１（図４参照）を表示することが防止している。その結果、プログラムの実行の再開時には、停止命令マークのついた命令から実行されるので、デバッグ対象プログラムの実行経路を直感的に認識しやすくなり、デバッグ作業の効率を向上させる。
【００８７】
なお、図６のプログラム実行装置３がスキップフラグ保持部２１を備えず、図８、９および１０においてスキップフラグ判定ステップＳ５０を有しない構成としてもよい。この構成によっても上記の効果を同様に得ることができる。
【００８８】
＜次実行命令アドレス算出処理Ｓ４の詳細＞
図１１は、図８および図９における次命令アドレス算出処理の詳細を示すフローチャートである。図１１において、制御部２０は、まず仮停止命令を当該命令（以下のステップで対象となる当該命令と呼ぶ。）とし（ステップＳ７０）、当該命令が実行条件付き命令か判定し（ステップＳ７１）、当該命令が実行条件付き命令でなかった場合は、当該命令のアドレスを出力アドレスつまり停止アドレスと決定し（ステップＳ７２）、次命令アドレス算出処理を終了する。
【００８９】
また、ステップＳ７１の結果当該命令が実行条件付き命令であった場合、制御部２０は、当該命令の実行条件が成立しているかを判定し（ステップＳ１２）、当該命令の実行条件が成立していると判定された場合は、前記ステップＳ７２に進み、当該命令のアドレスを出力アドレスつまり停止命令のアドレスと決定し、次命令アドレス算出処理を終了する。
【００９０】
ステップＳ１２の結果当該命令の実行条件が成立していないと判定された場合、制御部２０は、後続命令のアドレスを算出する（ステップＳ３１）。このアドレスの算出と同時に、通過命令カウンタ２２は１つダウンカウントする。さらに、制御部２０は、算出回数が規定数に達したかどうかを判定する（ステップＳ７３）。この判定は、通過命令カウンタ２２のカウント数が０か否かによる。算出回数が規定数に達したと判定された場合は、仮停止命令のアドレスを出力アドレスつまり停止アドレスと決定し（ステップＳ７５）、次命令アドレス算出処理を終了する。
【００９１】
また、ステップＳ７３において算出回数が規定数に達していないと判定された場合は、制御部２０は、命令メモリから後続命令を読み出し（ステップＳ３２）、読み出された後続命令を当該命令とし（ステップＳ７４）、ステップＳ７１に戻る。
【００９２】
上記に説明したとおり、次実行命令アドレス算出処理Ｓ４では、次実行命令を算出するループが規定数に達した場合には、仮停止命令のアドレスを停止アドレスとする。このように、次実行命令アドレス算出処理Ｓ４で算出する次実行命令アドレスは、プログラム暴走等に起因して仮停止命令の近辺に実行される命令が存在しない場合に、通過命令ではあるけれども仮停止命令を停止命令と決定するので、停止後処理Ｓ１において停止アドレスが変更される際、変更後の停止アドレスはデバッグ作業者の予想範囲内に収まるため、デバッグ作業者が現在の実行経路を見失うことがなくなり、デバッグ作業を効率化できる。この場合、制御部２０は規定数に達した旨を表示（エラー表示）することが望ましい。
【００９３】
＜強制停止処理＞
プログラムデバッグ装置２により、プログラム実行装置６で実行されているデバッグ対象プログラムを、ユーザ操作に従って強制停止させる場合について説明する。
【００９４】
図１２は、強制停止処理を示すフローチャートである。同図に示すように、制御部２０は、デバッグ対象プログラムを仮停止（ステップＳ１０）し、前述した停止後処理Ｓ１を行う。これにより強制停止させる場合に通過命令で停止することがない。
【００９５】
また、図１４は、強制停止処理の変形例を示すフローチャートである。同図において、制御部２０は、まずデバッグ対象プログラムを仮停止させ（ステップＳ１０）。その後、停止命令が実行条件付き命令であるかを判定し（ステップＳ１１）、その結果、停止命令が実行条件付き命令でなければ、強制停止処理を終了する。ステップＳ１１の結果、停止命令が実行条件付き命令である場合は、実行条件が成立しているかを判定し（ステップＳ１２）、その結果、停止命令の実行条件が成立している場合は、強制停止処理を終了する。ステップＳ１２の結果、停止命令の実行条件が成立している場合は、デバッグ対象プログラムを再実行し（ステップＳ４３）、強制停止処理を終了する。すなわち、図１４に示す実施形態は、停止命令が通過命令であった場合には強制停止をキャンセルするステップを備えている。
【００９６】
図５で示したようなプログラムがデバッグ対象となっている場合、従来のプログラムデバッグ装置では、デバッグ対象プログラムを強制停止すると、実行条件フラグＦがリセットされているにも関わらず、図１３に示される状態で停止する場合がある。その場合、実行条件フラグＦがリセットされているため停止命令が実行されないにも関わらず、停止コード行マークＭ２が停止命令に対応するｅｌｓｅ側のソースコード行に表示されるため、デバッグ作業者は、停止コード行マークＭ２がｅｌｓｅ側にあることから直感的にｉｆ文のｅｌｓｅ側を実行していると認識違いをしてしまう。
【００９７】
しかし、本発明の強制停止処理として示した方法を用いれば、通過命令でデバッグ対象プログラムが停止しないため、デバッグ作業者による上記の認識違いを防ぐことができる。
【００９８】
図１４に示した強制停止処理では、デバッグ作業者によるデバッグ対象プログラムに対する強制停止操作がキャンセルされることがあったが、図１２に示した強制停止処理では、強制停止操作がキャンセルされることがないので、デバッグ作業者による操作に対して、よりスムーズに応答することができ、デバッグ作業が効率化される。
【００９９】
＜シングルステップ実行処理の構成＞
プログラムデバッグ装置２により、プログラム実行装置６で実行されているデバッグ対象プログラムを命令単位でシングルステップ実行させる場合について説明する。
【０１００】
図１５は、命令単位のシングルステップ実行処理のフローチャートを示す。
プログラムデバッグ装置２は、プログラム実行装置６に１命令のみ実行させ（ステップＳ１３）、続いて前述の強制停止処理の際と同様に停止後処理Ｓ１を実行する。
【０１０１】
上記の構成によれば、命令単位のシングルステップ実行においても、通過命令でデバッグ対象プログラムが停止しないため、前述した強制停止処理の場合と同様に、実行されないソースコード行に停止コード行マークＭ２が表示されることがなくなり、デバッグ作業者の認識違いを防ぐことができる。
【０１０２】
次に、プログラムデバッグ装置２により、プログラム実行装置６で実行されているデバッグ対象プログラムをソースコード行単位でシングルステップ実行させる場合について説明する。
【０１０３】
図１６に本発明の第１の実施の形態におけるソースコード行単位のシングルステップ実行処理のフローチャートを示す。
ソースコード行単位のシングルステップ実行処理では、まず、現在注目している命令の次の命令を読み出す次命令読出しステップＳ２と、ステップＳ２で読み出した次命令に注目する注目命令更新ステップＳ２０と、注目命令に対応するソースコード行の行番号と、現在のＰＣに対応するソースコード行の行番号が異なるか否かを判定する（ステップＳ２１）。
【０１０４】
行番号判定の結果、行番号が異なる場合、注目命令の直前までデバッグ対象プログラムを実行させる再実行ステップＳ２３と、前述の停止後処理Ｓ１を行いソースコード行単位のシングルステップ実行を終了する。
【０１０５】
行番号判定ステップＳ２１の結果、行番号が異ならない場合、注目命令が分岐命令であるか否かを判定する（ステップＳ２２）。
その判定の結果、注目命令が分岐命令でなければ、前述の次命令読出しステップＳ２に戻る。
【０１０６】
分岐命令判定ステップＳ２２の結果、注目命令が分岐命令であれば、前述の再実行ステップＳ２３を実施し、前述の次命令読出しステップＳ２に戻る。
上記の構成によれば、ソースコード行単位のシングルステップ実行においても、通過命令でデバッグ対象プログラムが停止しないため、前述した強制停止処理の場合と同様に、実行されないソースコード行に停止コード行マークＭ２が表示されることがなくなり、デバッグ作業者の認識違いを防ぐことができる。
【０１０７】
＜リターン実行処理の構成＞
プログラムデバッグ装置２により、プログラム実行装置６で実行されているデバッグ対象プログラムが、図１７に示すように、任意の関数（図１７における関数ｆｏｏ）の途中で停止している際に、関数の戻り先アドレスまで実行させるリターン実行を行なう場合について説明する。
【０１０８】
図１８に本発明の第１の実施の形態におけるリターン実行処理のフローチャートを示す。
プログラムデバッグ装置２は、プログラム実行装置６に関数の戻り先の直前まで実行させ（ステップＳ１４）、続いて前述の強制停止処理の際と同様に停止後処理Ｓ１を実施する。
【０１０９】
その結果、命令単位のリターン実行においても、通過命令でデバッグ対象プログラムが停止しないため、前述した強制停止処理の場合と同様に、実行されないソースコード行に停止コード行マークＭ２が表示されることがなくなり、デバッグ作業者の認識違いを防ぐことができる。
【０１１０】
例えば、図１７における停止コード行マークＭ２が示す関数ｆｏｏ内の停止命令からリターン実行を行う場合、停止後処理Ｓ１を含まない従来のリターン実行処理では、図１３に示すように停止コード行マークＭ２が実際には実行されない命令であるｉｎｃ命令に対応した位置に表示されてしまうが、本発明の第１の実施の形態として説明したリターン実行処理を用いると、停止コード行マークＭ２は、図１９に示すように、ｍｏｖ命令に対応した位置に表示される。
【０１１１】
ここで、別のリターン実行処理実装方法について述べる。
関数の戻り先が通過される命令であるかどうかを判定し、通過命令である場合は関数の戻り先命令の次実行命令にブレークポイントを設定するという方法で、本発明の第１の実施の形態におけるリターン実行処理と同等の結果が得られる。
【０１１２】
しかし、停止命令と関数の戻り先の命令の間には複数の命令が存在する場合がほとんどなので、関数の戻り先が実行条件付き命令の場合、関数の戻り先の命令の実行条件が成立するか否かを判定するのは非常に煩雑である。
【０１１３】
なぜならば、停止命令から関数の戻り先の命令の間で実行される命令の結果が、関数の戻り先の命令が実行条件に対して与える影響を考慮せねばならないからである。
よって前述の「通過命令である場合は関数の戻り先命令の次実行命令にブレークポイントを設定する」という方法は、本発明の第１の実施の形態として説明した方法よりも、非効率的である。
＜ブレークポイント処理の構成＞
プログラムデバッグ装置２により、プログラム実行装置６で実行されているデバッグ対象プログラムがブレークポイントを検出しデバッグ対象プログラムが停止した場合について説明する。
【０１１４】
図２０はブレークポイント処理のフローチャートを示す。
制御部２０は、まず、ブレークポイントとしての仮停止がテンポラリブレークか否かを判定する（ステップＳ４０）。ここでテンポラリーブレークとは、ブレーク発生によりブレークポイント（ブレーク条件）が解除される一時的なブレークをいう。テンポラリーブレークは、ユーザ指定されるほか、ユーザ指定とは無関係に、例えば、プログラムデバッグ装置内部でリターン命令によりブレーク割り込みを発生させるために用いられる。
【０１１５】
ステップＳ４０の判定の結果、検出されたブレークポイントがテンポラリブレークの場合、テンポラリブレークを解除し（ステップＳ４１）、前述の停止後処理Ｓ１を実行してブレークポイント処理を終了する。
【０１１６】
テンポラリブレークの判定スの結果、検出されたブレークポイントがテンポラリブレークでない場合、ブレークポイントを通過するか否かを検出し（ステップＳ３）、ブレークポイントの通過が検出されたか否かを判定する（ステップＳ４２）。
【０１１７】
判定の結果、ブレークポイントの通過が検出された場合は、ブレークポイントによる停止処理は行なわれないとして、デバッグ対象プログラムを再実行させ（ステップＳ４３）、ブレークポイント処理を終了する。
【０１１８】
ステップＳ４２の結果、ブレークポイントの通過が検出されなかった場合は、前述の停止後処理Ｓ１を実行し、ブレークポイント処理を終了する。
図２１は、図２０中の通過検出判定処理Ｓ３の詳細を示すフローチャートである。同図のように、制御部２０は、まず、スキップフラグ保持部２１がセットされているか否かを判定する（ステップＳ５０）。判定の結果、制御部２０は、スキップフラグ保持部２１がセットされていない場合は、ブレークポイントは通過されないと判定し（ステップＳ５３）、通過検出処理を終了する。
【０１１９】
スキップフラグ判定ステップＳ５０の結果、スキップフラグ保持部２１がセットされている場合は、前述した次実行命令アドレス算出処理Ｓ４を実行し、ステップＳ４で算出された次実行命令アドレスと仮停止アドレスが一致するか比較する（ステップＳ５１）。
【０１２０】
アドレス比較ステップＳ５１の結果、アドレスが一致している場合は、ブレークポイントは通過されないと判定し（ステップＳ５３）、通過検出処理を終了する。
アドレス比較ステップＳ５１の結果、アドレスが一致していない場合は、ブレークポイントの通過を検出したと判定し（ステップＳ５２）、通過検出処理を終了する。
【０１２１】
上記の構成によれば、通過検出処理Ｓ３は、次に実行される命令を算出して、仮停止したアドレスと算出したアドレスを比較し、比較の結果、アドレスに相違があった場合はブレークは通過されるべきであるという判断を下している。すなわち、ブレークポイントによりデバッグ対象命令が停止させる場合においても、通過命令でデバッグ対象プログラムが停止しないため、前述した強制停止処理の場合と同様に、実行されないソースコード行に停止コード行マークＭ２が表示されることがなくなり、デバッグ作業者の認識違いを防ぐことができる。
【０１２２】
また、ブレークポイントがテンポラリブレークの場合には必ず停止させることで、プログラムデバッグ装置２が、シングルステップ実行などの内部処理でブレークポイントを使う場合に、プログラムデバッグ装置２が想定する実行経路を通ってデバッグ対象プログラムが実行されれば、必ずブレークポイントで停止することが保証され、ブレーク対象命令の実行条件に関わらず必ずブレークさせるような従来の典型的なプログラム実行装置向けのプログラムデバッグ装置に用いられている手法を簡単に流用することが可能となる。
【０１２３】
さらに、ブレークポイントがテンポラリブレークか否かでブレークポイントの通過判定を行なうか否かを決定するので、ブレークポイントが通過判定を行なうか否かの情報を、ブレークポイント毎に保持する必要がなくなり、デバッグ作業者やデバッガ開発者が注意すべき情報が減るので、デバッグ作業者やデバッガ開発者の負担が減る。
【０１２４】
また、通過検出処理Ｓ３は次実行命令アドレス算出処理Ｓ４を含み、次実行命令アドレス算出処理Ｓ４ではスキップする命令数が規定数を超えた際には 仮停止アドレスを停止アドレスと決定する。これにより、ブレークポイントとして仮停止をした際に、仮停止命令の後ろに無効命令が延々と続いているような不正な箇所に設定されたブレークポイントでは、再実行されずにプログラムが停止される、という効果がある。
＜オートフラグ＞
以上の説明では、スキップフラグがユーザによって明示的に設定されることを前提に説明したが、以下ではスキップフラグがプログラムデバッグ装置２における表示モードに応じてスキップフラグの値を自動的に変更するオートフラグモードについて説明する。
【０１２５】
スキップフラグ保持部２１の内容は、図７に示したようにデバッグ作業者によって固定的に設定可能なだけでなく、図２１Ａに示すコマンド入力によりオートフラグモードとして動的に設定変更される。
【０１２６】
図２１Ａにおいて「set skipmode,auto」はスキップフラグをオードフラグモードに設定する制御コマンドである。「show skipmode」はスキップフラグの値を表示させる制御コマンドである。同図では、その応答として「Skip mode:AUTO(・・・）」と表示され、オードフラグモードであることを示している。オートフラグモードでは、ソース表示ウィンドウが選択されているときにスキップフラグは１に設定され、ソース表示ウィンドウが選択されていないとき（又は命令コード表示ウィンドウが選択されているとき）にスキップフラグは０に設定される。
【０１２７】
図２１Ｂは、オートフラグモードにおける制御部２０のフラグ自動設定処理を示すフローチャートである。制御部２０は、ユーザ操作によって表示状態が変更される毎に同図の処理を行う。すなわち、制御部２０は、ソース表示ウィンドウＷ４を選択しているか否かを判定し（Ｓ１０１）、ソース表示ウィンドウＷ４が選択されている場合は、スキップフラグをセットし（Ｓ１０２）、ソース表示ウィンドウＷ４が選択されていない場合は、スキップフラグをリセットする（Ｓ１０３）。
【０１２８】
このフラグ自動設定処理により、ユーザがわざわざスキップフラグを明示的に設定しなくても、ソース表示ウィンドウが選択されていてユーザがソースコードに着目している場合は、実行条件非成立の命令による停止がなくなり、プログラムがＣソースコード上のどの位置で停止しているかを誤解することなく把握することができる。また、命令コード表示ウィンドウが選択されていてユーザがアセンブラコードに着目している場合は、全ての命令で停止するため、どのアセンブラコードがフェッチされて命令パイプライン中にあるかの把握が容易になる。
【０１２９】
＜コンパイラ＞
図２１Ｃは本実施の形態におけるコンパイラの概要を示す説明図である。同図において、コンパイラ４０は、ソースプログラム１０ａをオブジェクトプログラム（実行形式ファイル１１ｂ）に変換する。その際、コンパイラ４０は、ユーザのオプション指定に応じてデバッグ情報１１ａを生成する。
【０１３０】
図２１Ｄは、デバッグ情報の生成を指示するオプション指定がある場合のコンパイル処理を示すフローチャートである。同図のように、コンパイラ４０は、まず、ソースプログラム１０ａをオブジェクトプログラムに変換し（Ｓ９０）、このオブジェクトプログラムにおいて連続する実行条件付き命令の最大個数をカウントし（Ｓ９１）、カウントした最大個数を含むデバッグ情報を生成し（Ｓ９２）、デバッグ情報をプログラムデバッグ装置２に、オブジェクトプログラムをプログラム実行装置６に出力する（Ｓ９３）。
【０１３１】
図２１Ｅは、ソースプログラム１０ａの一例を示す。図２１Ｆは、コンパイラ４０による図２１Ｅのソースプログラムのコンパイル結果を示す実行形式ファイルの一例を示す。このプログラム例では、コンパイラ４０は、上記Ｓ９１において最大個数を４個とカウントする。すなわち、図２１Ｅにおいて、［Ｆ］又は［！Ｆ］付きの実行条件付命令は７つ連続している。このうち［Ｆ］付きの実行条件付命令は４個連続し、［！Ｆ］付きの実行条件付命令は３個連続している。この場合、実行条件である［Ｆ］と［！Ｆ］は排他的な関係にあるので、コンパイラ４０は最大個数を４個とカウントする。
【０１３２】
図２１Ｇは、デバッグ情報１１ｂの一例を示す説明図である。同図において２行目は、プログラムに含まれる連続する実行条件付き命令の最大個数が４であることを示している。
【０１３３】
このデバッグ情報１１ｂは、プログラム暴走の検知のために用いられる通過命令カウンタに上記した規定数として設定される。これにより、プログラムデバッグ装置２における暴走検知の精度を向上させることができる。
【０１３４】
なお、図２１ＤのＳ９１において、コンパイラ４０は実行条件の内容に関わらず形式的に連続する実行条件付き命令の最大個数をカウントするようにしてもよい。この場合、図２１Ｆの実行形式ファイルの例では、最大個数は７個とカウントされる。
【０１３５】
また、図２１Ｃでは、デバッグ情報１１ａは、実行形式ファイル１１ｂとは別個に出力されるが、実行形式ファイル１１ｂに含ませて出力してもよい。
【０１３６】
＜第２の実施の形態におけるプログラムデバッグシステムの外観＞
本発明の第２の実施の形態におけるプログラムデバッグシステムの外観は、前述した図２に図示した第１の実施の形態におけるプログラムデバッグシステム５の外観と同じ外観を持つため、詳細についての説明は省略する。ただし、本実施の形態におけるプログラムデバッグシステムは、プログラムデバッグ装置２とプログラム実行装置６の代わりにプログラムデバッグ装置２０２とプログラム実行装置２０６とを有する。
【０１３７】
プログラムデバッグ装置２０２が表示する画面の内容は、前述した図４に図示した第１の実施の形態におけるプログラムデバッグ装置２が表示する画面の内容と同じため、詳細についての説明は省略する。
【０１３８】
＜デバッグ対象プログラム＞
本発明の第２の実施の形態におけるデバッグ対象プログラムは、前述した本発明の第１の実施の形態におけるデバッグ対象プログラムと同じため、詳細についての説明は省略する。
【０１３９】
＜プログラム実行装置２０６の構成＞
本発明の第２の実施の形態におけるプログラム実行装置２０６の基本的な構成を図２２に示す。
【０１４０】
本発明の第２の実施の形態におけるプログラム実行装置２０６は、レジスタファイル３０と、命令メモリ３１と、命令実行部２３２と、バス３３と、トレースモジュール２３４を備え、命令実行部２３２は、命令を実行あるいは通過する度に、プログラムカウンタの値をトレースモジュール２３４に出力する手段を備える、本発明の第１の実施の形態における命令実行部３２である。
【０１４１】
命令実行部２３２からプログラムカウンタの値を受けたトレースモジュール２３４は、プログラムカウンタの値をトレースモジュール２３４内部のトレースメモリに順々に格納する。
【０１４２】
＜プログラムデバッグ装置２０２の構成＞
本発明の第２の実施の形態におけるプログラムデバッグ装置２０２の基本的な構成を図２２に示す。
【０１４３】
プログラムデバッグ装置２０２は、制御部２２０と、ソースコード表示部２３５を備える。
プログラムデバッグ装置２０２は、本発明の第１の実施の形態におけるプログラムデバッグ装置２と同様に、デバッグ作業者からの操作を入力装置（図示せず）を介して制御コマンドとして制御部２２０で受ける。制御部２２０は、受け取った制御コマンドに対する応答メッセージを表示装置（図示せず）を介して応答メッセージをデバッグ作業者に返す。
【０１４４】
制御部２２０は、デバッグ作業者から受け取った制御コマンドにより、デバッグ対象プログラムにおける停止位置のソースコードを表示させる場合、関数コールを介してソースコード表示部２３５を実行する。ソースコード表示部２３５は、デバッグ対象プログラムにおける停止位置のソースコードを表示した後、戻り値を制御部２２０を返す。制御部２２０は、ソースコード表示部２３５からの戻り値に応じて応答メッセージをデバッグ作業者に提示する。
【０１４５】
プログラムデバッグ装置２０２は、本発明の第１の実施の形態におけるプログラムデバッグ装置２と同様に、プログラム実行装置２０６の命令メモリ３１から命令コードを読み出したり、レジスタファイル３０からレジスタデータを読み出すことができ、さらにトレースモジュール２３４の内容を読み出すことができる。
【０１４６】
プログラムデバッグ装置２０２は、本発明の第１の実施の形態におけるプログラムデバッグ装置２と同様に、プログラム実行装置２０６に対しデバッグ対象プログラムの実行制御ができ、プログラム実行装置２０６は実行制御への応答を返す。
【０１４７】
なお、本発明の実施に関係のない部分について図示を省略しているが、プログラムデバッグ装置２０２とプログラム実行装置２０６は、より多くのデータや制御信号をやり取りすることができてもなんら問題ない。
【０１４８】
＜停止ソースコード行表示処理の構成＞
図２３に、前述したソースコード表示部２３５で実施される本発明の第２の実施の形態における停止ソースコード表示処理のフローチャートを示す。
【０１４９】
プログラムデバッグ装置２０２は、停止命令が実行条件付きか否かを判定するステップＳ１１と停止命令の実行条件が成立するか否かを判定するステップＳ１２を備え、ステップＳ１１とステップＳ１２の結果を用いて、停止命令が実行条件の成立していない実行条件付き命令（すなわち通過命令）であるかどうかを判定する。
【０１５０】
ステップＳ１１とステップＳ１２の結果、停止命令が通過命令でなければ、現在のＰＣを停止行アドレスとするステップＳ８５と停止行アドレスに対応するソースコード行を表示するステップＳ８６を実施し、停止ソースコード表示処理を終了する。
【０１５１】
図２４は、ソースコードウィンドＷ４中のｉｆ文のｅｌｓｅ側が実行される場合のコード表示ウィンドウＷ１とソース表示ウィンドウ４の表示例を示す。
図２４に示す状態では、フラグＦはリセットされており、［Ｆ］が付いている命令は実行されずに通過される命令である。すなわち、図２４に示す状態では、停止命令は通過命令である。
【０１５２】
ステップＳ１１とステップＳ１２の結果、停止命令が通過命令であれば、図２４に示すように、停止命令が実行されないことを表す無効命令マークＭ３をコードウィンドウＷ１の停止命令に対応する箇所に表示する無効命令記号表示ステップＳ８３を実施し、最後に実行した命令を検索する最終実行命令検索ステップＳ８０を実施する。続いて最終実行命令が存在するか否かを判定するステップＳ８１を実施する。
【０１５３】
ステップＳ８１の結果、最終実行命令が存在する場合は、最終実行命令のアドレスを停止行アドレスとするステップＳ８２と、前述のステップＳ８６を実施し、停止ソースコード表示処理を終了する。
【０１５４】
ステップＳ８１の結果、最終実行命令が存在しない場合は、図２５に示すように、停止ソースコード行が実行されないことを表す無効行マークＭ４をソース表示ウィンドウＷ４の停止命令に対応する箇所に表示する無効行記号表示ステップＳ８４を実施し、その後、前述のステップＳ８５とステップＳ８６を実施して停止ソースコード表示処理を終了する。
【０１５５】
上記の停止ソースコード表示処理より、最終実行命令の検索に成功した場合、図２４に示すように、実際には実行されない命令で停止していたとしても、停止コード行マークＭ２は、最後に実行された命令に対応するソースコード行に表示されるので、デバッグ作業者は、ソースコードのどの部分を実行しているかを直感的に認識できる。
【０１５６】
また、最終実行命令の検索に失敗した場合でも、図２５に示すように、実際には実行されないソースコード行に停止コード行マークＭ２が表示されていたとしても、無効行マークＭ４が表示されるため、デバッグ作業者が停止コード行マークＭ２が示す行が実行されないことを容易に認識できる。
＜最終実行命令検索処理ステップＳ８０の構成＞
本発明の第２の実施の形態における最終実行命令検索処理であるステップＳ８０では、トレースモジュール２３４から得たトレースデータと、プログラム実行装置２０６から得たレジスタデータと命令コードを用いて最終実行命令の検索を行なう。
【０１５７】
トレースデータには、命令実行部２３２が実行または通過した命令のＰＣが含まれるため、デバッグ対象命令が停止した直前までに命令実行部２３２がどういう順番でどの命令を実行または通過したかを特定できる。
【０１５８】
ステップＳ８０では、最後に記録されたトレースデータから順に１つずつトレースデータを読出し、前記トレースデータに保持されたＰＣが示す命令の命令コードをプログラム実行装置２０６から読出し、逐次、プログラム実行装置２０６から読出したレジスタデータを基に実行条件の成否を判定していく。
【０１５９】
前記読み出した命令コードが示す実行条件が成立しているか、または前記読み出した命令コードが実行条件付きでない命令のものであれば、最終実行命令が存在するとし、前記読み出したトレースデータに保持されたＰＣが示す命令を最終実行命令とする。
【０１６０】
記録されている全てのトレースデータを読み出しても前記最終実行命令が見つからないか、トレースデータが記録されていない場合は、最終実行命令は存在しないとする。
【０１６１】
＜第３の実施の形態におけるプログラムデバッグシステムの外観＞
本発明の第３の実施の形態におけるプログラムデバッグシステムの外観は、前述した図２に図示した第１の実施の形態におけるプログラムデバッグシステム５の外観と同じ外観を持つため、詳細についての説明は省略する。
【０１６２】
本発明の第３の実施の形態におけるプログラムデバッグシステムは、プログラムデバッグ装置３０２と、プログラム実行装置３０６と、プログラムデバッグ装置３０２とプログラム実行装置３０６とを接続する接続ケーブル７からなる。
【０１６３】
プログラムデバッグ装置３０２が表示する画面の内容は、前述した図４に図示した第１の実施の形態におけるプログラムデバッグ装置２が表示する画面の内容と同じため、詳細についての説明は省略する。
【０１６４】
＜第３の実施の形態におけるデバッグ対象プログラム＞
本発明の第３の実施の形態におけるデバッグ対象プログラムは、前述した本発明の第１の実施の形態におけるデバッグ対象プログラムと同じため、詳細についての説明は省略する。
【０１６５】
＜第３の実施の形態におけるプログラム実行装置３０６の構成＞
本発明の第３の実施の形態においてプログラム実行装置３０６の基本的な構成を図２６に示す。
【０１６６】
本発明の第３の実施の形態におけるプログラム実行装置３０６は、レジスタファイル３０と、命令メモリ３１と、命令実行部３３２と、バス３３と、実行命令アドレス保持部３５０と、割込み制御部３３６を備え、命令実行部３３２は、命令を３つ（命令Ｘ、命令Ｙ、命令Ｚ）まで同時に実行する手段（図示せず）と、実行アドレス生成部３７０と、更新禁止信号生成部３６０と、実行命令Ｘアドレスレジスタ３５３と、実行命令Ｙアドレスレジスタ３５４と、実行命令Ｚアドレスレジスタ３５５と、命令Ｘ実行信号３５６と、命令Ｘ実行信号３５７と、命令Ｘ実行信号３５８とを備える、本発明の第１の実施の形態における命令実行部３２である。
【０１６７】
ここで、説明を簡単にするため、命令実行部３３２が同時に実行可能な命令数を３に限定しているが、同時に実行可能な命令数が１以上であれば、本発明による効果の一部を得ることができる。
【０１６８】
実行命令アドレス保持部３７０は、アドレスデコーダ３３７と、最終実行命令アドレスレジスタ３５１と、命令実行フラグ３５２とを備える。
実行アドレス生成部３７０は、１サイクル毎に、アドレスレジスタ３５３〜３５５と、実行信号３５６〜３５８とから入力を受け、入力に応じて実行命令アドレスと、命令実行信号を実行命令アドレス保持部３５０に出力する。  割込み制御部３３６は、命令実行部３３２に対する割込み要求信号を出力し、出力された割込み要求信号は、更新禁止信号生成部３６０に入力される。
【０１６９】
更新禁止信号生成部３６０は、更新禁止信号を実行命令アドレス保持部３５０に出力する。
実行命令アドレス保持部３７０内のアドレスデコーダ３３７は、バス３３から受けた制御信号とアドレス及びデータを基に、最終実行命令アドレスレジスタ３５１の内容や命令実行フラグ３５２の内容をバス３３に出力する手段や、命令実行フラグ３５２の内容を書き換える手段を備える。これにより命令実行部３３２は、バス３３を介して、最終実行命令アドレスレジスタ３５１や命令実行フラグ３５２にアクセス可能である。
【０１７０】
＜第３の実施の形態におけるプログラムデバッグ装置３０２の構成＞
本発明の第３の実施の形態においてプログラムデバッグ装置３０２の基本的な構成を図２６に示す。
【０１７１】
本発明の第３の実施の形態におけるプログラムデバッグ装置３０２は、本発明の第２の実施の形態におけるプログラムデバッグ装置２０２とほぼ同等のものであり、プログラムデバッグ装置２０２のソースコード表示部２３５において実施される最終実行命令検索処理であるステップＳ８０の構成のみが異なる。故に、プログラムデバッグ装置３０２の構成について、プログラムデバッグ装置２０２と同じ部分に関する説明は省略する。
【０１７２】
プログラムデバッグ装置３０２は、プログラム実行装置３０６から最終実行命令アドレスレジスタ３５１と命令実行フラグ３５２の内容を読み出す手段を備えることがプログラムデバッグ装置２０２と異なる。
【０１７３】
＜第３の実施の形態における最終実行命令アドレスレジスタ３５１の動作＞
図２６に図示する最終実行命令アドレスレジスタ３５１は、最後に実行された命令（最終実行命令）のアドレスを保持できるように構成されている。
【０１７４】
最終実行命令アドレスレジスタ３５１は、更新禁止信号が０（ネガティブ）且つ命令実行信号が１（アクティブ）の場合に実行命令アドレスとして入力される値を最終実行命令のアドレスとして保持し、更新禁止信号が１または命令実行信号が０（ネガティブ）の場合には保持している内容を更新しない。
【０１７５】
また、最終実行命令アドレスレジスタ３５１は、アドレスデコーダ３３７とソースコード表示部３３５から、最終実行命令のアドレスとして保持している内容を参照される。
【０１７６】
＜第３の実施の形態における命令実行フラグ３５２の動作＞
図２６に図示する命令実行フラグ３５２は、最終実行命令アドレスレジスタ３５１の内容が有効であることを示すように構成されている。
【０１７７】
命令実行フラグ３５２は、命令実行フラグ３５２自身が０（ネガティブ）且つ更新禁止信号が０（ネガティブ）且つ命令実行信号が１（アクティブ）の場合に１（アクティブ）となり、それ以外の状態では命令実行フラグ３５２は更新されない。
【０１７８】
ただし、アドレスデコーダ３３７からの制御により命令実行フラグ３５２の内容を変更する場合は除く。
また、命令実行フラグ３５２は、アドレスデコーダ３３７とソースコード表示部３３５から、保持している内容を参照される。
【０１７９】
＜第３の実施の形態における停止ソースコード行表示処理の構成＞
本発明の第３の実施の形態における停止ソースコード表示処理は、本発明の第２の実施の形態における停止ソースコード表示処理とほぼ同等のものであり、最終実行命令検索処理であるステップＳ８０の構成のみが異なる。故に、本発明の第３の実施の形態における停止ソースコード表示処理の構成について、本発明の第２の実施の形態における停止ソースコード表示処理と同じ部分に関する説明は省略する。
【０１８０】
＜第３の実施の形態における最終実行命令検索処理ステップＳ８０の構成＞
本発明の第３の実施の形態における最終実行命令検索処理であるステップＳ８０では、最終実行命令アドレスレジスタ３５１の内容と、命令実行フラグ３５２の内容を用いて最終実行命令の検索を行なう。
【０１８１】
なお命令実行フラグ３５２は、デバッグ対象プログラムを実行する際に０（ネガティブ）に初期化される。
ソースコード表示部３３５は、命令実行フラグ３５２を読出し、命令実行フラグ３５２の内容が０（ネガティブ）であれば最終実行命令は存在しないとする。命令実行フラグ３５２の内容が１（アクティブ）であれば、最終実行命令が存在するとし、最終実行命令アドレスレジスタ３５１の内容を読出し、最終実行命令アドレスレジスタ３５１に保持されたアドレスが示す命令を最終実行命令とする。
【０１８２】
上記に説明したように、本発明の第３の実施の形態では、トレースモジュールの内部を検索するステップが簡易化され、プログラムデバッグ装置３０２の開発が容易になる。
＜第３の実施の形態における実行アドレス生成部３７０の構成＞
図２７に図示する本発明の第３の実施の形態における実行アドレス生成部３７０は、マルチプレクサ３７１〜３７５と、比較器３７６を備える。
【０１８３】
実行アドレス生成部３７０の入力である実行命令Ｘアドレスレジスタ３５３、実行命令Ｙアドレスレジスタ３５４、実行命令Ｚアドレスレジスタ３５５は、命令実行部３３２で同時に実行される、命令Ｘ、命令Ｙ、命令Ｚのアドレスを保持するレジスタである。
【０１８４】
また、実行アドレス生成部３７０の別の入力である命令Ｘ実行信号３５６、命令Ｙ実行信号３５７、命令Ｚ実行信号３５８は、命令実行部３３２で同時に実行される、命令Ｘ、命令Ｙ、命令Ｚが実行されている場合は１（アクティブ）、実行されていない（通過されている）場合は０（ネガティブ）となる。
【０１８５】
例えば、命令Ｘを０ｘ１０００番地、命令Ｙを０ｘ１００４番地の命令とし、命令Ｘ、命令Ｙが同時に実行される場合、前述の各値は下記のようになる。
レジスタ                          値
実行命令Ｘアドレスレジスタ３５３  ０ｘ１０００
実行命令Ｙアドレスレジスタ３５４  ０ｘ１００４
実行命令Ｚアドレスレジスタ３５５  不定
信号                              値
命令Ｘ実行信号３５６              １（アクティブ）
命令Ｙ実行信号３５７              １（アクティブ）
命令Ｚ実行信号３５８              ０（ネガティブ）
前述のアドレスレジスタ３５３〜３５５の値は、実行アドレス生成部３７０内部のマルチプレクサ３７１〜３７３に入力される。マルチプレクサ３７１〜３７３は、前述の実行信号３５６〜３５８が１（アクティブ）の場合は前述のアドレスレジスタ３５３〜３５５の値を、前述の実行信号３５６〜３５８が０（ネガティブ）の場合は０を選択する。マルチプレクサ３７１〜３７３の出力は、比較器３７６に入力される。比較器３７６は最も値が大きい入力を選択するようマルチプレクサ３７４を制御する。マルチプレクサ３７４は、マルチプレクサ３７１〜３７３の出力のうち最も大きい値を出力する。
【０１８６】
同時に、比較器３７６は、前記マルチプクサ３７４によって選択されたアドレスレジスタ３５３〜３５５に対応する実行信号３５６〜３５８の値を選択するようマルチプレクサ３７５を制御する。
【０１８７】
同時に、比較器３７６はマルチプレクサ３７５を介して、前記マルチプクサ３７４によって選択されたアドレスレジスタ３５３〜３５５に対応する実行信号３５６〜３５８の値を選択するよう値を出力する。
【０１８８】
マルチプレクサ３７４の出力を実行命令アドレスとし、マルチプレクサ３７５の出力を命令実行信号として実行アドレス生成部３７０から出力することによって、命令実行部３３２が２つ以上の複数の命令を同時に実行する場合でも、同時に実行される命令のアドレスのなかで最高位のアドレスを最終実行命令アドレスレジスタ３５１に保持することができ、ソースコード表示部で表示される停止コード行マークＭ２は、実行された命令のうち最後尾の命令に対応するソースコード行を示すことができ、直感的に正しいソースコードを示すことができる。
【０１８９】
なお、比較器３７６の入力において最大の値が２つ以上存在する場合、いずれの値を選択するように比較器３７６を構成しても、本発明においてはなんら問題ない。
本発明の第３の実施の形態における命令実行部３３２は、３つの命令を同時に実行する手段を備えるが、本発明の別の実施の形態として、命令実行部が１つの命令のみ実行する場合には、図２７におけるＸアドレスレジスタ３５３と、命令Ｘ実行信号３５６をそのまま実行命令アドレス、命令実行信号とすればよい。
【０１９０】
また、本発明の第３の実施の形態おける命令実行部３３２は、３命令のみ同時実行可能であるが、本発明の別の実施の形態として、命令実行部が２つあるいは４つ以上の命令を同時に実行する手段を備える場合においても、本発明の第３の実施の形態から容易に類推できる。
【０１９１】
＜第３の実施の形態における更新禁止信号生成部３６０の構成＞
図２８に図示する第３の実施の形態における更新禁止信号生成部３６０は、イベント指定レジスタ３６１と、割り込み要因レジスタ３６２と、ＡＮＤ回路３６３と、比較器３６４を備える。
【０１９２】
割込み要因レジスタ３６２は、割込み制御部３３６から割込み要求信号を受け、割込みの種別毎にこれを保持する。具体的には、割込み要因レジスタ３６２は、複数のビットを持ち、各ビットが割込みの種別毎の割込み要求信号の有り無しを示す。ビットが１であれば、ビットに対応する種別の割込み要求があることを示し、ビットが０であれば、ビットに対応する種別の割込み要求がないことを示す。
【０１９３】
イベント指定レジスタ３６１は、命令実行部３３２やプログラムデバッグ装置３３５が任意に内容を設定できる。
更新禁止信号生成部３６０は、割込み要因レジスタ３６２の内容とイベント指定レジスタ３６１の内容をＡＮＤ回路３６３で論理積を取り、その結果を比較器３６４で０と比較し、比較器３６４の入力が０でなければ更新禁止信号を１（アクティブ）、入力が０であれば更新禁止信号を０（ネガティブ）として出力する。
【０１９４】
デバッグ作業者かプログラムデバッグ装置３０２が、命令の実行時エラーにより発生する例外の割込み種別を割込み要因レジスタ３６２に設定することで、デバッグ対象プログラム中の命令が、実行時にエラーを起こし、ＰＣが割込みハンドラ先の値になった場合に、最終実行命令アドレスレジスタ３５１は、実行時に例外を起こした命令のアドレスが入った後、更新されないため、エラーを起こした命令をデバッグ作業者が確認することができ、デバッグ作業者がエラーの要因を特定する手助けとなる。
【０１９５】
＜第４の実施の形態におけるプログラムデバッグシステムの外観＞
本発明の第４の実施の形態におけるプログラムデバッグシステムの外観は、前述した図２に図示した第１の実施の形態におけるプログラムデバッグシステム５の外観と同じ外観を持つため、詳細についての説明は省略する。
【０１９６】
本発明の第４の実施の形態におけるプログラムデバッグシステムは、プログラムデバッグ装置４０２と、プログラム実行装置４０６と、プログラムデバッグ装置４０２とプログラム実行装置４０６とを接続する接続ケーブル７からなる。
【０１９７】
プログラムデバッグ装置４０２が表示する画面の内容は、前述した図４に図示した第１の実施の形態におけるプログラムデバッグ装置２が表示する画面の内容と同じため、詳細についての説明は省略する。
【０１９８】
＜第４の実施の形態におけるデバッグ対象プログラム＞
本発明の第４の実施の形態におけるデバッグ対象プログラムは、前述した本発明の第１の実施の形態におけるデバッグ対象プログラムと同じため、詳細についての説明は省略する。
【０１９９】
＜第４の実施の形態におけるプログラム実行装置４０６の構成＞
本発明の第４の実施の形態においてプログラム実行装置４０６の基本的な構成を図２９に示す。
【０２００】
本発明の第４の実施の形態におけるプログラム実行装置４０６は、レジスタファイル３０と、命令メモリ３１と、命令実行部４３２と、バス３３と、実行条件非成立カウンタ部４５０と、割込み制御部４３６を備え、命令実行部４３２は、命令を３つ（命令Ｘ、命令Ｙ、命令Ｚ）まで同時に実行する手段（図示せず）と、ブレーク信号生成部４７０と、実行命令Ｘブレーク判定フラグ４９０と、実行命令Ｙブレーク判定フラグ４９１と、実行命令Ｚブレーク判定フラグ４９２と、命令Ｘ条件判定フラグ４９３と、命令Ｘ条件判定フラグ４９４と、命令Ｘ条件判定フラグ４９５と、命令Ｘ有効フラグ４９６と、命令Ｙ有効フラグ４９７と、命令Ｚ有効フラグ４９８とを備える、本発明の第１の実施の形態における命令実行部３２である。
【０２０１】
ただし、本発明の第３の実施の形態における命令実行部４３２は、同時に実行する命令について、アドレスの低い順に命令Ｘ、命令Ｙ、命令Ｚとして実行する命令実行手段を備える（図示せず）とするが、前記命令実行手段を備えなくとも、本発明による効果の一部を得ることができる。
【０２０２】
ここで、説明を簡単にするため、命令実行部４３２が同時に実行可能な命令数を３に限定しているが、同時に実行可能な命令数が１以上であれば、本発明による効果の一部を得ることができる。
【０２０３】
実行条件非成立カウンタ部４５０は、アドレスデコーダ４３７と、比較数値レジスタ４５１と、カウントレジスタ４５２と、加算器４５３と、マルチプレクサ４５４と、比較器４５５とブレーク制御部４６０とを備える。
【０２０４】
ブレーク制御部４６０は、禁止フラグ４６１と、有効フラグ４６２とを備える。
実行条件非成立カウンタ部４５０内のアドレスデコーダ４３７は、バス３３から受けた制御信号とアドレス及びデータを基に、比較数値レジスタ４５１と、禁止フラグ４６１と、有効フラグ４６２の内容を書き換える手段を備える。これにより命令実行部４３２は、バス３３を介して、比較数値レジスタ４５１と、禁止フラグ４６１と、有効フラグ４６２にアクセス可能である。
【０２０５】
ブレーク信号生成部４７０は、１サイクル毎に、ブレーク判定フラグ４９０〜４９２と、条件判定フラグ４９３〜４９５と、有効フラグ４９６〜４９８とから入力を受け、入力に応じて条件非成立命令数と、命令実行信号と、ブレーク通過信号と、ブレーク検出信号を実行条件非成立カウンタ部に出力する。
【０２０６】
割込み制御部４３６は、ブレーク制御部４６０からブレーク割込み信号を受け、命令実行部４３２に対する割込み要求信号を出力する。命令実行部４３２はブレーク割込み要求信号を受けて命令の実行を中断し、プログラム実行装置４０６はデバッグ対象プログラムが中断されたことをプログラムデバッグ装置４０２に応答として通知する。
【０２０７】
＜第４の実施の形態におけるプログラムデバッグ装置３０２の構成＞
本発明の第４の実施の形態においてプログラムデバッグ装置４０２の基本的な構成を図２９に示す。
【０２０８】
本発明の第４の実施の形態におけるプログラムデバッグ装置４０２は、本発明の第１の実施の形態におけるプログラムデバッグ装置２とほぼ同等のものであり、スキップフラグ保持部２１を備えず、通過命令カウンタ２２の代わりに、比較数値レジスタ４５１に値を設定するための通過命令カウンタ４２２を備えることのみが異なる。故に、プログラムデバッグ装置４０２の構成について、プログラムデバッグ装置２と同じ部分に関する説明は省略する。
【０２０９】
＜第４の実施の形態における実行条件非成立カウンタ部４５０の構成＞
図２９に図示する実行条件非成立カウンタ部４５０が備える比較数値レジスタ４５１には、プログラムデバッグ装置４０２が備える通過命令カウンタ４２２に設定された値が設定される。
【０２１０】
カウントレジスタ４５２は、１サイクル毎に、マルチプレクサ４５４から出力された値でカウントレジスタ４５２自身の内容を更新する。
加算器４５３は、カウントレジスタ４５２の内容と、ブレーク信号生成部から出力された条件非成立命令数を加算し、マルチプレクサ４５４に入力する。
【０２１１】
マルチプレクサ４５４は、ブレーク制御部４６０から出力された有効信号が０（ネガティブ）の場合は０を出力し、ブレーク制御部４６０から出力された有効信号が１（アクティブ）の場合は加算器４５３からの入力を出力する。
【０２１２】
比較器４５５には、マルチプレクサ４５４から出力された値と比較数値レジスタ４５１の値が入力され、マルチプレクサ４５４から出力された値が比較数値レジスタ４５１の値以上の場合に１（アクティブ）を、マルチプレクサ４５４から出力された値が比較数値レジスタ４５１の値よりも小さい場合に０（ネガティブ）をブレーク制御部４６０に出力する。
【０２１３】
上記の構成によると、ブレーク制御部４６０から出力される有効信号が１（アクティブ）の場合に条件非成立命令数がカウントレジスタ４５２の値に加算され、ブレーク制御部４６０から出力される有効信号が０（ネガティブ）の場合にはカウントレジスタ４５２がリセットされる。
【０２１４】
すなわち、実行条件非成立カウンタ部４５０は、ブレーク制御部４６０から出力される有効信号が１（アクティブ）の場合に条件非成立命令数をカウントし、ブレーク制御部４６０から出力される有効信号が０（ネガティブ）の場合にそのカウントをリセットする構成となっている。
【０２１５】
＜第４の実施の形態におけるブレーク信号生成部４７０の構成＞
図３０に図示するブレーク信号生成部は、加算器４７１と、ＡＮＤ回路４７２〜４８５と、ＯＲ回路４８６〜４８８とを備える。
実行アドレス生成部４７０の入力である命令Ｘブレーク判定フラグ４９０と、命令Ｙブレーク判定フラグ４９１と、命令Ｚブレーク判定フラグ４９２は、命令実行部４３２で同時に実行される、命令Ｘ、命令Ｙ、命令Ｚにおいてコードブレークを発生させるか否かを示す。命令実行部４３２により、コードブレークを発生させる場合には１（アクティブ）、コードブレークを発生させない場合には０に設定される。ただし、各命令が命令実行部４３２の実行ステージに存在していない場合は０に設定される。
【０２１６】
実行アドレス生成部４７０の入力である命令Ｘ条件判定フラグ４９３と、命令Ｙ条件判定フラグ４９４と、命令Ｚ条件判定フラグ４９５は、命令実行部４３２で同時に実行される、命令Ｘ、命令Ｙ、命令Ｚの実行条件が成立しているか否かを示す。命令実行部４３２により、各命令の実行条件が成立しているか、各命令に実行条件が付いていない場合には１（アクティブ）、各命令の実行条件が成立していない（すなわち通過される）場合には０に設定される。ただし、各命令が命令実行部４３２の実行ステージに存在していない場合は０に設定される。
【０２１７】
実行アドレス生成部４７０の入力である命令Ｘ有効フラグ４９６と、命令Ｙ有効フラグ４９７と、命令Ｚ有効フラグ４９８は、命令実行部４３２の実行ステージに、命令Ｘ、命令Ｙ、命令Ｚが存在するか否かを示す。命令実行部４３２の実行ステージに各命令が存在している場合には１（アクティブ）、各命令が存在していない場合には０に設定される。
【０２１８】
ここで言う、「命令が存在していない」とは、パイプラインストールなどにより、有効な命令が命令実行部４３２の実行ステージに供給されなかった状態を指す。
図３０に示すように、各命令の条件判定フラグ４９３〜４９５を反転させた値と各命令の命令有効フラグ４９６〜４９８の値をペアにしてＡＮＤ回路４７２〜４７４のそれぞれに入力する。ＡＮＤ回路４７２〜４７４は、入力の論理積を出力する。
【０２１９】
上記の構成によれば、ＡＮＤ回路４７２〜４７４の出力は、通過命令が存在する場合には１に、存在しない場合は０になる。
ＡＮＤ回路４７２〜４７４から出力された値は、加算器４７１で足し合わせられ加算器４７１から出力される。
【０２２０】
上記の構成によれば、加算器４７１の出力は、同時に実行される通過命令の数となる。
加算器４７１の出力は、条件非成立命令数としてブレーク信号生成部４７０からブレーク制御部４６０に送られる。
【０２２１】
図３０に示すように、各命令の条件判定フラグ４９３〜４９５の値と各命令のブレーク判定フラグ４９０〜４９２の値をペアにしてＡＮＤ回路４７５〜４７７のそれぞれに入力する。ＡＮＤ回路４７５〜４７７は、入力の論理積を出力する。
【０２２２】
上記の構成によれば、ＡＮＤ回路４７５〜４７７の出力は、命令が実行され且つブレークを発生させる場合には１に、そうでない場合は０になる。
ＡＮＤ回路４７５〜４７７から出力された値は、ＯＲ回路４８６に入力され、ＯＲ回路４８６は入力の論理和を出力する。
【０２２３】
上記の構成によれば、ＯＲ回路４８６の出力は、同時に実行される命令のいずれかでブレークが発生しているか否かを示す信号となる。
ＯＲ回路４８６の出力は、ブレーク検出信号としてブレーク信号生成部４７０からブレーク制御部４６０に送られる。
【０２２４】
図３０に示すように、各命令の条件判定フラグ４９３〜４９５を反転させた値と各命令のブレーク判定フラグ４９０〜４９２の値をペアにしてＡＮＤ回路４７８〜４８０のそれぞれに入力する。ＡＮＤ回路４７８〜４８０は、入力の論理積を出力する。
【０２２５】
上記の構成によれば、ＡＮＤ回路４７８〜４８０の出力は、命令が通過命令で且つブレーク対象となっている場合には１に、そうでない場合は０になる。
ＡＮＤ回路４７８〜４８０から出力された値は、ＯＲ回路４８７に入力され、ＯＲ回路４８７は入力の論理和を出力する。
【０２２６】
上記の構成によれば、ＯＲ回路４８７の出力は、同時に通過される命令のいずれかがブレークの対象になっているか否かを示す信号となる。
ＯＲ回路４８７の出力は、ブレーク通過信号としてブレーク信号生成部４７０からブレーク制御部４６０に送られる。
【０２２７】
図３０に示すように、各命令の条件判定フラグ４９３〜４９５の値と各命令のブレーク判定フラグ４９０〜４９２を反転させた値をペアにしてＡＮＤ回路４８１〜４８３のそれぞれに入力する。ＡＮＤ回路４８１〜４８３は、入力の論理積を出力する。
【０２２８】
上記の構成によれば、ＡＮＤ回路４８１〜４８３の出力は、命令がブレーク対象となっていない場合には１に、そうでない場合は０になる。
ＡＮＤ回路４８１から出力された値と、命令Ｙブレーク判定フラグ４９１を反転させた値と、命令Ｚブレーク判定フラグ４９２を反転させた値とを、ＡＮＤ回路４８４に入力する。
【０２２９】
上記の構成によれば、ＡＮＤ回路４８４の出力は、命令Ｘが実行されて且つ、命令Ｙ及び命令Ｚでブレークが発生していない場合に１、そうでない場合に０になる。
ＡＮＤ回路４８２から出力された値と、命令Ｚブレーク判定フラグ４９２を反転させた値とを、ＡＮＤ回路４８５に入力する。
【０２３０】
上記の構成によれば、ＡＮＤ回路４８５の出力は、命令Ｙが実行されて且つ、命令Ｚでブレークが発生していない場合に１、そうでない場合に０になる。
ＡＮＤ回路４８３〜４８５から出力された値は、ＯＲ回路４８８に入力され、ＯＲ回路４８８は入力の論理和を出力する。
【０２３１】
上記の構成によれば、ＯＲ回路４８８の出力は、ブレーク対象命令よりも後に実行された命令があることを示す信号となる。
ＯＲ回路４８８の出力は、命令実行信号としてブレーク信号生成部４７０からブレーク制御部４６０に送られる。
【０２３２】
命令Ｘ、命令Ｙ、命令Ｚがアドレスの低い順になって実行されるプログラム実行装置４０６においては、ＡＮＤ回路４８４〜４８４を含むことにより、命令Ｘ、命令Ｙ、命令Ｚの順番とブレーク対象命令の関係が命令実行信号に正確に反映される。
【０２３３】
本発明の第４の実施の形態における命令実行部４３２は、３つの命令を同時に実行する手段を備えるが、本発明の別の実施の形態として、命令実行部が１つの命令のみに実行する場合には、命令Ｘに関わる装置のみを残し、ＡＮＤ回路４７２、４７５、４７８、４８１の出力をそれぞれ条件非成立命令数、ブレーク検出信号、ブレーク通過信号、命令実行信号とすればよい。
【０２３４】
また、本発明の第４の実施の形態おける命令実行部４３２は、３命令のみ同時実行可能であるが、本発明の別の実施の形態として、命令実行部が２つあるいは４つ以上の命令を同時に実行する手段を備える場合においても、本発明の第３の実施の形態から容易に類推できる。
【０２３５】
＜第４の実施の形態におけるブレーク制御部４６０の構成＞
図３１に図示するブレーク制御部４６０は、禁止フラグ４６１と、有効フラグ４６２と、ＡＮＤ回路４６３〜４６５と、ＯＲ回路４６６〜４６８とを備える。
【０２３６】
禁止フラグ４６１と、有効フラグ４６２は、命令実行部４３２やプログラムデバッグ装置４０２により、任意に書き換えられる。
プログラムデバッグ装置４０２によってデバッグ対象プログラムを実行する際には、プログラムデバッグ装置４０２により、有効フラグ４６２は０（ネガティブ）に設定される。
【０２３７】
ＡＮＤ回路４６３は、ブレーク通過信号と通過命令数超過信号を入力とし、入力の論理積を出力とする。
上記の構成によれば、ＡＮＤ回路４６３の出力は、比較数値レジスタの値を０に設定した場合には、ブレーク通過信号を検出すると同時に１（アクティブ）になる。
【０２３８】
ＡＮＤ回路４６４は、有効フラグ４６２と通過命令数超過信号を入力とし、入力の論理積を出力とする。
上記の構成によれば、ＡＮＤ回路４６４の出力は、カウントレジスタ４５２の値が有効で且つカウントレジスタ４５２の値が比較数値レジスタ４５１の値以上になった場合に１（アクティブ）となり、そうでない場合は０（ネガティブ）となる。
【０２３９】
ＯＲ回路４６６は、ブレーク検出信号と、ＡＮＤ回路４６３と、ＡＮＤ回路４６４を入力とし、入力の論理和を出力する。
ブレーク制御部４６０は、ＯＲ回路４６６の出力をブレーク割込み信号とする。
【０２４０】
上記の構成によれば、ブレークポイント検出時と、カウントレジスタ４５２の値が有効なときに通過命令数が比較数値レジスタ４５１の値以上になったときと、さらに、比較数値レジスタ４５１の値を０にした場合は、通過命令に設定されたブレークポイントを検出したときにブレーク割込み信号を生成できる。すなわち、比較数値レジスタ４５１の値を０にすることで、通過命令に設定されたブレークポイントにおいてもブレーク割込みを発生できるようになり、ブレークポイントの機能を容易に変更することができるようになる。
【０２４１】
ＯＲ回路４６７は、命令実行信号と、禁止フラグ４６１を入力とし、入力の論理輪を出力する。
ＯＲ回路４６８は、ブレーク通過信号と有効フラグ４６２を入力とし、入力の論理輪を出力する。
【０２４２】
ＡＮＤ回路４６５は、ＯＲ回路４６６の出力を反転させた値と、ＯＲ回路４６７の出力を反転させた値と、ＯＲ回路４６８の出力を入力とし、ＡＮＤ回路４６５は入力の論理積を出力とする。
【０２４３】
有効フラグ４６２はＯＲ回路４６５の出力を入力とし、１サイクル毎にクロックのエッジのタイミングで有効フラグ４６２の値を更新する。
上記の構成によると、ブレーク割込み信号または命令実行信号が１（アクティブ）となるか、禁止フラグ４６１が１（アクティブ）のときに、有効フラグ４６２は０（ネガティブ）となる。また、ブレーク割込み信号と命令実行信号と禁止フラグ４６１の全てが０（ネガティブ）で、ブレーク通過信号が１（アクティブ）のときか有効フラグ４６２が既に１（アクティブ）のときに、有効フラグ４６２は１（アクティブ）となる。
【０２４４】
すなわち、禁止フラグ４６１で有効フラグ４６２が１（アクティブ）になるのを禁止することができ、通過命令に設定されたブレークポイントが検出された場合にカウンタレジスタ４５２の値を有効にできる。
【０２４５】
上記に説明したブレーク制御部４６０の構成によれば、ブレークポイントを通過してから通過命令数が比較数値レジスタ４５１に設定された回数以上連続して実行された後にブレーク割込みを発生することができ、図３２に示すような、延々と通過命令が続く可能性がある箇所にブレークポイントを設定したとしても、ブレークポイント通過後、一定の範囲内でデバッグ対象プログラムがブレークするため、デバッグ作業者の予想範囲外の箇所でデバッグ対象プログラムがブレークしなくなり、デバッグ作業が効率化する。
【０２４６】
なお、本発明の第４の実施の形態においては、加算器４５３でカウントレジスタ４５２の値に条件非成立命令数を加算しているが、例えば、加算器４５３でカウントレジスタ４５２の値に１を加算する構成にすれば、ブレークポイントの通過を検出した後、比較数値レジスタ４５１に設定したサイクル数内に実行される命令がなければ、ブレーク割込みを発生することができ、これにより、ブレークポイント通過後、一定の範囲内でデバッグ対象プログラムをブレークさせることができ、本発明の第４の実施の形態と同様にデバッグ作業が効率化するなど、加算器４５３でカウントレジスタ４５２に加える値を変えてもよい。
【産業上の利用可能性】
【０２４７】
本発明は、プログラムを実行するデータ処理装置やそのシミュレーションを行う装置に接続され、特に実行条件付き命令を含むプログラムをデバッグするためのプログラムデバッグ装置に適している。
【図面の簡単な説明】
【０２４８】
【図１】本発明の実施の形態におけるプログラムデバッグシステム１の外観を示す図である。
【図２】本発明の実施の形態におけるプログラムデバッグシステム５の外観を示す図である。
【図３】プログラム実行装置２においてシミュレーションソフトウェア起動後の表示の内容の一例を示す図である。
【図４】プログラムデバッグ装置２においてデバッグソフトウェア実行中の表示内容の一例を示す図である。
【図５】デバッグ対象プログラムのソースコードの変換例を示す図である。
【図６】第１の実施の形態におけるプログラム実行装置６とプログラムデバッグ装置２の構成を示すブロック図である。
【図７】コマンド入力ウィンドウW３の表示内容の一例を示す図である。
【図８】プログラムデバッグ装置２における第１の停止後処理のフローチャートを示す図である。
【図９】プログラムデバッグ装置２における第２の停止後処理のフローチャートを示す図である。
【図１０】プログラムデバッグ装置２における第３の停止後処理のフローチャートを示す図である。
【図１１】プログラムデバッグ装置２における次実行命令アドレス算出処理のフローチャートを示す図である。
【図１２】プログラムデバッグ装置２における第１の強制停止処理のフローチャートを示す図である。
【図１３】コード表示ウィンドウW１とソース表示ウィンドウＷ４の表示内容の一例を示す図である。
【図１４】プログラムデバッグ装置２における第２の強制停止処理のフローチャートを示す図である。
【図１５】プログラムデバッグ装置２における命令単位のシングルステップ実行処理のフローチャートを示す図である。
【図１６】プログラムデバッグ装置２におけるソースコード行単位のシングルステップ実行処理のフローチャートを示す図である。
【図１７】コード表示ウィンドウW１とソース表示ウィンドウＷ４の表示内容の一例を示す図である。
【図１８】プログラムデバッグ装置２におけるリターン実行処理のフローチャートを示す図である。
【図１９】コード表示ウィンドウW１とソース表示ウィンドウＷ４の表示内容の一例を示す図である。
【図２０】プログラムデバッグ装置２におけるブレークポイント処理のフローチャートを示す図である。
【図２１】プログラムデバッグ装置２におけるブレークポイントの通過検出処理のフローチャートを示す図である。
【図２１Ａ】コマンド入力ウィンドウW３の表示内容の一例を示す図である。
【図２１Ｂ】オートフラグモードにおける制御部のフラグ自動設定処理を示すフローチャートである。
【図２１Ｃ】本実施の形態におけるコンパイラの概要を示す説明図である。
【図２１Ｄ】デバッグ情報の生成を指示するオプション指定がある場合のコンパイル処理を示すフローチャートである。
【図２１Ｅ】ソースプログラムの一例を示す。
【図２１Ｆ】ソースプログラムのコンパイル結果を示す実行形式ファイルの一例を示す。
【図２１Ｇ】デバッグ情報１１ｂの一例を示す説明図である。
【図２２】本発明の第２の実施の形態におけるプログラム実行装置２０６とプログラムデバッグ装置２０２の構成を示すブロック図である。
【図２３】ソースコード表示部における停止ソースコード行表示処理のフローチャートを示す図である。
【図２４】コード表示ウィンドウW１とソース表示ウィンドウＷ４の表示内容の一例を示す図である。
【図２５】コード表示ウィンドウW１とソース表示ウィンドウＷ４の表示内容の一例を示す図である。
【図２６】本発明の第３の実施の形態におけるプログラム実行装置３０６とプログラムデバッグ装置３０２の構成を示すブロック図である。
【図２７】実行アドレス生成部３７０の構成を示すブロック図である。
【図２８】更新禁止信号生成部３６０の構成を示すブロック図である。
【図２９】本発明の第４の実施の形態におけるプログラム実行装置４０６とプログラムデバッグ装置４０２の構成を示すブロック図である。
【図３０】ブレーク信号生成部４７０の構成を示すブロック図である。
【図３１】ブレーク制御部４６０の構成を示すブロック図である。
【図３２】コード表示ウィンドウW１の表示内容の一例を示す図である。
【符号の説明】
【０２４９】
１    プログラムデバッグシステム
２    プログラムデバッグ装置
２a   本体装置
２b   表示装置
２c   入力装置
３    プログラム実行装置
３a   本体装置
３b   表示装置
３c   入力装置
４   ＬＡＮケーブル
５   プログラムデバッグシステム
６   プログラム実行装置
７   接続ケーブル
１０   Ｃ言語ソースコード
１１   アセンブリ言語コード
２０   制御部
２１   スキップフラグ
２２   通過命令カウンタ
３０   レジスタファイル
３１   命令メモリ
３２   命令実行部
３３   バス
２０２   プログラムデバッグ装置
２０６   プログラム実行装置
２２０   制御部
２３２   命令実行部
２３４   トレースモジュール
２３５   ソースコード表示部
３０２   プログラムデバッグ装置
３０７   プログラム実行装置
３２０   制御部
３３２   命令実行部
３３５   ソースコード表示部
３３６   割込み制御部
３３７   アドレスデコーダ
３５０   実行命令アドレス保持部
３５１   最終実行命令アドレスレジスタ
３５２   命令実行フラグ
３５３   実行命令Ｘアドレスレジスタ
３５４   実行命令Ｙアドレスレジスタ
３５５   実行命令Ｚアドレスレジスタ
３５６   命令Ｘ実行信号
３５７   命令Ｙ実行信号
３５８   命令Ｚ実行信号
３６０   更新禁止信号生成部
３６１   イベント指定レジスタ
３６２   割込み要因レジスタ
３６３   ＡＮＤ回路
３６４   比較器
３７０   実行アドレス生成部
３７１〜３７５   マルチプレクサ
３７６   比較器
４０２   プログラムデバッグ装置
４０６   プログラム実行装置
４２０   制御部
４２２   通過命令カウンタ
４３２   命令実行部
４３６   割込み制御部
４３７   アドレスデコーダ
４５０   実行条件非成立カウンタ部
４５１   比較数値レジスタ
４５２   カウントレジスタ
４５３   加算器
４５４   マルチプレクサ
４５５   比較器
４６０   ブレーク制御部
４６１   禁止フラグ
４６２   有効フラグ
４６３〜１６５   ＡＮＤ回路
４６６〜４６８   ＯＲ回路
４７０   ブレーク信号生成部
４７１   加算器
４７２〜４８５   ＡＮＤ回路
４８６〜４８８   ＯＲ回路
４９０   命令Ｘブレーク判定フラグ
４９１   命令Ｙブレーク判定フラグ
４９２   命令Ｚブレーク判定フラグ
４９３   命令Ｘ条件判定フラグ
４９４   命令Ｙ条件判定フラグ
４９５   命令Ｚ条件判定フラグ
４９６   命令Ｘ有効フラグ
４９７   命令Ｙ有効フラグ
４９８   命令Ｚ有効フラグ
【図１】
2005063429.tif 000003
【図２】
2005063429.tif 000004
【図３】
2005063429.tif 000005
【図４】
2005063429.tif 000006
【図５】
2005063429.tif 000007
【図６】
2005063429.tif 000008
【図７】
2005063429.tif 000009
【図８】
2005063429.tif 000010
【図９】
2005063429.tif 000011
【図１０】
2005063429.tif 000012
【図１１】
2005063429.tif 000013
【図１２】
2005063429.tif 000014
【図１３】
2005063429.tif 000015
【図１４】
2005063429.tif 000016
【図１５】
2005063429.tif 000017
【図１６】
2005063429.tif 000018
【図１７】
2005063429.tif 000019
【図１８】
2005063429.tif 000020
【図１９】
2005063429.tif 000021
【図２０】
2005063429.tif 000022
【図２１】
2005063429.tif 000023
【図２１Ａ】
2005063429.tif 000024
【図２１Ｂ】
2005063429.tif 000025
【図２１Ｃ】
2005063429.tif 000026
【図２１Ｄ】
2005063429.tif 000027
【図２１Ｅ】
2005063429.tif 000028
【図２１Ｆ】
2005063429.tif 000029
【図２１Ｇ】
2005063429.tif 000030
【図２２】
2005063429.tif 000031
【図２３】
2005063429.tif 000032
【図２４】
2005063429.tif 000033
【図２５】
2005063429.tif 000034
【図２６】
2005063429.tif 000035
【図２７】
2005063429.tif 000036
【図２８】
2005063429.tif 000037
【図２９】
2005063429.tif 000038
【図３０】
2005063429.tif 000039
【図３１】
2005063429.tif 000040
【図３２】
2005063429.tif 000041