(57)【要約】【課題】デバッグ効率の良いシミュレータを提供すること。【解決手段】シミュレータは、逆ステップ実行機能を有する。シミュレータは、プログラムのシミュレーションを実行し、シミュレーション途中の所定タイミングでの内部メモリの値を示す履歴データを外部に出力するシミュレーション実行部と、シミュレーション実行部に設定する所定タイミングを制御するタイミング制御部と、を備える。所定タイミングは、予め指定されたシミュレーションのブレイクポイント時、シミュレーションの所定の実行サイクル数毎、シミュレーションの所定の実時間毎、又はプログラムの所定の命令数毎である。【選択図】図１
2008197964.tif 000002
【特許請求の範囲】
【請求項１】
逆ステップ実行機能を有するシミュレータであって、
プログラムのシミュレーションを実行し、前記シミュレーション途中の所定タイミングでの内部メモリの値を示す履歴データを外部に出力するシミュレーション実行部と、
前記シミュレーション実行部に設定する前記所定タイミングを制御するタイミング制御部と、を備え、
前記所定タイミングは、予め指定された前記シミュレーションのブレイクポイント時、前記シミュレーションの所定の実行サイクル数毎、前記シミュレーションの所定の実時間毎、又は前記プログラムの所定の命令数毎であることを特徴とするシミュレータ。
【請求項２】
請求項１に記載のシミュレータであって、
前記タイミング制御部は、前記履歴データの外部への出力を禁止することを特徴とするシミュレータ。
【請求項３】
請求項１に記載のシミュレータであって、
前記タイミング制御部は、当該シミュレータのユーザからの指示に応じて前記所定タイミングを設定することを特徴とするシミュレータ。
【請求項４】
請求項１に記載のシミュレータであって、
前記シミュレーション実行部は、前記履歴データに基づいて、前記シミュレーション途中の前記所定タイミングの状態まで前記内部メモリの値を戻した後、ステップ毎に履歴データを前記内部メモリに記録して前記シミュレーションを実行することを特徴とするシミュレータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムのシミュレーションを行うシミュレータに関する。
【背景技術】
【０００２】
プログラムを開発する際、作成したプログラムが設計者の意図通りに動作するか検証する必要がある。プログラムの検証にはソフトウェアシミュレータが用いられる。ソフトウェアシミュレータが有する機能の１つに、プログラムがどのように動作するかを逐一確認するために、機械語であれば１命令ずつ、高級言語であれば１行ずつ実行して、各ステップでのレジスタやメモリの値を記録及び表示するステップ実行機能がある。また、プログラムの実行箇所が所望の検証箇所を過ぎた場合に、ステップ実行機能によって記録されたレジスタやメモリの値を利用して、プログラムの実行箇所をステップ毎に前段階に戻す逆ステップ実行機能がある。
【０００３】
逆ステップ実行機能がない場合、プログラムの実行箇所から所望の検証箇所に戻るためには、最初からプログラムを実行する必要がある。しかし、逆ステップ実行機能を活用すれば、最初からプログラムを実行する必要がないため、デバッグ効率を上げることができる。携帯電話に組み込まれるプログラムの検証には非常に長い時間を要するため、ステップ実行機能及び逆ステップ実行機能を有するシミュレータは非常に有用である。
【０００４】
図４は、ステップ実行機能及び逆ステップ実行機能を有する従来のシミュレータを示すブロック図である。図４に示すシミュレータ１０は、プログラム入力インタフェース１１と、メモリ１２と、シミュレーション実行部１３と、履歴データインタフェース１５とを備える。なお、シミュレーション実行部１３は、ＣＰＵがシミュレーションのためのプログラムを実行することによって実現される。
【０００５】
プログラム入力インタフェース１１は、検証されるプログラム（以下「検証プログラム」という。）５１を入力するためのインタフェースである。メモリ１２は、プログラム入力インタフェース１１を介して入力された検証プログラム５１のソースコードや、シミュレーション実行部１３によるシミュレーションの実行結果等を記憶する。シミュレーション実行部１３は、レジスタ１４を有し、ステップ実行機能及び逆ステップ実行機能を実行する。シミュレーション実行部１３は、ステップ実行機能を実行するときは、検証プログラム５１をステップ毎に実行して、各ステップでのレジスタ１４及びメモリ１２の値（以下「履歴データ」という。）を履歴データインタフェース１５を介して外部記録媒体５３に記録する。また、シミュレーション実行部１３は、逆ステップ実行機能を実行するときは、履歴データインタフェース１５を介して外部記録媒体５３から履歴データを読み出して、この履歴データに基づいてレジスタ１４及びメモリ１２を所望の検証箇所の状態に戻すことによって、プログラムの実行箇所をステップ毎に前段階に戻す。履歴データインタフェース１５は、外部記録媒体５３への履歴データの書き出し、又は外部記録媒体５３からの履歴データの読み込みを行うためのインタフェースである。
【０００６】
図５は、図４に示したシミュレータ１０の動作を示すフローチャートである。図５に示すように、ステップＳ１１では、シミュレータ１０は、ユーザからの操作に応じてステップ実行機能を実行するかを判断し、実行するときはステップＳ１３に進み、実行しないときはステップＳ２１に進む。ステップＳ１３では、シミュレーション実行部１３は、プログラム入力インタフェース１１を介して入力された検証プログラム５１のシミュレーションを実行する。ステップＳ１５では、シミュレーション実行部１３は、１ステップ分のシミュレーションを完了したかを判断し、完了した場合はステップＳ１７に進み、完了していない場合はステップＳ１３に戻る。ステップＳ１７では、シミュレーション実行部１３は、１ステップ分のシミュレーションが完了したときのレジスタ１４及びメモリ１２の値（履歴データ）を、履歴データインタフェース１５を介して外部記録媒体５３に記録する。
【０００７】
ステップＳ１９では、シミュレータ１０は、ユーザからの操作に応じてシミュレーションを続行するかを判断し、続行するときはステップＳ１３に戻り、続行しないときはステップＳ２１に進む。ステップＳ２１では、シミュレータ１０は、ユーザからの操作に応じて逆ステップ実行機能を実行するかを判断し、実行するときはステップＳ２３に進み、実行しないときは処理を終了する。ステップＳ２３では、シミュレーション実行部１３は、履歴データインタフェース１５を介して外部記録媒体５３から１ステップ前の履歴データを読み込む。ステップＳ２５では、シミュレーション実行部１３は、読み込んだ１ステップ前の履歴データに基づいてレジスタ１４及びメモリ１２を１ステップ前の状態に戻す。ステップＳ２７では、シミュレータ１０は、ユーザからの操作に応じてもう１つ前のステップに戻すかを判断し、実行するときはステップＳ２３に戻り、実行しないときは処理を終了する。
【０００８】
【特許文献１】特開平５−１０８４０４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
上記説明したシミュレータ１０では、ステップ実行機能を実行する際、１ステップ分のシミュレーションを実行する度に履歴データを外部記録媒体５３に記録している。このため、検証プログラム５１の規模が大きくなるとステップ数も増え、外部記録媒体５３にアクセスする回数が増す。ステップ毎に外部記録媒体５３にアクセスするとシミュレーションの実行速度が下がり、その結果、デバッグ効率が低下してしまう。
【００１０】
本発明の目的は、デバッグ効率の良いシミュレータを提供することである。
【課題を解決するための手段】
【００１１】
本発明は、逆ステップ実行機能を有するシミュレータであって、プログラムのシミュレーションを実行し、前記シミュレーション途中の所定タイミングでの内部メモリの値を示す履歴データを外部に出力するシミュレーション実行部と、前記シミュレーション実行部に設定する前記所定タイミングを制御するタイミング制御部と、を備え、前記所定タイミングは、予め指定された前記シミュレーションのブレイクポイント時、前記シミュレーションの所定の実行サイクル数毎、前記シミュレーションの所定の実時間毎、又は前記プログラムの所定の命令数毎であるシミュレータを提供する。
【００１２】
上記シミュレータでは、前記タイミング制御部は、前記履歴データの外部への出力を禁止する。
【００１３】
上記シミュレータでは、前記タイミング制御部は、当該シミュレータのユーザからの指示に応じて前記所定タイミングを設定する。
【００１４】
上記シミュレータでは、前記シミュレーション実行部は、前記履歴データに基づいて、前記シミュレーション途中の前記所定タイミングの状態まで前記内部メモリの値を戻した後、ステップ毎に履歴データを前記内部メモリに記録して前記シミュレーションを実行する。
【発明の効果】
【００１５】
本発明に係るシミュレータによれば、所定タイミング毎に履歴データを外部に出力するため、外部へのアクセス回数を大幅に減らすことができる。このため、シミュレーションの実行速度が下がらず、その結果、デバッグ効率を向上させることができる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施形態について、図面を参照して説明する。
【００１７】
図１は、本発明に係る一実施形態のシミュレータを示すブロック図である。図１において、背景技術で説明した図４と共通する構成要素には同じ参照符号が付されている。図１に示すシミュレータ１００は、プログラム入力インタフェース１１と、メモリ１２と、シミュレーション実行部１０１と、履歴データインタフェース１５と、ユーザコマンドインタフェース１０３と、タイミング制御部１０５とを備える。なお、シミュレーション実行部１０１及びタイミング制御部１０５は、ＣＰＵがシミュレーションのためのプログラムを実行することによって実現される。
【００１８】
プログラム入力インタフェース１１は、検証されるプログラム（以下「検証プログラム」という。）５１を入力するためのインタフェースである。メモリ１２は、プログラム入力インタフェース１１を介して入力された検証プログラム５１のソースコードや、シミュレーション実行部１３によるシミュレーションの実行結果等を記憶する。シミュレーション実行部１０１は、レジスタ１４を有し、シミュレーションを行い、タイミング制御部１０５によって設定されたモードに応じたタイミングで、レジスタ１４及びメモリ１２の値（履歴データ）を履歴データインタフェース１５を介して外部記録媒体５３に記録する。また、シミュレーション実行部１０１は、プログラムの実行箇所をステップ毎に前段階に戻す逆ステップ実行機能を有する。逆ステップ実行機能を実行するシミュレーション実行部１０１は、履歴データに基づいてレジスタ１４及びメモリ１２を所望の検証箇所の状態に戻すことによって、プログラムの実行箇所をステップ毎に前段階に戻す。
【００１９】
履歴データインタフェース１５は、外部記録媒体５３への履歴データの書き出し、又は外部記録媒体５３からの履歴データの読み込みを行うためのインタフェースである。ユーザコマンドインタフェース１０３は、タイミング制御部１０５に設定するモードに関するユーザコマンド５５を入力するためのインタフェースである。タイミング制御部１０５は、ユーザコマンド５５によって選択されたモードに基づいて、シミュレーション実行部１０１によって実行されるシミュレーションを一時停止するタイミングを制御する。なお、以下の説明では、タイミング制御部１０５が各モードに応じてシミュレーションを一時停止して履歴データを外部記録媒体５３に記録するタイミングを「ダンプタイミング」といい、ダンプタイミングで一時停止されるポイントを「ダンプポイント」という。
【００２０】
ユーザコマンド５５によって選択されるタイミング制御部１０５が実行するモードには、ブレイクポイントモードと、サイクル間隔モードと、時間間隔モードと、命令間隔モードと、アクセス禁止モードとが含まれる。ブレイクポイントモードでは、ユーザコマンド５５によって指定されたシミュレーションのブレイクポイントがダンプポイントに設定される。サイクル間隔モードでは、シミュレーションの実行サイクル数が所定数（例えば１００サイクル）毎のポイントがダンプポイントに設定される。時間間隔モードでは、シミュレーションの実時間が所定時間（例えば１秒）毎のポイントがダンプポイントに設定される。命令間隔モードでは、検証プログラム５１の命令数が所定数（例えば１００命令）毎のポイントがダンプポイントに設定される。アクセス禁止モードではダンプタイミングが設定されず、履歴データは外部記録媒体５３に記録されない。アクセス禁止モードは、ユーザコマンド５５によって逆ステップ実行機能を実行しないと指示されたときに利用される。
【００２１】
図２及び図３は、本実施形態のシミュレータ１００の動作を示すフローチャートである。図２に示すように、ステップＳ１０１では、シミュレータ１００は、ユーザからの操作に応じてシミュレーションを実行するかを判断し、実行するときはステップＳ１０３に進み、実行しないときはステップＳ１１３に進む。ステップＳ１０３では、シミュレーション実行部１０１は、プログラム入力インタフェース１１を介して入力された検証プログラム５１のシミュレーションを実行する。ステップＳ１０５では、シミュレーション実行部１０１は、タイミング制御部１０５で選択されたモードを判別し、逆ステップ実行機能を実行可能か否かについて判断する。また、シミュレーション実行部１０１は、選択されているモードに応じてダンプタイミングを判別する。逆ステップ実行機能を実行可能な場合はステップＳ１０７に進み、実行不可能な場合はステップＳ１１１に進む。
【００２２】
ステップＳ１０７では、シミュレーション実行部１０１は、シミュレーションをダンプタイミングまで実行して一時停止し、ステップＳ１０９でダンプポイントの履歴データを外部記録媒体５３に記録する。ステップＳ１１１では、シミュレータ１００は、ユーザからの操作に応じてシミュレーションを続行するかを判断し、続行するときはステップＳ１０３に戻り、続行しないときはステップＳ１１３に進む。ステップＳ１１３では、シミュレータ１００は、ユーザからの操作に応じて逆ステップ実行機能を実行するかを判断し、実行するときはステップＳ１１５に進み、実行しないときは処理を終了する。
【００２３】
ステップＳ１１５では、シミュレーション実行部１０１は、現ポイントから最近の履歴データを履歴データインタフェース１５を介して外部記録媒体５３から読み込む。ステップＳ１１７では、シミュレーション実行部１０１は、読み込んだ履歴データに基づいてレジスタ１４及びメモリ１２を当該履歴データのダンプポイントの状態に戻す。ステップＳ１１９では、シミュレーション実行部１０１は、現ポイントまでシミュレーションを実行し、ステップ毎に履歴データをレジスタ１４又はメモリ１２（内部メモリ）に記録する。
【００２４】
ステップＳ１２１では、シミュレーション実行部１０１は、内部メモリに逆ステップ実行機能のための履歴データが格納されているかを判断し、格納されていればステップＳ１２３に進み、格納されていなければステップＳ１１５に戻る。ステップＳ１２３では、シミュレーション実行部１０１は、内部ステップに格納されている履歴データに基づいてレジスタ１４及びメモリ１２を現ポイントから１ステップ前の状態に戻す。ステップＳ１２５では、シミュレータ１００は、ユーザからの操作に応じてもう１つ前のステップに戻すかを判断し、実行するときはステップＳ１２１に戻り、実行しないときは処理を終了する。
【００２５】
以上説明したように、本実施形態の逆ステップ実行機能を有するシミュレータ１００は、シミュレーションの実行時に、検証プログラム５１のステップ毎に履歴データを外部記録媒体５３に記録するのではなく、ユーザによって設定されたダンプタイミング毎に記録するため、外部記録媒体５３へのアクセス回数を大幅に減らすことができる。このため、シミュレーションの実行速度が下がらず、その結果、デバッグ効率を向上させることができる。
【産業上の利用可能性】
【００２６】
本発明に係るシミュレータは、プログラムのシミュレーションを行うデバッグ効率の良いシミュレータ等として有用である。
【図面の簡単な説明】
【００２７】
【図１】本発明に係る一実施形態のシミュレータを示すブロック図
【図２】本実施形態のシミュレータの動作を示すフローチャート
【図３】本実施形態のシミュレータの動作を示すフローチャート
【図４】ステップ実行機能及び逆ステップ実行機能を有する従来のシミュレータを示すブロック図
【図５】図４に示したシミュレータの動作を示すフローチャート
【符号の説明】
【００２８】
１００シミュレータ
１１  プログラム入力インタフェース
１２  メモリ
１０１  シミュレーション実行部
１５  履歴データインタフェース
１０３  ユーザコマンドインタフェース
１０５  タイミング制御部
１４  レジスタ
５１  検証プログラム
５３  外部記録媒体
【図１】
2008197964.tif 000003
【図２】
2008197964.tif 000004
【図３】
2008197964.tif 000005
【図４】
2008197964.tif 000006
【図５】
2008197964.tif 000007