(57)【特許請求の範囲】
【請求項１】
ＣＰＵ及びＣＰＵから読み書き可能な記憶手段を有する情報処理装置上で実行するソフトウェアプログラムをハードウェアブレークを用いてデバッグする方法であって、
前記記憶手段に格納され、複数のハードウェアブレークポイントを記録するためのハードウェアブレークポイントテーブルに、ハードウェアブレークポイントの設定を行なうハードウェアブレークポイントテーブル設定ステップと、
前記ハードウェアブレークポイントテーブルに格納されたハードウェアブレークポイントと、デバッグ対象のプログラムを実行しているＣＰＵのプログラムカウンタの値とに基づいて、次に設定すべきハードウェアブレークポイントを決定するハードウェアブレークポイント決定ステップと、
前記ハードウェアブレークポイント決定ステップにより決定した、次に設定すべきハードウェアブレークポイントを、前記情報処理装置の内部に設けられた、ハードウェアブレークポイントを設定するためのハードウェアブレーク設定レジスタに格納するためのハードウェアブレークポイント切換えステップと、
ソフトウェアプログラムの実行開始後、ＣＰＵのプログラムカウンタの値が前記ハードウェアブレーク設定レジスタに格納された値と一致することによりハードウェアブレーク割込みが発生した場合に、発生したハードウェアブレーク割込みに対する処理を行なうハードウェアブレーク割込みハンドラが、前記ハードウェアブレーク割込みが発生したＣＰＵのプログラムカウンタの値が前記ハードウェアブレークポイントテーブルに設定されているか否かを判定し、前記ハードウェアブレーク割込みが発生したＣＰＵのプログラムカウンタの値が前記ハードウェアブレークポイントテーブルに設定されていれば、ハードウェアブレークによるデバッグ処理を行なうステップと、を備え
前記ハードウェアブレークポイント決定ステップは、現在のプログラムカウンタが示す命令アドレスと、現在のプログラムカウンタが示す命令アドレス以降の命令アドレスであって、前記ハードウェアブレークポイントテーブルに設定された各ブレークポイントのうち、現在のプログラムカウンタの値に直近のブレークポイントアドレスとの間に分岐命令が存在しない場合には、当該直近のブレークポイントアドレスから順に次に設定すべきハードウェアブレークポイントを決定し、
現在のプログラムカウンタが示す命令アドレスと、前記直近のブレークポイントアドレスとの間に分岐命令が存在する場合には、当該分岐命令の分岐先アドレスを次に設定すべきハードウェアブレークポイントとして決定することを特徴とするソフトウェアプログラムのデバッグ方法。
【請求項２】
請求項１記載のソフトウェアプログラムのデバッグ方法であって、
ＣＰＵに割込みが発生した場合に、前記ハードウェアブレークポイント決定ステップにより次に設定すべきハードウェアブレークポイントを決定し、
前記ハードウェアブレークポイント決定ステップにより決定した次に設定すべきハードウェアブレークポイントを前記ハードウェアブレーク設定レジスタに格納するハードウェアブレークポイント切換えステップを実行することを特徴とするソフトウェアプログラムのデバッグ方法。
【請求項３】
請求項１記載のソフトウェアプログラムのデバッグ方法であって、
プログラムのデバッグ処理においてハードウェアブレークポイントを切り換える必要が生じた場合に、前記ハードウェアブレークポイント決定ステップにより次に設定すべきハードウェアブレークポイントを決定し、
前記ハードウェアブレークポイント決定ステップにより決定した次に設定すべきハードウェアブレークポイントを前記ハードウェアブレーク設定レジスタに格納するハードウェアブレークポイント切換えステップを実行することを特徴とするソフトウェアプログラムのデバッグ方法。
【請求項４】
請求項１記載のソフトウェアプログラムのデバッグ方法であって、
前記分岐命令が条件分岐命令であった場合には、当該条件分岐命令の分岐先アドレスに加えて、当該条件分岐命令の次の命令のアドレスについてもハードウェアブレークポイントを設定することを特徴とするソフトウェアプログラムのデバッグ方法。
【請求項５】
ＣＰＵ及びＣＰＵから読み書き可能な記憶手段を有する情報処理装置上で実行するソフトウェアプログラムをハードウェアブレークを用いてデバッグするためのデバッグ処理プログラムであって、
前記記憶手段に格納され、複数のハードウェアブレークポイントを記録するためのハードウェアブレークポイントテーブルに、ハードウェアブレークポイントの設定を行なうハードウェアブレークポイントテーブル設定ステップと、
前記ハードウェアブレークポイントテーブルに格納されたハードウェアブレークポイントと、デバッグ対象のプログラムを実行しているＣＰＵのプログラムカウンタの値とに基づいて、次に設定すべきハードウェアブレークポイントを決定するハードウェアブレークポイント決定ステップと、
前記ハードウェアブレークポイント決定ステップにより決定した、次に設定すべきハードウェアブレークポイントを、前記情報処理装置の内部に設けられた、ハードウェアブレークポイントを設定するためのハードウェアブレーク設定レジスタに格納するためのハードウェアブレークポイント切換えステップと、
ソフトウェアプログラムの実行開始後、ＣＰＵのプログラムカウンタの値が前記ハードウェアブレーク設定レジスタに格納された値と一致することによりハードウェアブレーク割込みが発生した場合に、発生したハードウェアブレーク割込みに対する処理を行なうハードウェアブレーク割込みハンドラが、前記ハードウェアブレーク割込みが発生したＣＰＵのプログラムカウンタの値が前記ハードウェアブレークポイントテーブルに設定されているか否かを判定し、前記ハードウェアブレーク割込みが発生したＣＰＵのプログラムカウンタの値が前記ハードウェアブレークポイントテーブルに設定されていれば、ハードウェアブレークによるデバッグ処理を行なうステップと、を備え、
前記ハードウェアブレークポイント決定ステップは、現在のプログラムカウンタが示す命令アドレスと、現在のプログラムカウンタが示す命令アドレス以降の命令アドレスであって、前記ハードウェアブレークポイントテーブルに設定された各ブレークポイントのうち、現在のプログラムカウンタの値に直近のブレークポイントアドレスとの間に分岐命令が存在しない場合には、当該直近のブレークポイントアドレスから順に次に設定すべきハードウェアブレークポイントを決定し、
現在のプログラムカウンタが示す命令アドレスと、前記直近のブレークポイントアドレスとの間に分岐命令が存在する場合には、当該分岐命令の分岐先アドレスを次に設定すべきハードウェアブレークポイントとして決定すること、
をＣＰＵに実行させることを特徴とするソフトウェアプログラムのデバッグ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＰＵで実行するソフトウェアプログラムのデバッグを行なうためのデバッグ方法、デバッグ処理プログラム及びデバッグ装置に関する。
【背景技術】
【０００２】
ソフトウェアプログラムのデバッグ手段の一つとして、デバッガによってブレークポイントを設定する方法が存在する。ブレークポイントには一般にソフトウェアブレークポイントとハードウェアブレークポイントがある。
【０００３】
ソフトウェアブレークポイントは、止めたいブレークポイントの所でブレーク専用の命令語をユーザープログラム上の命令と置き換えて、プログラム処理がそのポイントを通過する時にブレークさせる。これに対して、ハードウェアブレークポイントは、デバッグ対象のソフトウェアプログラムを実行させるＣＰＵ等が持っているハードウェアコンパレータにブレークポイントを設定し、そこを通過する時にブレークさせる。
【０００４】
従って、例えばプログラムがROM等の書き換え不可能なメモリ上に配置されている場合、プログラムメモリを書き換えることが必要なソフトウェアブレークポイントは使用できず、ハードウェアブレークポイントを使用する。しかし、実際のＣＰＵにおいて、一度に設定可能なハードウェアブレークポイントの個数は１〜２個程度しかない場合がある。
【０００５】
特許文献１には、ハードウェアブレークポイント設定時に、ハードウェアブレークポイントが全て使用中である場合に使用中のブレークポイントを保留にできるか否かを判定し、保留可能なものがあれば保留に変更設定し、要求ブレークポイントを新規設定等する発明が開示されている。
【０００６】
また、特許文献２には、ブレークポイントを設定したいプログラムアドレスを含むＲＯＭ領域に格納されているプログラムをＲＡＭ領域にコピーし、所望の命令コードをブレークコードに書き換えて実行し、これをキャッシュメモリに書き込む発明が開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００１−６７２４６号公報
【特許文献２】特開２０００−２６７８８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
現状のＣＰＵ等においてはハードウェアブレークポイントとして設定可能な個数に限りがあるため、ＲＯＭに格納されたプログラムのデバッグといったように、デバッグ目的によってはハードウェアブレークポイントの設定数が足りず、不便な場合がある。
【０００９】
特許文献１に開示されている発明では、ハードウェアブレークポイント設定時に保留可能なブレークポイントがない場合には、新たにブレークポイントを設定することができない。また、特許文献２に開示されている発明では、ＲＯＭ領域に格納されているプログラムをコピーするためのＲＡＭ領域を必要とし、かつ、キャッシュメモリを使用することが前提となっている。
【００１０】
本発明では、簡便な方法により、ソフトウェアブレークポイントのように設定個数を気にせずにハードウェアブレークポイントを設定し、ソフトウェアのデバッグを行なえるようにすることを課題とする。
【課題を解決するための手段】
【００１１】
上記の課題を解決するために、本発明に係るデバッグ方法は、ＣＰＵ及びＣＰＵから読み書き可能な記憶手段を有する情報処理装置上で実行するソフトウェアプログラムをハードウェアブレークを用いてデバッグする方法であって、前記記憶手段に格納され、複数のハードウェアブレークポイントを記録するためのハードウェアブレークポイントテーブルに、ハードウェアブレークポイントの設定を行なうハードウェアブレークポイントテーブル設定ステップと、前記ハードウェアブレークポイントテーブルに格納されたハードウェアブレークポイントと、デバッグ対象のプログラムを実行しているＣＰＵのプログラムカウンタの値とに基づいて、次に設定すべきハードウェアブレークポイントを決定するハードウェアブレークポイント決定ステップと、前記ハードウェアブレークポイント決定ステップにより決定した、次に設定すべきハードウェアブレークポイントを、前記情報処理装置内部に設けられた、ハードウェアブレークポイントを設定するためのハードウェアブレーク設定レジスタに格納するためのハードウェアブレークポイント切換えステップと、ソフトウェアプログラムの実行開始後、ＣＰＵのプログラムカウンタの値が前記ハードウェアブレーク設定レジスタに格納された値と一致することによりハードウェアブレーク割込みが発生した場合に、発生したハードウェアブレーク割込みに対する処理を行なうハードウェアブレーク割込みハンドラが、前記ハードウェアブレーク割込みが発生したＣＰＵのプログラムカウンタの値が前記ハードウェアブレークポイントテーブルに設定されているか否かを判定し、前記ハードウェアブレーク割込みが発生したＣＰＵのプログラムカウンタの値が前記ハードウェアブレークポイントテーブルに設定されていれば、ハードウェアブレークによるデバッグ処理を行なうステップと、を有する。
【発明の効果】
【００１２】
本発明では、ハードウェアブレーク設定レジスタの個数に制限されることなくハードウェアブレークポイントを設定することができ、プログラムを効率的にデバッグすることが可能となる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施例に係る実施環境の例を示した図である。
【図２】本発明の実施例に係るシステム構成例を示した図である。
【図３】本発明の実施例に係るデバッガ処理を示した図である。
【図４】本発明の実施例に係るデバッガ処理（続き）を示した図である。
【図５】本発明の実施例に係るハードウェアブレークポイントテーブル設定処理を示した図である。
【図６】本発明の実施例に係るハードウェアブレークポイントテーブルの設定例を示した図である。
【図７】本発明の実施例に係るハードウェアブレークポイント切換え処理を示した図である。
【図８】本発明の実施例に係るハードウェアブレークポイントテーブル削除処理を示した図である。
【図９】本発明の実施例に係るハードウェアブレーク割込みハンドラの処理例を示した図である。
【図１０】本発明の実施例に係るハードウェアブレーク割込み以外の割込みハンドラの処理例を示した図である。
【図１１】本発明の実施例の動作を説明するためのプログラム例を示した図である。
【発明を実施するための形態】
【００１４】
以下、本発明の実施の形態について説明する。
【００１５】
図１は、本発明の実施例における実施環境の例を示した図である。図１の実施環境の例は、デバッグ対象装置１と、デバッグ対象装置１とデバッガ用通信インターフェース１１で接続され、デバッグ対象装置１上で実行するソフトウェアプログラムのデバッグを行なうための操作を受け付けるデバッグ操作用端末５とを有する。図１中、デバッグ対象装置１は、ＣＰＵ２、メモリ３、及びデバッガ用通信インターフェース回路４を有する。また、デバッグ操作用端末５は、ＣＰＵ６、メモリ７、及び、デバッガ用通信インターフェース回路８を有し、ディスプレイ９やキーボード１０を介してデバッガ処理に関するユーザーからの指示を受け付ける。デバッガ用通信インターフェース回路４及び８は、ＬＡＮまたはシリアルインターフェース等により構成することが可能であり、その他の通信インターフェースを用いても良い。
【００１６】
図２は、図１のデバッグ対象装置１を用いてソフトウェアプログラムのデバッグを行なう際に、デバッグ対象装置１のＣＰＵ２と、ＣＰＵ２で実行されるデバッグを行なうための処理プログラムとの関係を示した図である。図２中、ＣＰＵ２は、実行しようとしているプログラム命令のメモリアドレスを記憶するプログラムカウンタ２１、ハードウェアブレークの設定を行なうためのハードウェアブレーク設定レジスタ２２、２３を有する。ここで、ハードウェアブレーク設定レジスタ２２、２３は、ＣＰＵ２のハードウェアブレーク制御回路（不図示）におけるハードウェアブレーク割り込み等の制御に用いられる。
また、後述のハードウェアブレークポイントの決定規則の条件を満たすハードウェアブレークポイントをハードウェアブレーク設定レジスタに設定するためには、ハードウェアブレーク設定レジスタの数は２以上であることが望ましい。
【００１７】
図２におけるハードウェアブレークポイントテーブル３５は、デバッグ対象装置１内にあるメモリ３等に格納される。ここで、ハードウェアブレークポイントテーブル３５には、ハードウェアブレークポイントを設定したいハードウェアブレークポイントアドレス等の情報が格納される。図２におけるハードウェアブレーク割込みハンドラ３１、デバッガ処理３２、ハードウェアブレークポイント切換え処理３３、ハードウェアブレークポイントテーブル設定処理３４等の処理を行なうプログラムは、前記メモリ３等に格納され、ＣＰＵ２により実行される。
【００１８】
ＣＰＵ２においてプログラムが実行されているときに、例えばプログラムカウンタの値がハードウェアブレーク設定レジスタ２２又は２３に設定された値に一致すると、前記ハードウェアブレーク制御回路がＣＰＵ２の割り込み処理部（不図示）に対してハードウェアブレーク割り込みを発生させる。ハードウェアブレーク割込みが発生すると、ハードウェアブレーク割り込みハンドラ３１が呼び出される。このハードウェアブレーク割り込みハンドラ３１は、プログラムカウンタ２１の値と、ハードウェアブレークポイントテーブル３５に格納された情報を参照して、デバッガ処理３２またはハードウェアブレークポイント切換え処理３３を呼び出す。具体的には、ハードウェアブレーク割込みが発生した際のプログラムカウンタ２１の値がハードウェアブレークポイントテーブル３５に格納されたハードウェアブレークポイントアドレスの値に一致した場合にはデバッガ処理３２が呼び出され、その他の場合にはハードウェアブレークポイント切換え処理３３が呼び出される。
【００１９】
デバッガ処理３２は、前記デバッグ操作用端末５を介してユーザーから与えられるデバッグコマンドの指示に応じたデバッグ処理を行い、その後、ハードウェアブレークポイント切換え処理３３又はハードウェアブレークポイントテーブル設定処理３４を呼び出す。具体的には、デバッガ処理３２においてユーザーからブレークポイント設定コマンドが入力された場合にはハードウェアブレークポイントテーブル設定処理３４が呼び出され、その他の場合にはハードウェアブレークポイント切換え処理３３が呼び出される。
【００２０】
ハードウェアブレークポイントテーブル設定処理３４は、後述の所定の条件により、ハードウェアブレークポイントテーブル３５を設定する。その後、ハードウェアブレークポイント切換え処理３３が呼び出される。ハードウェアブレークポイント切換え処理３３は、プログラムカウンタ２１の値及びハードウェアブレークポイントテーブル３５に設定された値を参照して、次に設定すべき１つ又は２つのハードウェアブレークポイントをハードウェアブレーク設定レジスタ２２、２３のいずれか又はそれぞれに設定する。
【００２１】
図３及び図４は、本実施例に係るデバッガ処理を示した図である。図３及び図４の各図を合わせてデバッガ処理全体のフローチャートを示す。図３の（５０）及び（５１）は、図４の（５０）及び（５１）に対応するものである。
【００２２】
デバッグ実施者がデバッグ操作用端末５のデバッガ操作画面からデバッガコマンドを入力すると、デバッガ用通信インターフェースを経由してデバッガコマンドがＣＰＵ２に送られ、デバッグ対象装置１のＣＰＵ２で実行されるデバッガ処理プログラムルーチンが起動され、デバッガコマンドの処理が行われる。各デバッガコマンドの処理フローについて図３及び図４を用いて説明する。
【００２３】
デバッグ操作用端末５及びデバッグ対象装置１の電源を入れてデバッグ操作用端末５で実行されるデバッグ操作用プログラム及びデバッグ対象装置１で実行されるデバッガ処理を起動すると、図３のステップＳ１００のデバッガ初期化処理により、ハードウェアブレークポイントテーブルの初期化等が行なわれる。そして、デバッグ実施者がデバッガのコマンドをデバッグ操作用端末５から入力するまで、ステップ１０１及びステップ１０２によりデバッガのコマンド入力待ち状態となる。ステップＳ１００におけるデバッガ初期化処理は、第１回目のデバッガ起動時に実行されるものであるが、他の処理、例えば図９に示すハードウェアブレーク割込みハンドラ等からデバッガ処理が呼び出された場合には、ステップＳ１００の処理を省略することができる。
【００２４】
デバッグ実施者がデバッガのコマンドをデバッグ操作用端末５から入力すると（Ｓ１０１  ＹＥＳ）、入力されたコマンドに対応した処理がデバッガ処理から呼び出される。具体的には、デバッガ処理のステップＳ１０１〜Ｓ１１１において入力されたコマンドの内容を判定し、入力されたコマンドに応じてステップＳ１１２〜Ｓ１２２の対応する処理が呼び出される。以下、詳細を説明する。
【００２５】
具体的には、デバッガのコマンド入力としてハードウェアブレークポイント設定コマンドが入力された場合（Ｓ１０２  ＹＥＳ）、デバッガ処理はステップＳ１１３で後述の図５に示すハードウェアブレークポイントテーブル設定処理を呼び出す。
【００２６】
デバッガのコマンド入力としてハードウェアブレークポイント削除コマンドが入力された場合（Ｓ１０３  ＹＥＳ）、デバッガ処理はステップＳ１１４で後述の図８に示すハードウェアブレークポイントテーブル削除処理を呼び出す。
【００２７】
デバッガのコマンド入力としてハードウェアブレークポイント表示コマンドが入力された場合（Ｓ１０４  ＹＥＳ）、デバッガ処理はステップＳ１１５でハードウェアブレークポイント表示処理を呼び出す。ハードウェアブレークポイント表示処理は、ブレークポイントテーブルに存在するブレークポイント一覧をデバッガ画面に出力する。
【００２８】
デバッガのコマンド入力としてプログラム実行コマンドが入力された場合（Ｓ１０５  ＹＥＳ）、デバッガ処理は、ステップＳ１１６によりデバッグ対象装置１におけるプログラム実行を開始する。
【００２９】
デバッガのコマンド入力としてステップ実行コマンドが入力された場合（Ｓ１０６  ＹＥＳ）、デバッガ処理は、ステップＳ１１７によりデバッグ対象装置１におけるプログラムのステップ実行を行なう。
【００３０】
デバッガのコマンド入力としてレジスタ表示コマンドが入力された場合（Ｓ１０７  ＹＥＳ）、デバッガ処理はステップＳ１１８でレジスタ表示処理を呼び出す。レジスタ表示処理は、コマンドで指定されたレジスタの内容をデバッガ画面に表示する。
【００３１】
デバッガのコマンド入力としてレジスタ設定コマンドが入力された場合（Ｓ１０８  ＹＥＳ）、デバッガ処理はステップＳ１１９でレジスタ設定処理を呼び出す。レジスタ設定処理は、コマンドで指定されたレジスタにコマンドで指定された値を設定する。
【００３２】
デバッガのコマンド入力としてメモリ表示コマンドが入力された場合（Ｓ１０９  ＹＥＳ）、デバッガ処理はステップＳ１２０でメモリ表示処理を呼び出す。メモリ表示処理は、コマンドで指定されたアドレスのメモリの内容をデバッガ画面に表示する。
【００３３】
デバッガのコマンド入力としてメモリ設定コマンドが入力された場合（Ｓ１１０  ＹＥＳ）、デバッガ処理はステップＳ１２１でメモリ設定処理を呼び出す。メモリ設定処理は、コマンドで指定されたアドレスのメモリにコマンドで指定された内容を設定する。
【００３４】
デバッガのコマンド入力としてデバッガ終了コマンドが入力された場合（Ｓ１１１  ＹＥＳ）、デバッガ処理はステップＳ１２３でデバッガ終了処理を実行後、デバッガ処理を抜ける。
【００３５】
デバッガのコマンド入力として上記いずれのコマンドでもないコマンドが入力された場合（Ｓ１１１  ＮＯ）、デバッガ処理はステップＳ１２２でコマンドエラーメッセージをデバッグ操作用端末５のデバッガ操作画面に表示する。尚、本実施例では、デバッガ処理として図３及び図４の各種処理（Ｓ１１３〜Ｓ１２２）が示されているが、その他の処理をデバッガ処理に含めても良い。
【００３６】
図５は、図３におけるステップＳ１１３に係るハードウェアブレークポイントテーブル設定処理の内容を示した図である。デバッガのコマンド入力としてハードウェアブレークポイント設定コマンドが入力された場合、デバッガ処理は図５に示すハードウェアブレークポイントテーブル設定処理を呼び出す。ハードウェアブレークポイントテーブルは、設定されたハードウェアブレークポイントの管理情報等を有し、デバッグ対象装置のメモリ等に格納される。
【００３７】
図５のステップＳ１３０においてデバッガからハードウェアブレークポイント設定コマンドが入力されると、ステップＳ１３１ではハードウェアブレークポイントテーブルに空きがあるかどうかを判定する。ハードウェアブレークポイントテーブルに空きがあれば（Ｓ１３１  ＹＥＳ）、ステップＳ１３２で、デバッガのコマンドで指定されたハードウェアブレークポイントが既にハードウェアブレークポイントテーブルに設定済みかどうかを判定する。指定されたハードウェアブレークポイントが未設定であれば（Ｓ１３２  ＮＯ）、ステップＳ１３３で、指定されたブレークポイントアドレス、および設定時刻をハードウェアブレークポイントテーブルに設定する。
【００３８】
ステップＳ１３３でハードウェアブレークポイントが設定されると、ステップＳ１３４で、ハードウェアブレークポイント切換え処理を呼び出し、ハードウェアブレークポイントの更新を行なう。具体的には、ハードウェアブレークポイント切換え処理は、プログラムカウンタの値及びハードウェアブレークポイントテーブルに設定された値を参照して、次に設定すべきハードウェアブレークポイントをハードウェアブレーク設定レジスタに設定する。
【００３９】
ステップＳ１３１においてハードウェアブレークポイントテーブルに空きが無いと判定した場合や、ステップＳ１３２において、指定されたハードウェアブレークポイントが既に設定済みであると判定した場合には、ステップＳ１３５のブレークポイント設定エラー処理が行なわれる。ステップＳ１３５のエラー処理では、デバッグ操作用端末６に接続されたディスプレイ９にエラー情報を表示する等してエラー状態をデバッグ実施者に伝える。デバッグ実施者は、ステップＳ１３５のエラー処理が示すエラー内容に応じて次にどう処理するかを決定する。
【００４０】
図６は、本実施例に係るハードウェアブレークポイントテーブルの設定例を示した図である。ハードウェアブレークポイントを設定できるハードウェアブレークポイントテーブル３５のエントリ数は、図６に示すハードウェアブレークポイントテーブルの設定例における表の２行目以降の行数として得られる。尚、ハードウェアブレークポイントのエントリ数は、ハードウェアブレークポイントテーブルを格納するメモリ等の格納領域が許す限り、図６に示す例よりも大きな数のエントリ数にすることができる。
【００４１】
図５のステップＳ１３３においてハードウェアブレークポイントテーブルのブレークポイントアドレスに０以外のブレークポイントアドレス（ＢＰ１〜ＢＰ４）を設定すると、ハードウェアブレークポイントテーブルのエントリは「使用中」の状態となる。ここで、ブレークポイントアドレスに「０」が設定されているハードウェアブレークポイントテーブルのエントリは「未使用」の状態となる。ハードウェアブレークポイントアドレスの設定をする際、合わせて、ハードウェアブレークポイント設定時刻がハードウェアブレークポイントテーブルに設定され、ハードウェアブレークポイントの通過回数及び最終通過時刻がクリアされる。ハードウェアブレークポイントの設定時刻、通過回数、および最終通過時刻は、デバッグ実施者がハードウェアブレークポイント一覧を表示する場合等に表示して、デバッグ時の参考情報とすることができる。尚、ブレークポイントの通過回数が「０」であれば、ブレークポイントの最終通過時刻は「未設定」となる。
【００４２】
図７は、本実施例に係るハードウェアブレークポイント切換え処理を示した図である。ハードウェアブレークポイント切換え処理は、ステップＳ１４０でデバッガが起動されている状態か否かを判定し、デバッガが起動されている場合（Ｓ１４０  ＹＥＳ）には、ステップＳ１４１によりＣＰＵに設定すべきハードウェアブレークポイントを決定する。
【００４３】
ステップＳ１４１は、以下の規則に従ってＣＰＵに設定すべきハードウェアブレークポイントを決定する。
（規則１）ハードウェアブレークポイントテーブルに設定された各ハードウェアブレークポイントのうち、現在のプログラムカウンタに近いものから順番にハードウェアブレークポイントをＣＰＵに設定する。
（規則２）ただし、現在のプログラムカウンタに近いハードウェアブレークポイントよりプログラムカウンタに近い位置に分岐命令又はサブルーチン復帰命令が存在する場合、その分岐命令又はサブルーチン復帰命令の分岐先アドレスにハードウェアブレークポイントを設定する。
（規則３）規則２における分岐命令又はサブルーチン復帰命令が条件分岐命令の場合、分岐先アドレスに加えて、分岐命令の次の命令が置かれているアドレスにもハードウェアブレークポイントを設定する。
【００４４】
ステップＳ１４２では、上記ステップＳ１４１により決定されたＣＰＵに設定するハードウェアブレークポイントを、デバッグ対象装置１に係るＣＰＵ２のハードウェアブレーク設定レジスタ２２、２３に設定する。
【００４５】
なお、デバッガが起動されていない状態、例えば、図４のステップＳ１１１でデバッガ終了コマンドを受け付けて（Ｓ１１１  ＹＥＳ）デバッガが終了した後にデバッガの処理であるハードウェアブレークポイント切換え処理が実行されるとソフトウェアプログラムが誤動作するおそれがある。そのため、図７に示すようにデバッガが起動されていない場合には（Ｓ１４０  ＮＯ）、ハードウェアブレークポイント切換え処理を実行しないようにするのが望ましい。
【００４６】
図８は、図３におけるハードウェアブレークポイントテーブル削除処理（ステップＳ１１４）を示した図である。デバッガにおいて、ハードウェアブレークポイント削除コマンドが入力された場合、デバッガ処理ルーチンは、図３のステップＳ１１４ハードウェアブレークポイントテーブル削除処理（図８）を呼び出す。
【００４７】
ハードウェアブレークポイントテーブル削除コマンドが指定されると、図８のステップＳ１５１で、指定されたハードウェアブレークポイントが、前記ハードウェアブレークポイントテーブルに存在するかどうかを確認する。そして、指定されたハードウェアブレークポイントが存在する場合（Ｓ１５１  ＹＥＳ）、ステップＳ１５２で、削除指定されたハードウェアブレークポイントテーブルのエントリのブレークポイントアドレスに０を設定し、エントリを「未使用」状態にする。
【００４８】
ハードウェアブレークポイントテーブル削除処理は、Ｓ１５２でのハードウェアブレークポイントテーブルの削除後、ステップＳ１５３でハードウェアブレークポイント切換え処理(図７)を呼び出し、ハードウェアブレーク設定レジスタ２２、２３の更新を行う。
【００４９】
ステップＳ１５１で指定されたハードウェアブレークポイントが存在しないと判定した場合、ステップＳ１５４のブレークポイント削除エラー処理を呼び出す。ステップＳ１５４は、デバッグ操作用端末５に接続されたディスプレイ９等を通してデバッグ実施者にエラー内容を通知する。
【００５０】
デバッガ処理においてプログラム実行コマンドが入力された場合（図３のＳ１０５  ＹＥＳ）又はステップ実行コマンドが入力された場合（図３のＳ１０６  ＹＥＳ）、デバッグ対象装置１でのプログラム実行コマンド処理（図３のＳ１１６）又はステップ実行コマンド処理（図３のＳ１１７）によるプログラムの実行が開始される。プログラムの実行開始後、プログラムカウンタがハードウェアブレーク設定レジスタ２２、２３に設定されたハードウェアブレークポイントに到達した場合、ハードウェアブレーク割込みが発生する。ハードウェアブレーク割込みが発生すると、ハードウェアブレーク割込みハンドラが呼び出される。
【００５１】
図９は、本実施例に係るハードウェアブレーク割込みハンドラの処理例を示した図である。図９に示すハードウェアブレーク割込みハンドラは、ステップＳ１６０でハードウェアブレーク割込みの要因を刈り取る。すなわち、割込み発生の原因への対処を実施し、割込みハンドラの処理を抜けた時に、また同じ割込みが発生しないようにするための処理を行なう。具体的には、ステップＳ１６０では、発生した割込みに対応する割込みステータスレジスタの割込み要因に対応するビットをクリアする等の処理を行なう。
【００５２】
そして、ステップＳ１６１でハードウェアブレークが発生したアドレスがハードウェアブレークポイントテーブルに登録されていると判断すれば（Ｓ１６１  ＹＥＳ）、ステップＳ１６２でハードウェアブレークによるデバッガ処理が呼び出される。
【００５３】
ステップＳ１６２のデバッガ処理では、デバッグ実施者から指示されたデバッガコマンドに応じて、図４のステップＳ１１８〜Ｓ１２１に示すレジスタやメモリ内容の表示や書き換え等を行ないながら、ソフトウェアプログラムのデバッグが行なわれる。デバッガ処理が終わると、ステップＳ１６３でハードウェアブレークポイント設定切換え処理（図７）が呼び出され、次に設定すべきハードウェアブレークポイントの設定が行なわれる。
【００５４】
ステップＳ１６１でハードウェアブレークが発生したアドレスがハードウェアブレークポイントテーブルに登録されていないと判断した場合（Ｓ１６１  ＮＯ）にはステップＳ１６３が呼び出され、ハードウェアブレーク設定レジスタの更新が行われる。
【００５５】
図１０は、ハードウェアブレーク割込み以外の割込みが発生した場合の割込みハンドラの処理例について示した図である。ハードウェアブレーク割込み以外の割込みが発生した場合、プログラムがハードウェアブレーク割込み以外の割込みに対応した割込みハンドラに分岐する。その際、分岐先のハードウェアブレーク割込み以外の割込みに対応した割込みハンドラについてもハードウェアブレーク設定をしようとする場合には、ハードウェアブレークポイントの再設定が必要となる。従って、図１０における割込みハンドラの最初のステップＳ１７０においてハードウェアブレークポイント切換え処理が呼び出され、ハードウェアブレーク設定レジスタの更新が行なわれる。その後、ステップＳ１７１で割込み要因が発生していると確認された場合には、ステップＳ１７２で割込み要因に対応する割込み処理が行なわれる。
【００５６】
図１１は、本実施例の動作を説明するためのプログラム例を示した図である。以下、図１１のプログラム命令の例を用いて、本実施例に係るハードウェアブレークポイントの設定の切換え例について説明する。
【００５７】
最初に図１１で用いられている表記について説明する。図１１のプログラム命令の例において、ｒ０〜ｒ６はレジスタを表し、例えば「ｒ２←ｒ５」という記述は、ｒ２レジスタにｒ５レジスタの内容を格納することを指すものとする。また、アドレスＡＤＲ１にある「ｃａｌｌ」はサブルーチンコール命令を表し、「ｃａｌｌ  ＡＤＲ９」はＡＤＲ９に分岐することを指すものとする。アドレスＡＤＲ３にある「ｃｍｐ  ｒ４，０」はｒ４レジスタに格納された値と０を比較する命令を指すものとする。アドレスＡＤＲ４の「ｊｌｅ」は条件分岐命令を表すものとし、「ｊｌｅ  ＡＤＲ７」は、直前のｃｍｐ命令の結果を受けて、ｒ４＝０であればＡＤＲ７に分岐することを指すものとする。アドレスＡＤＲ６の「ｊｕｍｐ」は無条件分岐命令を表すものとし、「ｊｕｍｐ  ＡＤＲ２」は無条件にＡＤＲ２に分岐することを指すものとする。アドレスＡＤＲ８の「ｒｅｔ」は無条件サブルーチン復帰命令を指すものとする。
【００５８】
図１１において、ＣＰＵに設定可能なハードウェアブレークポイントの個数は２個であるものとし、ハードウェアブレークポイントテーブルに登録する最初のブレークポイントアドレスは、Ｂ１、Ｂ２およびＢ３であるものとする。
【００５９】
以下、初期プログラムカウンタ（ＰＣ）の値がＡＤＲ０であるものとして、図１１を用いて本実施例に係るハードウェアブレークポイントの設定の切換え例について説明する。
【００６０】
まず、前述の通りハードウェアブレークポイントテーブルには、ブレークポイントアドレスとしてＢ１、Ｂ２及びＢ３を設定するので、最初、デバッガ処理でハードウェアブレークポイント設定コマンドが入力され（図３のＳ１０２  ＹＥＳ）、ハードウェアブレークポイント設定処理（図３のＳ１１３）が呼び出される。ハードウェアブレークポイント設定処理では、ハードウェアブレークポイントテーブルにブレークポイントアドレスＢ１、Ｂ２、Ｂ３を登録した後、ハードウェアブレークポイント切換え処理が呼び出される（図５のＳ１３４）。ハードウェアブレークポイント切換え処理により、ＣＰＵ２のハードウェアブレークポイントは、プログラムカウンタが位置するＡＤＲ０に最も近いブレークポイントアドレスＢ１に設定される。すなわち、ハードウェアブレーク設定レジスタ２２又は２３にブレークポイントアドレスＢ１が設定される。
【００６１】
次に、デバッガのプログラム実行コマンドが入力されると（図３のＳ１０５  ＹＥＳ）、デバッグ対象のプログラムの実行が開始され、図１１におけるアドレスＡＤＲ０にあるプログラム命令から順にＣＰＵ２で実行される。
【００６２】
プログラムカウンタ（ＰＣ）が図１１におけるアドレスＢ１に到達すると、ハードウェアブレーク割込みが発生し、デバッガのブレークポイント処理からデバッガのコマンド処理に制御が移される（図９のステップＳ１６０〜Ｓ１６２）。
【００６３】
再度デバッガのプログラム実行コマンドが入力されると（図３のＳ１０５  ＹＥＳ）、プログラムに制御が移る前に、ブレークポイント設定切換え処理が実行される（図９のステップＳ１６３）。ここで、この時点でのプログラムカウンタが指す図１１におけるアドレスＢ１と次のブレークポイントのアドレスＢ２との間のアドレスＡＤＲ１に分岐命令があるため、ブレークポイント設定切換え処理はアドレスＡＤＲ１の無条件サブルーチンコール命令の分岐先であるアドレスＡＤＲ９をＣＰＵハードウェアブレークポイントとして設定する。すなわち、ＣＰＵ２のハードウェアブレーク設定レジスタ２２又は２３にＡＤＲ９が設定される。その後、プログラムに制御が移される。
【００６４】
ＡＤＲ１の無条件サブルーチンコール命令を実行し、プログラムカウンタがＡＤＲ９に到達すると、ハードウェアブレーク設定レジスタにＡＤＲ９が設定されているので、再度ハードウェアブレーク割込みが発生する。しかし、ＡＤＲ９はハードウェアブレークポイントテーブルに登録されていないため、デバッガに制御は移らず、ブレークポイント切換え処理が呼び出される（図９のステップＳ１６１、Ｓ１６３）。そして、ブレークポイント切換え処理は、その時点でプログラムカウンタが指す図１０におけるアドレスＡＤＲ９に一番近いブレークポイントアドレスであるアドレスＢ３を次のＣＰＵハードウェアブレークポイントとして設定する。
【００６５】
プログラムカウンタが図１０のアドレスＢ３に到達すると、再度ハードウェアブレーク割込みが発生する。前述の通り、Ｂ３はハードウェアブレークポイントテーブルに設定されているので、デバッガのブレークポイント処理からデバッガのコマンド処理に制御が移される（図９のステップＳ１６１、Ｓ１６２）。
【００６６】
再度デバッガのプログラム実行コマンドが入力されると、プログラムに制御が移る前に、ブレークポイント切換え処理が実行される（図９のステップＳ１６３）。ここで、この時点でのプログラムカウンタが指す図１０のアドレスＢ３の直後のＡＤＲ１０に復帰命令があるので、ブレークポイント切換え処理はＡＤＲ１０の無条件サブルーチン復帰命令の復帰先であるＡＤＲ２をＣＰＵハードウェアブレークポイントとして設定する。そして、その後、プログラムに制御が移される。
【００６７】
図１０におけるアドレスＡＤＲ１０の無条件サブルーチン復帰命令を実行してプログラムカウンタがＡＤＲ２に到達するとブレークポイント割込みが発生するが、ＡＤＲ２はハードウェアブレークポイントテーブルに登録されていないため、デバッガに制御は移らず、ハードウェアブレークポイント切換え処理が呼ばれる（図９のステップＳ１６３）。ハードウェアブレークポイント切換え処理は、ＡＤＲ４の条件分岐命令の分岐先であるＡＤＲ７、及び条件分岐命令の次の命令のアドレスであるＡＤＲ５をＣＰＵハードウェアブレークポイントとして設定する。
【００６８】
プログラムカウンタが図１０におけるアドレスＡＤＲ４に到達し、条件分岐命令を実行し分岐した場合、プログラムカウンタはアドレスＡＤＲ７に到達し、ブレークポイント割込みが発生する。しかし、アドレスＡＤＲ７はハードウェアブレークポイントテーブルに登録されていないため、デバッガに制御は移らず、ブレークポイント切換え処理が呼ばれる（図９のステップＳ１６３）。そして、ハードウェアブレークポイント切換え処理は、ＣＰＵハードウェアブレークポイントとしてその時点でのプログラムカウンタが示す図１０におけるアドレスＡＤＲ７の直近のアドレスＢ２を次のハードウェアブレークポイントとして設定する。
【００６９】
プログラムカウンタが図１０におけるアドレスＡＤＲ４に到達し、条件分岐命令を実行し分岐しなかった場合、プログラムカウンタはアドレスＡＤＲ５に到達する。ここで、アドレスＡＤＲ５にもハードウェアブレークポイントの設定がされているのでブレークポイント割込みが発生する。しかし、ＡＤＲ５はハードウェアブレークポイントテーブルには登録されていないため、デバッガに制御は移らず、ハードウェアブレークポイント切換え処理が呼ばれる（図９のステップＳ１６３）。この時点でのプログラムカウンタが位置する図１０におけるアドレスＡＤＲ５と次のハードウェアブレークポイント設定されたアドレスＢ２との間のアドレスＡＤＲ６に分岐命令があるので、ハードウェアブレークポイント切換え処理は、アドレスＡＤＲ６の無条件分岐命令の分岐先であるアドレスＡＤＲ２を次のＣＰＵハードウェアブレークポイントとして設定する。
【００７０】
以下、同様のステップによりソフトウェアプログラムのデバッグ処理が行なわれていく。
【産業上の利用可能性】
【００７１】
本発明はＣＰＵで実行するソフトウェアプログラムのデバッグに利用することができる。
【符号の説明】
【００７２】
１    デバッグ対象装置
２    デバッグ対象装置内のＣＰＵ
３    デバッグ対象装置内のメモリ
４    デバッグ対象装置内のデバッガ用通信インターフェース回路
５    デバッグ操作用端末
６    デバッグ操作用端末内のＣＰＵ
７    デバッグ操作用端末内のメモリ
８    デバッグ操作用端末内のデバッガ用通信インターフェース回路
９    ディスプレイ
１０  キーボード
１１  デバッガ用通信インターフェース
【図１】
0005526725.tif 000002
【図２】
0005526725.tif 000003
【図３】
0005526725.tif 000004
【図４】
0005526725.tif 000005
【図５】
0005526725.tif 000006
【図６】
0005526725.tif 000007
【図７】
0005526725.tif 000008
【図８】
0005526725.tif 000009
【図９】
0005526725.tif 000010
【図１０】
0005526725.tif 000011
【図１１】
0005526725.tif 000012