(57)【要約】【課題】  逆トレースの機能を備えたプログラム・デバッグシステムにおいて、記憶容量を最小限にし、逆トレース可能な範囲を広くする。【解決手段】  所定のシミュレーション時間ごとに、実行用オブジェクトを保存するようにし、逆トレースコマンドを受信したときに、コピーしたコピーオブジェクトを実行オブジェクトとし、かつ現在の命令より前の命令をブレイクポイントとしてコピー時点からシミュレーションを再開するようにした。或いは、実行用オブジェクトをシミュレーション開始時点から所定の間隔でそれぞれ保存するようにし、逆トレースコマンドを受信したときに、コピーした実行用オブジェクトのいずれを用いてシミュレーションを再開するかを選択できるようにして、ブレイクポイントからシミュレーション開始時点まで任意に逆トレースできるようにした。【選択図】      図１
2007004400.tif 000002
【特許請求の範囲】
【請求項１】
ハードウェアシミュレータ上で、少なくともＣＰＵを含むハードウェアモデルのシミュレーションを実行して、プログラムのデバッグを行うデバッグ方法であって、
前記シミュレーション実行中に、所定の時間間隔で、シミュレーション時間とともに前記ハードウェアモデルの実行用オブジェクトを保存する保存手順と、
前記保存した実行用オブジェクトに基づきシミュレーションを再開するシミュレーション再開手順と、
該再開したシミュレーションを所定のシミュレーション時間で停止する再開シミュレーション停止手順とを備えたデバッグ方法。
【請求項２】
前記保存手順は、所定の時間間隔で、それぞれ保存する手順であって、
前記シミュレーション再開手順は、前記保存した実行用オブジェクトのいずれに基づきシミュレーションを再開するかを選択できる手順であることを特徴とする請求項１記載のデバッグ方法。
【請求項３】
前記保存手順は、第１の保存手段に保存した実行用オブジェクトを第２の保存手段に移した後に、第１の保存手段に保存する手順であって、
前記シミュレーション再開手順は、第２の保存手段に保存した実行用オブジェクトに基づきシミュレーションを開始するようにしたことを特徴とする請求項１記載のデバッグ方法。
【請求項４】
実行用オブジェクトを保存する所定の時間間隔を指定可能とした手順を設けたことを特徴とする請求項１ないし請求項３いずれか記載のデバッグ方法。
【請求項５】
再開シミュレーション停止手段にて停止するシミュレーション時間を順次遡るようにしたことを特徴とする請求項１ないし請求項４いずれか記載のデバッグ方法。
【請求項６】
実行した命令のプログラムカウンタを保存する手順を設け、
再開シミュレーション停止手段にて停止する位置を前記保存したプログラムカウンタ値の１つ前の位置とすることを特徴とする請求項１ないし請求項４いずれか記載のデバッグ方法。
【請求項７】
シミュレーションを再開する位置を指定できる手順を設け、
前記指定手順により指定した位置より前に保存された実行用オブジェクトに基づきシミュレーションを再開し、前記指定手順により指定した位置にて停止するようにしたことを特徴とする請求項１ないし請求項４いずれか記載のデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウェアモデルのシミュレーションを実行して、プログラムのデバッグ（以下、「デバッグ」という）を行うデバッグ方法に関するものである。
【背景技術】
【０００２】
組込機器などにおけるデバッグにおいては、ほとんどの開発環境においてシミュレータ、モニタ等から構成されるデバッグシステムを用いている。そして、一般的なデバッグ作業では、そのデバッグシステム上でブレイクポイントを設定し、プログラムを実行、停止、ステップ実行させ、レジスタ内部やメモリ上のデータを参照して、プログラムの各状態を確認する作業が行われている。
【０００３】
従来のデバッグシステムでは、すでに実行したプログラムを元の状態に戻す、逆トレースを行うために、それまでＣＰＵがプログラムを実行したステップごとのレジスタおよびメモリの内容の履歴をすべて保存して置き、この履歴をＣＰＵのレジスタやメモリに書込むことにより実現している。（例えば、特許文献１参照。）。
【特許文献１】特開平５−１０８４０４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来のデバッグシステムでは、ＣＰＵのプログラム実行ステップごとにすべてのレジスタとメモリの履歴を記憶する必要があるので、逆トレースを行う範囲に応じた記憶容量が必要であった。また、デバッグ装置の記憶容量には限界があるため、前記履歴を古い順に消去するなどの複雑な処理も必要であった。
【課題を解決するための手段】
【０００５】
本発明は、前述の課題を解決するため次の方法を採用する。すなわち、ハードウェアシミュレータ上で、少なくともＣＰＵを含むハードウェアモデルのシミュレーションを実行して、プログラムのデバッグを行うデバッグ方法であって、前記シミュレーション実行中に、所定の時間間隔で、シミュレーション時間とともに前記ハードウェアモデルの実行用オブジェクトを保存する保存手順と、前記保存した実行用オブジェクトに基づきシミュレーションを再開するシミュレーション再開手順と、該再開したシミュレーションを所定のシミュレーション時間で停止する再開シミュレーション停止手順とを備えた。
【発明の効果】
【０００６】
本発明のプログラム・デバッグ方法によれば、所定のシミュレーション時間間隔で実行用オブジェクトをコピーオブジェクトとしてコピーするようにし、逆トレースコマンドを受信したときに、当該コピーしたコピーオブジェクトを実行オブジェクトとし、かつ現在の命令より１つ前の命令をブレイクポイントとしてコピー時点からシミュレーションを再開するようにしたので、あたかも１つ前の命令に逆トレースしたかのように動作させることができる。
【０００７】
また、所定の間隔で、実行オブジェクトをコピーオブジェクトに保存するようにしたので、記憶容量を最小限にすることができる。
【発明を実施するための最良の形態】
【０００８】
以下、本発明に係る実施の形態例を、図面を用いて説明する。なお、図面に共通する要素には同一の符号を付す。
【実施例１】
【０００９】
実施例１のデバッグシステムは、所定の間隔のシミュレーション時間ごとに、実行用オブジェクトを保存するようにし、逆トレースコマンドを受信したときに、当該コピーしたコピーオブジェクトを実行オブジェクトとし、かつ現在の命令より１つ前の命令をブレイクポイントとしてコピー時点からシミュレーションを再開するようにしたものである。
【００１０】
（構成）
図１は実施例１のプログラム・デバッグシステムの構成図である。同図に示したように、プログラム・デバッグシステム１００は、例えば汎用ＣＰＵなどからなるＣＰＵ１０１と、ハードウェアコントロール用のプログラム等を記憶するＲＯＭ１０３と、ＣＰＵ１０１にて実行するために補助記憶装置１０９に格納されたシミュレーションプログラム、ＯＳ（オペレーションシステム）、各種アプリケーション等を展開し、シミュレーションプログラム１０４ａ、ＯＳ１０４ｂやアプリケーション１〜Ｎ（１０４ｃ１〜１０４Ｎ）として格納するＲＡＭ１０４と、入力装置のＩ／Ｆ部１０５と、出力装置のＩ／Ｆ部１０７と、前記シミュレーションプログラム、アプリケーションプログラム、データ等を保存するためのハードディスク等からなる補助記憶装置１０９とが、バス１０２に接続された構成となっている。
【００１１】
そして、デバッグを開始する操作や停止させる操作をするために、入力装置のＩ／Ｆ部１０５にはキーボード、マウス等の入力装置１０６が接続され、デバッグの状況を表示等するために、出力装置のＩ／Ｆ部１０７にはＣＲＴ等のディスプレイ装置１０８ａやプリンタ等の出力装置１０８ｂとが接続されたと構成となっている。
【００１２】
以上の構成により、補助記憶装置１０９にインストールされたＯＳやアプリケーションソフト、データがＲＡＭ１０４に適宜展開されＣＰＵ１０１により実行される。
【００１３】
図２は実施例１のデバッグシステムの機能ブロックであり、同図（ａ）のように、デバッグターゲットである機器のシミュレータ１は、シミュレーションの現在時間を保存するＳｉｍＴｉｍｅ（１−１）、デバッグシステムに組み込まれているＣＰＵ、メモリ、Ｉ／Ｏおよびハードウェアであるシミュレータモデル１−１０、メモリモデル１−１１、Ｉ／Ｏモデルおよびハードウェアモデル１−１２からなる。
【００１４】
実行用オブジェクト２は、シミュレータ１に含まれる各モデルのオブジェクトの集合体であり、同図（ｂ）に示したように、ＣＰＵオブジェクト２−１０、メモリオブジェクト２−１１、Ｉ／Ｏ及びハードウェアオブジェクト２−１２からなる。
【００１５】
ここで、前記各モデルのオブジェクトは、ハードウェアモデルをシミュレータ上で実行するために必要なハードウェア情報とその状態情報を含んだ情報である。
【００１６】
コピーオブジェクト３は、この実行用オブジェクト２を、所定の時間間隔にてコピーしたものであり、同図（ｃ）に示したように、実行用オブジェクト２と同様、ＣＰＵオブジェクト３−１０、メモリオブジェクト３−１１、Ｉ／Ｏ及びハードウェアオブジェクト３−１２と、シミュレーション時間ＳｉｍＴｉｍｅ（１−１）をコピーして格納するコピー時間ｔｃｏ（３−１）とからなる。
【００１７】
（動作）
以上の構成により、実施例１のデバッグシステムは以下のように動作する。図３は、コピーオブジェクト３が保存されるタイミングを示すタイムチャート図であり、あらかじめ決めたシミュレーション時間ｔｓ経過ごとにシミュレータ１により、実行用オブジェクト２がコピーオブジェクト３にコピーされ、その時点のシミュレーション時間ＳｉｍＴｉｍｅ（１−１）がコピー時間ｔｃｏ（３−１）に保存されることを表している。
【００１８】
このように、前記時間ｔｓ経過ごとに実行用オブジェクト２をコピーオブジェクト３にコピーすることにより、プログラムが進行しブレイクポイントに到達したときに、コピーオブジェクト３には、その直前にコピーされた実行用オブジェクト２が残ることになる。
【００１９】
図４は、図３のコピーオブジェクトを保存した位置からブレイクポイント位置までのプログラム命令とシミュレーション時間を示した図である。すなわち、コピー時間ｔｃｏにてコピーオブジェクト３を保存してからブレイクポイントまでの命令が１、２、３、・・・、ｍであり、その下のｔ１、ｔ２、・・・、ｔｍが各命令の実時間を示し、ｔｍがブレイクポイントの時間、すなわちシミュレータが停止した時間を示している。
【００２０】
以下、図５の逆トレースを実行するデバッグシステムのフローチャートおよび上記図３、図４のタイムチャートを用いて実施例１のデバッグシステムの詳細な動作を説明する。
【００２１】
シミュレータ１は、図３に示したように、時間０からスタートし、あらかじめ決めたシミュレーション時間ｔｓが経過するごとに、ＣＰＵオブジェクト、メモリオブジェクト等の実行用オブジェクト２をコピーオブジェクト３にそれぞれ上書きしながらシミュレーションを続ける。そして、ユーザによって指定されたブレイクポイントや、ユーザによってシミュレーション一時停止コマンドが実行された時、シミュレータは停止し、ユーザコマンド待ちの状態で待機する。
【００２２】
この状態では、ユーザはシミュレータ内部の状態を自由に参照することができる。図４のブレイクポイントはこの時の状態を示しており、この時のシミュレーション時間がｔｍ、最後に実行したプログラム命令がｍである。このとき、コピーオブジェクト３にはコピー時間ｔｃｏでの実行用オブジェクトが保存されている。
【００２３】
ここで、ユーザが逆トレースコマンドを入力すると、デバッグシステムは、まず、現在のシミュレーション時間ｔｍがコピー時間ｔｃｏより大きいことを確認する（ステップＳ１）。そして、コピー時間ｔｃｏ≧現在時間ｔｍのときは、逆トレースは行えないのでエラーを表示して（ステップＳ２）、コマンドを終了しコマンド待ちに戻る。
【００２４】
コピー時間ｔｃｏが現在のシミュレーション時間ｔｍより小さい場合は、まず、デバッグシステム内部において、ブレイクポイントを１つ前の命令（この場合はｍ−１）に設定する（ステップＳ３）。
【００２５】
次に、コピーオブジェクト３の内容を実行用オブジェクト２に戻し（ステップＳ４）、シミュレーション時間ＳｉｍＴｉｍｅ（１−１）をコピー時間ｔｃｏに変更し（ステップＳ５）、コピー時間ｔｃｏの時点からシミュレーションを再開する（ステップＳ６）。すると、シミュレータは、前記デバッグシステム内部で設定したブレイクポイントの位置（この場合は、命令ｍ−１、シミュレーション時間ｔｍ−１）で停止し（ステップＳ７）、ユーザからのコマンド待ちに戻る。
【００２６】
以上の動作を逆トレースコマンドごとに行うことにより、ブレイクポイントの位置にて停止する位置を命令ｍ−１、ｍ−２・・・（シミュレーション時間をｔｍ−１、ｔｍ−２、・・・）と戻すことができ、見かけ上、１ステップごとに逆トレースしたかのように動作させることができる。なお、以上の説明では１ステップごとに逆トレースする例を示したが、２ステップごと或いは指定したステップ数ごとに戻すようにしても勿論よい。
【００２７】
（実施例１の効果）
以上詳細に述べたように、実施例１のプログラム・デバッグ方法によれば、所定のシミュレーション時間間隔で実行用オブジェクト２をコピーオブジェクト３としてコピーするようにし、逆トレースコマンドを受信したときに、当該コピーしたコピーオブジェクト３を実行オブジェクト２とし、かつ現在の命令より１つ前の命令をブレイクポイントとしてコピー時点からシミュレーションを再開するようにしたので、あたかも１つ前の命令に逆トレースしたかのように動作させることができる。
【００２８】
また、所定の間隔で、実行オブジェクト２をコピーオブジェクト３に上書きするようにしたので、記憶容量を最小限にすることができる。
【００２９】
また、実行用オブジェクト２には、ＣＰＵオブジェクト２−１０やメモリオブジェクト２−１１だけでなく、Ｉ／Ｏモデル・ハードウェアモデルのオブジェクト２−１２も含めるようにしたので、被デバッグ機器全体について逆トレースを実現することができる。
【００３０】
また、コピー時間ｔｃｏをシミュレーション時間ＳｉｍＴｉｍｅ（１−１）として再開するようにしたので、処理時間の測定なども逆トレースをしながら行うことができる。
【実施例２】
【００３１】
実施例２のプログラム・デバッグシステムは、実行オブジェクトをコピーオブジェクトにコピーする時間間隔を設定できるようにし、逆トレース可能な範囲を変えることができるようにしたものである。
【００３２】
（構成）
実施例２のプログラム・デバッグシステムの構成は、図６に示したように、実施例１のシミュレータ１に、実行オブジェクト２をコピーオブジェクト３にコピーする時間間隔を保存するｔｕ（１−２）を設けた構成となっている。その他の構成は、図１の実施例１の構成と同様であるので、簡略化のためにその説明を省略する。
【００３３】
（動作）
以上の構成により、実施例２のデバッグシステムは以下のように動作する。図７は、実施例２のデバッグシステムのシミュレーション実行時の動作フローチャートであり、図８は、実行オブジェクト２をコピーオブジェクト３にコピーするタイミングを示したタイムチャート図である。
【００３４】
まず、ユーザが、コピーする時間間隔をデバッグシステムコマンドにより指定した場合、その時間間隔をｔｕ（１−２）に保持する。何も指定されない場合、或いは一度指定した後、指定取り消しコマンドを入力された場合は、ｔｕ（１−２）は初期値０に設定される。
【００３５】
シミュレータ１は、シミュレーション実行時、ｔｕ（１−２）を参照し（ステップＳ１１）、ｔｕ（１−２）が０の場合は、コピー間隔としてあらかじめ決めたシミュレーション時間ｔｓを設定し（ステップＳ１２）、当該ｔｓごとに実行オブジェクト２をコピーオブジェクト３にコピーしながら、ブレイクポイントまで或いは一時停止コマンド受信までシミュレーションを行う。
【００３６】
一方、ｔｕ（１−２）が０以外の数値であった場合は、コピー間隔としてユーザの指定があったと判断し、コピー間隔をｔｕ（１−２）の値とし（ステップＳ１３）、当該コピー間隔ごとに実行オブジェクト２をコピーオブジェクト３にコピーしながら、ブレイクポイントまで或いは一時停止コマンド受信までシミュレーションを行う。
【００３７】
そして、ユーザが逆トレースコマンドの入力すると、実施例１と同様、デバッグシステム内部において、ブレイクポイントを１つ前の命令に設定し、次に、コピーオブジェクト３の内容を実行用オブジェクト２に戻し、シミュレーション時間ＳｉｍＴｉｍｅ（１−１）をコピー時間ｔｃｏに変更し、コピー時間ｔｃｏの時点からシミュレーションを再開する。すると、シミュレータは、前記デバッグシステム内部で設定したブレイクポイントの位置命令ｍ−１、シミュレーション時間ｔｍ−１で停止し、ユーザからのコマンド待ちとなる。
【００３８】
以上の動作を逆トレースコマンドごとに行うことにより、ブレイクポイントの位置にて停止する位置を命令ｍ−１、ｍ−２・・・（シミュレーション時間をｔｍ−１、ｔｍ−２、・・・）のように、ユーザが指定したコピー間隔ｔｕで最後にコピーした時点まで、見かけ上、１ステップごとに逆トレースしたかのように動作させることができる。
【００３９】
なお、コピー時間ｔｃｏからシミュレーションを再開始するため、コピー間隔を長く設定すると、再開からブレイクポイントまでの処理時間がかかりユーザコマンドに対するレスポンスが悪化するので、コピー間隔となるｔｕ（１−２）を所定の値以内とするように制限するのがよい。
【００４０】
（実施例２の効果）
以上詳細に述べたように、実施例２のプログラム・デバッグ方法によれば、コピー間隔を指定できるようにしたので、実施例１の効果に加え、逆トレース可能な範囲をユーザが自由に設定できる。
【実施例３】
【００４１】
実施例３のデバッグシステムは、実行用オブジェクトをシミュレーション開始時点から所定の間隔でそれぞれ保存するようにし、ブレイクポイントからシミュレーション開始時点まで任意に逆トレースができるようにしたものである。
【００４２】
（構成）
実施例３のデバッグシステムのデバッグターゲットである機器のシミュレータ１および実行用オブジェクト２は、図９（ａ）（ｂ）に示したように、実施例１と同様であるので、簡略化のためにその説明を省略する。
【００４３】
実施例３のデバッグシステムのコピーオブジェクトは、図９（ｃ）に示したように、実行用オブジェクト２をあらかじめ決めたシミュレーション時間ｔｓごとにコピーしそれぞれ格納したコピーオブジェクト３、４、５・・・（以下、「コピーオブジェクト３等」という）からなる。
【００４４】
そして、これらのコピーオブジェクトは、実行用オブジェクト２と同様、例えば、コピーオブジェクト３では、ＣＰＵオブジェクト３−１０、メモリオブジェクト３−１１、Ｉ／Ｏ及びハードウェアオブジェクト３−１２が含まれ、さらにシミュレータ１から取得したシミュレーション時間をコピー時間として格納するｔｃｏ（３−１）が含まれる。
【００４５】
同様に、コピーオブジェクト４は、コピーオブジェクト３を格納した時間よりさらに前記ｔｓだけシミュレーション時間が進んだ時点で実行用オブジェクト２をコピーしたものであり、ＣＰＵオブジェクト４−１０、メモリオブジェクト４−１１、Ｉ／Ｏ及びハードウェアオブジェクト４−１２が含まれ、さらにシミュレータ１から取得したシミュレーション時間をコピー時間として格納するｔｃｏ（４−１）が含まれる。
【００４６】
以下同様に、シミュレーション時間ｔｓが経過するごとにコピーされたコピーオブジェクト５、６、７からなる。
【００４７】
（動作）
以上の構成により、実施例３のデバッグシステムは以下のように動作する。図１０は、コピーオブジェクト３等が保存されるタイミングを示したタイムチャート図であり、シミュレータ１によりあらかじめ決められた時間ｔｓ経過ごとに、実行用オブジェクト２がコピーオブジェクト３等にそれぞれコピーされ、プログラムが進行しブレイクポイントに到達するまで行われることを示している。
【００４８】
ここで、最後のコピーオブジェクトの位置からブレイクポイント位置までのプログラム命令とシミュレーション時間を示した図は、実施例１にて用いて説明した図４と同様となるので簡略化のために詳細な説明は省略する。
【００４９】
以下に、図１１の逆トレースを実行するデバッグシステムのフローチャート、上記図４および図９のタイムチャートを用いて実施例３のデバッグシステムの詳細な動作を説明する。なお、図１１の逆トレースを実行するデバッグシステムのフローチャートのうち、ステップＳ２４〜Ｓ２８は実施例１の図５のステップＳ３〜Ｓ７と同様であるので、簡略化のためにその詳細な説明は省略する。
【００５０】
シミュレータ１は、時間０からスタートし、あらかじめ決めたシミュレーション時間ｔｓが経過するごとに、実行用オブジェクト２をコピーオブジェクト３等にコピーしながらシミュレーションを続ける。
【００５１】
ユーザによって指定されたブレイクポイントやユーザによってシミュレーション一時停止コマンドが実行された時、シミュレータは停止し、ユーザコマンド待ちの状態で待機する。この状態では、ユーザはシミュレータ内部の状態を自由に参照することができる。
【００５２】
そして、ユーザが逆トレースコマンドを入力すると、デバッグシステムは、まず、現在のシミュレーション時間ｔｍが"０"であるかどうかを判定する（ステップＳ２１）。現在のシミュレーション時間ｔｍが"０"の場合は、シミュレーションが実行されていないので、そのままコマンドを終了する。
【００５３】
一方、現在のシミュレーション時間ｔｍが"０"でないときは、現在のシミュレーション時間ｔｍが最新のコピーオブジェクトを保存したコピー時間ｔｃｏより大きいかどうか判定する（ステップＳ２２）。ここで、コピー時間ｔｃｏと現在時間が一致した場合は、逆トレースを実行することができないので、最新コピーオブジェクトＮを破棄し、その一つ前のコピーオブジェクトＮ−１を最新データとする（ステップＳ２３）。
【００５４】
コピー時間ｔｃｏが現在のシミュレーション時間ｔｍより大きい場合は、デバッグシステム内部において、ブレイクポイントを１つ前の命令ｍ−１に設定する（ステップＳ２４）。
【００５５】
次に、コピーオブジェクト３の内容を実行用オブジェクト２に戻し、シミュレーション時間ＳｉｍＴｉｍｅ（１−１）をコピー時間ｔｃｏに変更し、コピー時間ｔｃｏの時点からシミュレーションを再開する。すると、シミュレータ１は、ステップＳ２４にてデバッグシステム内部において設定したブレイクポイントの位置で停止し、ユーザからのコマンド待ち状態となる（ステップＳ２５〜Ｓ２８）。
【００５６】
逆トレースコマンドごとに以上の動作を繰り返すことにより、シミュレーション時間をｔｍ−１、ｔｍ−２、・・・と戻すことができる。
【００５７】
（実施例３の効果）
以上詳細に述べたように、実施例３のプログラム・デバッグ方法によれば、実行用オブジェクト２をシミュレーション開始時点から所定の間隔でそれぞれ保存するようにしたので、実施例１の効果に加え、ブレイクポイントからシミュレーション開始時点まで逆トレースすることができる。
【実施例４】
【００５８】
実施例４のデバッグシステムは、ブレイクポイントからシミュレーション開始時点まで逆トレースできるデバッグ方法において、コピーオブジェクトを保存する間隔をユーザが任意に指定できるようにしたものである。
【００５９】
（構成）
実施例４のデバッグシステムの構成は、図１２に示したように、実施例３のシミュレータ１の構成に、コピーオブジェクト３等を保存する時間間隔を格納するｔｕ（１−２）を新たに設けた構成となっている。その他の構成は、実施例３と同様であるので簡略化のためにその詳細な説明を省略する。
【００６０】
（動作）
以上の構成により、実施例４のデバッグシステムは以下のように動作する。この動作を実施例４のコピーオブジェクト保存のタイムチャート図である図１３を用いて以下に説明する。なお、シミュレーション実行時の動作は、図７を用いて説明した実施例２のデバッグシステムの動作と同様であるので、簡略化のために、その詳細な説明は省略する。
【００６１】
まず、ユーザがコピーオブジェクトを保存する時間間隔をデバッグシステムコマンドにおいて指定した場合、その値をｔｕ（１−２）に設定する。何も指定されてない場合、或いは一度指定した後に指定取り消しコマンドにより取消された場合は、ｔｕ（１−２）を初期値０に設定する。
【００６２】
シミュレータ１は、シミュレーション実行時、ｔｕ（１−２）を参照し、ｔｕ（１−２）が０であれば、あらかじめ決めたシミュレーション時間ｔｓごとに、コピーオブジェクト３等を保存する。一方、ｔｕ（１−２）が０以外の数値であった場合は、ユーザからの指定があったと判断し、ｔｕ（１−２）ごとにコピーオブジェクト３を保存する。これをブレイクポイントまで、或いは一時停止コマンドがあるまで続ける。
【００６３】
そして、ユーザが逆トレースコマンドを入力すると、実施例３と同様に、デバッグシステムは、デバッグシステム内部において、ブレイクポイントを１つ前の命令ｍ−１に設定し、コピーオブジェクト３の内容を実行用オブジェクト２に戻し、シミュレーション時間ＳｉｍＴｉｍｅ（１−１）をコピー時間ｔｃｏに変更し、コピー時間ｔｃｏの時点からシミュレーションを再開する。すると、シミュレータ１は、ステップＳ２４にてデバッグシステム内部において設定したブレイクポイントの位置で停止し、ユーザからのコマンド待ち状態となる。
【００６４】
逆トレースコマンドごとに以上の動作を繰り返すことにより、ユーザが指定したコピー間隔ｔｕでコピーした実行オブジェクトを用いて、シミュレーション時間をｔｍ−１、ｔｍ−２、・・・のようにシミュレーション開始時点まで戻すことができる。
【００６５】
なお、コピー時間ｔｃｏからシミュレーションを再開始するため、コピー間隔を長く設定すると、再開からブレイクポイントまでの処理時間がかかりユーザコマンドに対するレスポンスが悪化するので、コピー間隔となるｔｕ（１−２）は所定の値以内とするように制限するのがよいことは実施例２と同様である。
【００６６】
（実施例４の効果）
以上詳細に述べたように、実施例４のプログラム・デバッグ方法によれば、コピーオブジェクト保存の間隔をユーザが任意に指定できるようにしたので、実施例３の効果に加え、不要に短い間隔でコピーオブジェクトを保存することをなくし保存のための容量を削減することができる。
【実施例５】
【００６７】
実施例５のデバッグシステムは、ユーザ操作によりシミュレーションが任意の位置で停止された場合でも所定の時間前まで、逆トレースできるようにしたものである。
【００６８】
（構成）
実施例５のデバッグシステムにおけるシミュレータの構成は、図１４に示したように、実施例１のシミュレータ１の構成に加え、コピーオブジェクト旧３’を設けた構成となっている。その他の構成は、実施例１のシミュレータの構成と同様であるので、簡略化のためにその説明を省略する。
【００６９】
（動作）
以上の構成により、実施例５のデバッグシステムは、以下のように動作する。この動作を、図１５のコピーオブジェクト保存のタイムチャート図を用いて説明する。
【００７０】
図１５のコピーオブジェクト保存のタイムチャート図は、ブレイクポイントで停止したときのコピーオブジェクトとして保存された状態を表している。すなわち、後述のようにあらかじめ決めた時間ｔｓが経過するごとにコピーオブジェクトを書換え、現在時間であるブレイクポイントに最も近いシミュレーション時間のコピーオブジェクトの状態として、コピーオブジェクト新と、その一つ前のコピーオブジェクト旧が保存されていることを表している。
【００７１】
実施例５の全体の動作を前述図４と図１４、図１５を用いて以下詳細に説明する。まず、シミュレータ１は時間０からスタートし、前記ｔｓが経過するごとに、コピーオブジェクト新３をコピーオブジェクト旧３’にコピーし、実行用オブジェクト２をコピーオブジェクト３にコピーしながらシミュレーションを続ける。
【００７２】
ユーザによって指定されたブレイクポイントやユーザの操作によりシミュレーション一時停止コマンドが実行されたとき、シミュレータは停止し、ユーザコマンド待ちの状態で待機する。この状態では、ユーザはシミュレータ内部の状態を自由に参照することができる。このときの状態は前述の図４のとおりであり、このときのシミュレーション時間がｔｍ、最後に実行した命令がｍであり、コピー時間ｔｃｏの状態がコピーオブジェクト新３に保存された状態となっている。
【００７３】
ここで、ユーザが逆トレースコマンドを入力すると、デバッグシステムは、まず、現在のシミユレーション時間がコピー時間ｔｃｏより大きいことを確認する。ここでコピー時間ｔｃｏと現在時間が一致した場合は、コピーオブジェクト新３の保存と同時にシミュレーションが一時停止していることを意味し、コピーオブジェクト新３を廃棄し、代わりにコピーオブジェクト旧３’をコピーオブジェクト新３に戻す。
【００７４】
一方、現在のシミユレーション時間がコピー時間ｔｃｏよりも大きい場合は、そのまま逆トレースが可能であるので、コピーオブジェクト新３の内容はそのままとする。なお、現在のシミユレーション時間がコピー時間ｔｃｏよりも大きい場合はそのまま逆トレースが可能であるが、前述のコピー時間ｔｃｏと現在時間が一致する場合と同様、コピーオブジェクト旧３’をコピーオブジェクト新３に戻すようにしても勿論よい。
【００７５】
次に、デバッグシステム内部において、ブレイクポイントを一つ前の命令ｍ−１に設定する。次に、コピーオブジェクト新３の内容を実行用オブジェクト２に戻し、シミュレーション時間ＳｉｍＴｉｍｅ（１−１）をコピー時間ｔｃｏに変更し、コピー時間ｔｃｏの時点からシミュレーションを再開する。すると、シミュレータ１は前記デバッグシステム内部で設定したブレイクポイント、すなわち命令ｍ−１の位置で停止し、ユーザからのコマンド待ち状態となる。
【００７６】
以上の動作を逆トレースコマンドごとに行うことにより、ブレイクポイントの位置にて停止する位置を命令ｍ−１、ｍ−２・・・（シミュレーション時間をｔｍ−１、ｔｍ−２、・・・）と戻すことができ、見かけ上、１ステップごとに逆トレースしたかのように動作する。
【００７７】
（実施例５の効果）
以上詳細に述べたように、実施例５のプログラム・デバッグ方法によれば、コピーオブジェクト旧３’の保存手段を設け、あらかじめ決めたシミュレーション時間ｔｓが経過するごとに、コピーオブジェクト新３をコピーオブジェクト旧３’にコピーし、実行用オブジェクト２をコピーオブジェクト３に各オブジェクトをコピーするようにしたので、どの時点でシミュレーションが一時停止した場合であっても、逆トレースすることができる。
【実施例６】
【００７８】
実施例６のデバッグシステムは、ユーザ操作によりシミュレーションが停止された場合でも逆トレースできるようにし、かつコピーオブジェクト保存の間隔を指定できるようにし、逆トレース可能な範囲を変更することができるようにしたものである。
【００７９】
（構成）
実施例６のデバッグシステムにおけるシミュレータの構成は、図１６に示したように、図１４（ａ）の実施例５のシミュレータの構成に加え、ユーザが指定するコピー間隔を格納するｔｕ（１−２）を設けている。その他の構成は、実施例５のシミュレータの構成と同様であるので、簡略化のためにその説明を省略する。
【００８０】
（動作）
以上の構成により、実施例６のデバッグシステムは、以下のように動作する。この動作を、図１７のコピーオブジェクト保存のタイムチャート図を用いて説明する。なお、シミュレーション実行時の動作フローチャートは、実施例２にて説明した図７と同様であるので、これを用いて説明する。
【００８１】
まず、実行用オブジェクト２をコピーオブジェクト３として保存する間隔を、ユーザがデバッグシステムコマンドにより指定してきた場合、その値をｔｕ（１−２）に格納する。何も指定されない場合或いは一度指定した後に指定取り消しコマンドがあったときは、ｔｕ（１−２）は初期値０に設定される。
【００８２】
シミュレータ１は、シミュレーション実行時、ｔｕ（１−２）を参照し（ステップＳ１１）、ｔｕ（１−２）が０であれば、コピーオブジェクト３を保存する時間間隔としてあらかじめ決めたシミュレーション時間ｔｓを設定し（ステップＳ１２）、前記シミュレーション時間ｔｓごとに、コピーオブジェクト新３をコピーオブジェクト旧３’に移し、新たにコピーオブジェクト新３を保存する。
【００８３】
一方、ｔｕ（１−２）が０以外の数値であった場合、ユーザからの指定があったと判断し、コピーオブジェクト３を保存する時間間隔としてｔｕ（１−２）を設定し（ステップＳ１３）、当該ｔｕ（１−２）ごとにコピーオブジェクト新３をコピーオブジェクト旧３’に待避し、新たにコピーオブジェクト新３を保存する。これをブレイクポイント或いは一時停止まで続ける。
【００８４】
そして、ユーザが逆トレースコマンドを入力すると、コピー時間ｔｃｏと現在時間が一致した場合は、コピーオブジェクト新３の保存と同時にシミュレーションが一時停止していることを意味し、コピーオブジェクト新３を廃棄し、代わりにコピーオブジェクト旧３’をコピーオブジェクト新３に戻す。一方、現在のシミユレーション時間がコピー時間ｔｃｏより大きい場合は、そのまま逆トレースが可能であるので、コピーオブジェクト新３の内容はそのままとする。
【００８５】
次に、デバッグシステム内部において、ブレイクポイントを一つ前の命令ｍ−１に設定する。次に、コピーオブジェクト新３の内容を実行用オブジェクト２に戻し、シミュレーション時間ＳｉｍＴｉｍｅ（１−１）をコピー時間ｔｃｏに変更し、コピー時間ｔｃｏの時点からシミュレーションを再開する。すると、シミュレータ１は前記デバッグシステム内部で設定したブレイクポイント、すなわち命令ｍ−１の位置で停止し、ユーザからのコマンド待ち状態となる。
【００８６】
以上の動作を逆トレースコマンドごとに行うことにより、ブレイクポイントの位置にて停止する位置を命令ｍ−１、ｍ−２・・・（シミュレーション時間をｔｍ−１、ｔｍ−２、・・・）のように、ユーザが指定したコピー間隔ｔｕで最後にコピーした時点まで戻すことができ、見かけ上、１ステップごとに逆トレースしたかのように動作する。
【００８７】
なお、コピー時間ｔｃｏからシミュレーションを再開始するため、コピー間隔を長く設定すると、再開からブレイクポイントまでの処理時間がかかりユーザコマンドに対するレスポンスが悪化するので、コピー間隔となるｔｕ（１−２）は所定の値以内とするように制限するのがよいことは実施例２及び実施例４と同様である。
【００８８】
（実施例６の効果）
以上詳細に述べたように、実施例６のプログラム・デバッグ方法によれば、どの時点でシミュレーションが一時停止した場合であっても、所定の時間分逆トレースすることができるプログラム・デバッグ方法において、コピーオブジェクト保存の間隔を変更できるようにしたので、実施例５の効果に加え、逆トレース可能な範囲をユーザが自由に指定できる。
【実施例７】
【００８９】
実施例７のデバッグシステムは、プログラムの暴走などによって、意図しない位置へ分岐しブレイクポイントにて停止した場合に置いても、シミュレーション開始時点まで逆トレースすることができるようにしたものである。
【００９０】
（構成）
実施例７のデバッグシステムのシミュレータ１は、図１８に示したように、図９（ａ）の実施例３のシミュレータ１に、次の命令を実行する前に、現在の実行を完了したプログラムカウンタ値を格納するＬａｓｔＰＣ（１−３）を設けている。その他の構成は実施例３の構成と同様であるので、その詳細な説明は省略する。
【００９１】
（動作）
以上の構成により、実施例７のデバッグシステムは、以下のように動作する。この動作を、図１８のデバッグシステムの構成図を用いて説明する。
【００９２】
シミュレータ１は、ユーザが、所望するブレイクポイントを設定し、前述図１０のように、時間０からスタートすると、あらかじめ決めたシミュレーション時間ｔｓが経過するごとに、ＣＰＵオブジェクト、メモリオブジェクト等の実行用オブジェクト２をコピーオブジェクト３等にそれぞれコピーしながらシミュレーションを続ける。
【００９３】
そして、プログラムが完成されていない等のためにプログラムが意図しない分岐により暴走し、前記ブレイクポイントで停止した場合、ユーザは、シミュレーション時停止コマンドを実行し、シミュレータを停止し、ユーザコマンド待ちの状態とする。そして、例えば暴走の原因を調査するために、以下のように逆トレースを行う。
【００９４】
ユーザが逆トレースコマンドを入力すると、まず、現在のシミュレーション時間と最新のコピーオブジェクトを保存したコピー時間ｔｃｏを比較し、コピー時間ｔｃｏと現在時間が一致した場合、最新コピーオブジェクトＮは破棄し、一つ前のコピーオブジェクトＮ−１を最新とする。
【００９５】
次に、デバッグシステム内部において、ブレイクポイントを、実行を完了したプログラムカウンタ値として格納してあるＬａｓｔＰＣ（１−３）に設定する。そして、コピーオブジェクト３の内容を実行用オブジェクト２に戻し、シミュレーション時間ＳｉｍＴｉｍｅ（１−１）をコピー時間ｔｃｏに変更し、コピー時間ｔｃｏの時点からシミュレーションを再開する。
【００９６】
すると、シミュレータ１は前記内部で設定したブレイクポイントであるＬａｓｔＰＣ（１−３）の位置で停止し、ユーザからのコマンド待ちの状態となる。この状態では、ＬａｓｔＰＣ（１−３）には、さらに一つ前のプログラムカウンタの値が格納される。
【００９７】
以上の動作を繰り返すことにより、意図しない位置へ分岐しブレイクポイントにて停止した場合に置いても、逆トレースコマンドごとに１つ前の命令に戻すことができる。
【００９８】
（実施例７の効果）
以上詳細に述べたように、現在の実行を完了したプログラムカウンタ値を格納するＬａｓｔＰＣ（１−３）を設けたので、実施例３の効果に加え、プログラムの暴走などにより意図しない位置へ分岐した場合に置いても、逆トレースすることができ、暴走した原因の調査などを容易に行うことができる。
【実施例８】
【００９９】
実施例８のデバッグシステムは、プログラムの暴走などによって、意図しない位置へ分岐しユーザ操作により停止した場合に置いても、所定の時間前まで逆トレースすることができるようにしたものである。
【０１００】
（構成）
実施例８のデバッグシステムは、図１９に示したように、図１４（ａ）の実施例５のシミュレータ１に現在より一つ前のプログラムカウンタ値を格納するＬａｓｔＰＣ（１−３）を設けている。その他の構成は実施例５の構成と同様であるので、その詳細な説明は省略する。
【０１０１】
（動作）
以上の構成により、実施例８のデバッグシステムは、以下のように動作する。この動作を、図１９のデバッグシステムの構成図を用いて説明する。
【０１０２】
シミュレータ１は、前述図３のように、時間０からスタートすると、あらかじめ決めたシミュレーション時間ｔｓが経過するごとに、ＣＰＵオブジェクト、メモリオブジェクト等の実行用オブジェクト２をコピーオブジェクト３にそれぞれコピーしながらシミュレーションを続ける。
【０１０３】
そして、プログラムが完成されていない等のためプログラムが意図しない分岐により暴走した場合、ユーザは、シミュレーション時停止コマンドを実行し、シミュレータを停止し、ユーザコマンド待ちの状態とする。そして、例えば暴走の原因を調査するために、以下のように逆トレースを行う。
【０１０４】
ユーザが逆トレースコマンドを入力すると、まず、現在のシミュレーション時間とコピー時間ｔｃｏとを比較し、コピー時間ｔｃｏと現在時間が一致した場合、コピーオブジェクト新３の保存と同時にシミュレーションが一時停止していることを意味しているので、コピーオブジェクト新３を廃棄し、代わりにコピーオブジェクト３’をコピーオブジェクト新３に移す。
【０１０５】
次に、シミュレータ内部において、ブレイクポイントを、現在の実行を完了したプログラムカウンタ値を格納するＬａｓｔＰＣ（１−３）に設定する。そして、コピーオブジェクト新３の内容を実行用オブジェクト２に戻し、シミュレーション時間ＳｉｍＴｉｍｅ（１−１）をコピー時間ｔｃｏに変更し、コピー時間ｔｃｏの時点からシミュレーションを再開する。
【０１０６】
すると、シミュレータ１は前記内部で設定したブレイクポイントであるＬａｓｔＰＣ（１−３）の位置で停止し、ユーザからのコマンド待ちの状態となる。この状態では、ＬａｓｔＰＣ（１−３）には、さらに一つ前のプログラムカウンタの値が格納される。
【０１０７】
以上の動作を繰り返すことにより、意図しない位置へ分岐しユーザによる停止コマンドにより停止した場合に置いても、逆トレースコマンドごとに１つ前の命令に戻すことができる。
【０１０８】
（実施例８の効果）
以上詳細に述べたように、コピーオブジェクト旧３’および現在の実行を完了したプログラムカウンタＬａｓｔＰＣ（１−３）を設けたので、プログラムが暴走しユーザによる停止コマンドによりどの時点でシミュレーションが一時停止したとしても、逆トレースすることができる。
【実施例９】
【０１０９】
実施例９のデバッグシステムは、任意のシミュレーション時間から再実行することができるようにしたものである。
【０１１０】
（構成）
実施例９のデバッグシステムのシミュレータ１は、図２０に示したように、図９（ａ）の実施例３のシミュレータ１に、新たに、シミュレーションを再開する時間となるＢｒｅａｋＴｉｍｅ（１−４）を設けている。その他の構成は、実施例３のデバッグシステムの構成と同様であるので簡略化のためにその説明を省略する。
【０１１１】
（動作）
以上の構成により、実施例９のデバッグシステムは以下のように動作する。この動作を図２１の動作フローチャートを用いて以下説明する。
【０１１２】
シミュレータ１は、実施例３の場合と同様に、シミュレータ１によりあらかじめ決めたシミュレーション時間ｔｓ経過ごとに、実行用オブジェクト２がコピーオブジェクト３等に順次コピーされ、プログラムが進行しブレイクポイントに到達するまで行われる。
【０１１３】
そして、プログラムがブレイクポイントで停止し、ユーザがシミュレーション開始位置指定コマンドを入力すると、デバッグシステムは、指定されたシミュレーション開始位置であるシミュレーション開始時間をＢｒｅａｋＴｉｍｅ（１−４）として保存する。
【０１１４】
次に、指定された開始位置であるＢｒｅａｋＴｉｍｅ（１−４）の値が設定されているかどうかを念のために確認し（ステップＳ３１）、当該値が"０"の場合は、指定された時間なしとしてそのまま当該コマンドを終了する。
【０１１５】
一方、ＢｒｅａｋＴｉｍｅ（１−４）の値が"０"でないときは、コピーオブジェクト保存時間であるコピー時間ｔｃｏと比較する（ステップＳ３２）。そして、コピー時間ｔｃｏがＢｒｅａｋＴｉｍｅ（１−４）よりも大きいときは、シミュレーション時間を戻すために、コピーオブジェクトＮを廃棄し、代わりにコピーオブジェクトＮ−１を最新コピーオブジェクトに置き換える（ステップＳ３３）。このとき、コピー時間ｔｃｏもコピーオブジェクトＮ−１の値に置き換える（ステップＳ３４）。
【０１１６】
以上の処理をＢｒｅａｋＴｉｍｅ（１−４）がコピー時間ｔｃｏより大きい値になるまで続ける。この処理を行うことにより、コピー時間ｔｃｏまで状態を戻すことができる。なお、図示していないが、ＢｒｅａｋＴｉｍｅ（１−４）を最初にコピーオブジェクト３を保存した時間より前に設定した場合は、ＢｒｅａｋＴｉｍｅ（１−４）がコピー時間ｔｃｏより大きい値とならないので、この場合は、エラー表示をして終了するようにする。
【０１１７】
次に、デバッグシステム内部において、ブレイクポイントをシミュレーション時間ＢｒｅａｋＴｉｍｅ（１−４）に設定し、コピーオブジェクトＮ−ｍの内容を実行用オブジェクト２に戻し、シミュレーション時間ＳｉｍＴｉｍｅ（１−１）をコピー時間ｔｃｏに変更し、コピー時間ｔｃｏの時点からシミュレーションを再開する。
【０１１８】
すると、シミュレータ１は前記デバッグシステム内部で設定したブレイクポイントであるＢｒｅａｋＴｉｍｅ（１−４）の位置で停止し、ユーザからのコマンド待ち状態となる。
【０１１９】
（実施例９の効果）
以上詳細に述べたように、シミュレーション再開位置となるブレイクポイントを設定できるＢｒｅａｋＴｉｍｅ（１−４）を設けたので、任意のシミュレーション時間から再実行することができる。
【産業上の利用可能性】
【０１２０】
以上述べたように、本発明は、ハードウェアシミュレータ上でハードウェアモデルのシミュレーションを実行して、プログラムのデバッグを行うプログラム・デバッグシステムに広く用いることができる。
【図面の簡単な説明】
【０１２１】
【図１】プログラム・デバッグシステムの構成図である。
【図２】実施例１のプログラム・デバッグシステムの機能ブロック図である。
【図３】実施例１のコピーオブジェクト保存のタイムチャート図である。
【図４】実施例１の逆トレース動作の説明図（タイムチャート図）である。
【図５】実施例１のプログラム・デバッグシステムの動作フローチャートである。
【図６】実施例２のシミュレータの機能ブロック図である。
【図７】実施例２のプログラム・デバッグシステムの動作フローチャートである。
【図８】実施例２のコピーオブジェクト保存のタイムチャート図である。
【図９】実施例３のプログラム・デバッグシステムの機能ブロック図である。
【図１０】実施例３のコピーオブジェクト保存のタイムチャート図である。
【図１１】実施例３のプログラム・デバッグシステムの動作フローチャートである。
【図１２】実施例４のプログラム・デバッグシステムの機能ブロック図である。
【図１３】実施例４のコピーオブジェクト保存のタイムチャート図である。
【図１４】実施例５のプログラム・デバッグシステムの機能ブロック図である。
【図１５】実施例５のコピーオブジェクト保存のタイムチャート図である。
【図１６】実施例６のプログラム・デバッグシステムの機能ブロック図である。
【図１７】実施例６のコピーオブジェクト保存のタイムチャート図である。
【図１８】実施例７のプログラム・デバッグシステムの機能ブロック図である。
【図１９】実施例８のプログラム・デバッグシステムの機能ブロック図である。
【図２０】実施例９のシミュレータの機能ブロック図である。
【図２１】実施例９のプログラム・デバッグシステムの動作フローチャートである。
【符号の説明】
【０１２２】
１  シミュレータ
１−１  シミュレーション時間を格納するレジスタＳｉｍＴｉｍｅ
１−２  ユーザ指定コピー間隔を格納するレジスタｔｕ
１−３  最後のプログラムカウンタ値を格納するレジスタＬａｓｔＰＣ
１−４  シミュレーション開始時間を格納するレジスタＢｒｅａｋＴｉｍｅ
１−１０  ＣＰＵモデル
１−１１  メモリモデル
１−１２  Ｉ／Ｏモデル・ハードウェアモデル
２  実行用オブジェクト
２−１０、３−１０  ＣＰＵオブジェクト
２−１１、３−１１  メモリオブジェクト
２−１２、３−１２  Ｉ／Ｏオブジェクト・ハードウェアオブジェクト
３、３’  コピーオブジェクト
３−１    コピー時間を格納するレジスタｔｃｏ
【図１】
2007004400.tif 000003
【図２】
2007004400.tif 000004
【図３】
2007004400.tif 000005
【図４】
2007004400.tif 000006
【図５】
2007004400.tif 000007
【図６】
2007004400.tif 000008
【図７】
2007004400.tif 000009
【図８】
2007004400.tif 000010
【図９】
2007004400.tif 000011
【図１０】
2007004400.tif 000012
【図１１】
2007004400.tif 000013
【図１２】
2007004400.tif 000014
【図１３】
2007004400.tif 000015
【図１４】
2007004400.tif 000016
【図１５】
2007004400.tif 000017
【図１６】
2007004400.tif 000018
【図１７】
2007004400.tif 000019
【図１８】
2007004400.tif 000020
【図１９】
2007004400.tif 000021
【図２０】
2007004400.tif 000022
【図２１】
2007004400.tif 000023