プログラムデバッグ装置およびエミュレータシステム
【課題】ソフトウェア上の問題の早期解決を図るべく、トレースログの記録においてトレースログの効果的な絞り込みを行い、もって、再現性が低く解析が難しい問題の特定を迅速・容易化する。
【解決手段】CPU1によるプログラム実行処理の任意状態を定義するイベントを管理し、プログラム実行処理の状態と比較して等価・非等価の判別結果であるイベント成立状態を出力するイベント制御手段2と、CPUによるプログラム実行処理のトレースログを記録しておくためのトレースメモリ11と、イベント制御手段によるイベント成立状態が有効のときにCPUによるプログラム実行処理のトレースログをトレースメモリに仮記録するトレース制御手段3と、トレース制御手段によるトレースログ仮記録処理時間Tが現在までにおいて最長か否かに応じて、トレースメモリにおけるトレースログの仮記録を本記録として確定するか破棄するかを制御するトレースログ記録確定制御手段4を備える。
【解決手段】CPU1によるプログラム実行処理の任意状態を定義するイベントを管理し、プログラム実行処理の状態と比較して等価・非等価の判別結果であるイベント成立状態を出力するイベント制御手段2と、CPUによるプログラム実行処理のトレースログを記録しておくためのトレースメモリ11と、イベント制御手段によるイベント成立状態が有効のときにCPUによるプログラム実行処理のトレースログをトレースメモリに仮記録するトレース制御手段3と、トレース制御手段によるトレースログ仮記録処理時間Tが現在までにおいて最長か否かに応じて、トレースメモリにおけるトレースログの仮記録を本記録として確定するか破棄するかを制御するトレースログ記録確定制御手段4を備える。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はトレース機能とイベント機能を備えたプログラムデバッグ装置にかかわり、特には多重割り込み等を多用した製品のプログラムのデバッグに有効なプログラムデバッグ装置に関する。
【背景技術】
【0002】
近年、組み込みプログラムの開発環境等において、プログラムデバッグ装置であるエミュレータやオンボードデバッガが広く利用されている。組み込みプログラムにおいては、高機能化に伴うソフトウェアの肥大化や複雑化が進むと同時に、高い品質のソフトウェアが望まれている。特にカーナビゲーションや携帯電話のソフトウェアにおいては、高い機能を実現するために多重割り込み等が多用され、CPU(Central Processing Unit)の機能を最大限に利用しているため、割り込み処理時間の確実な設計やメモリアクセスの排他性の設計が必要である。
【0003】
確実な設計については、ソフトウェアの肥大化や複雑化が進むことで難解な作業となり、割り込み処理時間の確認やメモリアクセスの排他性に問題が発生しがちで、プログラムデバッグ装置のトレース機能とイベント機能を用いて解析しなければならない状況に陥ることがよくある。このような問題に直面したときは、プログラムデバッグ装置のトレース機能とイベント機能を用いて取得したトレースログ(プログラムを実行した処理の記録)を解析する。
【0004】
図20は従来技術のトレース機能とイベント機能を備えたプログラムデバッグ装置の構成を示すブロック図である。このプログラムデバッグ装置は、CPU1、イベント制御モジュール2、トレース制御モジュール3およびトレースメモリ11で構成されている。
【0005】
CPU1は、プログラムを実行する。イベント制御モジュール2は、CPU1がプログラムを実行中に実行した処理の状態を監視し、イベントとして設定した状態と等価であるか非等価であるかを判別し、判別した結果をイベント成立状態としてトレース制御モジュール3に出力する。トレース制御モジュール3は、トレースログを取得し、イベント成立状態が開始イベントや終了イベントと等価であるかを判別してトレース記録実行情報3aを作成し、トレースログ記録の指示があったときに、トレースログをトレースメモリ11に記録する。
【0006】
このプログラムデバッグ装置を用いて、ソフトウェア上の問題があると推測できる箇所に開始イベントと終了イベントを設定し、開始イベントから終了イベントまでのトレースログを取得し、トレースログを解析する。このようにイベントによって問題があると推測できる箇所に絞り、トレースメモリ11に記録するトレースログを取得し、トレースログを解析する。以上の処理を繰り返し、最終的に問題の発生箇所を特定する。
【0007】
一般的に、開始イベントから終了イベントまでの処理時間が長いほど、ソフトウェア上の問題が大きいイベントであると考えられる。開始イベントから終了イベントまでの処理時間が最長のときは、問題が最も大きいイベントであり、そのようなイベントを解析することが早期の問題解決に有効であると考えられる。
【0008】
イベント成立間の最長時間を測定する方法は、特許文献1において提案されている。また、トレースログの記録方法については、特許文献2で提案されている。
【特許文献1】特開平3−92940号公報
【特許文献2】特開平5−241878号公報
【発明の開示】
【発明が解決しようとする課題】
【0009】
特許文献2の方法によれば、開始イベントから終了イベントまでのトレースログを累積して記録することができるが、開始イベントから終了イベントまでの処理時間が最長であるときのトレースログに絞り込むことができない。この処理時間が最長であるときとは、割り込みが多重に発生した場合や、想定外の割り込みが発生した場合や、処理量が異常に多い場合や、複数のタスクが変数をライトアクセスした結果、排他性の問題が発生しタスクの処理時間が異常に長くなる場合等を想定している。割り込みが入らない状態であれば、処理時間が短く、問題が発生しないことが多い。
【0010】
このことを、図20の時間測定機能を追加した図21に示すプログラムデバッグ装置で説明する。時間測定モジュール7は、イベント成立状態が開始イベントや終了イベントと等価であるかを判別して時間測定を行い、すでに保持している現在までにおいて最長の処理時間と比較し、測定時間の方が長い場合には、測定時間を最長の処理時間として更新し、保持する。時間測定モジュール7は、トレース制御モジュール3とは独立して動作する。一方でトレース制御モジュール3はトレースログを蓄積し、他方で時間測定モジュール7が開始イベントから終了イベントまでの最長の処理時間を測定し、この動作を繰り返す。
【0011】
長時間使用するようなシステムや再現性の低いソフトウェア上の問題を解析する場合、CPU1を長時間実行させてトレースログを蓄積する。しかし、蓄積されたトレースログが膨大なものとなるため、トレースログの解析自体が難しく、多くの時間がかかる。さらに、トレースメモリ11の容量に限りがあるため、トレースログを記録する領域をロールオーバーしてトレースログが上書きされ、解析できないことが多発している。このような理由により、想定以上に時間がかかったときのトレースログを特定することは現実的には不可能である。割り込みが多重に発生した場合や想定外の割り込みが発生し、想定していた以上に時間がかかったときには、一層困難となる。
【0012】
一例として、トレースログのデータの1つの単位が20バイトであり、トレースを取得開始して終了するまでのトレースログのデータ数の平均が5,000個ある場合、トレースを取得開始して終了するまでのトレースログのデータサイズは100,000バイトとなる。さらにトレースを取得開始して終了するまでのサイクルが1秒に10回実行され、トレースメモリ11の容量が1,000,000バイトである場合、記録できるトレースログはたかだか約1秒間のデバッグ分でしかない。このような不都合の原因として、開始イベントから終了イベントまでの処理時間が最長のときのトレースログに絞り込むことができていないということがある。
【0013】
本発明は、このような事情に鑑みて創作したものであり、ソフトウェア上の問題の早期解決を図るべく、トレースログの記録においてトレースログの効果的な絞り込みを行い、もって、再現性が低く解析が難しい問題の特定を迅速・容易化することを目的としている。
【課題を解決するための手段】
【0014】
(1)本発明によるプログラムデバッグ装置は、
プログラムを実行するCPUと、
前記CPUによるプログラム実行処理の任意状態を定義するイベントを管理し、前記CPUによるプログラム実行処理の状態と比較して等価・非等価の判別結果であるイベント成立状態を出力するイベント制御手段と、
前記CPUによるプログラム実行処理のトレースログを記録しておくためのトレースメモリと、
前記イベント制御手段による前記イベント成立状態が有効のときに前記CPUによるプログラム実行処理のトレースログを前記トレースメモリに仮記録するトレース制御手段と、
前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長か否かに応じて、前記トレースメモリにおける前記トレースログの仮記録を本記録として確定するか破棄するかを制御するトレースログ記録確定制御手段とを備えたものである。
【0015】
この構成において、イベント制御手段は、CPUによるプログラム実行処理を監視し、これをあらかじめ管理しているイベントと比較して等価か非等価を判別し、等価であるときはイベント成立状態を有効にし、非等価であるときはイベント成立状態を無効にし、トレース制御手段に通知する。イベント成立状態を受け取ったトレース制御手段は、イベント成立状態が有効のときにCPUによるプログラム実行処理のトレースログをトレースメモリに仮記録し、仮記録が済んだので現在記録アドレスを更新する。次いで、トレースログ記録確定制御手段は、トレース制御手段によるトレースログの仮記録に要したトレースログ仮記録処理時間が現在までにおいて最長か否か(前回仮記録時よりも長いか否か)に応じて、トレースメモリにおけるトレースログの仮記録を本記録として確定するか破棄するかを制御する。すなわち、トレースログはイベント成立状態が有効でありさえすればとりあえずはトレースメモリに一旦記録する(仮記録)。その上で、トレースログ仮記録処理時間が現在までにおいて最長か否かに応じて選択・破棄を行い、トレースログを絞り込む。トレースログの仮記録に要したトレースログ仮記録処理時間が現在までにおいて最長のときは仮記録を本記録として確定し、トレースログ仮記録処理時間が最長でないときは仮記録を破棄する。破棄することにより、トレースメモリに残されるトレースログの数を絞り込むことが可能となる。なお、「現在までにおいて最長」というのは、実態としては「前回よりも長い」ということであり、ただ1つということを意味するものではない。トレースメモリに残されるトレースログは、トレースログ仮記録処理時間が比較的長いものであり、より重大なソフトウェア上の問題を含んでいる可能性が高いイベントに関係するトレースログである。したがって、このような絞り込みによってトレースメモリに残されたトレースログを解析すれば、最終的な問題発生箇所の特定を迅速・容易に進めることが可能となる。また、記録するトレースログの絞り込みは、トレースメモリの容量の過大な増加を回避する上でも有効である。
【0016】
(2)上記構成のプログラムデバッグ装置において、前記トレースログ記録確定制御手段は、現在記録アドレスと前回記録アドレスを管理するもので、前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長のときは、前記トレースメモリにおける次の現在記録アドレスとして更新後の現在記録アドレスを設定し、前記トレースログ仮記録処理時間が現在までにおいて最長でないときは、次の現在記録アドレスとして前回記録アドレスを設定することにより、現在記録アドレスの調整を行うトレースメモリアドレス管理手段を備えているという態様がある。
【0017】
トレースログの仮記録に要したトレースログ仮記録処理時間が現在までにおいて最長であれば、次の現在記録アドレスとして更新後の現在記録アドレスを設定する。すると、次のトレースログが記録されることになるのは、更新後の現在記録アドレスにおいてであり、1回前に仮記録が行われたアドレスである前回記録アドレスにおいてではないので、1回前に仮記録が行われたアドレスに対する上書きは行われることはなく、結果として、1回前に仮記録が行われたアドレスにおけるトレースログの記録は本記録として確定されたものとなる。一方、トレースログの仮記録に要したトレースログ仮記録処理時間が現在までにおいて最長でないのであれば、次の現在記録アドレスとして前回記録アドレスを設定する。すると、次のトレースログが記録されることになるのは、1回前に仮記録が行われたアドレスである前回記録アドレスにおいてであり、その1回前に仮記録が行われた前回記録アドレスに対する上書きとなって、結果として、1回前に仮記録が行われたアドレスにおけるトレースログの記録は破棄されてしまい、代わりに今回の仮記録にかかわるトレースログの記録となる。
【0018】
(3)また上記構成のプログラムデバッグ装置において、前記トレースメモリアドレス管理手段は、前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長のときは、前記トレースメモリにおける更新後の現在記録アドレスを前回記録アドレスにコピーし、前記トレースログ仮記録処理時間が現在までにおいて最長でないときは、前回記録アドレスを現在記録アドレスにコピーするものとして構成されているという態様がある。
【0019】
仮記録から本記録または破棄への制御を、更新後の現在記録アドレスの前回記録アドレスへのコピーまたは前回記録アドレスの更新後の現在記録アドレスへのコピーによって実現するので、仮記録から本記録または破棄への制御を簡易な構成で容易に実現することが可能となる。更新後の現在記録アドレスを前回記録アドレスにコピーすれば、前回記録アドレスに設定されたアドレスは、この直前に仮記録されたトレースログの記録先アドレスであり、それが前回記録アドレスに存在しているということは、仮記録が本記録に昇格したことに相当する。一方、前回記録アドレスを現在記録アドレスにコピーすれば、仮記録後に更新した現在記録アドレスを元に戻すことになり、そのアドレスへの次のトレースログの上書きを許容することになるので、先の仮記録は破棄されることになる。
【0020】
(4)また上記構成のプログラムデバッグ装置において、さらに、前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長か否かを判断し、その判断結果に基づいて前記トレースメモリアドレス管理手段をタイミング制御する更新タイミング制御手段を備えているという態様がある。
【0021】
更新タイミング制御手段は、トレースログの仮記録に要したトレースログ仮記録処理時間が現在までにおいて最長か否かを判断し、判断結果をトレースメモリアドレス管理手段に与えるものであり、更新タイミング制御手段をもっぱらタイミングの管理をつかさどるものとして構成することが可能となる。
【0022】
(5)また上記構成のプログラムデバッグ装置において、前記トレースログ記録確定制御手段は、その都度の現在記録アドレスをトレース開始アドレスとして更新するように構成されているという態様がある。
【0023】
これは、現在記録アドレス、前回記録アドレスに加えてさらにトレース開始アドレスを用いるものである。その都度の現在記録アドレスを更新的にトレース開始アドレスとして保持するようにしているので、トレース開始アドレスには常に最終のトレースログ記録にかかわる現在記録アドレスが設定されていることになる。最終の記録にかかわるトレースログ仮記録処理時間は、記録されているトレースログ群の各トレースログ仮記録処理時間のうち最長時間となる。
【0024】
トレースログのトレースメモリに対する記録が完了すると、トレースメモリにはその都度のトレースログ仮記録処理時間が現在までにおいて最長のイベントにかかわるトレースログが複数記録されていることになる。解析に際してトレースメモリからトレースログを読み出すに当たり、トレース開始アドレスにアクセスして読み出せば、記録されているトレースログ群全体のうちでトレースログ仮記録処理時間が現在までにおいて最長の1つの(最長中の最長の)トレースログが読み出されることになる。トレースログ群全体のうちでトレースログ仮記録処理時間が現在までにおいて最長のトレースログは、最も重大なソフトウェア上の問題を含んでいる可能性が高いイベントに関係するトレースログである。したがって、このただ1つのトレースログへの絞り込み解析によって、問題発生箇所の特定をさらに迅速・容易に進めることが可能となる。
【0025】
(6)上記のトレース開始アドレスを有するプログラムデバッグ装置において、前記トレースログ記録確定制御手段は、現在記録アドレスと前回記録アドレスとトレース開始アドレスを管理するもので、前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長のときは、前記前回記録アドレスを前記トレース開始アドレスに設定した上で、前記トレースメモリにおける更新後の現在記録アドレスを前回記録アドレスにコピーし、前記トレースログ仮記録処理時間が現在までにおいて最長でないときは、前回記録アドレスを現在記録アドレスにコピーするものとして構成されているという態様がある。
【0026】
これは、上記の(5)を実現するに当たり、アドレスの調整をコピー方式とするものである。
【0027】
(7)上記の更新タイミング制御手段を備えたプログラムデバッグ装置において、さらに、前記イベント制御手段による前記イベント成立状態を入力してイベント成立間の最長時間を測定し、最長時間を更新したかしていないかを判別し、その判別結果である最長時間更新情報を前記更新タイミング制御手段に出力する時間測定手段を備え、前記更新タイミング制御手段は、前記時間測定手段から入力する前記最長時間更新情報によって、前記トレースログ仮記録処理時間が現在までにおいて最長か否かを判断し、その判断結果に基づいて前記トレースメモリアドレス管理手段をタイミング制御するように構成されているという態様がある。このように構成すれば、時間測定手段を更新タイミング制御手段から分離した状態で構成することが可能となる。本構成の場合、時間測定手段を追加することで、トレース機能をもつ従来技術のプログラムデバッグ装置への応用展開を容易なものにする。
【0028】
(8)また上記の構成のプログラムデバッグ装置において、前記更新タイミング制御手段は、時刻情報を付帯するトレースログを入力し、前記トレースログが付帯する前記時刻情報から前記トレースログ仮記録処理時間が最長時間を更新したか更新していないかを判別し、その判別結果である最長時間更新トレース情報に基づいて前記トレースメモリアドレス管理手段をタイミング制御するように構成されているという態様がある。
【0029】
トレースメモリアドレス管理手段は、トレースログ仮記録処理時間が現在までにおいて最長のときは、次の現在記録アドレスとして更新後の現在記録アドレスを設定することにより、トレースメモリにおけるトレースログの仮記録を本記録として確定する一方、最長でないときは、次の現在記録アドレスとして前回記録アドレスを設定することにより、トレースログの仮記録を破棄するものである。そして、更新タイミング制御手段は、トレースログ仮記録処理時間が現在までにおいて最長か否かを判断し、その判断結果に基づいてトレースメモリアドレス管理手段をタイミング制御するものである。この更新タイミング制御手段でのトレースログ仮記録処理時間が最長か否かの判断において、トレースログが付帯する時刻情報を利用するのが本構成である。トレースログの仮記録を開始したときのトレースログの時刻情報と仮記録を終了したときのトレースログの時刻情報からトレースログ仮記録処理時間を求め、これを最長時間更新トレース情報としてトレースメモリアドレス管理手段をタイミング制御すればよい。本構成によれば、(7)のような時間測定手段を含まないプログラムデバッグ装置においても、本発明が実現可能となる。
【0030】
(9)また上記の構成のプログラムデバッグ装置において、前記更新タイミング制御手段は、入力されてくるトレースログと、前記イベント制御手段が管理するイベントとに基づいて、前記トレースログ仮記録処理時間が最長時間を更新したか更新していないかを判別し、その判別結果である最長時間更新イベントトレース情報に基づいて前記トレースメモリアドレス管理手段をタイミング制御するように構成されているという態様がある。
【0031】
更新タイミング制御手段でのトレースログ仮記録処理時間が最長か否かの判断において、トレースログとイベントとの2つの要素を利用するのが本構成である。トレースログの仮記録を開始したときのイベントとトレースログを比較して一致したときの時刻情報と仮記録を終了したときのイベントとトレースログを比較して一致したときの時刻情報からトレースログ仮記録処理時間を求め、これを最長時間更新イベントトレース情報としてトレースメモリアドレス管理手段をタイミング制御すればよい。本構成によれば、(7)のような時間測定手段を含まないプログラムデバッグ装置においても、本発明が実現可能となる。
【0032】
(10)また上記の構成のプログラムデバッグ装置において、さらに、前記更新タイミング制御手段による現在記録アドレスの更新制御の有効/無効を設定する更新タイミングマスク制御手段を備えているという態様がある。
【0033】
ソフトウェア上の問題を再現するパターンが事前にある程度特定できている場合には、トレースメモリへのトレースログの仮記録をそのようなパターンにかかわるトレースログに絞り込むのが合理的である。問題を再現することが事前にある程度特定できているパターン以外については、そのときのトレースログはトレースメモリへの記録の対象外とすればよい。例えば、プログラム実行直後は、最長となるトレースログ仮記録処理時間が更新されやすい。しかし、それが問題を再現するパターンではない場合が多い。そこで、このようなトレースログは破棄することにすればよい。問題を再現することがないと事前にある程度分かっているパターンについては、更新タイミングマスク制御手段において、更新タイミング制御手段による現在記録アドレスの更新制御を無効に設定しておく。そうすることにより、問題を再現することがないと事前にある程度分かっているパターンについてトレースメモリへのトレースログの仮記録を破棄させることが可能となる。問題を再現することが事前にある程度特定できているパターンについては、現在記録アドレスの更新制御を有効に設定しておく。そうすると、問題を再現することが事前にある程度特定できているパターンに限定して、トレースメモリへのトレースログの仮記録を本記録として確定することが可能となる。結果として、問題発生箇所のトレースログの収集が効率化される。
【0034】
(11)また上記の構成のプログラムデバッグ装置において、前記更新タイミング制御手段は、現在記録アドレスの更新/非更新を示すアドレス更新情報を出力する機能を備え、さらに、前記更新タイミング制御手段から更新を示す前記アドレス更新情報を入力したときに任意の波形信号を外部トリガとして出力する外部トリガ出力手段を備えているという態様がある。
【0035】
プログラム上に発生した問題の解析に当たっては、収集したトレースログの解析だけでなく、問題発生箇所または問題発生時の出力状態等の波形を取得して、その波形も併せて解析すれば、問題解決を効果的に進めることが可能となる。現在記録アドレスを更新するのは、トレースログ仮記録処理時間が最長を更新したときであり、この場合に外部トリガ出力手段を活性化して問題解決に供する任意の波形信号を外部トリガとして出力させる。結果として、最長となるトレースログ仮記録処理時間が更新されたときに、外部トリガ出力手段が外部へ所望の波形を出力することができる。例えば、ユーザターゲットシステムにおけるアクチュエータ等の出力状態等の波形をオシロスコープ等によって取得する。問題発生時の波形とトレースログとを併せて解析すれば、問題解決が迅速・容易なものとなる。
【0036】
(12)また上記の構成のプログラムデバッグ装置において、前記更新タイミング制御手段は、現在記録アドレスの更新/非更新を示すアドレス更新情報を出力する機能を備え、さらに、前記更新タイミング制御手段から更新を示す前記アドレス更新情報を入力したときに前記CPUの動作を停止させるブレーク制御手段を備えているという態様がある。
【0037】
最長となるトレースログ仮記録処理時間が更新されたときにCPUを停止させれば、そのとき取得したトレースログを用いて、直ちに問題発生時の変数の状態や処理の状態をデバッグすることが可能となり、問題解決の迅速化を図ることが可能となる。
【0038】
(13)また、本発明によるエミュレータシステムは、上記のいずれかのプログラムデバッグ装置を搭載したものであり、プログラムや周辺装置上の問題のデバッグを効率良く進めることが可能となる。
【発明の効果】
【0039】
本発明によれば、イベント成立状態が有効となるトレースログはすべて一旦はトレースメモリに仮記録した上で、トレースログ仮記録処理時間が現在までにおいて最長となるトレースログに限定して残すようにしているので、トレースログの記録においてトレースログの効果的な絞り込みが行われ、再現性が低く解析が難しいソフトウェア上の問題の特定を迅速・容易化することができる。
【発明を実施するための最良の形態】
【0040】
以下、本発明にかかわるプログラムデバッグ装置の実施の形態を図面を用いて詳細に説明する。
【0041】
(実施の形態1)
図1は本発明の実施の形態1におけるプログラムデバッグ装置の構成を示すブロック図である。このプログラムデバッグ装置は、CPU1、イベント制御モジュール2、トレース制御モジュール3、トレースログ記録確定制御手段4(トレースメモリアドレス管理モジュール5、更新タイミング制御モジュール6)およびトレースメモリ11から構成されている。以下、それらの各ブロックを説明する。図20の従来技術のプログラムデバッグ装置と比較して、トレースメモリアドレス管理モジュール5および更新タイミング制御モジュール6からなるトレースログ記録確定制御手段4が追加されたものに相当する構成となっている。
【0042】
CPU1は、ハードウェアあるいはソフトウェアで構成され、プログラムコードを実行するものである。
【0043】
イベント制御モジュール2は、CPU1がプログラムを実行する処理の任意の状態を定義できるイベントを1つ以上管理する。イベントは、CPU1がプログラムを実行する処理の任意の状態であり、CPU1がプログラムを実行したときのアドレスや、リードまたはライトするアドレス等を定義することができる。さらにイベント制御モジュール2は、管理しているイベントとCPU1がプログラムを実行する処理の状態を比較し、イベント毎に等価であるか非等価であるかを判別し、その判別結果をイベント成立状態として出力する。
【0044】
トレースメモリ11は、CPU1がプログラムを実行した処理の記録であるトレースログを記録する。トレースログの内容は、CPU1が実行したアドレスやリードまたはライトしたアドレス等が代表的なものである。プログラムデバッグ装置によって、トレースログの内容は異なるものである。
【0045】
トレース制御モジュール3は、イベント制御モジュール2によるイベント成立状態が有効のときにCPU1によるトレースログをトレースメモリ11に仮記録するものとして構成されている。一例として、イベント制御モジュール2が管理する任意の1つのイベントを開始イベントとし、さらに任意の1つのイベントを終了イベントとして設定でき、開始イベントが成立してから終了イベントが成立するまでのトレースログ仮記録処理時間Tに対応するトレースログを仮記録することができる。
【0046】
トレースログ記録確定制御手段4は、トレース制御モジュール3によるトレースログの仮記録に要したトレースログ仮記録処理時間Tが現在までにおいて最長か否かに応じて、トレースメモリ11におけるトレースログの仮記録を本記録として確定するか破棄するかを制御するものであり、本実施の形態では、トレースメモリアドレス管理モジュール5と更新タイミング制御モジュール6とから構成されている。
【0047】
トレースメモリアドレス管理モジュール5は、現在記録アドレスAと前回記録アドレスBを管理するものである。これらは例えばレジスタで構成される。現在記録アドレスAは、現在のトレースログを仮記録すべきトレースメモリ11でのアドレスであり、仮記録が完了する都度に、インクリメント等の処理により更新されるようになっている。前回記録アドレスBは、仮記録が完了する都度に、元の現在記録アドレスAをコピーしておくものである。トレースメモリアドレス管理モジュール5は、トレース制御モジュール3によるトレースログ仮記録処理時間Tが現在までにおいて最長のとき(前回よりも長いとき)は、トレースメモリ11における次の現在記録アドレスAとして更新後の現在記録アドレスAを設定し、トレースログ仮記録処理時間Tが現在までにおいて最長でないときは、次の現在記録アドレスAとして前回記録アドレスBを設定することにより、現在記録アドレスAの調整を行うように構成されている。すなわち、トレース制御モジュール3によるトレースログ仮記録処理時間Tが現在までにおいて最長のときは、トレースメモリ11における更新後の現在記録アドレスAを前回記録アドレスBにコピーし、トレースログ仮記録処理時間Tが現在までにおいて最長でないときは、更新後の前回記録アドレスBを現在記録アドレスAにコピーする。トレースログ仮記録処理時間Tが現在までにおいて最長の場合に更新後の現在記録アドレスAを前回記録アドレスBにコピーするのは、いままさに仮記録が完了したばかりのトレースログの仮記録を本記録として確定していることになる。トレースログ仮記録処理時間Tが現在までにおいて最長でない場合に更新後の前回記録アドレスBを現在記録アドレスAにコピーするのは、いままさに仮記録が完了したばかりのトレースログの記録アドレスへの次のトレースログの上書きを許容し、いままさに仮記録が完了したばかりのトレースログの仮記録を破棄することに相当する。
【0048】
更新タイミング制御モジュール6は、トレース制御モジュール3によるトレースログ仮記録処理時間Tが現在までにおいて最長か否かを判断し、その判断結果をトレースメモリアドレス管理モジュール5に与えるタイミングを制御するものとして構成されている。これが、上記のアドレスコピーのタイミングに利用される。なお、更新タイミング制御モジュール6における時間の管理については種々の方式があり、詳細は他の実施の形態において説明する。
【0049】
図2は実施の形態1のプログラムデバッグ装置のトレースログを仮記録する動作を示すフローチャートである。
【0050】
最初に、CPU1がプログラムコードを実行する(ステップS01)。
【0051】
次に、トレース制御モジュール3は、CPU1がプログラムを実行した処理の記録であるトレースログを取得する(ステップS02)。
【0052】
次に、トレース制御モジュール3は、イベント制御モジュール2からイベント成立状態を取得する(ステップS03)。CPU1によるプログラム実行処理があらかじめ管理しているイベントと等価であるときはイベント成立状態は有効であり、非等価であるときはイベント成立状態は無効である。
【0053】
次に、トレース制御モジュール3は、取得したイベント成立状態からトレースログを仮記録するかしないかを判定する指示を作成する(ステップS04)。イベント成立状態が有効のときはトレースログ仮記録の指示を作成し、イベント成立状態が無効のときはトレースログを仮記録しない指示を作成する。
【0054】
次に、トレース制御モジュール3は、トレースログを仮記録する指示がONか否かを判断し(ステップS05)、トレースログを仮記録する指示がONのとき、トレースメモリ11の現在記録アドレスAにトレースログを仮記録し、現在記録アドレスAのインクリメント等によって更新する(ステップS06)。現在記録アドレスAをインクリメント等で更新するのは、トレースログ書き込み後に、次のトレースログを別のアドレスに書き込む準備をするためである。
【0055】
一方、トレースログを仮記録する指示がOFFのとき、トレースログを仮記録しない(ステップS07)。
【0056】
図3は実施の形態1のプログラムデバッグ装置のトレースメモリ11のアドレスを操作する動作を示すフローチャートである。
【0057】
最初に、任意の1つのイベントが成立してトレースログの仮記録を開始してから、さらに任意の1つのイベントが成立してトレースログの仮記録を終了したとき、トレースログの仮記録を開始してから終了するまでのプログラムのトレースログ仮記録処理時間Tが現在までにおいて最長か否かを判別する(ステップS10)。
【0058】
そして、トレースログ仮記録処理時間Tが現在までにおいて最長か否かに応じて処理を分岐する(ステップS20)。
【0059】
次に、トレースログ仮記録処理時間Tが現在までにおいて最長のとき、トレースログ記録確定制御手段4における更新タイミング制御モジュール6は、更新後の現在記録アドレスAを前回記録アドレスBにコピーするようトレースメモリアドレス管理モジュール5に出力する(ステップS30)。このコピーにより、本記録が確定したトレースログのアドレスが前回記録アドレスBとしてバックアップされたことになる。
【0060】
一方、トレースログ仮記録処理時間Tが現在までにおいて最長ではないとき、更新タイミング制御モジュール6は、更新後の前回記録アドレスBを現在記録アドレスAにコピーするようトレースメモリアドレス管理モジュール5に出力する(ステップS40)。このコピーによりアドレスを戻して上書きを許容して、いままさに仮記録が完了したばかりのトレースログの仮記録を破棄するためである。
【0061】
すなわち、図2において、任意の1つのイベントが成立してトレースログの仮記録を開始し、さらに任意の1つのイベントが成立するまで現在記録アドレスAに対して記録を行い、図3において、任意の1つのイベントが成立してトレースログの仮記録を開始し、さらに任意の1つのイベントが成立するまでのトレースログ仮記録処理時間Tが現在までにおいて最長であるときのみ、更新後の現在記録アドレスAを前回記録アドレスBにコピーし、トレースログの記録を確定する。また、トレースログ仮記録処理時間Tが現在までにおいて最長ではないとき、更新後の前回記録アドレスBを現在記録アドレスAにコピーし、アドレスを戻すことにより、仮記録したトレースログを破棄へと進める。
【0062】
上記において、トレースログ仮記録処理時間Tが現在までにおいて最長であるときといっているが、記録されるトレースログの数が1つだけということにはならない。最長となるトレースログ仮記録処理時間Tが時間経過とともに長くなっていく。その都度の最長時間を見つけてはトレースログを仮記録している。結果として、トレースメモリ11には複数のトレースログが記録されていることになる。記録時刻があとのトレースログほどトレースログ仮記録処理時間Tが長いものとなっている。この様子を図4に示す。
【0063】
図4(a)はトレースログ仮記録処理時間Tの変遷を示し、図4(b)はトレースメモリ11に記録され残っているトレースログのトレースログ仮記録処理時間Tを示す。○印のトレースログが選択されてトレースメモリ11に残り、×印のトレースログは破棄されている。
【0064】
いま、動作の一例として、トレースログを記録すべきアドレスである現在記録アドレスAとして、アドレス〔0100〕が設定されているとする。そして、この現在記録アドレスA〔0100〕においてトレースメモリ11にトレースログL1が記録されたとする。記録されたので、アドレス〔0100〕がインクリメントされてアドレス〔0200〕になる。これで、次にトレースログを仮記録すべき記録先のアドレスの候補は、アドレス〔0200〕と1回前のアドレス〔0100〕となる。ここで、アドレス〔0200〕が更新後の現在記録アドレスAであり、アドレス〔0100〕が更新後の前回記録アドレスBである。次に更新後の現在記録アドレスAと前回記録アドレスBのいずれを設定するかは、トレースログ仮記録処理時間Tが現在までにおいて最長であるか否かの判断による。トレースログ仮記録処理時間Tが現在までにおいて最長であるとき更新後の現在記録アドレスAのアドレス〔0200〕が現在記録アドレスAとして設定され、トレースログ仮記録処理時間Tが現在までにおいて最長ではないときは更新後の前回記録アドレスBのアドレス〔0100〕が現在記録アドレスAとして設定される。更新後の現在記録アドレスAが現在記録アドレスAとして設定されたということは、前のアドレスがトレースログ記録の確定アドレスとされ、そこには上書きを許さないということを意味する。つまり、確定アドレスでの記録トレースログは、トレースログ仮記録処理時間Tが現在までにおいて最長のトレースログとして記録が確定されたものとなる。一方、更新後の前回記録アドレスBが現在記録アドレスAとして設定されたということは、そのアドレスにおいて上書きを許容するということであり、前に記録されていたトレースログは破棄されてもよいことを意味する。
【0065】
(a1)さて、トレースログL1について前者のトレースログ仮記録処理時間Tが現在までにおいて最長であるときで更新後の現在記録アドレスAのアドレス〔0200〕が現在記録アドレスAとして設定された場合、次のトレースログL2はその現在記録アドレスA〔0200〕においてトレースメモリ11に記録される。これで、トレースメモリ11にはトレースログL1とトレースログL2とが記録されていることになる。ただし、トレースログL2についてはまだトレースログ仮記録処理時間Tが現在までにおいて最長か否かの判断はしていないので、その記録は確定的なものとはなっていない。記録されたので、アドレス〔0200〕がインクリメントされてアドレス〔0300〕になる。
【0066】
(b1)一方、トレースログL1について後者のトレースログ仮記録処理時間Tが現在までにおいて最長ではないときで更新後の前回記録アドレスBのアドレス〔0100〕が現在記録アドレスAとして設定された場合、次のトレースログL2はその現在記録アドレスA〔0100〕においてトレースメモリ11に記録される。これで、トレースメモリ11のアドレス〔0100〕では、それまで記録されていたトレースログL1に対する上書きとしてトレースログL2が記録されることになる。すなわち、前に記録されていたトレースログL1は結果的に破棄されたことになる。記録されたので、アドレス〔0100〕がインクリメントされてアドレス〔0200〕になる。
【0067】
(a2)上記の(a1)の続きで、トレースログL2についてトレースログ仮記録処理時間Tが現在までにおいて最長であれば、更新後の現在記録アドレスAのアドレス〔0300〕が現在記録アドレスAとして設定され、こうなるとアドレス〔0200〕は現在記録アドレスAにはなりえないから、アドレス〔0200〕におけるトレースログL2の記録は確定したことになる。トレースメモリ11におけるトレースログ仮記録処理時間Tが現在までにおいて最長のトレースログは、トレースログL1とトレースログL2の2つとなる。
【0068】
(b2)上記の(b1)の続きで、トレースログL2についてトレースログ仮記録処理時間Tが現在までにおいて最長であれば、更新後の現在記録アドレスAのアドレス〔0200〕が現在記録アドレスAとして設定され、こうなるとアドレス〔0100〕は現在記録アドレスAにはなりえないから、アドレス〔0100〕におけるトレースログL2の記録は確定したことになる。トレースメモリ11におけるトレースログ仮記録処理時間Tが現在までにおいて最長のトレースログは、トレースログL2となる。
【0069】
以上のように、トレースログを仮記録する指示が活性化されると、そのトレースログは一旦は必ずトレースメモリ11に記録される。ただし確定ではなく、仮記録である。確定は、次のトレースログ仮記録処理時間Tが現在までにおいて最長か否かの判断に委ねられる。そして、確定するか破棄するかは、現在記録アドレスAの調整の処理においてなされる。すなわち、トレースログ仮記録処理時間Tが現在までにおいて最長のときは、現在記録アドレスAを更新後の現在記録アドレスA(一旦記録に伴ってインクリメントされたアドレス)とするとともに、仮記録を本記録として確定するために更新後の現在記録アドレスAを前回記録アドレスBにコピーする。トレースログ仮記録処理時間Tが現在までにおいて最長でないときは、現在記録アドレスAを更新後の前回記録アドレスBとする。このような方式が、本実施の形態の技術ポイントである。
【0070】
本形態のプログラムデバッグ装置を用いることで、任意の1つのイベントが成立して、さらに任意の1つのイベントが成立するまでの最長となるトレースログ仮記録処理時間Tが更新されたときのトレースログを本記録することができ、不要なトレースログを破棄することができる。
【0071】
多数にのぼるトレースログ群全体のうちからトレースログ仮記録処理時間Tが短時間側のトレースログ群を破棄し、トレースログ仮記録処理時間Tが長時間側のトレースログに絞り込んでトレースメモリに記録するようにしたので、トレースメモリ11の容量に制限がある状態でも、ソフトウェア上の問題の可能性の高い側のトレースログを集約的に記録することができる。その結果、問題の発見および解決を迅速・容易化する上できわめて有効な対策となる。
【0072】
また、記録するトレースログを絞り込むので、トレースメモリ11の容量の過大な増加を回避することが可能となる。
【0073】
(実施の形態2)
本発明の実施の形態2にかかわるプログラムデバッグ装置は、トレースメモリ11に記録された複数のトレースログのうちからトレースログ仮記録処理時間Tが最も長い(最長中の最長の)トレースログを1つ指定できるように構成されたもので、さらにトレース開始アドレスを備えたものである。
【0074】
図5は本発明の実施の形態2におけるプログラムデバッグ装置の構成を示すブロック図である。図5において、実施の形態1の図1におけるのと同じ符号は同一構成要素を指している。本実施の形態に特有の構成は、次のとおりである。トレースメモリアドレス管理モジュール5において、トレースメモリ11のアドレスについて、さらに前回記録アドレスBをバックアップコピーしておくためのトレース開始アドレスCを保持している。前回記録アドレスBをトレース開始アドレスCにコピーするタイミングは、トレースログ仮記録処理時間Tが現在までにおいて最長となった場合である。更新タイミング制御モジュール6は、前回記録アドレスBをトレース開始アドレスCにコピーするタイミングを制御できる機能をさらに備えている。その他の構成については、実施の形態1と同様であるので説明を省略する。
【0075】
図6は実施の形態2のプログラムデバッグ装置のトレースメモリ11のアドレスを操作する動作を示すフローチャートであり、これは実施の形態1の場合の図3のフローチャートにステップS21を追加したものに相当する。実施の形態1の場合の図2のフローチャートは本実施の形態に踏襲される。
【0076】
ステップS21において、更新タイミング制御モジュール6は前回記録アドレスBをトレース開始アドレスCにコピーするようトレースメモリアドレス管理モジュール5に出力する。すなわち、前回記録アドレスBがコピーで変化してしまう前に、前回記録アドレスBをトレース開始アドレスCにコピーしてバックアップしておき、トレースログを仮記録したときのトレース開始アドレスCを確保する。
【0077】
いま、トレースログL1が現在記録アドレスA=0100に記録され、次いで現在記録アドレスAが更新されて、現在記録アドレスA=0200になったとする。すると、前回記録アドレスBは、繰り替わって、B=0100となる。このトレースログL1のトレースログ仮記録処理時間Tが現在までにおいて最長相当であれば、前回記録アドレスB=0100をトレース開始アドレスCにコピーするので、トレース開始アドレスC=0100となる。これは、現在のトレースログ仮記録処理時間Tが現在までにおいて最長のトレースログL1の格納アドレスが〔0100〕であることを意味している。次いで、更新後の現在記録アドレスA=0200を前回記録アドレスB(=0100)にコピーして更新するので、前回記録アドレスB=0200となる。
【0078】
次にトレースログL2が現在記録アドレスA=0200に記録され、次いで現在記録アドレスAが更新されて、現在記録アドレスA=0300になったとする。このトレースログL2のトレースログ仮記録処理時間Tが現在までにおいて最長相当であれば、前回記録アドレスB=0200をトレース開始アドレスCにコピーして更新するので、トレース開始アドレスC=0200となる。これは、現在のトレースログ仮記録処理時間Tが現在までにおいて最長のトレースログL2の格納アドレスが〔0200〕であることを意味している。次いで、更新後の現在記録アドレスA=0300を前回記録アドレスB(=0200)にコピーして更新するので、前回記録アドレスB=0300となる。
【0079】
以上で明らかなように、仮記録から本記録として確定記録されたトレースログ群全体のうち最終に確定記録された1つのトレースログの記録先アドレスがトレース開始アドレスCに保持されていることになる。
【0080】
本実施の形態によれば、トレースメモリ11に記録されているトレースログ群全体のうちでトレースログ仮記録処理時間Tが現在までにおいて最長の1つの(最長中の最長の)トレースログの記録先アドレスを特定することができる。その結果として、問題箇所のいち早い発見と解決を実現することができる。
【0081】
なお、トレース開始アドレスCを、C1,C2,…Cnとn個保持する構成も考えられる。トレースログ仮記録処理時間Tが現在までにおいて最長となる第1回目において、そのときの確定記録のアドレスをトレース開始アドレスC1に記録する。
【0082】
トレースログ仮記録処理時間Tが現在までにおいて最長となる第2回目において、第1回目の確定記録のトレース開始アドレスC1にあるアドレスをトレース開始アドレスC2にコピーし、現在の確定記録のアドレスをトレース開始アドレスC1に記録する。
【0083】
同様に、トレースログ仮記録処理時間Tが現在までにおいて最長となる第3回目において、第1回目の確定記録のトレース開始アドレスC2にあるアドレスをトレース開始アドレスC3にコピーし、第2回目の確定記録のトレース開始アドレスC1にあるアドレスをトレース開始アドレスC2にコピーし、現在の確定記録のアドレスをトレース開始アドレスC1に記録する。
【0084】
このような処理を繰り返すと、トレースログ仮記録処理時間Tが長いトレースログとして、最長のものから次に長いものへと順次にn個分のトレースログについてそれぞれの記録先アドレスを特定することができる。したがって、最長もののみ1つだけのトレースログでは問題を解析できない場合でも、n番目までのトレースログを解析することにより、問題箇所の早急な発見と解決を実現することができる。
【0085】
なお、トレースメモリ11を複数個備え、各トレースメモリ11にアドレスを振り分けた構成とすることも可能である。
【0086】
(実施の形態3)
本発明の実施の形態3にかかわるプログラムデバッグ装置は、更新タイミング制御モジュール6において取り扱うべき時間情報について、それを生成する時間測定モジュールを外部に構成したものである。
【0087】
図7は本発明の実施の形態3におけるプログラムデバッグ装置の構成を示すブロック図である。図7において、実施の形態1の図1におけるのと同じ符号は同一構成要素を指している。本実施の形態においては、時間測定モジュール7が追加されている。この時間測定モジュール7は、イベント制御モジュール2が出力するイベント成立状態を入力とし、イベント成立間の最長時間を測定することが可能で、最長時間を更新したかしていないかを判別した最長時間更新情報を更新タイミング制御モジュール6に出力するように構成されている。この最長時間更新情報を受け取る更新タイミング制御モジュール6は、入力した最長時間更新情報に基づいて、トレースメモリアドレス管理モジュール5が保持する現在記録アドレスAと前回記録アドレスBとの間のコピー処理のタイミングを制御できる構成になっている。すなわち、図3のフローチャートのステップS20において、トレースログ仮記録処理時間Tが現在までにおいて最長かどうかを最長時間更新情報により判定できる。その他の構成および動作については、実施の形態1と同様であるので説明を省略する。本実施の形態のプログラムデバッグ装置の基本的動作は、実施の形態1の場合の図2、図3のフローチャートを踏襲するものである。
【0088】
なお、更新タイミング制御モジュール6は、時間測定機能を含んだ構成でも実現できる。
【0089】
なお、更新タイミング制御モジュール6は、イベント制御モジュール2を含んだ構成でも実現できる。
【0090】
なお、更新タイミング制御モジュール6は、時間測定機能とイベント制御モジュール2を含んだ構成でも実現できる。
【0091】
本実施の形態によれば、図21の従来技術のトレース機能を搭載したプログラムデバッグ装置において、時間測定機能を追加したものに相当し、資源の再利用等の側面において、従来技術のプログラムデバッグ装置への応用展開を容易なものにする。
【0092】
(実施の形態4)
本発明の実施の形態4にかかわるプログラムデバッグ装置は、更新タイミング制御をトレースログが付帯する時刻情報に基づいて行うように構成されたものである。
【0093】
図8は本発明の実施の形態4におけるプログラムデバッグ装置の構成を示すブロック図である。図8において、実施の形態1の図1におけるのと同じ符号は同一構成要素を指している。本実施の形態においては、更新タイミング制御モジュール6は、時刻情報を付帯するトレースログを入力し、入力したトレースログの時刻情報に基づいて、最長時間を更新したか更新していないかを判別し、その判別結果である最長時間更新トレース情報をトレースメモリアドレス管理モジュール5に与えるように構成されている。トレースメモリアドレス管理モジュール5は、入力した最長時間更新トレース情報に基づいて、現在記録アドレスAと前回記録アドレスBとの間のコピー処理のタイミングを制御するように構成されている。その他の構成については、実施の形態1の場合と同様であるので、説明を省略する。
【0094】
図9は時刻情報を付帯するトレースログの一例であり、個々のトレースログは、それぞれに個別の時刻情報を付帯している。
【0095】
本実施の形態のプログラムデバッグ装置の基本的動作は、実施の形態1の場合の図2、図3のフローチャートを踏襲するものである。ただし、図3のステップS10の動作が図10のフローチャートに変更される。
【0096】
図10はトレースログ仮記録処理時間Tが現在までにおいて最長かどうかをトレースログの時刻情報を用いて判別するフローチャートである。
【0097】
最初に、トレースログの仮記録を開始したとき、トレースログの時刻情報を取得する(ステップS51)。
【0098】
次に、トレースログの仮記録を終了したとき、トレースログの時刻情報を取得する(ステップS52)。
【0099】
次に、トレースログの仮記録を開始したときのトレースログの時刻情報と仮記録を終了したときのトレースログの時刻情報からトレースログ仮記録処理時間Tを計算する(ステップS53)。
【0100】
次に、今回計算したトレースログ仮記録処理時間Tを前回のトレースログ仮記録処理時間Tと比較して、今回のトレースログ仮記録処理時間Tが現在までにおいて最長かどうかを判別する(ステップS54)。
【0101】
次に、トレースログ仮記録処理時間Tが現在までにおいて最長であるとき、トレースログ仮記録処理時間Tを前回トレースログ仮記録処理時間Tとして保存する。これが最長時間更新トレース情報である(ステップS55)。
【0102】
すなわち、図3のフローチャートのステップS20において、トレースログ仮記録処理時間Tが現在までにおいて最長かどうかの判別を、図10のステップS54によってトレースログ仮記録処理時間Tが現在までにおいて最長かどうかの判別で実現することができる。
【0103】
なお、トレースログに時刻情報がない場合においても、更新タイミング制御モジュール6が、トレースメモリ11にトレースログの仮記録を開始した時点の検出と、トレースログの仮記録を終了した時点の検出を行い、トレースログ仮記録処理時間Tを割り出して、トレースログ仮記録処理時間Tが現在までにおいて最長かどうかを判別するように構成してもよい。
【0104】
本実施の形態によれば、時間測定モジュール7を含まないプログラムデバッグ装置においても、本発明が解決しようとする課題を解決することができる。
【0105】
(実施の形態5)
本発明の実施の形態5にかかわるプログラムデバッグ装置は、トレースログとイベントに基づいて更新タイミング制御を行うように構成されたものである。
【0106】
図11は本発明の実施の形態5におけるプログラムデバッグ装置の構成を示すブロック図である。図11において、実施の形態1の図1におけるのと同じ符号は同一構成要素を指している。本実施の形態においては、更新タイミング制御モジュール6は、トレースログを入力するとともに、イベント制御モジュール2が管理するイベントを入力し、これら入力したトレースログとイベントに基づいて、最長時間を更新したか更新していないかを判別できる最長時間更新イベントトレース情報を生成し、その最長時間更新イベントトレース情報をトレースメモリアドレス管理モジュール5に渡すように構成されている。
【0107】
トレースメモリアドレス管理モジュール5は、入力した最長時間更新イベントトレース情報に基づいて、現在記録アドレスAと前回記録アドレスBとの間のコピー処理のタイミングを制御するように構成されている。
【0108】
その他の構成については、実施の形態1と同様であるので、説明を省略する。本実施の形態のプログラムデバッグ装置の基本的動作は、実施の形態1の場合の図2、図3のフローチャートを踏襲するものである。ただし、図3のステップS10の動作が図12のフローチャートに変更される。
【0109】
図12はトレースログ仮記録処理時間Tが現在までにおいて最長かどうかをトレースログとイベントを用いて判別するフローチャートである。
【0110】
最初に、トレースログの仮記録を開始する任意の1つのイベントとトレースログを比較し、一致したときの時刻情報を取得する(ステップS61)。
【0111】
次に、トレースログの仮記録を終了するさらに任意の1つのイベントとトレースログを比較し、一致したときの時刻情報を取得する(ステップS62)。
【0112】
次に、ステップS61で取得した時刻情報とステップS62で取得した時刻情報より、トレースログ仮記録処理時間Tを計算する(ステップS63)。
【0113】
次に、計算したトレースログ仮記録処理時間Tと前回トレースログ仮記録処理時間Tと比較して、トレースログ仮記録処理時間Tが現在までにおいて最長かどうかを判別する(ステップS64)。
【0114】
次に、トレースログ仮記録処理時間Tを前回トレースログ仮記録処理時間Tとして保存する(ステップS65)。
【0115】
すなわち、図3のフローチャートのステップS10,S20における、トレースログ仮記録処理時間Tが現在までにおいて最長かどうかの判別を、図12のステップS61〜S65によって行うことができる。
【0116】
なお、トレースログに時刻情報がない場合においても、更新タイミング制御モジュール6が時間を管理するようにして、トレースログ仮記録処理時間Tが現在までにおいて最長かどうかを判別するように構成することも可能である。
【0117】
本実施の形態によれば、時間測定モジュール7を含まないプログラムデバッグ装置においても、本発明が解決しようとする課題を解決することができる。
【0118】
(実施の形態6)
本発明の実施の形態6にかかわるプログラムデバッグ装置は、更新タイミング制御モジュール6の機能の有効化/無効化を行うように構成されたもので、更新タイミングマスク制御モジュールを備えたものである。
【0119】
図13は本発明の実施の形態6におけるプログラムデバッグ装置の構成を示すブロック図である。図13において、実施の形態1の図1におけるのと同じ符号は同一構成要素を指している。本実施の形態においては、更新タイミング制御モジュール6が行うところの現在記録アドレスAの更新制御について有効/無効を設定する更新タイミングマスク制御モジュール8が追加されている。更新タイミングマスク制御モジュール8において有効が設定されたときは、更新タイミング制御モジュール6はその機能が有効化され、逆に、更新タイミングマスク制御モジュール8において無効が設定されたときは、更新タイミング制御モジュール6はその機能が無効化される。この現在記録アドレスAの更新制御についての有効/無効の設定はユーザが行う。その他の構成については、実施の形態1と同様であるので、説明を省略する。
【0120】
図14は実施の形態6のプログラムデバッグ装置においてトレースメモリ11のアドレスを操作する動作を示すフローチャートである。実施の形態1の場合の図3のフローチャートのステップS20がステップS22に置き換わっている。実施の形態1の場合の図2のフローチャートは本実施の形態に踏襲される。
【0121】
最初に、任意の1つのイベントが成立してトレースログの仮記録を開始してから、さらに任意の1つのイベントが成立してトレースログの仮記録を終了したとき、トレースログの仮記録を開始してから終了するまでのプログラムのトレースログ仮記録処理時間Tが現在までにおいて最長か否かを判別する(ステップS10)。
【0122】
そして、トレースログ仮記録処理時間Tが現在までにおいて最長で、かつ現在記録アドレスAの更新制御が有効のときと、そうでないときとに応じて処理を分岐する(ステップS22)。
【0123】
次に、トレースログ仮記録処理時間Tが現在までにおいて最長で、かつ現在記録アドレスAの更新制御が有効のときは、トレースログ記録確定制御手段4における更新タイミング制御モジュール6は、更新後の現在記録アドレスAを前回記録アドレスBにコピーするようトレースメモリアドレス管理モジュール5に出力する(ステップS30)。このコピーにより、本記録が確定したトレースログのアドレスが前回記録アドレスBとしてバックアップされたことになる。
【0124】
一方、トレースログ仮記録処理時間Tが現在までにおいて最長ではないとき、または、現在記録アドレスAの更新制御が無効のときは、更新タイミング制御モジュール6は、更新後の前回記録アドレスBを現在記録アドレスAにコピーするようトレースメモリアドレス管理モジュール5に出力する(ステップS40)。このコピーにより、アドレスを戻して上書きを許容して、いままさに仮記録が完了したばかりのトレースログの仮記録を破棄する。
【0125】
すなわち、現在記録アドレスAの更新制御を有効にしたときのアドレスの操作は、図3のフローチャートと同様のものとなる。
【0126】
一方、現在記録アドレスAの更新制御を無効にしたときは、必ず更新後の前回記録アドレスBを現在記録アドレスAにコピーして、現在記録アドレスAを戻すことにより、仮記録したトレースログを破棄する。
【0127】
プログラム実行直後は、最長となるトレースログ仮記録処理時間Tが更新されやすい。そこで、このようなトレースログは破棄することにすればよい。本実施の形態によれば、ソフトウェア上の問題を再現するパターンがある程度特定できている場合に、再現するパターンを開始する前に、現在記録アドレスAの更新制御を有効にして、必要なトレースログのみを取得することができる。これによって問題箇所の早急な発見と解決を実現することができる。
【0128】
(実施の形態7)
本発明の実施の形態7にかかわるプログラムデバッグ装置は、ソフトウェア上の問題箇所の早急な発見と解決を図るべく、トレースログ仮記録処理時間Tの最長のときの波形を出力するように構成されたもので、外部トリガ出力モジュールを備えたものである。
【0129】
図15は本発明の実施の形態7におけるプログラムデバッグ装置の構成を示すブロック図である。図15において、実施の形態1の図1におけるのと同じ符号は同一構成要素を指している。本実施の形態に特有の構成は、外部トリガ出力モジュール9をさらに備えていることである。更新タイミング制御モジュール6は、現在記録アドレスAの更新/非更新をアドレス更新情報として外部トリガ出力モジュール9に出力する機能をさらに備えるものとして構成されている。外部トリガ出力モジュール9は、アドレス更新情報を任意の波形で外部へ出力するように構成されている。その他の構成については、実施の形態1と同様であるので、説明を省略する。
【0130】
図16は実施の形態7のプログラムデバッグ装置においてトレースメモリ11のアドレスを操作する動作を示すフローチャートである。実施の形態1の場合の図3のフローチャートのステップS30が図16のステップS31に置き換わっており、さらにステップS32が追加されている。実施の形態1の場合の図2のフローチャートは本実施の形態に踏襲される。
【0131】
最初に、任意の1つのイベントが成立してトレースログの仮記録を開始してから、さらに任意の1つのイベントが成立してトレースログの仮記録を終了したとき、トレースログの仮記録を開始してから終了するまでのプログラムのトレースログ仮記録処理時間Tが現在までにおいて最長か否かを判別する(ステップS10)。
【0132】
そして、トレースログ仮記録処理時間Tが現在までにおいて最長か否かに応じて処理を分岐する(ステップS20)。
【0133】
次に、トレースログ仮記録処理時間Tが現在までにおいて最長のとき、トレースログ記録確定制御手段4における更新タイミング制御モジュール6は、更新後の現在記録アドレスAを前回記録アドレスBにコピーするようトレースメモリアドレス管理モジュール5に出力するとともに、同時に外部トリガ出力モジュール9にアドレス更新情報として出力する(ステップS31)。このコピーにより、本記録が確定したトレースログのアドレスが前回記録アドレスBとしてバックアップされたことになる。
【0134】
次いで外部トリガ出力モジュール9は、アドレス更新情報により、所定の波形を出力する(ステップS32)。この点が本実施の形態のポイントである。
【0135】
一方、トレースログ仮記録処理時間Tが現在までにおいて最長ではないとき、更新タイミング制御モジュール6は、更新後の前回記録アドレスBを現在記録アドレスAにコピーするようトレースメモリアドレス管理モジュール5に出力する(ステップS40)。このコピーにより、アドレスを戻して上書きを許容して、いままさに仮記録が完了したばかりのトレースログの仮記録を破棄する。
【0136】
本実施の形態によれば、最長となるトレースログ仮記録処理時間Tが更新されたときに、外部トリガ出力モジュール9が外部へ任意の波形を出力することができる。これにより、トレースログ仮記録処理時間Tの最長のときのアクチュエータ等の出力状態等の波形をオシロスコープ等によって取得することができ、問題発生時の波形とトレースログを解析することにより、問題箇所の早急な発見と解決を実現することができる。
【0137】
(実施の形態8)
本発明の実施の形態8にかかわるプログラムデバッグ装置は、ソフトウェア上の問題箇所の早急な発見と解決を図るべく、最長となるトレースログ仮記録処理時間Tが更新されたときにCPU1を停止させるように構成されたもので、ブレーク制御モジュールを備えたものである。
【0138】
図17は本発明の実施の形態8におけるプログラムデバッグ装置の構成を示すブロック図である。図17において、実施の形態1の図1におけるのと同じ符号は同一構成要素を指している。本実施の形態に特有の構成は、ブレーク制御モジュール10をさらに備えていることである。更新タイミング制御モジュール6は、現在記録アドレスAの更新/非更新を示すアドレス更新情報を出力できる機能をさらに備えている。ブレーク制御モジュール10は、アドレス更新情報とCPU1の状態により、CPU1を停止させるように構成されている。その他の構成については、実施の形態1と同様であるので、説明を省略する。
【0139】
図18は実施の形態8のプログラムデバッグ装置においてトレースメモリ11のアドレスを操作する動作を示すフローチャートである。実施の形態1の場合の図3のフローチャートのステップS30が図18のステップS33に置き換わっており、さらにステップS34が追加されている。実施の形態1の場合の図2のフローチャートは本実施の形態に踏襲される。
【0140】
最初に、任意の1つのイベントが成立してトレースログの仮記録を開始してから、さらに任意の1つのイベントが成立してトレースログの仮記録を終了したとき、トレースログの仮記録を開始してから終了するまでのプログラムのトレースログ仮記録処理時間Tが現在までにおいて最長か否かを判別する(ステップS10)。
【0141】
そして、トレースログ仮記録処理時間Tが現在までにおいて最長か否かに応じて処理を分岐する(ステップS20)。
【0142】
次に、トレースログ仮記録処理時間Tが現在までにおいて最長のとき、トレースログ記録確定制御手段4における更新タイミング制御モジュール6は、更新後の現在記録アドレスAを前回記録アドレスBにコピーするようトレースメモリアドレス管理モジュール5に出力するとともに、同時にブレーク制御モジュール10にアドレス更新情報として出力する(ステップS33)。このコピーにより、本記録が確定したトレースログのアドレスが前回記録アドレスBとしてバックアップされたことになる。
【0143】
次いでブレーク制御モジュール10はCPU1を停止させる(ステップS34)。この点が本実施の形態のポイントである。
【0144】
一方、トレースログ仮記録処理時間Tが現在までにおいて最長ではないとき、更新タイミング制御モジュール6は、更新後の前回記録アドレスBを現在記録アドレスAにコピーするようトレースメモリアドレス管理モジュール5に出力する(ステップS40)。このコピーにより、アドレスを戻して上書きを許容して、いままさに仮記録が完了したばかりのトレースログの仮記録を破棄する。
【0145】
本実施の形態によれば、最長となるトレースログ仮記録処理時間Tが更新されたときにCPU1を停止させることができる。これにより、トレースログ仮記録処理時間Tが最長のときのトレースログを用いてプログラムのデバッグを行うことができ、問題発生時の変数の状態や処理の状態をデバッグすることにより、問題箇所の早急な発見と解決を実現することができる。
【0146】
(実施の形態9)
本発明の実施の形態9はエミュレータシステムにかかわるものである。
【0147】
図19は本発明にかかわるエミュレータシステム20とその周辺の構成を示すブロック図である。
【0148】
エミュレータシステム20は、ホストIF回路21、エミュレーション機能22、エミュレーションROM/RAM23、マイクロコンピュータ周辺回路24および上述した実施の形態1〜8のいずれかのプログラムデバッグ装置Xから構成されている。30はパソコン・ソフト、40はユーザターゲットシステムである。
【0149】
ホストIF回路21は、パソコン・ホスト30からデバッグの指令を受け、デバッグしている状態や結果をパソコン・ホスト30に送信することができる。トレースログの送信も含まれる。
【0150】
プログラムデバッグ装置Xは、パソコン・ホスト30からデバッグの指令を受け、内部のCPU1は、エミュレーション機能22、エミュレーションROM/RAM23、マイクロコンピュータ周辺回路24の資源を利用してエミュレーションを行う。エミュレーション中、マイクロコンピュータ周辺回路24によりユーザターゲットシステム40を制御し、デバッグする。
【0151】
すなわち、エミュレータシステム20により、ユーザターゲットシステム40をデバッグ中、最長となるトレースログ仮記録処理時間Tが更新されたときのトレースログを取得し、パソコン・ホスト30によりトレースログを解析することによって、問題箇所の早急な発見と解決を実現することができる。
【産業上の利用可能性】
【0152】
本発明のプログラムデバッグ装置は、ソフトウェア上の問題を含んでいる可能性が高いイベントに関係するトレースログのトレースメモリへの記録において、トレースログを効果的に絞り込み、再現性が低く解析が難しい問題の特定を迅速・容易化する上で有用である。
【図面の簡単な説明】
【0153】
【図1】本発明の実施の形態1におけるプログラムデバッグ装置の構成を示すブロック図
【図2】本発明の実施の形態1のプログラムデバッグ装置におけるトレースログ仮記録の動作を示すフローチャート
【図3】本発明の実施の形態1のプログラムデバッグ装置におけるトレースメモリのアドレス操作のフローチャート
【図4】本発明の実施の形態1におけるトレースログ仮記録処理時間の長さの変遷の様子の説明図
【図5】本発明の実施の形態2におけるプログラムデバッグ装置の構成を示すブロック図
【図6】本発明の実施の形態2のプログラムデバッグ装置における記録先アドレスの操作のフローチャート
【図7】本発明の実施の形態3におけるプログラムデバッグ装置の構成を示すブロック図
【図8】本本発明の実施の形態4におけるプログラムデバッグ装置の構成を示すブロック図
【図9】本発明の実施の形態4における時刻情報を付帯するトレースログの一例を示す図
【図10】本発明の実施の形態4におけるトレースログ仮記録処理時間の判別のフローチャート
【図11】本発明の実施の形態5におけるプログラムデバッグ装置の構成を示すブロック図
【図12】本発明の実施の形態5におけるトレースログ仮記録処理時間の判別のフローチャート
【図13】本発明の実施の形態6におけるプログラムデバッグ装置の構成を示すブロック図
【図14】本発明の実施の形態6におけるトレースメモリのアドレス操作のフローチャート
【図15】本発明の実施の形態7におけるプログラムデバッグ装置の構成を示すブロック図
【図16】本発明の実施の形態7におけるトレースメモリのアドレス操作のフローチャート
【図17】本発明の実施の形態8におけるプログラムデバッグ装置の構成を示すブロック図
【図18】本発明の実施の形態8におけるトレースメモリのアドレス操作のフローチャート
【図19】本発明にかかわるエミュレータシステムとその周辺の構成を示すブロック図
【図20】従来技術のトレース機能とイベント機能を用いたプログラムデバッグ装置の構成を示すブロック図
【図21】従来技術の時間測定機能を追加したプログラムデバッグ装置の構成を示すブロック図
【符号の説明】
【0154】
1 CPU
2 イベント制御モジュール(イベント制御手段)
3 トレース制御モジュール(トレース制御手段)
4 トレースログ記録確定制御手段
5 トレースメモリアドレス管理モジュール(トレースメモリアドレス管理手段)
6 更新タイミング制御モジュール(更新タイミング制御手段)
7 時間測定モジュール(時間測定手段)
8 更新タイミングマスク制御モジュール(更新タイミングマスク制御手段)
9 外部トリガ出力モジュール(外部トリガ出力手段)
10 ブレーク制御モジュール(ブレーク制御手段)
11 トレースメモリ
20 エミュレータシステム
21 ホストIF回路
22 エミュレーション機能
23 エミュレーションROM/RAM
24 マイクロコンピュータ周辺回路
30 パソコン・ホスト
40 ユーザターゲットシステム
A 現在記録アドレス
B 前回記録アドレス
C トレース開始アドレス
X プログラムデバッグ装置
【技術分野】
【0001】
本発明はトレース機能とイベント機能を備えたプログラムデバッグ装置にかかわり、特には多重割り込み等を多用した製品のプログラムのデバッグに有効なプログラムデバッグ装置に関する。
【背景技術】
【0002】
近年、組み込みプログラムの開発環境等において、プログラムデバッグ装置であるエミュレータやオンボードデバッガが広く利用されている。組み込みプログラムにおいては、高機能化に伴うソフトウェアの肥大化や複雑化が進むと同時に、高い品質のソフトウェアが望まれている。特にカーナビゲーションや携帯電話のソフトウェアにおいては、高い機能を実現するために多重割り込み等が多用され、CPU(Central Processing Unit)の機能を最大限に利用しているため、割り込み処理時間の確実な設計やメモリアクセスの排他性の設計が必要である。
【0003】
確実な設計については、ソフトウェアの肥大化や複雑化が進むことで難解な作業となり、割り込み処理時間の確認やメモリアクセスの排他性に問題が発生しがちで、プログラムデバッグ装置のトレース機能とイベント機能を用いて解析しなければならない状況に陥ることがよくある。このような問題に直面したときは、プログラムデバッグ装置のトレース機能とイベント機能を用いて取得したトレースログ(プログラムを実行した処理の記録)を解析する。
【0004】
図20は従来技術のトレース機能とイベント機能を備えたプログラムデバッグ装置の構成を示すブロック図である。このプログラムデバッグ装置は、CPU1、イベント制御モジュール2、トレース制御モジュール3およびトレースメモリ11で構成されている。
【0005】
CPU1は、プログラムを実行する。イベント制御モジュール2は、CPU1がプログラムを実行中に実行した処理の状態を監視し、イベントとして設定した状態と等価であるか非等価であるかを判別し、判別した結果をイベント成立状態としてトレース制御モジュール3に出力する。トレース制御モジュール3は、トレースログを取得し、イベント成立状態が開始イベントや終了イベントと等価であるかを判別してトレース記録実行情報3aを作成し、トレースログ記録の指示があったときに、トレースログをトレースメモリ11に記録する。
【0006】
このプログラムデバッグ装置を用いて、ソフトウェア上の問題があると推測できる箇所に開始イベントと終了イベントを設定し、開始イベントから終了イベントまでのトレースログを取得し、トレースログを解析する。このようにイベントによって問題があると推測できる箇所に絞り、トレースメモリ11に記録するトレースログを取得し、トレースログを解析する。以上の処理を繰り返し、最終的に問題の発生箇所を特定する。
【0007】
一般的に、開始イベントから終了イベントまでの処理時間が長いほど、ソフトウェア上の問題が大きいイベントであると考えられる。開始イベントから終了イベントまでの処理時間が最長のときは、問題が最も大きいイベントであり、そのようなイベントを解析することが早期の問題解決に有効であると考えられる。
【0008】
イベント成立間の最長時間を測定する方法は、特許文献1において提案されている。また、トレースログの記録方法については、特許文献2で提案されている。
【特許文献1】特開平3−92940号公報
【特許文献2】特開平5−241878号公報
【発明の開示】
【発明が解決しようとする課題】
【0009】
特許文献2の方法によれば、開始イベントから終了イベントまでのトレースログを累積して記録することができるが、開始イベントから終了イベントまでの処理時間が最長であるときのトレースログに絞り込むことができない。この処理時間が最長であるときとは、割り込みが多重に発生した場合や、想定外の割り込みが発生した場合や、処理量が異常に多い場合や、複数のタスクが変数をライトアクセスした結果、排他性の問題が発生しタスクの処理時間が異常に長くなる場合等を想定している。割り込みが入らない状態であれば、処理時間が短く、問題が発生しないことが多い。
【0010】
このことを、図20の時間測定機能を追加した図21に示すプログラムデバッグ装置で説明する。時間測定モジュール7は、イベント成立状態が開始イベントや終了イベントと等価であるかを判別して時間測定を行い、すでに保持している現在までにおいて最長の処理時間と比較し、測定時間の方が長い場合には、測定時間を最長の処理時間として更新し、保持する。時間測定モジュール7は、トレース制御モジュール3とは独立して動作する。一方でトレース制御モジュール3はトレースログを蓄積し、他方で時間測定モジュール7が開始イベントから終了イベントまでの最長の処理時間を測定し、この動作を繰り返す。
【0011】
長時間使用するようなシステムや再現性の低いソフトウェア上の問題を解析する場合、CPU1を長時間実行させてトレースログを蓄積する。しかし、蓄積されたトレースログが膨大なものとなるため、トレースログの解析自体が難しく、多くの時間がかかる。さらに、トレースメモリ11の容量に限りがあるため、トレースログを記録する領域をロールオーバーしてトレースログが上書きされ、解析できないことが多発している。このような理由により、想定以上に時間がかかったときのトレースログを特定することは現実的には不可能である。割り込みが多重に発生した場合や想定外の割り込みが発生し、想定していた以上に時間がかかったときには、一層困難となる。
【0012】
一例として、トレースログのデータの1つの単位が20バイトであり、トレースを取得開始して終了するまでのトレースログのデータ数の平均が5,000個ある場合、トレースを取得開始して終了するまでのトレースログのデータサイズは100,000バイトとなる。さらにトレースを取得開始して終了するまでのサイクルが1秒に10回実行され、トレースメモリ11の容量が1,000,000バイトである場合、記録できるトレースログはたかだか約1秒間のデバッグ分でしかない。このような不都合の原因として、開始イベントから終了イベントまでの処理時間が最長のときのトレースログに絞り込むことができていないということがある。
【0013】
本発明は、このような事情に鑑みて創作したものであり、ソフトウェア上の問題の早期解決を図るべく、トレースログの記録においてトレースログの効果的な絞り込みを行い、もって、再現性が低く解析が難しい問題の特定を迅速・容易化することを目的としている。
【課題を解決するための手段】
【0014】
(1)本発明によるプログラムデバッグ装置は、
プログラムを実行するCPUと、
前記CPUによるプログラム実行処理の任意状態を定義するイベントを管理し、前記CPUによるプログラム実行処理の状態と比較して等価・非等価の判別結果であるイベント成立状態を出力するイベント制御手段と、
前記CPUによるプログラム実行処理のトレースログを記録しておくためのトレースメモリと、
前記イベント制御手段による前記イベント成立状態が有効のときに前記CPUによるプログラム実行処理のトレースログを前記トレースメモリに仮記録するトレース制御手段と、
前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長か否かに応じて、前記トレースメモリにおける前記トレースログの仮記録を本記録として確定するか破棄するかを制御するトレースログ記録確定制御手段とを備えたものである。
【0015】
この構成において、イベント制御手段は、CPUによるプログラム実行処理を監視し、これをあらかじめ管理しているイベントと比較して等価か非等価を判別し、等価であるときはイベント成立状態を有効にし、非等価であるときはイベント成立状態を無効にし、トレース制御手段に通知する。イベント成立状態を受け取ったトレース制御手段は、イベント成立状態が有効のときにCPUによるプログラム実行処理のトレースログをトレースメモリに仮記録し、仮記録が済んだので現在記録アドレスを更新する。次いで、トレースログ記録確定制御手段は、トレース制御手段によるトレースログの仮記録に要したトレースログ仮記録処理時間が現在までにおいて最長か否か(前回仮記録時よりも長いか否か)に応じて、トレースメモリにおけるトレースログの仮記録を本記録として確定するか破棄するかを制御する。すなわち、トレースログはイベント成立状態が有効でありさえすればとりあえずはトレースメモリに一旦記録する(仮記録)。その上で、トレースログ仮記録処理時間が現在までにおいて最長か否かに応じて選択・破棄を行い、トレースログを絞り込む。トレースログの仮記録に要したトレースログ仮記録処理時間が現在までにおいて最長のときは仮記録を本記録として確定し、トレースログ仮記録処理時間が最長でないときは仮記録を破棄する。破棄することにより、トレースメモリに残されるトレースログの数を絞り込むことが可能となる。なお、「現在までにおいて最長」というのは、実態としては「前回よりも長い」ということであり、ただ1つということを意味するものではない。トレースメモリに残されるトレースログは、トレースログ仮記録処理時間が比較的長いものであり、より重大なソフトウェア上の問題を含んでいる可能性が高いイベントに関係するトレースログである。したがって、このような絞り込みによってトレースメモリに残されたトレースログを解析すれば、最終的な問題発生箇所の特定を迅速・容易に進めることが可能となる。また、記録するトレースログの絞り込みは、トレースメモリの容量の過大な増加を回避する上でも有効である。
【0016】
(2)上記構成のプログラムデバッグ装置において、前記トレースログ記録確定制御手段は、現在記録アドレスと前回記録アドレスを管理するもので、前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長のときは、前記トレースメモリにおける次の現在記録アドレスとして更新後の現在記録アドレスを設定し、前記トレースログ仮記録処理時間が現在までにおいて最長でないときは、次の現在記録アドレスとして前回記録アドレスを設定することにより、現在記録アドレスの調整を行うトレースメモリアドレス管理手段を備えているという態様がある。
【0017】
トレースログの仮記録に要したトレースログ仮記録処理時間が現在までにおいて最長であれば、次の現在記録アドレスとして更新後の現在記録アドレスを設定する。すると、次のトレースログが記録されることになるのは、更新後の現在記録アドレスにおいてであり、1回前に仮記録が行われたアドレスである前回記録アドレスにおいてではないので、1回前に仮記録が行われたアドレスに対する上書きは行われることはなく、結果として、1回前に仮記録が行われたアドレスにおけるトレースログの記録は本記録として確定されたものとなる。一方、トレースログの仮記録に要したトレースログ仮記録処理時間が現在までにおいて最長でないのであれば、次の現在記録アドレスとして前回記録アドレスを設定する。すると、次のトレースログが記録されることになるのは、1回前に仮記録が行われたアドレスである前回記録アドレスにおいてであり、その1回前に仮記録が行われた前回記録アドレスに対する上書きとなって、結果として、1回前に仮記録が行われたアドレスにおけるトレースログの記録は破棄されてしまい、代わりに今回の仮記録にかかわるトレースログの記録となる。
【0018】
(3)また上記構成のプログラムデバッグ装置において、前記トレースメモリアドレス管理手段は、前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長のときは、前記トレースメモリにおける更新後の現在記録アドレスを前回記録アドレスにコピーし、前記トレースログ仮記録処理時間が現在までにおいて最長でないときは、前回記録アドレスを現在記録アドレスにコピーするものとして構成されているという態様がある。
【0019】
仮記録から本記録または破棄への制御を、更新後の現在記録アドレスの前回記録アドレスへのコピーまたは前回記録アドレスの更新後の現在記録アドレスへのコピーによって実現するので、仮記録から本記録または破棄への制御を簡易な構成で容易に実現することが可能となる。更新後の現在記録アドレスを前回記録アドレスにコピーすれば、前回記録アドレスに設定されたアドレスは、この直前に仮記録されたトレースログの記録先アドレスであり、それが前回記録アドレスに存在しているということは、仮記録が本記録に昇格したことに相当する。一方、前回記録アドレスを現在記録アドレスにコピーすれば、仮記録後に更新した現在記録アドレスを元に戻すことになり、そのアドレスへの次のトレースログの上書きを許容することになるので、先の仮記録は破棄されることになる。
【0020】
(4)また上記構成のプログラムデバッグ装置において、さらに、前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長か否かを判断し、その判断結果に基づいて前記トレースメモリアドレス管理手段をタイミング制御する更新タイミング制御手段を備えているという態様がある。
【0021】
更新タイミング制御手段は、トレースログの仮記録に要したトレースログ仮記録処理時間が現在までにおいて最長か否かを判断し、判断結果をトレースメモリアドレス管理手段に与えるものであり、更新タイミング制御手段をもっぱらタイミングの管理をつかさどるものとして構成することが可能となる。
【0022】
(5)また上記構成のプログラムデバッグ装置において、前記トレースログ記録確定制御手段は、その都度の現在記録アドレスをトレース開始アドレスとして更新するように構成されているという態様がある。
【0023】
これは、現在記録アドレス、前回記録アドレスに加えてさらにトレース開始アドレスを用いるものである。その都度の現在記録アドレスを更新的にトレース開始アドレスとして保持するようにしているので、トレース開始アドレスには常に最終のトレースログ記録にかかわる現在記録アドレスが設定されていることになる。最終の記録にかかわるトレースログ仮記録処理時間は、記録されているトレースログ群の各トレースログ仮記録処理時間のうち最長時間となる。
【0024】
トレースログのトレースメモリに対する記録が完了すると、トレースメモリにはその都度のトレースログ仮記録処理時間が現在までにおいて最長のイベントにかかわるトレースログが複数記録されていることになる。解析に際してトレースメモリからトレースログを読み出すに当たり、トレース開始アドレスにアクセスして読み出せば、記録されているトレースログ群全体のうちでトレースログ仮記録処理時間が現在までにおいて最長の1つの(最長中の最長の)トレースログが読み出されることになる。トレースログ群全体のうちでトレースログ仮記録処理時間が現在までにおいて最長のトレースログは、最も重大なソフトウェア上の問題を含んでいる可能性が高いイベントに関係するトレースログである。したがって、このただ1つのトレースログへの絞り込み解析によって、問題発生箇所の特定をさらに迅速・容易に進めることが可能となる。
【0025】
(6)上記のトレース開始アドレスを有するプログラムデバッグ装置において、前記トレースログ記録確定制御手段は、現在記録アドレスと前回記録アドレスとトレース開始アドレスを管理するもので、前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長のときは、前記前回記録アドレスを前記トレース開始アドレスに設定した上で、前記トレースメモリにおける更新後の現在記録アドレスを前回記録アドレスにコピーし、前記トレースログ仮記録処理時間が現在までにおいて最長でないときは、前回記録アドレスを現在記録アドレスにコピーするものとして構成されているという態様がある。
【0026】
これは、上記の(5)を実現するに当たり、アドレスの調整をコピー方式とするものである。
【0027】
(7)上記の更新タイミング制御手段を備えたプログラムデバッグ装置において、さらに、前記イベント制御手段による前記イベント成立状態を入力してイベント成立間の最長時間を測定し、最長時間を更新したかしていないかを判別し、その判別結果である最長時間更新情報を前記更新タイミング制御手段に出力する時間測定手段を備え、前記更新タイミング制御手段は、前記時間測定手段から入力する前記最長時間更新情報によって、前記トレースログ仮記録処理時間が現在までにおいて最長か否かを判断し、その判断結果に基づいて前記トレースメモリアドレス管理手段をタイミング制御するように構成されているという態様がある。このように構成すれば、時間測定手段を更新タイミング制御手段から分離した状態で構成することが可能となる。本構成の場合、時間測定手段を追加することで、トレース機能をもつ従来技術のプログラムデバッグ装置への応用展開を容易なものにする。
【0028】
(8)また上記の構成のプログラムデバッグ装置において、前記更新タイミング制御手段は、時刻情報を付帯するトレースログを入力し、前記トレースログが付帯する前記時刻情報から前記トレースログ仮記録処理時間が最長時間を更新したか更新していないかを判別し、その判別結果である最長時間更新トレース情報に基づいて前記トレースメモリアドレス管理手段をタイミング制御するように構成されているという態様がある。
【0029】
トレースメモリアドレス管理手段は、トレースログ仮記録処理時間が現在までにおいて最長のときは、次の現在記録アドレスとして更新後の現在記録アドレスを設定することにより、トレースメモリにおけるトレースログの仮記録を本記録として確定する一方、最長でないときは、次の現在記録アドレスとして前回記録アドレスを設定することにより、トレースログの仮記録を破棄するものである。そして、更新タイミング制御手段は、トレースログ仮記録処理時間が現在までにおいて最長か否かを判断し、その判断結果に基づいてトレースメモリアドレス管理手段をタイミング制御するものである。この更新タイミング制御手段でのトレースログ仮記録処理時間が最長か否かの判断において、トレースログが付帯する時刻情報を利用するのが本構成である。トレースログの仮記録を開始したときのトレースログの時刻情報と仮記録を終了したときのトレースログの時刻情報からトレースログ仮記録処理時間を求め、これを最長時間更新トレース情報としてトレースメモリアドレス管理手段をタイミング制御すればよい。本構成によれば、(7)のような時間測定手段を含まないプログラムデバッグ装置においても、本発明が実現可能となる。
【0030】
(9)また上記の構成のプログラムデバッグ装置において、前記更新タイミング制御手段は、入力されてくるトレースログと、前記イベント制御手段が管理するイベントとに基づいて、前記トレースログ仮記録処理時間が最長時間を更新したか更新していないかを判別し、その判別結果である最長時間更新イベントトレース情報に基づいて前記トレースメモリアドレス管理手段をタイミング制御するように構成されているという態様がある。
【0031】
更新タイミング制御手段でのトレースログ仮記録処理時間が最長か否かの判断において、トレースログとイベントとの2つの要素を利用するのが本構成である。トレースログの仮記録を開始したときのイベントとトレースログを比較して一致したときの時刻情報と仮記録を終了したときのイベントとトレースログを比較して一致したときの時刻情報からトレースログ仮記録処理時間を求め、これを最長時間更新イベントトレース情報としてトレースメモリアドレス管理手段をタイミング制御すればよい。本構成によれば、(7)のような時間測定手段を含まないプログラムデバッグ装置においても、本発明が実現可能となる。
【0032】
(10)また上記の構成のプログラムデバッグ装置において、さらに、前記更新タイミング制御手段による現在記録アドレスの更新制御の有効/無効を設定する更新タイミングマスク制御手段を備えているという態様がある。
【0033】
ソフトウェア上の問題を再現するパターンが事前にある程度特定できている場合には、トレースメモリへのトレースログの仮記録をそのようなパターンにかかわるトレースログに絞り込むのが合理的である。問題を再現することが事前にある程度特定できているパターン以外については、そのときのトレースログはトレースメモリへの記録の対象外とすればよい。例えば、プログラム実行直後は、最長となるトレースログ仮記録処理時間が更新されやすい。しかし、それが問題を再現するパターンではない場合が多い。そこで、このようなトレースログは破棄することにすればよい。問題を再現することがないと事前にある程度分かっているパターンについては、更新タイミングマスク制御手段において、更新タイミング制御手段による現在記録アドレスの更新制御を無効に設定しておく。そうすることにより、問題を再現することがないと事前にある程度分かっているパターンについてトレースメモリへのトレースログの仮記録を破棄させることが可能となる。問題を再現することが事前にある程度特定できているパターンについては、現在記録アドレスの更新制御を有効に設定しておく。そうすると、問題を再現することが事前にある程度特定できているパターンに限定して、トレースメモリへのトレースログの仮記録を本記録として確定することが可能となる。結果として、問題発生箇所のトレースログの収集が効率化される。
【0034】
(11)また上記の構成のプログラムデバッグ装置において、前記更新タイミング制御手段は、現在記録アドレスの更新/非更新を示すアドレス更新情報を出力する機能を備え、さらに、前記更新タイミング制御手段から更新を示す前記アドレス更新情報を入力したときに任意の波形信号を外部トリガとして出力する外部トリガ出力手段を備えているという態様がある。
【0035】
プログラム上に発生した問題の解析に当たっては、収集したトレースログの解析だけでなく、問題発生箇所または問題発生時の出力状態等の波形を取得して、その波形も併せて解析すれば、問題解決を効果的に進めることが可能となる。現在記録アドレスを更新するのは、トレースログ仮記録処理時間が最長を更新したときであり、この場合に外部トリガ出力手段を活性化して問題解決に供する任意の波形信号を外部トリガとして出力させる。結果として、最長となるトレースログ仮記録処理時間が更新されたときに、外部トリガ出力手段が外部へ所望の波形を出力することができる。例えば、ユーザターゲットシステムにおけるアクチュエータ等の出力状態等の波形をオシロスコープ等によって取得する。問題発生時の波形とトレースログとを併せて解析すれば、問題解決が迅速・容易なものとなる。
【0036】
(12)また上記の構成のプログラムデバッグ装置において、前記更新タイミング制御手段は、現在記録アドレスの更新/非更新を示すアドレス更新情報を出力する機能を備え、さらに、前記更新タイミング制御手段から更新を示す前記アドレス更新情報を入力したときに前記CPUの動作を停止させるブレーク制御手段を備えているという態様がある。
【0037】
最長となるトレースログ仮記録処理時間が更新されたときにCPUを停止させれば、そのとき取得したトレースログを用いて、直ちに問題発生時の変数の状態や処理の状態をデバッグすることが可能となり、問題解決の迅速化を図ることが可能となる。
【0038】
(13)また、本発明によるエミュレータシステムは、上記のいずれかのプログラムデバッグ装置を搭載したものであり、プログラムや周辺装置上の問題のデバッグを効率良く進めることが可能となる。
【発明の効果】
【0039】
本発明によれば、イベント成立状態が有効となるトレースログはすべて一旦はトレースメモリに仮記録した上で、トレースログ仮記録処理時間が現在までにおいて最長となるトレースログに限定して残すようにしているので、トレースログの記録においてトレースログの効果的な絞り込みが行われ、再現性が低く解析が難しいソフトウェア上の問題の特定を迅速・容易化することができる。
【発明を実施するための最良の形態】
【0040】
以下、本発明にかかわるプログラムデバッグ装置の実施の形態を図面を用いて詳細に説明する。
【0041】
(実施の形態1)
図1は本発明の実施の形態1におけるプログラムデバッグ装置の構成を示すブロック図である。このプログラムデバッグ装置は、CPU1、イベント制御モジュール2、トレース制御モジュール3、トレースログ記録確定制御手段4(トレースメモリアドレス管理モジュール5、更新タイミング制御モジュール6)およびトレースメモリ11から構成されている。以下、それらの各ブロックを説明する。図20の従来技術のプログラムデバッグ装置と比較して、トレースメモリアドレス管理モジュール5および更新タイミング制御モジュール6からなるトレースログ記録確定制御手段4が追加されたものに相当する構成となっている。
【0042】
CPU1は、ハードウェアあるいはソフトウェアで構成され、プログラムコードを実行するものである。
【0043】
イベント制御モジュール2は、CPU1がプログラムを実行する処理の任意の状態を定義できるイベントを1つ以上管理する。イベントは、CPU1がプログラムを実行する処理の任意の状態であり、CPU1がプログラムを実行したときのアドレスや、リードまたはライトするアドレス等を定義することができる。さらにイベント制御モジュール2は、管理しているイベントとCPU1がプログラムを実行する処理の状態を比較し、イベント毎に等価であるか非等価であるかを判別し、その判別結果をイベント成立状態として出力する。
【0044】
トレースメモリ11は、CPU1がプログラムを実行した処理の記録であるトレースログを記録する。トレースログの内容は、CPU1が実行したアドレスやリードまたはライトしたアドレス等が代表的なものである。プログラムデバッグ装置によって、トレースログの内容は異なるものである。
【0045】
トレース制御モジュール3は、イベント制御モジュール2によるイベント成立状態が有効のときにCPU1によるトレースログをトレースメモリ11に仮記録するものとして構成されている。一例として、イベント制御モジュール2が管理する任意の1つのイベントを開始イベントとし、さらに任意の1つのイベントを終了イベントとして設定でき、開始イベントが成立してから終了イベントが成立するまでのトレースログ仮記録処理時間Tに対応するトレースログを仮記録することができる。
【0046】
トレースログ記録確定制御手段4は、トレース制御モジュール3によるトレースログの仮記録に要したトレースログ仮記録処理時間Tが現在までにおいて最長か否かに応じて、トレースメモリ11におけるトレースログの仮記録を本記録として確定するか破棄するかを制御するものであり、本実施の形態では、トレースメモリアドレス管理モジュール5と更新タイミング制御モジュール6とから構成されている。
【0047】
トレースメモリアドレス管理モジュール5は、現在記録アドレスAと前回記録アドレスBを管理するものである。これらは例えばレジスタで構成される。現在記録アドレスAは、現在のトレースログを仮記録すべきトレースメモリ11でのアドレスであり、仮記録が完了する都度に、インクリメント等の処理により更新されるようになっている。前回記録アドレスBは、仮記録が完了する都度に、元の現在記録アドレスAをコピーしておくものである。トレースメモリアドレス管理モジュール5は、トレース制御モジュール3によるトレースログ仮記録処理時間Tが現在までにおいて最長のとき(前回よりも長いとき)は、トレースメモリ11における次の現在記録アドレスAとして更新後の現在記録アドレスAを設定し、トレースログ仮記録処理時間Tが現在までにおいて最長でないときは、次の現在記録アドレスAとして前回記録アドレスBを設定することにより、現在記録アドレスAの調整を行うように構成されている。すなわち、トレース制御モジュール3によるトレースログ仮記録処理時間Tが現在までにおいて最長のときは、トレースメモリ11における更新後の現在記録アドレスAを前回記録アドレスBにコピーし、トレースログ仮記録処理時間Tが現在までにおいて最長でないときは、更新後の前回記録アドレスBを現在記録アドレスAにコピーする。トレースログ仮記録処理時間Tが現在までにおいて最長の場合に更新後の現在記録アドレスAを前回記録アドレスBにコピーするのは、いままさに仮記録が完了したばかりのトレースログの仮記録を本記録として確定していることになる。トレースログ仮記録処理時間Tが現在までにおいて最長でない場合に更新後の前回記録アドレスBを現在記録アドレスAにコピーするのは、いままさに仮記録が完了したばかりのトレースログの記録アドレスへの次のトレースログの上書きを許容し、いままさに仮記録が完了したばかりのトレースログの仮記録を破棄することに相当する。
【0048】
更新タイミング制御モジュール6は、トレース制御モジュール3によるトレースログ仮記録処理時間Tが現在までにおいて最長か否かを判断し、その判断結果をトレースメモリアドレス管理モジュール5に与えるタイミングを制御するものとして構成されている。これが、上記のアドレスコピーのタイミングに利用される。なお、更新タイミング制御モジュール6における時間の管理については種々の方式があり、詳細は他の実施の形態において説明する。
【0049】
図2は実施の形態1のプログラムデバッグ装置のトレースログを仮記録する動作を示すフローチャートである。
【0050】
最初に、CPU1がプログラムコードを実行する(ステップS01)。
【0051】
次に、トレース制御モジュール3は、CPU1がプログラムを実行した処理の記録であるトレースログを取得する(ステップS02)。
【0052】
次に、トレース制御モジュール3は、イベント制御モジュール2からイベント成立状態を取得する(ステップS03)。CPU1によるプログラム実行処理があらかじめ管理しているイベントと等価であるときはイベント成立状態は有効であり、非等価であるときはイベント成立状態は無効である。
【0053】
次に、トレース制御モジュール3は、取得したイベント成立状態からトレースログを仮記録するかしないかを判定する指示を作成する(ステップS04)。イベント成立状態が有効のときはトレースログ仮記録の指示を作成し、イベント成立状態が無効のときはトレースログを仮記録しない指示を作成する。
【0054】
次に、トレース制御モジュール3は、トレースログを仮記録する指示がONか否かを判断し(ステップS05)、トレースログを仮記録する指示がONのとき、トレースメモリ11の現在記録アドレスAにトレースログを仮記録し、現在記録アドレスAのインクリメント等によって更新する(ステップS06)。現在記録アドレスAをインクリメント等で更新するのは、トレースログ書き込み後に、次のトレースログを別のアドレスに書き込む準備をするためである。
【0055】
一方、トレースログを仮記録する指示がOFFのとき、トレースログを仮記録しない(ステップS07)。
【0056】
図3は実施の形態1のプログラムデバッグ装置のトレースメモリ11のアドレスを操作する動作を示すフローチャートである。
【0057】
最初に、任意の1つのイベントが成立してトレースログの仮記録を開始してから、さらに任意の1つのイベントが成立してトレースログの仮記録を終了したとき、トレースログの仮記録を開始してから終了するまでのプログラムのトレースログ仮記録処理時間Tが現在までにおいて最長か否かを判別する(ステップS10)。
【0058】
そして、トレースログ仮記録処理時間Tが現在までにおいて最長か否かに応じて処理を分岐する(ステップS20)。
【0059】
次に、トレースログ仮記録処理時間Tが現在までにおいて最長のとき、トレースログ記録確定制御手段4における更新タイミング制御モジュール6は、更新後の現在記録アドレスAを前回記録アドレスBにコピーするようトレースメモリアドレス管理モジュール5に出力する(ステップS30)。このコピーにより、本記録が確定したトレースログのアドレスが前回記録アドレスBとしてバックアップされたことになる。
【0060】
一方、トレースログ仮記録処理時間Tが現在までにおいて最長ではないとき、更新タイミング制御モジュール6は、更新後の前回記録アドレスBを現在記録アドレスAにコピーするようトレースメモリアドレス管理モジュール5に出力する(ステップS40)。このコピーによりアドレスを戻して上書きを許容して、いままさに仮記録が完了したばかりのトレースログの仮記録を破棄するためである。
【0061】
すなわち、図2において、任意の1つのイベントが成立してトレースログの仮記録を開始し、さらに任意の1つのイベントが成立するまで現在記録アドレスAに対して記録を行い、図3において、任意の1つのイベントが成立してトレースログの仮記録を開始し、さらに任意の1つのイベントが成立するまでのトレースログ仮記録処理時間Tが現在までにおいて最長であるときのみ、更新後の現在記録アドレスAを前回記録アドレスBにコピーし、トレースログの記録を確定する。また、トレースログ仮記録処理時間Tが現在までにおいて最長ではないとき、更新後の前回記録アドレスBを現在記録アドレスAにコピーし、アドレスを戻すことにより、仮記録したトレースログを破棄へと進める。
【0062】
上記において、トレースログ仮記録処理時間Tが現在までにおいて最長であるときといっているが、記録されるトレースログの数が1つだけということにはならない。最長となるトレースログ仮記録処理時間Tが時間経過とともに長くなっていく。その都度の最長時間を見つけてはトレースログを仮記録している。結果として、トレースメモリ11には複数のトレースログが記録されていることになる。記録時刻があとのトレースログほどトレースログ仮記録処理時間Tが長いものとなっている。この様子を図4に示す。
【0063】
図4(a)はトレースログ仮記録処理時間Tの変遷を示し、図4(b)はトレースメモリ11に記録され残っているトレースログのトレースログ仮記録処理時間Tを示す。○印のトレースログが選択されてトレースメモリ11に残り、×印のトレースログは破棄されている。
【0064】
いま、動作の一例として、トレースログを記録すべきアドレスである現在記録アドレスAとして、アドレス〔0100〕が設定されているとする。そして、この現在記録アドレスA〔0100〕においてトレースメモリ11にトレースログL1が記録されたとする。記録されたので、アドレス〔0100〕がインクリメントされてアドレス〔0200〕になる。これで、次にトレースログを仮記録すべき記録先のアドレスの候補は、アドレス〔0200〕と1回前のアドレス〔0100〕となる。ここで、アドレス〔0200〕が更新後の現在記録アドレスAであり、アドレス〔0100〕が更新後の前回記録アドレスBである。次に更新後の現在記録アドレスAと前回記録アドレスBのいずれを設定するかは、トレースログ仮記録処理時間Tが現在までにおいて最長であるか否かの判断による。トレースログ仮記録処理時間Tが現在までにおいて最長であるとき更新後の現在記録アドレスAのアドレス〔0200〕が現在記録アドレスAとして設定され、トレースログ仮記録処理時間Tが現在までにおいて最長ではないときは更新後の前回記録アドレスBのアドレス〔0100〕が現在記録アドレスAとして設定される。更新後の現在記録アドレスAが現在記録アドレスAとして設定されたということは、前のアドレスがトレースログ記録の確定アドレスとされ、そこには上書きを許さないということを意味する。つまり、確定アドレスでの記録トレースログは、トレースログ仮記録処理時間Tが現在までにおいて最長のトレースログとして記録が確定されたものとなる。一方、更新後の前回記録アドレスBが現在記録アドレスAとして設定されたということは、そのアドレスにおいて上書きを許容するということであり、前に記録されていたトレースログは破棄されてもよいことを意味する。
【0065】
(a1)さて、トレースログL1について前者のトレースログ仮記録処理時間Tが現在までにおいて最長であるときで更新後の現在記録アドレスAのアドレス〔0200〕が現在記録アドレスAとして設定された場合、次のトレースログL2はその現在記録アドレスA〔0200〕においてトレースメモリ11に記録される。これで、トレースメモリ11にはトレースログL1とトレースログL2とが記録されていることになる。ただし、トレースログL2についてはまだトレースログ仮記録処理時間Tが現在までにおいて最長か否かの判断はしていないので、その記録は確定的なものとはなっていない。記録されたので、アドレス〔0200〕がインクリメントされてアドレス〔0300〕になる。
【0066】
(b1)一方、トレースログL1について後者のトレースログ仮記録処理時間Tが現在までにおいて最長ではないときで更新後の前回記録アドレスBのアドレス〔0100〕が現在記録アドレスAとして設定された場合、次のトレースログL2はその現在記録アドレスA〔0100〕においてトレースメモリ11に記録される。これで、トレースメモリ11のアドレス〔0100〕では、それまで記録されていたトレースログL1に対する上書きとしてトレースログL2が記録されることになる。すなわち、前に記録されていたトレースログL1は結果的に破棄されたことになる。記録されたので、アドレス〔0100〕がインクリメントされてアドレス〔0200〕になる。
【0067】
(a2)上記の(a1)の続きで、トレースログL2についてトレースログ仮記録処理時間Tが現在までにおいて最長であれば、更新後の現在記録アドレスAのアドレス〔0300〕が現在記録アドレスAとして設定され、こうなるとアドレス〔0200〕は現在記録アドレスAにはなりえないから、アドレス〔0200〕におけるトレースログL2の記録は確定したことになる。トレースメモリ11におけるトレースログ仮記録処理時間Tが現在までにおいて最長のトレースログは、トレースログL1とトレースログL2の2つとなる。
【0068】
(b2)上記の(b1)の続きで、トレースログL2についてトレースログ仮記録処理時間Tが現在までにおいて最長であれば、更新後の現在記録アドレスAのアドレス〔0200〕が現在記録アドレスAとして設定され、こうなるとアドレス〔0100〕は現在記録アドレスAにはなりえないから、アドレス〔0100〕におけるトレースログL2の記録は確定したことになる。トレースメモリ11におけるトレースログ仮記録処理時間Tが現在までにおいて最長のトレースログは、トレースログL2となる。
【0069】
以上のように、トレースログを仮記録する指示が活性化されると、そのトレースログは一旦は必ずトレースメモリ11に記録される。ただし確定ではなく、仮記録である。確定は、次のトレースログ仮記録処理時間Tが現在までにおいて最長か否かの判断に委ねられる。そして、確定するか破棄するかは、現在記録アドレスAの調整の処理においてなされる。すなわち、トレースログ仮記録処理時間Tが現在までにおいて最長のときは、現在記録アドレスAを更新後の現在記録アドレスA(一旦記録に伴ってインクリメントされたアドレス)とするとともに、仮記録を本記録として確定するために更新後の現在記録アドレスAを前回記録アドレスBにコピーする。トレースログ仮記録処理時間Tが現在までにおいて最長でないときは、現在記録アドレスAを更新後の前回記録アドレスBとする。このような方式が、本実施の形態の技術ポイントである。
【0070】
本形態のプログラムデバッグ装置を用いることで、任意の1つのイベントが成立して、さらに任意の1つのイベントが成立するまでの最長となるトレースログ仮記録処理時間Tが更新されたときのトレースログを本記録することができ、不要なトレースログを破棄することができる。
【0071】
多数にのぼるトレースログ群全体のうちからトレースログ仮記録処理時間Tが短時間側のトレースログ群を破棄し、トレースログ仮記録処理時間Tが長時間側のトレースログに絞り込んでトレースメモリに記録するようにしたので、トレースメモリ11の容量に制限がある状態でも、ソフトウェア上の問題の可能性の高い側のトレースログを集約的に記録することができる。その結果、問題の発見および解決を迅速・容易化する上できわめて有効な対策となる。
【0072】
また、記録するトレースログを絞り込むので、トレースメモリ11の容量の過大な増加を回避することが可能となる。
【0073】
(実施の形態2)
本発明の実施の形態2にかかわるプログラムデバッグ装置は、トレースメモリ11に記録された複数のトレースログのうちからトレースログ仮記録処理時間Tが最も長い(最長中の最長の)トレースログを1つ指定できるように構成されたもので、さらにトレース開始アドレスを備えたものである。
【0074】
図5は本発明の実施の形態2におけるプログラムデバッグ装置の構成を示すブロック図である。図5において、実施の形態1の図1におけるのと同じ符号は同一構成要素を指している。本実施の形態に特有の構成は、次のとおりである。トレースメモリアドレス管理モジュール5において、トレースメモリ11のアドレスについて、さらに前回記録アドレスBをバックアップコピーしておくためのトレース開始アドレスCを保持している。前回記録アドレスBをトレース開始アドレスCにコピーするタイミングは、トレースログ仮記録処理時間Tが現在までにおいて最長となった場合である。更新タイミング制御モジュール6は、前回記録アドレスBをトレース開始アドレスCにコピーするタイミングを制御できる機能をさらに備えている。その他の構成については、実施の形態1と同様であるので説明を省略する。
【0075】
図6は実施の形態2のプログラムデバッグ装置のトレースメモリ11のアドレスを操作する動作を示すフローチャートであり、これは実施の形態1の場合の図3のフローチャートにステップS21を追加したものに相当する。実施の形態1の場合の図2のフローチャートは本実施の形態に踏襲される。
【0076】
ステップS21において、更新タイミング制御モジュール6は前回記録アドレスBをトレース開始アドレスCにコピーするようトレースメモリアドレス管理モジュール5に出力する。すなわち、前回記録アドレスBがコピーで変化してしまう前に、前回記録アドレスBをトレース開始アドレスCにコピーしてバックアップしておき、トレースログを仮記録したときのトレース開始アドレスCを確保する。
【0077】
いま、トレースログL1が現在記録アドレスA=0100に記録され、次いで現在記録アドレスAが更新されて、現在記録アドレスA=0200になったとする。すると、前回記録アドレスBは、繰り替わって、B=0100となる。このトレースログL1のトレースログ仮記録処理時間Tが現在までにおいて最長相当であれば、前回記録アドレスB=0100をトレース開始アドレスCにコピーするので、トレース開始アドレスC=0100となる。これは、現在のトレースログ仮記録処理時間Tが現在までにおいて最長のトレースログL1の格納アドレスが〔0100〕であることを意味している。次いで、更新後の現在記録アドレスA=0200を前回記録アドレスB(=0100)にコピーして更新するので、前回記録アドレスB=0200となる。
【0078】
次にトレースログL2が現在記録アドレスA=0200に記録され、次いで現在記録アドレスAが更新されて、現在記録アドレスA=0300になったとする。このトレースログL2のトレースログ仮記録処理時間Tが現在までにおいて最長相当であれば、前回記録アドレスB=0200をトレース開始アドレスCにコピーして更新するので、トレース開始アドレスC=0200となる。これは、現在のトレースログ仮記録処理時間Tが現在までにおいて最長のトレースログL2の格納アドレスが〔0200〕であることを意味している。次いで、更新後の現在記録アドレスA=0300を前回記録アドレスB(=0200)にコピーして更新するので、前回記録アドレスB=0300となる。
【0079】
以上で明らかなように、仮記録から本記録として確定記録されたトレースログ群全体のうち最終に確定記録された1つのトレースログの記録先アドレスがトレース開始アドレスCに保持されていることになる。
【0080】
本実施の形態によれば、トレースメモリ11に記録されているトレースログ群全体のうちでトレースログ仮記録処理時間Tが現在までにおいて最長の1つの(最長中の最長の)トレースログの記録先アドレスを特定することができる。その結果として、問題箇所のいち早い発見と解決を実現することができる。
【0081】
なお、トレース開始アドレスCを、C1,C2,…Cnとn個保持する構成も考えられる。トレースログ仮記録処理時間Tが現在までにおいて最長となる第1回目において、そのときの確定記録のアドレスをトレース開始アドレスC1に記録する。
【0082】
トレースログ仮記録処理時間Tが現在までにおいて最長となる第2回目において、第1回目の確定記録のトレース開始アドレスC1にあるアドレスをトレース開始アドレスC2にコピーし、現在の確定記録のアドレスをトレース開始アドレスC1に記録する。
【0083】
同様に、トレースログ仮記録処理時間Tが現在までにおいて最長となる第3回目において、第1回目の確定記録のトレース開始アドレスC2にあるアドレスをトレース開始アドレスC3にコピーし、第2回目の確定記録のトレース開始アドレスC1にあるアドレスをトレース開始アドレスC2にコピーし、現在の確定記録のアドレスをトレース開始アドレスC1に記録する。
【0084】
このような処理を繰り返すと、トレースログ仮記録処理時間Tが長いトレースログとして、最長のものから次に長いものへと順次にn個分のトレースログについてそれぞれの記録先アドレスを特定することができる。したがって、最長もののみ1つだけのトレースログでは問題を解析できない場合でも、n番目までのトレースログを解析することにより、問題箇所の早急な発見と解決を実現することができる。
【0085】
なお、トレースメモリ11を複数個備え、各トレースメモリ11にアドレスを振り分けた構成とすることも可能である。
【0086】
(実施の形態3)
本発明の実施の形態3にかかわるプログラムデバッグ装置は、更新タイミング制御モジュール6において取り扱うべき時間情報について、それを生成する時間測定モジュールを外部に構成したものである。
【0087】
図7は本発明の実施の形態3におけるプログラムデバッグ装置の構成を示すブロック図である。図7において、実施の形態1の図1におけるのと同じ符号は同一構成要素を指している。本実施の形態においては、時間測定モジュール7が追加されている。この時間測定モジュール7は、イベント制御モジュール2が出力するイベント成立状態を入力とし、イベント成立間の最長時間を測定することが可能で、最長時間を更新したかしていないかを判別した最長時間更新情報を更新タイミング制御モジュール6に出力するように構成されている。この最長時間更新情報を受け取る更新タイミング制御モジュール6は、入力した最長時間更新情報に基づいて、トレースメモリアドレス管理モジュール5が保持する現在記録アドレスAと前回記録アドレスBとの間のコピー処理のタイミングを制御できる構成になっている。すなわち、図3のフローチャートのステップS20において、トレースログ仮記録処理時間Tが現在までにおいて最長かどうかを最長時間更新情報により判定できる。その他の構成および動作については、実施の形態1と同様であるので説明を省略する。本実施の形態のプログラムデバッグ装置の基本的動作は、実施の形態1の場合の図2、図3のフローチャートを踏襲するものである。
【0088】
なお、更新タイミング制御モジュール6は、時間測定機能を含んだ構成でも実現できる。
【0089】
なお、更新タイミング制御モジュール6は、イベント制御モジュール2を含んだ構成でも実現できる。
【0090】
なお、更新タイミング制御モジュール6は、時間測定機能とイベント制御モジュール2を含んだ構成でも実現できる。
【0091】
本実施の形態によれば、図21の従来技術のトレース機能を搭載したプログラムデバッグ装置において、時間測定機能を追加したものに相当し、資源の再利用等の側面において、従来技術のプログラムデバッグ装置への応用展開を容易なものにする。
【0092】
(実施の形態4)
本発明の実施の形態4にかかわるプログラムデバッグ装置は、更新タイミング制御をトレースログが付帯する時刻情報に基づいて行うように構成されたものである。
【0093】
図8は本発明の実施の形態4におけるプログラムデバッグ装置の構成を示すブロック図である。図8において、実施の形態1の図1におけるのと同じ符号は同一構成要素を指している。本実施の形態においては、更新タイミング制御モジュール6は、時刻情報を付帯するトレースログを入力し、入力したトレースログの時刻情報に基づいて、最長時間を更新したか更新していないかを判別し、その判別結果である最長時間更新トレース情報をトレースメモリアドレス管理モジュール5に与えるように構成されている。トレースメモリアドレス管理モジュール5は、入力した最長時間更新トレース情報に基づいて、現在記録アドレスAと前回記録アドレスBとの間のコピー処理のタイミングを制御するように構成されている。その他の構成については、実施の形態1の場合と同様であるので、説明を省略する。
【0094】
図9は時刻情報を付帯するトレースログの一例であり、個々のトレースログは、それぞれに個別の時刻情報を付帯している。
【0095】
本実施の形態のプログラムデバッグ装置の基本的動作は、実施の形態1の場合の図2、図3のフローチャートを踏襲するものである。ただし、図3のステップS10の動作が図10のフローチャートに変更される。
【0096】
図10はトレースログ仮記録処理時間Tが現在までにおいて最長かどうかをトレースログの時刻情報を用いて判別するフローチャートである。
【0097】
最初に、トレースログの仮記録を開始したとき、トレースログの時刻情報を取得する(ステップS51)。
【0098】
次に、トレースログの仮記録を終了したとき、トレースログの時刻情報を取得する(ステップS52)。
【0099】
次に、トレースログの仮記録を開始したときのトレースログの時刻情報と仮記録を終了したときのトレースログの時刻情報からトレースログ仮記録処理時間Tを計算する(ステップS53)。
【0100】
次に、今回計算したトレースログ仮記録処理時間Tを前回のトレースログ仮記録処理時間Tと比較して、今回のトレースログ仮記録処理時間Tが現在までにおいて最長かどうかを判別する(ステップS54)。
【0101】
次に、トレースログ仮記録処理時間Tが現在までにおいて最長であるとき、トレースログ仮記録処理時間Tを前回トレースログ仮記録処理時間Tとして保存する。これが最長時間更新トレース情報である(ステップS55)。
【0102】
すなわち、図3のフローチャートのステップS20において、トレースログ仮記録処理時間Tが現在までにおいて最長かどうかの判別を、図10のステップS54によってトレースログ仮記録処理時間Tが現在までにおいて最長かどうかの判別で実現することができる。
【0103】
なお、トレースログに時刻情報がない場合においても、更新タイミング制御モジュール6が、トレースメモリ11にトレースログの仮記録を開始した時点の検出と、トレースログの仮記録を終了した時点の検出を行い、トレースログ仮記録処理時間Tを割り出して、トレースログ仮記録処理時間Tが現在までにおいて最長かどうかを判別するように構成してもよい。
【0104】
本実施の形態によれば、時間測定モジュール7を含まないプログラムデバッグ装置においても、本発明が解決しようとする課題を解決することができる。
【0105】
(実施の形態5)
本発明の実施の形態5にかかわるプログラムデバッグ装置は、トレースログとイベントに基づいて更新タイミング制御を行うように構成されたものである。
【0106】
図11は本発明の実施の形態5におけるプログラムデバッグ装置の構成を示すブロック図である。図11において、実施の形態1の図1におけるのと同じ符号は同一構成要素を指している。本実施の形態においては、更新タイミング制御モジュール6は、トレースログを入力するとともに、イベント制御モジュール2が管理するイベントを入力し、これら入力したトレースログとイベントに基づいて、最長時間を更新したか更新していないかを判別できる最長時間更新イベントトレース情報を生成し、その最長時間更新イベントトレース情報をトレースメモリアドレス管理モジュール5に渡すように構成されている。
【0107】
トレースメモリアドレス管理モジュール5は、入力した最長時間更新イベントトレース情報に基づいて、現在記録アドレスAと前回記録アドレスBとの間のコピー処理のタイミングを制御するように構成されている。
【0108】
その他の構成については、実施の形態1と同様であるので、説明を省略する。本実施の形態のプログラムデバッグ装置の基本的動作は、実施の形態1の場合の図2、図3のフローチャートを踏襲するものである。ただし、図3のステップS10の動作が図12のフローチャートに変更される。
【0109】
図12はトレースログ仮記録処理時間Tが現在までにおいて最長かどうかをトレースログとイベントを用いて判別するフローチャートである。
【0110】
最初に、トレースログの仮記録を開始する任意の1つのイベントとトレースログを比較し、一致したときの時刻情報を取得する(ステップS61)。
【0111】
次に、トレースログの仮記録を終了するさらに任意の1つのイベントとトレースログを比較し、一致したときの時刻情報を取得する(ステップS62)。
【0112】
次に、ステップS61で取得した時刻情報とステップS62で取得した時刻情報より、トレースログ仮記録処理時間Tを計算する(ステップS63)。
【0113】
次に、計算したトレースログ仮記録処理時間Tと前回トレースログ仮記録処理時間Tと比較して、トレースログ仮記録処理時間Tが現在までにおいて最長かどうかを判別する(ステップS64)。
【0114】
次に、トレースログ仮記録処理時間Tを前回トレースログ仮記録処理時間Tとして保存する(ステップS65)。
【0115】
すなわち、図3のフローチャートのステップS10,S20における、トレースログ仮記録処理時間Tが現在までにおいて最長かどうかの判別を、図12のステップS61〜S65によって行うことができる。
【0116】
なお、トレースログに時刻情報がない場合においても、更新タイミング制御モジュール6が時間を管理するようにして、トレースログ仮記録処理時間Tが現在までにおいて最長かどうかを判別するように構成することも可能である。
【0117】
本実施の形態によれば、時間測定モジュール7を含まないプログラムデバッグ装置においても、本発明が解決しようとする課題を解決することができる。
【0118】
(実施の形態6)
本発明の実施の形態6にかかわるプログラムデバッグ装置は、更新タイミング制御モジュール6の機能の有効化/無効化を行うように構成されたもので、更新タイミングマスク制御モジュールを備えたものである。
【0119】
図13は本発明の実施の形態6におけるプログラムデバッグ装置の構成を示すブロック図である。図13において、実施の形態1の図1におけるのと同じ符号は同一構成要素を指している。本実施の形態においては、更新タイミング制御モジュール6が行うところの現在記録アドレスAの更新制御について有効/無効を設定する更新タイミングマスク制御モジュール8が追加されている。更新タイミングマスク制御モジュール8において有効が設定されたときは、更新タイミング制御モジュール6はその機能が有効化され、逆に、更新タイミングマスク制御モジュール8において無効が設定されたときは、更新タイミング制御モジュール6はその機能が無効化される。この現在記録アドレスAの更新制御についての有効/無効の設定はユーザが行う。その他の構成については、実施の形態1と同様であるので、説明を省略する。
【0120】
図14は実施の形態6のプログラムデバッグ装置においてトレースメモリ11のアドレスを操作する動作を示すフローチャートである。実施の形態1の場合の図3のフローチャートのステップS20がステップS22に置き換わっている。実施の形態1の場合の図2のフローチャートは本実施の形態に踏襲される。
【0121】
最初に、任意の1つのイベントが成立してトレースログの仮記録を開始してから、さらに任意の1つのイベントが成立してトレースログの仮記録を終了したとき、トレースログの仮記録を開始してから終了するまでのプログラムのトレースログ仮記録処理時間Tが現在までにおいて最長か否かを判別する(ステップS10)。
【0122】
そして、トレースログ仮記録処理時間Tが現在までにおいて最長で、かつ現在記録アドレスAの更新制御が有効のときと、そうでないときとに応じて処理を分岐する(ステップS22)。
【0123】
次に、トレースログ仮記録処理時間Tが現在までにおいて最長で、かつ現在記録アドレスAの更新制御が有効のときは、トレースログ記録確定制御手段4における更新タイミング制御モジュール6は、更新後の現在記録アドレスAを前回記録アドレスBにコピーするようトレースメモリアドレス管理モジュール5に出力する(ステップS30)。このコピーにより、本記録が確定したトレースログのアドレスが前回記録アドレスBとしてバックアップされたことになる。
【0124】
一方、トレースログ仮記録処理時間Tが現在までにおいて最長ではないとき、または、現在記録アドレスAの更新制御が無効のときは、更新タイミング制御モジュール6は、更新後の前回記録アドレスBを現在記録アドレスAにコピーするようトレースメモリアドレス管理モジュール5に出力する(ステップS40)。このコピーにより、アドレスを戻して上書きを許容して、いままさに仮記録が完了したばかりのトレースログの仮記録を破棄する。
【0125】
すなわち、現在記録アドレスAの更新制御を有効にしたときのアドレスの操作は、図3のフローチャートと同様のものとなる。
【0126】
一方、現在記録アドレスAの更新制御を無効にしたときは、必ず更新後の前回記録アドレスBを現在記録アドレスAにコピーして、現在記録アドレスAを戻すことにより、仮記録したトレースログを破棄する。
【0127】
プログラム実行直後は、最長となるトレースログ仮記録処理時間Tが更新されやすい。そこで、このようなトレースログは破棄することにすればよい。本実施の形態によれば、ソフトウェア上の問題を再現するパターンがある程度特定できている場合に、再現するパターンを開始する前に、現在記録アドレスAの更新制御を有効にして、必要なトレースログのみを取得することができる。これによって問題箇所の早急な発見と解決を実現することができる。
【0128】
(実施の形態7)
本発明の実施の形態7にかかわるプログラムデバッグ装置は、ソフトウェア上の問題箇所の早急な発見と解決を図るべく、トレースログ仮記録処理時間Tの最長のときの波形を出力するように構成されたもので、外部トリガ出力モジュールを備えたものである。
【0129】
図15は本発明の実施の形態7におけるプログラムデバッグ装置の構成を示すブロック図である。図15において、実施の形態1の図1におけるのと同じ符号は同一構成要素を指している。本実施の形態に特有の構成は、外部トリガ出力モジュール9をさらに備えていることである。更新タイミング制御モジュール6は、現在記録アドレスAの更新/非更新をアドレス更新情報として外部トリガ出力モジュール9に出力する機能をさらに備えるものとして構成されている。外部トリガ出力モジュール9は、アドレス更新情報を任意の波形で外部へ出力するように構成されている。その他の構成については、実施の形態1と同様であるので、説明を省略する。
【0130】
図16は実施の形態7のプログラムデバッグ装置においてトレースメモリ11のアドレスを操作する動作を示すフローチャートである。実施の形態1の場合の図3のフローチャートのステップS30が図16のステップS31に置き換わっており、さらにステップS32が追加されている。実施の形態1の場合の図2のフローチャートは本実施の形態に踏襲される。
【0131】
最初に、任意の1つのイベントが成立してトレースログの仮記録を開始してから、さらに任意の1つのイベントが成立してトレースログの仮記録を終了したとき、トレースログの仮記録を開始してから終了するまでのプログラムのトレースログ仮記録処理時間Tが現在までにおいて最長か否かを判別する(ステップS10)。
【0132】
そして、トレースログ仮記録処理時間Tが現在までにおいて最長か否かに応じて処理を分岐する(ステップS20)。
【0133】
次に、トレースログ仮記録処理時間Tが現在までにおいて最長のとき、トレースログ記録確定制御手段4における更新タイミング制御モジュール6は、更新後の現在記録アドレスAを前回記録アドレスBにコピーするようトレースメモリアドレス管理モジュール5に出力するとともに、同時に外部トリガ出力モジュール9にアドレス更新情報として出力する(ステップS31)。このコピーにより、本記録が確定したトレースログのアドレスが前回記録アドレスBとしてバックアップされたことになる。
【0134】
次いで外部トリガ出力モジュール9は、アドレス更新情報により、所定の波形を出力する(ステップS32)。この点が本実施の形態のポイントである。
【0135】
一方、トレースログ仮記録処理時間Tが現在までにおいて最長ではないとき、更新タイミング制御モジュール6は、更新後の前回記録アドレスBを現在記録アドレスAにコピーするようトレースメモリアドレス管理モジュール5に出力する(ステップS40)。このコピーにより、アドレスを戻して上書きを許容して、いままさに仮記録が完了したばかりのトレースログの仮記録を破棄する。
【0136】
本実施の形態によれば、最長となるトレースログ仮記録処理時間Tが更新されたときに、外部トリガ出力モジュール9が外部へ任意の波形を出力することができる。これにより、トレースログ仮記録処理時間Tの最長のときのアクチュエータ等の出力状態等の波形をオシロスコープ等によって取得することができ、問題発生時の波形とトレースログを解析することにより、問題箇所の早急な発見と解決を実現することができる。
【0137】
(実施の形態8)
本発明の実施の形態8にかかわるプログラムデバッグ装置は、ソフトウェア上の問題箇所の早急な発見と解決を図るべく、最長となるトレースログ仮記録処理時間Tが更新されたときにCPU1を停止させるように構成されたもので、ブレーク制御モジュールを備えたものである。
【0138】
図17は本発明の実施の形態8におけるプログラムデバッグ装置の構成を示すブロック図である。図17において、実施の形態1の図1におけるのと同じ符号は同一構成要素を指している。本実施の形態に特有の構成は、ブレーク制御モジュール10をさらに備えていることである。更新タイミング制御モジュール6は、現在記録アドレスAの更新/非更新を示すアドレス更新情報を出力できる機能をさらに備えている。ブレーク制御モジュール10は、アドレス更新情報とCPU1の状態により、CPU1を停止させるように構成されている。その他の構成については、実施の形態1と同様であるので、説明を省略する。
【0139】
図18は実施の形態8のプログラムデバッグ装置においてトレースメモリ11のアドレスを操作する動作を示すフローチャートである。実施の形態1の場合の図3のフローチャートのステップS30が図18のステップS33に置き換わっており、さらにステップS34が追加されている。実施の形態1の場合の図2のフローチャートは本実施の形態に踏襲される。
【0140】
最初に、任意の1つのイベントが成立してトレースログの仮記録を開始してから、さらに任意の1つのイベントが成立してトレースログの仮記録を終了したとき、トレースログの仮記録を開始してから終了するまでのプログラムのトレースログ仮記録処理時間Tが現在までにおいて最長か否かを判別する(ステップS10)。
【0141】
そして、トレースログ仮記録処理時間Tが現在までにおいて最長か否かに応じて処理を分岐する(ステップS20)。
【0142】
次に、トレースログ仮記録処理時間Tが現在までにおいて最長のとき、トレースログ記録確定制御手段4における更新タイミング制御モジュール6は、更新後の現在記録アドレスAを前回記録アドレスBにコピーするようトレースメモリアドレス管理モジュール5に出力するとともに、同時にブレーク制御モジュール10にアドレス更新情報として出力する(ステップS33)。このコピーにより、本記録が確定したトレースログのアドレスが前回記録アドレスBとしてバックアップされたことになる。
【0143】
次いでブレーク制御モジュール10はCPU1を停止させる(ステップS34)。この点が本実施の形態のポイントである。
【0144】
一方、トレースログ仮記録処理時間Tが現在までにおいて最長ではないとき、更新タイミング制御モジュール6は、更新後の前回記録アドレスBを現在記録アドレスAにコピーするようトレースメモリアドレス管理モジュール5に出力する(ステップS40)。このコピーにより、アドレスを戻して上書きを許容して、いままさに仮記録が完了したばかりのトレースログの仮記録を破棄する。
【0145】
本実施の形態によれば、最長となるトレースログ仮記録処理時間Tが更新されたときにCPU1を停止させることができる。これにより、トレースログ仮記録処理時間Tが最長のときのトレースログを用いてプログラムのデバッグを行うことができ、問題発生時の変数の状態や処理の状態をデバッグすることにより、問題箇所の早急な発見と解決を実現することができる。
【0146】
(実施の形態9)
本発明の実施の形態9はエミュレータシステムにかかわるものである。
【0147】
図19は本発明にかかわるエミュレータシステム20とその周辺の構成を示すブロック図である。
【0148】
エミュレータシステム20は、ホストIF回路21、エミュレーション機能22、エミュレーションROM/RAM23、マイクロコンピュータ周辺回路24および上述した実施の形態1〜8のいずれかのプログラムデバッグ装置Xから構成されている。30はパソコン・ソフト、40はユーザターゲットシステムである。
【0149】
ホストIF回路21は、パソコン・ホスト30からデバッグの指令を受け、デバッグしている状態や結果をパソコン・ホスト30に送信することができる。トレースログの送信も含まれる。
【0150】
プログラムデバッグ装置Xは、パソコン・ホスト30からデバッグの指令を受け、内部のCPU1は、エミュレーション機能22、エミュレーションROM/RAM23、マイクロコンピュータ周辺回路24の資源を利用してエミュレーションを行う。エミュレーション中、マイクロコンピュータ周辺回路24によりユーザターゲットシステム40を制御し、デバッグする。
【0151】
すなわち、エミュレータシステム20により、ユーザターゲットシステム40をデバッグ中、最長となるトレースログ仮記録処理時間Tが更新されたときのトレースログを取得し、パソコン・ホスト30によりトレースログを解析することによって、問題箇所の早急な発見と解決を実現することができる。
【産業上の利用可能性】
【0152】
本発明のプログラムデバッグ装置は、ソフトウェア上の問題を含んでいる可能性が高いイベントに関係するトレースログのトレースメモリへの記録において、トレースログを効果的に絞り込み、再現性が低く解析が難しい問題の特定を迅速・容易化する上で有用である。
【図面の簡単な説明】
【0153】
【図1】本発明の実施の形態1におけるプログラムデバッグ装置の構成を示すブロック図
【図2】本発明の実施の形態1のプログラムデバッグ装置におけるトレースログ仮記録の動作を示すフローチャート
【図3】本発明の実施の形態1のプログラムデバッグ装置におけるトレースメモリのアドレス操作のフローチャート
【図4】本発明の実施の形態1におけるトレースログ仮記録処理時間の長さの変遷の様子の説明図
【図5】本発明の実施の形態2におけるプログラムデバッグ装置の構成を示すブロック図
【図6】本発明の実施の形態2のプログラムデバッグ装置における記録先アドレスの操作のフローチャート
【図7】本発明の実施の形態3におけるプログラムデバッグ装置の構成を示すブロック図
【図8】本本発明の実施の形態4におけるプログラムデバッグ装置の構成を示すブロック図
【図9】本発明の実施の形態4における時刻情報を付帯するトレースログの一例を示す図
【図10】本発明の実施の形態4におけるトレースログ仮記録処理時間の判別のフローチャート
【図11】本発明の実施の形態5におけるプログラムデバッグ装置の構成を示すブロック図
【図12】本発明の実施の形態5におけるトレースログ仮記録処理時間の判別のフローチャート
【図13】本発明の実施の形態6におけるプログラムデバッグ装置の構成を示すブロック図
【図14】本発明の実施の形態6におけるトレースメモリのアドレス操作のフローチャート
【図15】本発明の実施の形態7におけるプログラムデバッグ装置の構成を示すブロック図
【図16】本発明の実施の形態7におけるトレースメモリのアドレス操作のフローチャート
【図17】本発明の実施の形態8におけるプログラムデバッグ装置の構成を示すブロック図
【図18】本発明の実施の形態8におけるトレースメモリのアドレス操作のフローチャート
【図19】本発明にかかわるエミュレータシステムとその周辺の構成を示すブロック図
【図20】従来技術のトレース機能とイベント機能を用いたプログラムデバッグ装置の構成を示すブロック図
【図21】従来技術の時間測定機能を追加したプログラムデバッグ装置の構成を示すブロック図
【符号の説明】
【0154】
1 CPU
2 イベント制御モジュール(イベント制御手段)
3 トレース制御モジュール(トレース制御手段)
4 トレースログ記録確定制御手段
5 トレースメモリアドレス管理モジュール(トレースメモリアドレス管理手段)
6 更新タイミング制御モジュール(更新タイミング制御手段)
7 時間測定モジュール(時間測定手段)
8 更新タイミングマスク制御モジュール(更新タイミングマスク制御手段)
9 外部トリガ出力モジュール(外部トリガ出力手段)
10 ブレーク制御モジュール(ブレーク制御手段)
11 トレースメモリ
20 エミュレータシステム
21 ホストIF回路
22 エミュレーション機能
23 エミュレーションROM/RAM
24 マイクロコンピュータ周辺回路
30 パソコン・ホスト
40 ユーザターゲットシステム
A 現在記録アドレス
B 前回記録アドレス
C トレース開始アドレス
X プログラムデバッグ装置
【特許請求の範囲】
【請求項1】
プログラムを実行するCPUと、
前記CPUによるプログラム実行処理の任意状態を定義するイベントを管理し、前記CPUによるプログラム実行処理の状態と比較して等価・非等価の判別結果であるイベント成立状態を出力するイベント制御手段と、
前記CPUによるプログラム実行処理のトレースログを記録しておくためのトレースメモリと、
前記イベント制御手段による前記イベント成立状態が有効のときに前記CPUによるプログラム実行処理のトレースログを前記トレースメモリに仮記録するトレース制御手段と、
前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長か否かに応じて、前記トレースメモリにおける前記トレースログの仮記録を本記録として確定するか破棄するかを制御するトレースログ記録確定制御手段とを備えたプログラムデバッグ装置。
【請求項2】
前記トレースログ記録確定制御手段は、現在記録アドレスと前回記録アドレスを管理するもので、前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長のときは、前記トレースメモリにおける次の現在記録アドレスとして更新後の現在記録アドレスを設定し、前記トレースログ仮記録処理時間が現在までにおいて最長でないときは、次の現在記録アドレスとして前回記録アドレスを設定することにより、現在記録アドレスの調整を行うトレースメモリアドレス管理手段を備えている請求項1に記載のプログラムデバッグ装置。
【請求項3】
前記トレースメモリアドレス管理手段は、前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長のときは、前記トレースメモリにおける更新後の現在記録アドレスを前回記録アドレスにコピーし、前記トレースログ仮記録処理時間が現在までにおいて最長でないときは、前回記録アドレスを現在記録アドレスにコピーするものとして構成されている請求項2に記載のプログラムデバッグ装置。
【請求項4】
さらに、前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長か否かを判断し、その判断結果に基づいて前記トレースメモリアドレス管理手段をタイミング制御する更新タイミング制御手段を備えている請求項2または請求項3に記載のプログラムデバッグ装置。
【請求項5】
前記トレースログ記録確定制御手段は、その都度の現在記録アドレスをトレース開始アドレスとして更新するように構成されている請求項1から請求項4までのいずれかに記載のプログラムデバッグ装置。
【請求項6】
前記トレースログ記録確定制御手段は、現在記録アドレスと前回記録アドレスとトレース開始アドレスを管理するもので、前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長のときは、前記前回記録アドレスを前記トレース開始アドレスに設定した上で、前記トレースメモリにおける更新後の現在記録アドレスを前回記録アドレスにコピーし、前記トレースログ仮記録処理時間が現在までにおいて最長でないときは、前回記録アドレスを現在記録アドレスにコピーするものとして構成されている請求項5に記載のプログラムデバッグ装置。
【請求項7】
さらに、前記イベント制御手段による前記イベント成立状態を入力してイベント成立間の最長時間を測定し、最長時間を更新したかしていないかを判別し、その判別結果である最長時間更新情報を前記更新タイミング制御手段に出力する時間測定手段を備え、
前記更新タイミング制御手段は、前記時間測定手段から入力する前記最長時間更新情報によって、前記トレースログ仮記録処理時間が現在までにおいて最長か否かを判断し、その判断結果に基づいて前記トレースメモリアドレス管理手段をタイミング制御するように構成されている請求項4に記載のプログラムデバッグ装置。
【請求項8】
前記更新タイミング制御手段は、時刻情報を付帯するトレースログを入力し、前記トレースログが付帯する前記時刻情報から前記トレースログ仮記録処理時間が最長時間を更新したか更新していないかを判別し、その判別結果である最長時間更新トレース情報に基づいて前記トレースメモリアドレス管理手段をタイミング制御するように構成されている請求項4に記載のプログラムデバッグ装置。
【請求項9】
前記更新タイミング制御手段は、入力されてくるトレースログと、前記イベント制御手段が管理するイベントとに基づいて、前記トレースログ仮記録処理時間が最長時間を更新したか更新していないかを判別し、その判別結果である最長時間更新イベントトレース情報に基づいて前記トレースメモリアドレス管理手段をタイミング制御するように構成されている請求項4に記載のプログラムデバッグ装置。
【請求項10】
さらに、前記更新タイミング制御手段による現在記録アドレスの更新制御の有効/無効を設定する更新タイミングマスク制御手段を備えている請求項1から請求項9までのいずれかに記載のプログラムデバッグ装置。
【請求項11】
前記更新タイミング制御手段は、現在記録アドレスの更新/非更新を示すアドレス更新情報を出力する機能を備え、さらに、前記更新タイミング制御手段から更新を示す前記アドレス更新情報を入力したときに任意の波形信号を外部トリガとして出力する外部トリガ出力手段を備えている請求項1から請求項10までのいずれかに記載のプログラムデバッグ装置。
【請求項12】
前記更新タイミング制御手段は、現在記録アドレスの更新/非更新を示すアドレス更新情報を出力する機能を備え、さらに、前記更新タイミング制御手段から更新を示す前記アドレス更新情報を入力したときに前記CPUの動作を停止させるブレーク制御手段を備えている請求項1から請求項11までのいずれかに記載のプログラムデバッグ装置。
【請求項13】
請求項1から請求項12までのいずれかに記載のプログラムデバッグ装置を搭載しているエミュレータシステム。
【請求項1】
プログラムを実行するCPUと、
前記CPUによるプログラム実行処理の任意状態を定義するイベントを管理し、前記CPUによるプログラム実行処理の状態と比較して等価・非等価の判別結果であるイベント成立状態を出力するイベント制御手段と、
前記CPUによるプログラム実行処理のトレースログを記録しておくためのトレースメモリと、
前記イベント制御手段による前記イベント成立状態が有効のときに前記CPUによるプログラム実行処理のトレースログを前記トレースメモリに仮記録するトレース制御手段と、
前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長か否かに応じて、前記トレースメモリにおける前記トレースログの仮記録を本記録として確定するか破棄するかを制御するトレースログ記録確定制御手段とを備えたプログラムデバッグ装置。
【請求項2】
前記トレースログ記録確定制御手段は、現在記録アドレスと前回記録アドレスを管理するもので、前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長のときは、前記トレースメモリにおける次の現在記録アドレスとして更新後の現在記録アドレスを設定し、前記トレースログ仮記録処理時間が現在までにおいて最長でないときは、次の現在記録アドレスとして前回記録アドレスを設定することにより、現在記録アドレスの調整を行うトレースメモリアドレス管理手段を備えている請求項1に記載のプログラムデバッグ装置。
【請求項3】
前記トレースメモリアドレス管理手段は、前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長のときは、前記トレースメモリにおける更新後の現在記録アドレスを前回記録アドレスにコピーし、前記トレースログ仮記録処理時間が現在までにおいて最長でないときは、前回記録アドレスを現在記録アドレスにコピーするものとして構成されている請求項2に記載のプログラムデバッグ装置。
【請求項4】
さらに、前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長か否かを判断し、その判断結果に基づいて前記トレースメモリアドレス管理手段をタイミング制御する更新タイミング制御手段を備えている請求項2または請求項3に記載のプログラムデバッグ装置。
【請求項5】
前記トレースログ記録確定制御手段は、その都度の現在記録アドレスをトレース開始アドレスとして更新するように構成されている請求項1から請求項4までのいずれかに記載のプログラムデバッグ装置。
【請求項6】
前記トレースログ記録確定制御手段は、現在記録アドレスと前回記録アドレスとトレース開始アドレスを管理するもので、前記トレース制御手段による前記トレースログ仮記録処理時間が現在までにおいて最長のときは、前記前回記録アドレスを前記トレース開始アドレスに設定した上で、前記トレースメモリにおける更新後の現在記録アドレスを前回記録アドレスにコピーし、前記トレースログ仮記録処理時間が現在までにおいて最長でないときは、前回記録アドレスを現在記録アドレスにコピーするものとして構成されている請求項5に記載のプログラムデバッグ装置。
【請求項7】
さらに、前記イベント制御手段による前記イベント成立状態を入力してイベント成立間の最長時間を測定し、最長時間を更新したかしていないかを判別し、その判別結果である最長時間更新情報を前記更新タイミング制御手段に出力する時間測定手段を備え、
前記更新タイミング制御手段は、前記時間測定手段から入力する前記最長時間更新情報によって、前記トレースログ仮記録処理時間が現在までにおいて最長か否かを判断し、その判断結果に基づいて前記トレースメモリアドレス管理手段をタイミング制御するように構成されている請求項4に記載のプログラムデバッグ装置。
【請求項8】
前記更新タイミング制御手段は、時刻情報を付帯するトレースログを入力し、前記トレースログが付帯する前記時刻情報から前記トレースログ仮記録処理時間が最長時間を更新したか更新していないかを判別し、その判別結果である最長時間更新トレース情報に基づいて前記トレースメモリアドレス管理手段をタイミング制御するように構成されている請求項4に記載のプログラムデバッグ装置。
【請求項9】
前記更新タイミング制御手段は、入力されてくるトレースログと、前記イベント制御手段が管理するイベントとに基づいて、前記トレースログ仮記録処理時間が最長時間を更新したか更新していないかを判別し、その判別結果である最長時間更新イベントトレース情報に基づいて前記トレースメモリアドレス管理手段をタイミング制御するように構成されている請求項4に記載のプログラムデバッグ装置。
【請求項10】
さらに、前記更新タイミング制御手段による現在記録アドレスの更新制御の有効/無効を設定する更新タイミングマスク制御手段を備えている請求項1から請求項9までのいずれかに記載のプログラムデバッグ装置。
【請求項11】
前記更新タイミング制御手段は、現在記録アドレスの更新/非更新を示すアドレス更新情報を出力する機能を備え、さらに、前記更新タイミング制御手段から更新を示す前記アドレス更新情報を入力したときに任意の波形信号を外部トリガとして出力する外部トリガ出力手段を備えている請求項1から請求項10までのいずれかに記載のプログラムデバッグ装置。
【請求項12】
前記更新タイミング制御手段は、現在記録アドレスの更新/非更新を示すアドレス更新情報を出力する機能を備え、さらに、前記更新タイミング制御手段から更新を示す前記アドレス更新情報を入力したときに前記CPUの動作を停止させるブレーク制御手段を備えている請求項1から請求項11までのいずれかに記載のプログラムデバッグ装置。
【請求項13】
請求項1から請求項12までのいずれかに記載のプログラムデバッグ装置を搭載しているエミュレータシステム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【公開番号】特開2010−186361(P2010−186361A)
【公開日】平成22年8月26日(2010.8.26)
【国際特許分類】
【出願番号】特願2009−30689(P2009−30689)
【出願日】平成21年2月13日(2009.2.13)
【出願人】(000005821)パナソニック株式会社 (73,050)
【Fターム(参考)】
【公開日】平成22年8月26日(2010.8.26)
【国際特許分類】
【出願日】平成21年2月13日(2009.2.13)
【出願人】(000005821)パナソニック株式会社 (73,050)
【Fターム(参考)】
[ Back to top ]