(57)【要約】【課題】  ブレークポイントからのユーザープログラムの再実行において、ブレークポイントの書き換えを行なわずに再実行を可能とする、プラグラムデバッグ方法を提供する事。【解決手段】 本発明にかかわるプログラムデバッグ方法は、デバッグ対象となるプログラムを有する被デバッグ装置をエミュレーションし、デバッグを行うプログラムのデバッグ方法であって、プログラムにブレークポイントを設定するステップと、ブレークポイントに設定された命令をプログラムの実行が停止される命令に書き換えるステップと、プログラムを実行するステップと、ブレークポイントでプログラムを停止するステップと、ブレークポイントに設定された命令に対して、元の命令をシミュレーションするステップと、シミュレーションの結果に基づく情報を被デバッグ装置に書き込むステップと、ブレークポイントの次の命令からプログラムを実行するステップと、を備えるものである。【選択図】  図７
2005284542.tif 000002
【特許請求の範囲】
【請求項１】
デバッグ対象となるプログラムを有する被デバッグ装置をエミュレーションし、前記プログラムのデバッグを行うプログラムのデバッグ方法であって、
前記プログラムにブレークポイントを設定するステップと、
前記プログラムの前記ブレークポイントに設定された命令を前記プログラムの実行が停止されるブレーク命令に書き換えるステップと、
前記ブレークポイントに設定された命令の前の命令まで前記プログラムを実行するステップと、
前記ブレークポイントに設定された命令で前記プログラムを停止するステップと、
前記ブレークポイントに設定された命令に対して、前記ブレーク命令に書き換えられる前の命令をシミュレーションするステップと、
前記シミュレーションの結果に基づく情報を前記被デバッグ装置に書き込むステップと、
前記ブレークポイントに設定された命令の次の命令からプログラムを実行するステップと、
を備えるプログラムデバッグ方法。
【請求項２】
前記ブレークポイントに設定された命令の次の命令からプログラムを実行した後、前記ブレーク命令を前記ブレーク命令に書き込まれる前の命令に書き換えるステップをさらに有する請求項１記載のデバッグ方法。
【請求項３】
前記デバッグ対象となるプログラムが前記被デバッグ装置に設けられたフラッシュＲＯＭに記憶されている請求項１又は２記載のデバッグ方法。
【請求項４】
デバッグ対象となるプログラムを有する被デバッグ装置の前記プログラムにブレークポイントを設定して、前記プログラムのデバッグを行う、プログラムであって、
（ａ）前記プログラムの前記ブレークポイントに設定された命令を前記プログラムの実行が停止されるブレーク命令に書き換えるステップと、
（ｂ）前記ブレークポイントに設定された命令の前の命令まで前記プログラムを実行するステップと、
（ｃ）前記ブレークポイントに設定された命令で前記プログラムを停止するステップと、
（ｄ）前記ブレークポイントに設定された命令に対して、前記ブレーク命令に書き換えられる前の命令をシミュレーションするステップと、
（ｅ）前記シミュレーションの結果に基づく情報を前記被デバッグ装置に書き込むステップと、
（ｆ）前記ブレークポイントに設定された命令の次の命令からプログラムを実行するステップと、
があり、コンピュータに前記ステップ（ａ）、（ｂ)、（ｃ）、（ｄ）、（ｅ）、（ｆ）を実行させるためのプログラム。
【請求項５】
前記ブレークポイントに設定された命令の次の命令からプログラムを実行した後、前記ブレーク命令を前記ブレーク命令に書き込まれる前の命令に書き換えるステップをさらにコンピュータに実行させる請求項４記載のプログラム
【請求項６】
前記デバッグ対象となるプログラムが前記被デバッグ装置に設けられたフラッシュＲＯＭに記憶されている請求項４又は５記載のプログラム。
【請求項７】
デバッグ対象となるプログラムを有する被デバッグ装置をエミュレーションするエミュレータと、前記エミュレータを操作し前記デバッグ対象プログラムに対してブレークポイント設定を行なうデバッグプログラムと、前記デバッグプログラムを動作させるホストコンピュータと、を有するプログラムデバッグ装置であって、
前記プログラムにブレークポイントを設定する手段と、
前記プログラムの前記ブレークポイントに設定された命令を前記プログラムの実行が停止されるブレーク命令に書き換える手段と、
前記ブレーク命令に書き換えられた命令を有するプログラムを実行する手段と、
前記ブレークポイントに設定された命令に対して、前記ブレーク命令に書き換えられる前の命令をシミュレーションする手段と、
前記シミュレーションの結果に基づく情報を前記被デバッグ装置に書き込む手段と、
前記ブレークポイントに設定された命令の次の命令からプログラムを実行する手段と、
を備えるプログラムデバッグ装置。
【請求項８】
前記ブレークポイントに設定された命令の次の命令からプログラムを実行した後、前記ブレーク命令を前記ブレーク命令に書き込まれる前の命令に書き換える手段をさらに有する請求項７記載のプログラム」デバッグ装置。
【請求項９】
前記デバッグ対象となるプログラムが前記被デバッグ装置に設けられたフラッシュＲＯＭに記憶されている請求項１又は２記載のプログラムデバッグ装置
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマイクロコンピュータのプログラム開発におけるソフトウェアのエミュレーション技術に関し、特にプログラムのブレークポイント設定とプログラム実行に関する。
【背景技術】
【０００２】
マイクロコンピュータで動作するプログラムのデバッグを行なう方式として、プログラムをエミュレーションし、ブレークポイントを設定することによって前記プログラムのデバッグを部分的に行なう方式が知られている。このソフトウェアブレークポイントによるデバッグ方式は、ブレークポイントを設定したいプログラム中の命令を、プログラムを制御するための命令、たとえば割り込みを発生させる命令（トラップ命令）に一時的に置き換えるようにしている。このソフトウェアブレークポイントによるデバッグ方式をフラッシュROMに適応することによりROMであってもソフトウェアブレークポイントを設定することが可能となった。
【０００３】
ソフトウェアのエミュレーション環境は、ユーザーが操作するホストマシンと、ホストマシン上で動作するデバッグプログラムと、デバッグ対象であるユーザープログラムを有するマイクロコンピュータと、マイクロコンピュータとホストコンピュータとの間に設けられるエミュレータと、それらを接続するケーブル類とを備えている。エミュレータはホストマシン上のデバッグプログラムと、マイクロコンピュータとの情報の橋渡しの役目をもつ。ユーザーはホストマシンを通してデバッグプログラムを操作し、その命令はデバッグプログラムからエミュレータを介してマイクロコンピュータへ伝達される。マイクロコンピュータの状態はエミュレータによって観察され、エミュレータはその情報をホストマシンへ伝達している。
【０００４】
図１にデバッガ７の構成およびエミュレータ１、マイクロコンピュータ４との接続関係を示す。デバッグプログラムであるデバッガ７とエミュレータ１とはホストインターフェースケーブル３によって接続さる。これにより両者間でのデータのやり取りが可能とされる。また、エミュレータ１とマイクロコンピュータ４とはインターフェースケーブル６によって接続される。これによりエミュレータ１において所定のエミュレーション動作が可能とされる。マイクロコンピュータ４は内部にフラッシュＲＯＭ８を有し、フラッシュＲＯＭ８にデバッグ対象プログラムが格納されている。
【０００５】
デバッガ７は実行制御部１７、ブレークポイント制御部１８、データ転送制御部１９、ユーザーインターフェース２０およびデバッグ対象情報表示部２１を備えており、ユーザーからの操作に基づいてデバッグ作業を行なう。実行制御部１７はブレークポイント制御部１８、データ転送制御部１９、ユーザーインターフェース２０およびデバッグ対象情報表示部２１の全体的な動作を制御する。
【０００６】
ユーザーインターフェース２０はブレークポイントの設定や解除、プログラムの実行、停止等の命令をユーザーから受け、それを実行制御部１７およびブレークポイント制御部１８へ伝える役割を持つ。デバッグ対象情報表示部２１はデバッグ対象であるマイクロコンピュータ４の情報を、エミュレータ１の観察に基づいて表示する。
【０００７】
ブレークポイント制御部１８はユーザーインターフェース２０からのブレークポイント設定に基づき、ブレークポイントを設定したプログラムのプログラムカウンターおよびブレーク命令に変更する前の元の命令を記憶しておく役割を持つ。データ転送制御部１９はデバッガ７とエミュレータ１の間の情報の伝達をする役割を有し、ホストインターフェースケーブル３を介してエミュレータ１と接続されている。
【０００８】
次に、従来のデバッグ方法について図２と図３を用いて説明する。図２はデバッグ対象のプログラムの一例であり、フラッシュＲＯＭに記憶されている。ここでは図２に示すように04b6番地にソフトウェアブレークを設定している。図３は具体的なデバッグ手順を表している。まず、デバッガ７から04b6番地にソフトウェアブレークを設定する（Ｓ１０１）。すると、デバッガ7は図２に示すようにブレークポイントを設定した命令をブレーク命令に置き換えたユーザープログラム１６をエミュレータ１に送る。エミュレータ１はそのプログラムをデータ転送回路１０からフラッシュROM８に書き込む（Ｓ１０２）。そして、デバッガ７がユーザープログラム１６を実行する（Ｓ１０３）。ブレークポイントを設定した命令を実行しようとするとプログラム実行が停止する（Ｓ１０４）。
【０００９】
ブレークポイントで動作が停止した状態から再びプログラム実行を開始すると、04b6番地の命令がブレーク命令に書き換えられているため、その命令で再度停止してしまう。デバッガ7は04b6番地の命令を元の命令に書き換えたユーザープログラム１６をエミュレータ１に送る。エミュレータ1はそのプログラムをデータ転送回路１０からフラッシュROM８に書き込む。04b6番地の元の命令をステップ実行、すなわち書き換えられる前の04b6番地の一命令のみを実行する（Ｓ１０５）。その後、デバッガ７は再び04b6番地の命令をブレーク命令に置き換えたユーザープログラム１６をフラッシュROM８に書き込む（Ｓ１０６）。
【００１０】
そして、デバッガ７は再度ユーザープログラム１６の実行を開始する（Ｓ１０７）。デバッグ作業が終了したら、デバッガ７はブレークポイントの設定を解除する（Ｓ１０８）。するとデバッガ７はブレーク命令に置き換えられていた命令を元の命令に戻したユーザープログラム１６をエミュレータ１に送る。エミュレータ１はそのプログラムをデータ転送回路１０からフラッシュROM８に書き込む（Ｓ１０９）。図４は上記の従来の動作を含む、デバッグ開始から終了までの流れを表したフローチャートである。太枠のブロックはプログラムの書き換えが行なわれる事を示している。このようなソフトウェアブレークポイントによるデバッグ方法は、例えば特許文献１や特許文献２に記載されている。
【００１１】
従来の方法でソフトウェアブレークポイントによるデバッグを実現した場合、ブレークポイントの設定、解除、ブレークポイントからのユーザープログラムの再実行においてフラッシュROMの書き換えが行われることになる。しかしながら、フラッシュROMの書き換えは、一般的に１００回程度しか保証されていない。従ってすぐにこの保証回数を超えてしまうおそれがある。そのためフラッシュROMの書き換え回数を出来得る限り少なくすることが求められる。
【００１２】
また、書き換え回数が多いと、フラッシュＲＯＭの書き換え制限回数を消費するだけでなく、データ転送およびフラッシュROMの書き換えに時間がかかり、デバッグ作業に時間がかかることになる。さらに、ブレークポイントの設定および解除によるフラッシュＲＯＭの書き換えは各々１回しか行なわれないが、ブレークポイントからのユーザープログラムの再実行においては、ブレークポイントを設定する前のプログラムに書き換える動作と、再度ブレーク命令に書き換える動作の計２度行なわれる。
【００１３】
ここで、プログラムのデバッグ作業において、ブレークポイントからのユーザープログラムの再実行は複数回行なわれることが想定されるので、ブレークポイントからのユーザープログラムの再実行時のプログラムの書き換えはフラッシュＲＯＭの書き換え制限回数の消費の面からも、ユーザープログラムの実行に時間がかかりデバッグ効率を悪化させる面からも好ましくないと考えられる。
【特許文献１】特開２００２−８２８１９号公報
【特許文献２】特開平５−７３３４８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１４】
上述のように、従来のソフトウェアブレークポイントを用いたデバッグ方法では、プログラムの書き換え回数が増加してしまうという問題があった。本発明はこのような問題点を解決するためになされたものであり、デバッグ時における、プログラムの書き換え回数を少なくすることができるデバッグ方法、装置プログラムを提供する事を目的とする。
【課題を解決するための手段】
【００１５】
本発明にかかわるプログラムデバッグ方法は、デバッグ対象となるプログラムを有する被デバッグ装置をエミュレーションし、前記プログラムのデバッグを行うプログラムのデバッグ方法であって、前記プログラムにブレークポイントを設定するステップと、前記プログラムの前記ブレークポイントに設定された命令を前記プログラムの実行が停止されるブレーク命令に書き換えるステップと、前記ブレークポイントに設定された命令の前の命令まで前記プログラムを実行するステップと、前記ブレークポイントに設定された命令で前記プログラムを停止するステップと、前記ブレークポイントに設定された命令に対して、前記ブレーク命令に書き換えられる前の命令をシミュレーションするステップと、前記シミュレーションの結果に基づく情報を前記被デバッグ装置に書き込むステップと、前記ブレークポイントに設定された命令の次の命令からプログラムを実行するステップと、を備えるプログラムデバッグ方法である。このような構成により、プログラムの書き換え回数を少なくすることができる。
【００１６】
また、前記ブレークポイントに設定された命令の次の命令からプログラムを実行した後、前記ブレーク命令を前記ブレーク命令に書き込まれる前の命令に書き換えるステップをさらに有してもよい。こうすることにより、再度プログラムを実行してデバッグを行なう必要が無い場合に、プログラムの実行終了後、ブレーク命令の解除を行なう手間が省ける。
【００１７】
本発明にかかるデバッグプログラムは、デバッグ対象となるプログラムを有する被デバッグ装置の前記プログラムにブレークポイントを設定して、前記プログラムのデバッグを行う、プログラムであって、（ａ）前記デバッグ対象プログラムの前記ブレークポイントに設定された命令を前記デバッグ対象プログラムの実行が停止されるブレーク命令に書き換えるステップと、（ｂ）前記ブレークポイントに設定された命令の前の命令まで前記プログラムを実行するステップと、（ｃ）前記ブレークポイントに設定された命令で前記プログラムを停止するステップと、（ｄ）前記ブレークポイントに設定された命令に対して、前記ブレーク命令に書き換えられる前の命令をシミュレーションするステップと、（ｅ）前記シミュレーションの結果に基づく情報を前記被デバッグ装置に書き込むステップと、（ｆ）前記ブレークポイントに設定された命令の次の命令からプログラムを実行するステップと、があり、コンピュータに前記ステップ（ａ）、（ｂ)、（ｃ）、（ｄ）、（ｅ）、（ｆ）を実行させるためのプログラムである。このような構成により、プログラムの書き換え回数を少なくすることができる。
【００１８】
また、ステップ（ｆ）の後、前記ブレーク命令を前記ブレーク命令に書き込まれる前の命令に書き換えるステップをさらに有してもよい。こうすることにより、再度プログラムを実行してデバッグを行なう必要が無い場合に、プログラムの実行終了後、ブレーク命令の解除を行なう手間が省ける。
【００１９】
本発明にかかわるプログラムデバッグ装置は、デバッグ対象となるプログラムを有する被デバッグ装置をエミュレーションするエミュレータと、前記エミュレータを操作し前記デバッグ対象プログラムに対してブレークポイント設定を行なうデバッグプログラムと、前記デバッグプログラムを動作させるホストマシンと、を有するプログラムデバッグ装置であって、前記プログラムにブレークポイントを設定する手段と、前記プログラムの前記ブレークポイントに設定された命令を前記プログラムの実行が停止されるブレーク命令に書き換える手段と、前記ブレーク命令に書き換えられた命令を有するプログラムを実行する手段と、前記ブレークポイントに設定された命令で前記プログラムを停止する手段と、前記ブレークポイントに設定された命令に対して、前記ブレーク命令に書き換えられる前の命令をシミュレーションする手段と、前記シミュレーションの結果に基づく情報を前記被デバッグ装置に書き込む手段と、前記ブレークポイントに設定された命令の次の命令からプログラムを実行する手段と、を備えるプログラムデバッグ装置である。このような構成により、プログラムの書き換え回数を少なくすることができる。
【００２０】
また、前記ブレークポイントに設定された命令の次の命令からプログラムを実行した後、前記ブレーク命令を前記ブレーク命令に書き込まれる前の命令に書き換える手段をさらに有してもよい。こうすることにより、再度プログラムを実行してデバッグを行なう必要が無い場合に、プログラムの実行終了後、ブレーク命令の解除を行なう手間が省ける。
【００２１】
ここで、デバッグ対象プログラムが格納されている記憶媒体はフラッシュＲＯＭであってもよい。その場合、プログラムの書き換え回数を低減することにより、フラッシュＲＯＭの書き換え制限回数の消費を抑える事ができる。
【発明の効果】
【００２２】
本発明によりデバッグ時のプログラムの書き換え回数を低減することができるデバッグ方法、装置、プログラムを提供する事ができる。それによりデバッグ効率を向上させると共に、デバッグ対象プログラムがフラッシュＲＯＭに記憶されている場合は、フラッシュＲＯＭの書き換え制限回数の消費を抑える事ができる。
【発明を実施するための最良の形態】
【００２３】
以下に、本発明を適用可能な実施の形態が説明される。以下の説明は、本発明の実施形態を説明するものであり、本発明が以下の実施形態に限定されるものではない。また、説明の明確化のため、以下の記載は、適宜、省略及び簡略化がなされている。又、当業者であれば、以下の実施形態の各要素を、本発明の範囲において容易に変更、追加、変換することが可能である。
【００２４】
ソフトウェアのエミュレーション環境は図５のように構成されている。すなわちホストマシン２と、エミュレータ１と、マイクロコンピュータ４が実装されたプリント基板５とを備えている。ホストマシン２にはデバッグ用のプログラムが記憶されている。すなわち、ホストマシン２上でデバッガ７が動作する。マイクロコンピュータ４にはデバッグ対象となるユーザープログラムが記憶されている。すなわち、マイクロコンピュータ４はデバッグの対象となる被デバッグ装置である。ホストマシン２とエミュレータ１とはホストインターフェースケーブル３で接続されている。また、エミュレータ１とプリント基板５とはインターフェースケーブル６で接続されている。プリント基板５にはマイクロコンピュータ４とインターフェースケーブル６との間の配線が接続されている。すなわち、インターフェースケーブル６からの信号はプリント基板５を介してマイクロコンピュータ４に入力される。エミュレータ１はホストマシン２からの命令をマイクロコンピュータ４に送信する。また、エミュレータ１はユーザーがホストマシン２上で確認できるよう、マイクロコンピュータの状態をエミュレートする。
【００２５】
図５の例では、エミュレータ１はホストインターフェースケーブル３を介してホストマシン２に接続されているがこれに限定されるものではなく、エミュレータ１は例えばＰＣＭＣＩＡ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ  Ｍｅｍｏｒｙ  Ｃａｒｄ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ａｓｓｏｃｉａｔｉｏｎ）カード、あるいはＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）カード等でもよい。この場合ホストマシン２はＰＣＭＣＩＡスロット、あるいはＰＣＩスロット等を搭載したパーソナルコンピュータ等である。
【００２６】
ホストマシン２は上記の場合も含め、一般的にはパーソナルコンピュータである。以下にホストマシン２の構成例について説明する。図６はホストマシン２のハードウェア構成の概要を示している。中央処理装置（メインＣＰＵ）２０１とメインメモリ２０４とを含んでいる。メインＣＰＵ２０１とメインメモリ２０４とは、バスを介して補助記憶装置としてのハードディスク装置と接続される。
【００２７】
フレキシビルディスク装置（ＦＤＤ）２２０、ハードディスク装置（ＨＤＤ）２１３、２３０、ＣＤ−ＲＯＭドライブ２２６、２２９、ＭＯドライブ２２８等の記憶媒体駆動装置は、フレキシビルディスク・コントローラ（ＦＤＣ）２１９、ＩＤＥコントローラ２２５、ＳＣＳＩコントローラ２２７などの各種コントローラを介してバスに接続される。
【００２８】
ＦＤＤ２２０等の記憶媒体駆動装置には、フレキシビルディスク等の可搬型記憶媒体が挿入される。記憶媒体にはオペレーティングシステムと共同してメインＣＰＵ２０１等に命令を与え、本実施形態を実施するためのコンピュータ・プログラム（デバッガ７）を記憶することができ、メインメモリ２０４にロードされることによって実行される。コンピュータ・プログラムは圧縮し、又、複数に分割して記憶することができる。
【００２９】
ホストマシン２は、さらに、ユーザ・インターフェース・ハードウェアを備えたシステムとすることができる。ユーザ・インターフェース・ハードウェアとしては、例えば、入力をするためのポインティング・デバイス（マウス２０７、図示しないジョイスティック等）またはキーボード２０６や視覚データをユーザーに提示するための表示装置２１１もしくはＣＲＴ２１２があり、キーボード２０６、マウス２０７はキーボードマウスコントローラ２０５を介してバスに接続され、表示装置２１１はＤＡＣ／ＬＣＤＣ２１０およびＶＧＡ２０８を介してバスに接続される。又、パラレルポート２１６を介してプリンタを接続することもできる。
【００３０】
ホストマシン２は、シリアルポート２１５を介してモデムを接続することが可能であり、シリアルポート２１５、モデムまたはトークンリングや通信用アダプタ２１８を介してネットワークに接続し、他のコンピュータシステムと通信を行っている。このように、本形態のホストマシン２は、通常のパーソナルコンピュータ（ＰＣ）、ワークステーション、汎用機などによって実現可能である。なお、これらの構成は例示であり、そのすべての構成が本実施の形態に必須というものではない。
【００３１】
図７にデバッガ７の構成を示す。デバッガ７は実行制御部１７、ブレークポイント制御部１８、データ転送制御部１９、ユーザーインターフェース２０、デバッグ対象情報表示部２１、命令シミュレーション部２２を備えている。実行制御部１７は、ブレークポイント制御部１８、データ転送制御部１９、ユーザーインターフェース２０およびデバッグ対象情報表示部２１の全体的な動作を制御する。ユーザーインターフェース２０はブレークポイントの設定や解除、プログラムの実行、停止等の命令をユーザーから受ける。ユーザーインターフェース２０はそれを実行制御部１７およびブレークポイント制御部１８へ伝える役割を持つ。
【００３２】
ブレークポイント制御部１８はユーザーインターフェース２０からのブレークポイント設定に基づき、ブレークポイントを設定したプログラムのプログラムカウンターおよびブレーク命令に変更する前の元の命令を記憶しておく役割を持つ。すなわち、ブレークポイント制御部１８はブレークポイントが設定される命令の番地と、その内容を対応づけて記憶する。データ転送制御部１９はデバッガ７とエミュレータ１の間の情報の伝達を制御する。デバッグ対象情報表示部２１はエミュレータ１により観察されているデバッグ対象であるマイクロコンピュータ４内の情報を表示する。
【００３３】
さらに、命令をシミュレーションするために命令シミュレーション部２２を導入する。命令シミュレーション部２２は実行制御部１７から呼び出されて動作し、呼び出されたときのマイクロコンピュータ４のエミュレーション情報に基づいて、ソフト上でマイクロコンピュータ４の動作をシミュレーションする。命令シミュレーション部２２はシミュレーションした結果をデータ転送制御部１９からエミュレータ１に転送する。
【００３４】
また、デバッグ対象であるマイクロコンピュータ４は図８に示すようにフラッシュROM８、プロセッサ９、データ転送回路１０、RAM１１、外部I／O１２および割り込みコントローラ１３を備えおり、これらのそれぞれがバス１５を介して接続されている。フラッシュＲＯＭ８は電気的に記憶の消去および書き込みができるＲＯＭであり、マイクロコンピュータ４のユーザープログラム１６が格納されている。プロセッサ９はフラッシュＲＯＭ８に格納されたユーザープログラム１６を実行する。さらに、プロセッサ９はレジスタ１４を含む。書き換え可能なフラッシュＲＯＭを用いることにより、上述のとおりROMであってもソフトウェアブレークポイントを設定することが可能となった。このマイクロコンピュータ４に格納されたユーザープログラム１６がデバッグ対象のプログラムであり、エミュレータ１を介してデバッガ７によりデバッグされる。
【００３５】
データ転送回路１０は、エミュレータ１とマイクロコンピュータ４との間で送受信が行なわれるインターフェース回路である。ＲＡＭ１１はフラッシュＲＯＭ８に格納されているユーザープログラムなどのデータを一時的に格納する。外部Ｉ／Ｏ１２はマイクロコンピュータ４の外部入出力を行なう。割り込みコントローラ１３は割り込みが発生した事をプロセッサ９に知らせる役割を持つ。
【００３６】
本実施の形態の動作を図２に示すように04b6番地にソフトウェアブレークを設定した場合の例を、図９を用いて説明する。まず、デバッガ７から04b6番地にソフトウェアブレークを設定する（Ｓ２０１）。すると、デバッガ7は図２に示すように04b6番地の命令をブレーク命令に置き換えたユーザープログラム１６をエミュレータ１に送る。エミュレータ１はそのプログラムをマイクロコンピュータ４に送信する。エミュレータ１により送信されたプログラムはデータ転送回路により受信される。プロセッサ９はそのプログラムをフラッシュＲＯＭ８に書き込む（Ｓ２０２）。そして、デバッガ７はエミュレータ１を介してマイクロコンピュータ４のユーザープログラム１６を実行する（Ｓ２０３）。0000−04b6番地までの命令が実行される。ブレーク命令である04b6番地でプログラム実行が停止する（Ｓ２０４）。
【００３７】
ユーザープログラムの実行がソフトウェアブレークポイントで停止した状態で再実行しようとした場合、実行制御部１７はブレークポイント制御部１８に記憶しておいたブレークポイントを設定した命令を命令シミュレーション部２２に通知する。命令シミュレーション部２２は受け取った命令をデコードし、エミュレータ１から受け取ったレジスタ、メモリ、Ｉ／Ｏの情報に基づいて書き換える前の命令をシミュレーションする。さらに、シミュレーションしたことによって状態の変化したレジスタ、メモリ、I／Ｏの情報を、データ転送制御部１９からエミュレータ１に転送する。ここで、変化したレジスタ、メモリ、Ｉ／Ｏの情報とはシミュレーション上の情報であり、ホストマシン２すなわちデバッガ７内部の情報である。シミュレーション上の情報は、実際にマイクロコンピュータ４に、書き換えられる前の04b6番地の命令を実行させた場合の情報と対応している。
【００３８】
エミュレータ１はその情報をインターフェースケーブル６通してデバッグ対象であるマイクロコンピュータ４に転送する。マイクロコンピュータ４のプロセッサ内部のレジスタ１４、RAM１１および外部I／O１２を変化させる（Ｓ２０５）。すなわちシミュレーションによって変化したレジスタ、メモリ、Ｉ／Ｏの情報に基づいて、レジスタ１４、ＲＡＭ１１および外部Ｉ／Ｏ１２の状態が変化する。また、実行制御部１７はプロセッサ９内部のプログラムカウンターを次の命令、すなわち04b7番地に移動させる命令をエミュレータ１へ送信し、エミュレータ１はそれをマイクロコンピュータ４へ転送する。データ転送回路１０でその命令を受け取り、プロセッサ９はプログラムカウンターを04b7番地に移動させる（Ｓ２０６）。さらに、実行制御部１７は移動したプログラムカウンターからプログラム実行を再開させる命令を送信するようデータ転送制御部１９を制御する。データ転送制御部１９はその情報をエミュレータ１に送信する（Ｓ２０７）。エミュレータ１はその命令を受け取りマイクロコンピュータ４に転送する。プロセッサ９は04b7番地の命令からユーザープログラム１６を実行する。
【００３９】
デバッグ作業が終了したら、デバッガ７からブレークポイントの設定を解除する（Ｓ２０８）。するとデバッガ７はブレーク命令に置き換えられていた命令を元の命令に戻したユーザープログラム１６をエミュレータ１に送る。エミュレータ１はそのプログラムをデータ転送回路１０からフラッシュROM８に書き込む（Ｓ２０９）。図１０は上記の本実施の形態にかかる動作を含む、デバッグ開始から終了までの流れを表したフローチャートである。太枠のブロックはプログラムの書き換えが行なわれる事を示している。
【００４０】
すなわち、デバッグ作業が開始されるとユーザーはまずデバッガ７に対してブレークポイントの設定を行なう（Ｓ２０１）。エミュレータ１はブレークポイントの設定に基づき、マイクロコンピュータ４内のユーザープログラムを書き換える（Ｓ２０２）。ブレーク命令への書き換えが終わると、マイクロコンピュータ４においてプロセッサ９によりユーザープログラム１６が実行される（Ｓ２０３）。0000番地から04b6番地のブレークポイントにヒットするまでプログラムが実行され、04b6番地のブレーク命令でプログラムが停止する（Ｓ２０４）。デバッガ７がユーザーからプログラムの再実行命令を受け取ると、実行制御部１７は命令シミュレーション部２２を呼び出す。命令シミュレーション部２２はブレークポイント制御部１８に記録されている、04b6番地のブレーク命令に書き換えられる前の命令をデコードし実行（シミュレーション）する。このシミュレーションの際、呼び出されたときのマイクロコンピュータ４のエミュレーション情報、すなわちレジスタ１４、ＲＡＭ１１、外部Ｉ／Ｏ１２の状態に基づき、命令シミュレーション部２２はシミュレーションを行なう。
【００４１】
04b6番地の元の命令のシミュレーションが終了すると、実行制御部１７がシミュレーションによって変化したレジスタ１４、ＲＡＭ１１、外部Ｉ／Ｏ１２の状態をエミュレータ１へ送信するようデータ転送制御部１９を制御する。エミュレータ１はその情報をマイクロコンピュータ４へ転送する。データ転送回路１０がその情報を受け取り、レジスタ１４、ＲＡＭ１１、外部Ｉ／Ｏ１２の状態の変化が書き込まれる（Ｓ２０５）。次に、実行制御部１７はプロセッサ９内部のプログラムカウンターを次の命令、すなわち04b7番地に移動させる命令をエミュレータ１へ送信し、エミュレータ１はそれをマイクロコンピュータ４へ転送する。データ転送回路１０でその命令を受け取り、プロセッサ９はプログラムカウンターを04b7番地に移動させる（Ｓ２０６）。プログラムがブレーク命令の次の命令から再実行される（Ｓ２０７）。
【００４２】
上記の作業でデバッグ作業が終了しなければ上記の作業を繰り返す。その際、前回の作業と同じブレークポイントで作業するならばＳ２０３に、別のブレークポイントを設定するならばＳ２０１に戻る。デバッグ作業が終了したならばデバッガ７でブレークポイント解除の命令を出す（Ｓ２０８）。すると、実行制御部１７はブレークポイント制御部１８に記憶されているブレークポイント情報を参照し、ブレークポイントを設定したプログラムカウンターの命令を元に戻す命令をエミュレータ１に送信する。エミュレータ１はその命令をマイクロコンピュータ４へ転送する。データ転送回路１０がその命令を受け取り、プロセッサ９によってフラッシュＲＯＭ８に格納されているユーザープログラムが書き換えられる（Ｓ２０９）。
【００４３】
以上、説明したように、本実施の形態にかかるプログラムデバッグ方法では、ユーザープログラムの実行がソフトウェアブレークポイントで停止した状態で再実行しようとした場合、ブレークポイントを書き換えるのではなくブレークポイントを設定する前の命令をシミュレーションする。そうすることによってプログラムを書き換えることなく命令を再実行する事ができ、結果的に書き換え回数が低減される。書き換えの回数が低減されることにより、データの書き込み、転送にかかる時間が短縮されるので、ユーザープログラムの実行にかかる時間を短縮する事ができる。
【００４４】
具体的には、デバッグ作業の中でブレークポイントの設定、ブレークポイントからの再実行、ブレークポイントの解除を各１回行なった場合、図４にも示されるように従来技術では設定、解除で各１回、再実行で２回、書き換えを行なっていたので合計で４回のユーザープログラム書き換えが必要であったが、本実施の形態で行なわれるプログラムの書き換えは図１０にも示されるように設定、解除の２回のみなので、ユーザープログラムの書き換え回数が半分に低減される。
【００４５】
さらに、実際のデバッグ作業では、ブレークポイントからのユーザープログラムの再実行は複数回行なわれることが想定されるので、ブレークポイントからの再実行を行なう程その効果は倍増する。また、本実施の形態ではユーザープログラムを格納する記憶媒体としてフラッシュＲＯＭを用いている。そのような場合、書き換え回数を低減する事によりフラッシュＲＯＭの書き換え制限回数の消費を抑えることができる。
【図面の簡単な説明】
【００４６】
【図１】従来技術におけるデバッガの構成を表すブロック図である。
【図２】デバッガにブレーク命令が設定されるユーザープログラムの一例を示す説明図である、
【図３】従来技術におけるデバッグ作業の動作を表す図である。
【図４】従来技術におけるデバッグ作業の流れを表すフローチャートである。
【図５】ソフトウェアのエミュレーション環境を表す概略図である。
【図６】ホストマシン２の構成を表す概略図である。
【図７】本発明の実施の形態におけるデバッガの構成を表すブロック図である。
【図８】デバッグ対象であるマイクロコンピュータ４の構成を示すブロック図である。
【図９】本発明の実施の形態におけるデバッグ作業の動作を表す図である。
【図１０】本発明の実施の形態におけるデバッグ作業の流れを表すフローチャートである。
【符号の説明】
【００４７】
１  エミュレータ、２  ホストマシン、３  ホストインターフェースケーブル、
４  マイクロコンピュータ、５  プリント基板、６  インターフェースケーブル、
７  デバッガ、８  フラッシュＲＯＭ、９  プロセッサ、１０  データ転送回路、
１１  ＲＡＭ、１２  外部Ｉ／Ｏ、１３  割り込みコントローラ、１４  レジスタ、
１５  バス、１６  ユーザープログラム、１７  実行制御部、
１８  ブレークポイント制御部、１９  データ転送制御部、
２０  ユーザーインターフェース、２１  デバッグ対象情報表示部、
２２  命令シミュレーション部、２０１  メインＣＰＵ、２０４  メインメモリ、
２０５  キーボードマウスコントローラ、２０６  キーボード、２０７  マウス、
２０８  ＶＧＡ、２０９  ＶＲＡＭ、２１０  ＤＡＣ／ＬＣＤＣ、
２１１  表示装置、２１２  ＣＲＴ、２１３、２３０  ＨＤＤ、
２１４  ＲＯＭ、２１５  シリアルポート、２１６  パラレルポート、
２１７  タイマ、２１８  通信用アダプタカード、２１９  ＦＤＣ、
２２０  ＦＤＤ、２２５  ＩＤＥコントローラ、２２６、２２９  ＣＤ−ＲＯＭドライブ
２２７  ＳＣＳＩコントローラ
【図１】
2005284542.tif 000003
【図２】
2005284542.tif 000004
【図３】
2005284542.tif 000005
【図４】
2005284542.tif 000006
【図５】
2005284542.tif 000007
【図６】
2005284542.tif 000008
【図７】
2005284542.tif 000009
【図８】
2005284542.tif 000010
【図９】
2005284542.tif 000011
【図１０】
2005284542.tif 000012