(57)【要約】【課題】ブレイクポイントでメモリやレジスタ等の情報を保存し、それらを復元することでブレイクポイントからプログラムを再スタートさせる機能を備えたデバッグ装置において、保存する情報を削減する。【解決手段】プログラム１の実行開始からブレイクポイントでブレイクされるまでにメモリやレジスタ等がアクセスされたことを示すフラグ情報を生成するアクセスフラグ生成部９と、そのフラグ情報を基にアクセスされたメモリやレジスタ値だけを抽出する状態抽出部１０と、抽出した情報を外部記憶装置１４に保存する状態保存部１２と、フラグ情報をメモリあるいは外部記憶装置１４に保存するアクセスフラグ保存部１１と、保存されたフラグ情報に基づき外部記憶装置１４から保存情報を読み出しブレイクされた状態に復元させる状態復元部１３とをデバッグ装置に備える。【選択図】  図１
2006039611.tif 000002
【特許請求の範囲】
【請求項１】
プログラムに設定されたブレイクポイントにおいてメモリやレジスタ等の書き換え可能な媒体の情報を記憶手段に保存し、ある時間が経過した後に保存された情報を用いて前記書き換え可能な媒体の情報を復元することにより前記ブレイクポイントにおける状態を再現してプログラムを再スタートさせる機能を備えたデバッグ装置であって、
前記書き換え可能な媒体がプログラム実行開始後にアクセスされたことを示すフラグ情報を生成するアクセスフラグ生成部を備えたデバッグ装置。
【請求項２】
前記書き換え可能な媒体に対するアクセスが前記書き換え可能な媒体に対する書き込みである場合に前記フラグ情報が生成される請求項１記載のデバッグ装置。
【請求項３】
前記書き換え可能な媒体に対するアクセスが前記書き換え可能な媒体に対するビット単位のアクセスである場合に前記フラグ情報が生成される請求項１記載のデバッグ装置。
【請求項４】
前記書き換え可能な媒体に対するアクセスが前記書き換え可能な媒体に対するワード単位のアクセスである場合に前記フラグ情報が生成される請求項１記載のデバッグ装置。
【請求項５】
前記書き換え可能な媒体に対するアクセスが前記書き換え可能な媒体に対する機能ブロック単位あるいはメモリ単位のアクセスである場合に前記フラグ情報が生成される請求項１記載のデバッグ装置。
【請求項６】
前記ブレイクポイントにおいて保存すべき情報として、プログラム実行開始後にアクセスされたことが前記フラグ情報により示された前記書き換え可能な媒体の情報のみを抽出する情報抽出部を備えた請求項１から５のいずれかに記載のデバッグ装置。
【請求項７】
前記情報抽出部により抽出された情報を外部記憶装置等の記憶手段に保存する状態保存部を備えた請求項６記載のデバッグ装置。
【請求項８】
前記フラグ情報をメモリあるいは外部記憶装置等の記憶手段に保存するアクセスフラグ保存部を備えた請求項７記載のデバッグ装置。
【請求項９】
前記保存されたフラグ情報に基づき前記保存された書き換え可能な媒体の情報を復元する状態復元部を備えた請求項８記載のデバッグ装置。
【請求項１０】
不正なメモリアクセスが行われた場合に自動的にブレイクを行うブレイクポイント制御部を備えた請求項１から９のいずれかに記載のデバッグ装置。
【請求項１１】
ＤＳＰやＣＰＵのフラグが不正に変更された場合に自動的にブレイクを行うブレイクポイント制御部を備えた請求項１から９のいずれかに記載のデバッグ装置。
【請求項１２】
所定の時間を超えてプログラムが実行された場合に自動的にブレイクを行うブレイクポイント制御部を備えた請求項１から９のいずれかに記載のデバッグ装置。
【請求項１３】
前記ブレイクポイントを自動的に設定するか、あるいはユーザが指定するかを選択可能にする実行モード制御部を備えた請求項１記載のデバッグ装置。
【請求項１４】
前記ブレイクポイントにおいて書き換え可能な媒体の情報を記憶手段に保存する機能を実行するか否かを選択可能にする実行モード制御部を備えた請求項１記載のデバッグ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はシミュレータを用いたソフトウェア検証において、ブレイクポイントからある時間経過した後に、プログラムを最初から再実行することなくシミュレータをブレイクポイントの状態に復元可能にすることにより、プログラムの開発を支援するデバッグ装置に関するものである。
【背景技術】
【０００２】
新規に機器の組み込みプログラムを開発する場合に、完成した組み込みプラグラムが設計者の意図通り正しく動作しているかを調べるために検証を行う必要がある。しかしハードウェアが完成していない場合は、ソフトウェアの早期開発を目的としたハードウェアのエンジニアリングサンプルと同等の機能を有するＣ言語のような汎用プログラミング等で構築したソフトウェアシミュレータを用いて検証が行われる。
【０００３】
ソフトウェアの早期開発を目的としたシミュレータを用いたデバッグ装置として、プログラムの実行中のある時点におけるレジスタ値やメモリの内容等を全て記憶し、ある時間が経過した後に記憶した情報を元に戻すことにより、プログラムを最初から再実行しなくても記憶した状態にシミュレータを復元させることができる機能がある。
【０００４】
これにより、組み込みプログラム開発において、不具合が生じてプログラムを修正し、再度検証を実施する場合に、最初からプログラムを実行しなくてもプログラムの途中状態から検証を実施することができるため、ソフトウェアの検証工数を削減することが可能である。特に携帯電話端末用組み込みプログラムの検証は検証時間が膨大に掛かるため、このデバッグ装置は極めて有効である。
【０００５】
図４はシミュレータを用いた従来のデバッグ装置の構成を示すブロック図である。図４において、１はユーザが開発したプログラム、２はユーザがデバッグモードやブレイクポイントを設定するためのシナリオ、３は開発したプログラムをシミュレータに読み込むためのプログラム設定インターフェース部、４はユーザが設定したシナリオをシミュレータに読み込むためのユーザコマンドインターフェース部、８はシミュレーション実行部、１２はある時点におけるシミュレータの状態を保存する状態保存部、１３は記憶装置からシミュレータの状態を読み込み、ある時点におけるシミュレータ状態を復元する状態復元部、１４は外部記憶装置である。
【０００６】
以上のように構成されたシミュレータを用いたデバッグ装置について、以下その動作を説明する。まず、シミュレータはプログラム設定インターフェース部３を通してユーザが開発したプログラム１を読み込む。その後、ユーザコマンドインターフェース部４を通してユーザが設定したシナリオ２を読み込むことにより、シミュレータはプログラムのブレイクポイントを認識する。
【０００７】
シミュレータはブレイクポイントまで検証を実行し、状態保存部１２においてレジスタ値やメモリの内容やブレイクポイントを外部記憶装置１４に保存する。ユーザがブレイクポイントの状態を復元させたい場合は、状態復元部１３により外部記憶装置１４からレジスタ値やメモリの内容やブレイクポイントの情報を読み込ませることにより、ブレイクポイントにおけるシミュレータの状態を復元する。
【０００８】
しかし、従来のデバッグ装置はプログラム実行中のある時点における全てのレジスタやメモリ等の内容を保存するため、シミュレーションの実行速度に影響してしまう。これにより、ソフトウェアの開発工数が増加してしまうという問題があった。このような問題を解決する手段として、書き換え可能な情報だけを外部記憶装置に保存する技術がある（例えば、特許文献１参照）。
【０００９】
ここで開示されている技術は、ユーザが開発したプログラムの動作時に、ある時点における書き換え可能のレジスタやＲＡＭ情報だけを外部記憶装置に保存し、保存した時点からある時間が経過した後に、保存されている情報を呼び出して保存時点における状態を復元し、プログラムを再スタートさせる技術である。また、ユーザが開発したプログラムがシステムコールを発生する都度情報を保存することにより、シミュレータが自動的に保存する時点を決定させる技術でもある。
【特許文献１】特開２０００−２０３４９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、上記従来のデバッグ装置の構成では、プログラム実行中のある時点における全てのレジスタやメモリ等の内容を記憶させるため、シミュレーションの実行速度に影響を与えるという問題がある。特に大規模な回路に対するソフトウェアシミュレータの場合は、全てのレジスタやメモリ等の内容を記憶させるとデバッグ効率が大幅に低下してしまうため現実的ではない。
【００１１】
また、上記の書き換え可能な情報だけを外部記憶装置に保存する技術は、書き換え可能であるレジスタやＲＡＭが多数存在するシミュレータでは保存させる情報が膨大になるという問題がある。
【００１２】
本発明は、プログラムに設定されたブレイクポイントにおいて保存する情報を削減する方法を提供することにより、シミュレーションの実行速度低下を防止し、ユーザのデバッグ工数を削減することができる、シミュレータを用いたデバッグ装置を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記課題を解決するために、本発明のデバッグ装置は、プログラムに設定されたブレイクポイントにおいてメモリやレジスタ等の書き換え可能な媒体の情報を記憶手段に保存し、ある時間が経過した後に前記保存された情報を用いて前記書き換え可能な媒体の情報を復元することにより前記ブレイクポイントにおける状態を再現してプログラムを再スタートさせる機能を備えたデバッグ装置であって、前記書き換え可能な媒体がプログラム実行開始後にアクセスされたことを示すフラグ情報を生成するアクセスフラグ生成部を備えたものである。
【００１４】
さらに、本発明のデバッグ装置は、前記書き換え可能な媒体に対するアクセスが前記書き換え可能な媒体に対する書き込みである場合に前記フラグ情報が生成されるものである。さらに、本発明のデバッグ装置は、前記書き換え可能な媒体に対するアクセスが前記書き換え可能な媒体に対するビット単位のアクセスである場合に前記フラグ情報が生成されるものである。さらに、本発明のデバッグ装置は、前記書き換え可能な媒体に対するアクセスが前記書き換え可能な媒体に対するワード単位のアクセスである場合に前記フラグ情報が生成されるものである。さらに、本発明のデバッグ装置は、前記書き換え可能な媒体に対するアクセスが前記書き換え可能な媒体に対する機能ブロック単位あるいはメモリ単位のアクセスである場合に前記フラグ情報が生成されるものである。
【００１５】
さらに、本発明のデバッグ装置は、前記ブレイクポイントにおいて保存すべき情報として、プログラム実行開始後にアクセスされたことが前記フラグ情報により示された前記書き換え可能な媒体の情報のみを抽出する情報抽出部を備えたものである。さらに、本発明のデバッグ装置は、前記情報抽出部により抽出された情報を外部記憶装置等の記憶手段に保存する状態保存部を備えたものである。さらに、本発明のデバッグ装置は、前記フラグ情報をメモリあるいは外部記憶装置等の記憶手段に保存するアクセスフラグ保存部を備えたものである。さらに、本発明のデバッグ装置は、前記保存されたフラグ情報に基づき前記保存された書き換え可能な媒体の情報を復元する状態復元部を備えたものである。
【００１６】
上記構成によれば、ブレイクポイントにおいて、プログラム実行開始後にアクセスされたメモリやレジスタ等に対してのみ、それらを識別するフラグ情報とそのメモリやレジスタ等の内容を保存し、プログラムをブレイクポイントから再スタートさせる際に、フラグ情報に基づき保存された情報のみを復元しブレイクポイントの状態を再現することができるため、ブレイクポイントにおける保存情報と復元情報を削減することができ、シミュレーションの実行速度を向上させ、ユーザのデバッグ工数を削減することができる。
【００１７】
また、ユーザはアクセスフラグ生成方法をワード単位、ビット単位、機能ブロック単位で生成する方法を選択することが可能であるため、ユーザが開発したプログラムに対して最適なアクセスフラグ生成方法を選択することができる。これにより、外部記憶装置に保存する情報量をさらに削減することができるため、ソフトウェアのデバッグ工数を削減することができる。
【００１８】
さらに、本発明のデバッグ装置は、不正なメモリアクセスが行われた場合に自動的にブレイクを行うブレイクポイント制御部を備えたものである。また、本発明のデバッグ装置は、ＤＳＰやＣＰＵのフラグが不正に変更された場合に自動的にブレイクを行うブレイクポイント制御部を備えたものである。また、本発明のデバッグ装置は、所定の時間を超えてプログラムが実行された場合に自動的にブレイクを行うブレイクポイント制御部を備えたものである。また、本発明のデバッグ装置は、前記ブレイクポイントを自動的に設定するか、あるいはユーザが指定するかを選択可能にする実行モード制御部を備えたものである。
【００１９】
上記構成によれば、ブレイクポイントの設定方法としてユーザが直接指定する方法だけでなく、不正なメモリアクセス、ＤＳＰやＣＰＵのフラグが不正な変更、プログラム実行時間の超過、あるいはその組合せによる自動設定を選択することができるため、プログラムに応じた最適なデバッグ方法を選ぶことができ、デバッグ作業の効率を向上させることができる。
【００２０】
また、本発明のデバッグ装置は、前記ブレイクポイントにおいて書き換え可能な媒体の情報を記憶手段に保存する機能を実行するか否かを選択可能にする実行モード制御部を備えたものである。
【発明の効果】
【００２１】
本発明によれば、ブレイクポイントにおける保存情報と復元情報を大幅に削減することができる。例えば、メモリが１００００ワードでメモリアクセスが１００箇所とするとアクセス回数は１／１００になる。これにより、シミュレーションの実行速度を向上させ、ユーザのデバッグ工数を削減することができる。また、ブレイクポイントを自動設定することにより、デバッグに対するシミュレータ環境設定工数も削減することができる。その結果、組み込みソフトウェアの開発工数を減らすことができる。
【発明を実施するための最良の形態】
【００２２】
図１は本発明の一実施の形態におけるシミュレータを用いたデバッグ装置の構成を示すブロック図である。図１において、１はユーザが開発したプログラム、２はユーザがシミュレータのモードを切り替えるために設定するシナリオ、３はユーザが開発したプログラム１をシミュレータに読み込むためのプログラム設定インターフェース部、４はユーザが設定したシナリオ２をシミュレータに読み込むためのユーザコマンドインターフェース部、５はシミュレーションの実行モードを制御する実行モード制御部、６はブレイクポイントを制御するブレイクポイント制御部、７はアクセスフラグを制御するアクセスフラグ制御部、８はシミュレーション実行部、９はプログラム１によりメモリやレジスタがアクセスされたかを示すフラグ情報を生成するアクセスフラグ生成部、１０はシミュレーションの状態を抽出する状態抽出部、１１はアクセスフラグを保存するアクセスフラグ保存部、１２は抽出した情報を保存する状態保存部、１３はシミュレーションの状態を復元する状態復元部、１４は外部記憶装置である。
【００２３】
以上のように構成されたデバッグ装置について、以下その動作を図２に示すフローチャートを用いて説明する。まず、ブレイクポイントまで実行してシミュレータの状態情報を保存するまでの動作を説明する。フローチャートのステップｎをＳＴｎで示す。
【００２４】
まず、ＳＴ１でユーザが開発したプログラム１をプログラム設定インターフェース３を通してシミュレータに読み込み、ＳＴ２でシミュレータを起動する。シミュレータ起動後、ＳＴ３でユーザコマンドインターフェース部４を通して受け付けたユーザ設定シナリオ２から、ＳＴ４で実行モード制御部５にて実行させるシミュレーションが通常実行モードか途中実行モードかを判定する。
【００２５】
通常実行モードの場合はＳＴ５で全てのレジスタとメモリに対して初期値を設定する。  途中実行モードを選択するには、少なくとも１回以上シミュレーションを実行し、ブレイクポイントにおけるシミュレータの状態情報を保存していなければならない。従って、シミュレータの状態情報が保存されていない場合は通常実行モードをユーザは選択する。
【００２６】
初期値設定後、ＳＴ８でユーザコマンドインターフェース部４を通して受け付けたユーザ設定シナリオ２から、ＳＴ９で実行モード制御部において実行させるシミュレーションが通常実行モードか状態出力モードかを判定する。
【００２７】
通常実行モードの場合はＳＴ１０でシミュレーション実行部８にてシミュレーションを実行するが、ブレイクポイントでシミュレーションが止まった場合においてもシミュレータの状態情報は出力しない。
【００２８】
状態出力モードの場合はＳＴ１１でシミュレーション実行部８にてブレイクポイントまでシミュレーションを実行する。その際、ＳＴ１２でアクセスフラグ生成部８にてユーザが開発したプログラム１によりメモリやレジスタがアクセスされたかを示すフラグ情報を生成する。
【００２９】
ブレイクポイントまで実行しシミュレーションが止まったときに、ＳＴ１３で状態抽出部１０にてアクセスフラグ生成部８で生成されたフラグ情報を基にアクセスされたメモリやレジスタを検出し、ブレイクポイントまで実行されたメモリやレジスタの状態情報を抽出する。
【００３０】
その後、抽出したメモリやレジスタの状態情報をＳＴ１４で状態保存部１２にて外部記憶装置１４に保存する。また、アクセスフラグ保存部１１においてフラグ情報やプログラムのブレイクポイントをメモリに保存する。
【００３１】
次に、ブレイクポイントの状態を復元する動作を以下に説明する。ＳＴ４で実行させるシミュレーションが途中実行モードであることを実行モード制御部５が認識すると、ＳＴ６で状態復元部１３にてアクセスフラグ保存部１１に保存したフラグ情報を読み込む。そのフラグ情報を基づき、アクセスしていないメモリやレジスタに対してはリセットを行い初期設定と同じ設定にする。
【００３２】
プログラム１によってアクセスされたメモリやレジスタに対しては、保存したメモリやレジスタの状態情報をＳＴ７で状態復元部１３により外部記憶装置１４から読み込み、その情報をメモリやレジスタに割り当てることによりシミュレーションがブレイクされたときの状態を復元する。
【００３３】
次にブレイクポイントの自動設定における動作を図３に示すフローチャートを用いて説明する。まず、ＳＴ２０でユーザコマンドインターフェース部４を通して受け付けたユーザ設定シナリオ２から、ＳＴ２１で実行モード制御部５にて実行させるシミュレーションが手動ブレイク設定モードか自動ブレイク設定モードかを判定する。
【００３４】
手動ブレイク設定モードの場合は、ＳＴ２２でブレイクポイント制御部６にてユーザが設定したブレイクポイントを抽出し、抽出したブレイクポイントまでＳＴ２３でシミュレーション実行部８にてシミュレーションを実行する。
【００３５】
自動ブレイク設定モードの場合は、ＳＴ２５〜ＳＴ３０でブレイクポイント制御部６にて３通りの自動ブレイクポイントを使用するか否かをユーザ設定シナリオ２から判定する。
【００３６】
一つ目はユーザが開発したプログラムに不具合が存在し、本来ならばアクセスを行わないメモリアドレスに対して不正書き込みが行われた場合にブレイクを行う方法、二つ目は、変化しない筈のＤＳＰやＣＰＵのフラグが不正に変化させられた場合にブレイクを行う方法、三つ目はあるサイクル数以上シミュレーションが実行された場合にブレイクする方法である。
【００３７】
自動ブレイクポイントを使用する場合は、ユーザ設定シナリオ２からユーザコマンドインターフェース部４を通してそれぞれの自動ブレイクポイントに対する設定値を読み込みシミュレーションを行う。シミュレーション実行中に自動ブレイクポイントの条件を満たした場合はシミュレーションを止める。
【００３８】
最後にアクセスフラグ制御部の動作について説明する。アクセスフラグ生成部８においてプログラム１によりメモリやレジスタがアクセスされたかを示すフラグ情報を生成するが、そのフラグ情報の生成方法として３通りの生成方法がある。
【００３９】
一つ目としてユーザが開発したプログラム１のアクセスをメモリのビット単位で判定する方法、二つ目としてユーザが開発したプログラム１のアクセスをメモリのワード単位で判定する方法、三つ目としてユーザが開発したプログラム１のアクセスを機能ブロック単位で判定する方法である。アクセスフラグ制御部７において、ユーザ設定シナリオ２から３通りのフラグ情報の内どれが選択されているかを判定しフラグ情報を生成する。
【００４０】
以上のように本実施形態によれば、ユーザが開発したプログラムによりアクセスされたメモリやレジスタについてのみ状態情報を抽出し外部記憶装置に保存するため、ブレイクポイントの状態を復元させるための情報量を削減することができる。これにより、特に大規模な回路に対するソフトウェアシミュレータの場合においても、シミュレータの実行速度低下を防止することが可能となる。
【００４１】
また、シミュレータがブレイクポイントを自動的に決定するモードを追加することにより、ブレイクポイントの環境設定工数、ソフトウェアのデバッグ工数を削減することができる。
【００４２】
また、ユーザはアクセスフラグ生成方法をワード単位、ビット単位、機能ブロック単位で生成する方法を選択することが可能であるため、ユーザが開発したプログラムに対して最適なアクセスフラグ生成方法を選択することができる。これにより、外部記憶装置に保存するための情報量をさらに削減することができるため、ソフトウェアのデバッグ工数を削減することができる。
【産業上の利用可能性】
【００４３】
本発明のデバッグ装置は、ブレイクポイントにおける保存情報と復元情報を大幅に削減することができるという効果を有し、シミュレータを用いたソフトウェア検証において、ブレイクポイントからある時間経過した後に、プログラムを最初から再実行することなくシミュレータをブレイクポイントの状態に復元可能にすることにより、プログラムの開発を支援するデバッグ装置等として有用である。
【図面の簡単な説明】
【００４４】
【図１】本発明の一実施の形態におけるデバッグ装置の構成を示すブロック図。
【図２】本発明の一実施の形態におけるデバッグ装置の動作フローチャート。
【図３】本発明の一実施の形態におけるデバッグ装置の自動ブレイクポイント設定の動作フローチャート。
【図４】シミュレータを用いた従来のデバッグ装置の構成を示すブロック図。
【符号の説明】
【００４５】
１  ユーザが開発したプログラム
２  シミュレータのモードを設定するためのシナリオ
３  プログラムをシミュレータに読み込むためのインターフェース部
４  シナリオをシミュレータに読み込むためのインターフェース部
５  シミュレーションの実行モードを制御する実行モード制御部
６  ブレイクポイントを制御するブレイクポイント制御部
７  アクセスフラグを制御するアクセスフラグ制御部
８  シミュレーション実行部
９  アクセスフラグ生成部
１０  シミュレーションの状態を抽出する状態抽出部
１１  アクセスフラグを保存するアクセスフラグ保存部
１２  抽出した情報を保存する状態保存部
１３  シミュレーションの状態を復元する状態復元部
１４  外部記憶装置
ＳＴ１  ユーザが開発したプログラム読み込みステップ
ＳＴ２  シミュレータの起動ステップ
ＳＴ３  初期モードのユーザコマンド受け付けステップ
ＳＴ４  初期モード判定ステップ
ＳＴ５  初期状態設定ステップ
ＳＴ６  アクセスされていないメモリ領域とレジスタのリセットステップ
ＳＴ７  アクセスされたメモリ領域とレジスタ復元ステップ
ＳＴ８  ユーザコマンドの受け付けステップ
ＳＴ９  状態出力モードか通常状態モードかのモード判定ステップ
ＳＴ１０  シミュレーション実行ステップ
ＳＴ１１  ブレイクポイントまでのシミュレーション実行ステップ
ＳＴ１２  アクセスされたメモリ領域とレジスタを検出するステップ
ＳＴ１３  データを抽出するステップ
ＳＴ１４  状態出力実行ステップ
ＳＴ１５  シミュレータ終了判定ステップ
ＳＴ２０  初期コマンド受け付けステップ
ＳＴ２１  手動あるいは自動ブレイクモード判定ステップ
ＳＴ２２  ユーザ設定のブレイクポイント抽出ステップ
ＳＴ２３  シミュレーション実行ステップ
ＳＴ２４  シミュレーションのブレイク実行ステップ
ＳＴ２５  不正アドレスでブレイクを行うかを判定するステップ
ＳＴ２６  ユーザが設定した不正アドレスを抽出するステップ
ＳＴ２７  不正フラグでブレイクを行うかを判定するステップ
ＳＴ２８  ユーザが設定した不正フラグを抽出するステップ
ＳＴ２９  サイクル数でブレイクを行うかを判定するステップ
ＳＴ３０  ユーザが設定したサイクル数を抽出するステップ
ＳＴ３１  シミュレーションを実行するステップ
ＳＴ３２  ブレイク条件を満たすかを判定するステップ
ＳＴ３３  シミュレーションのブレイクを実行するステップ
【図１】
2006039611.tif 000003
【図２】
2006039611.tif 000004
【図３】
2006039611.tif 000005
【図４】
2006039611.tif 000006