(57)【要約】【課題】デバッグ及び障害解析システムの技術において、ＲＯＭ上で動作するプログラムについてのイベントトレースを実施する際にも、ブレークポイントレジスタ数によらず、プログラムの任意数のイベントを取得できる技術を提供する。【解決手段】対象機器３００のＣＰＵ３１０によりＲＯＭ３３０上で実行されるプログラム（３３１）の実行を停止させる手段としてＣＰＵ強制停止信号を使う。ＩＣＥ装置２００−ＣＰＵ３１０間で、ＣＰＵ強制停止信号を発行してからＣＰＵ３１０が停止するまでの必要時間を考慮及び設定し、停止対象位置よりも前となるＣＰＵ強制停止信号発行位置を決定する。ＣＰＵ３１０のリアルタイムトレース機能３１１に基づき、プログラム（３３１）の実行上のＣＰＵ強制停止信号発行位置及びタイミングで、ＣＰＵ強制停止信号を発行して、停止及びイベント取得させる。【選択図】図１
2008033849.tif 000002
【特許請求の範囲】
【請求項１】
デバッグ及び障害解析の対象となる機器で実行されるプログラムについてのイベントトレースを実行する手段を備える障害解析システムであって、
イベントトレース機能を含むデバッグ機能を備え前記プログラムを格納するメモリと前記プログラムを実行するＣＰＵとを有する対象機器と、
前記対象機器のＣＰＵとインタフェースを介して接続され前記ＣＰＵのデバッグ機能及び前記インタフェースを介して前記ＣＰＵを制御するＣＰＵ制御機能を備えるＩＣＥ装置と、
前記ＩＣＥ装置と連携可能なＩＣＥ制御機能を備えるデバッガを有するホストコンピュータとを有し、
前記ＩＣＥ装置のＣＰＵ制御機能は、ＣＰＵ強制停止信号を前記対象機器のＣＰＵに対して発行及び出力する機能を有し、
前記対象機器のＣＰＵは、前記ＣＰＵ強制停止信号の入力により自身の動作を強制停止する機能を有し、
前記ホストコンピュータのデバッガからの制御に基づき、
前記ＣＰＵのイベントトレース機能により前記ＣＰＵから前記ＩＣＥ装置へ前記プログラムの実行のトレースを実行し、
前記ＩＣＥ装置と前記対象機器とにおける処理に必要な時間及び処理ステップに基づき、前記プログラム上で、ユーザにより登録されるイベント発生位置に対応した停止対象位置よりも前となる、前記ＣＰＵ強制停止信号の発行位置を決定し、
前記プログラムの実行中における前記トレースに基づく前記ＣＰＵ強制停止信号の発行位置及びタイミングで、前記ＩＣＥ装置のＣＰＵ制御機能から前記ＣＰＵに対して前記ＣＰＵ強制停止信号を発行及び出力し、前記ＣＰＵ強制停止信号の入力により前記ＣＰＵによる前記プログラムの実行の動作を前記停止対象位置またはその手前の位置で停止させ、前記停止対象位置でのイベントを取得することを特徴とする障害解析システム。
【請求項２】
請求項１記載の障害解析システムにおいて、
前記ＣＰＵのデバッグ機能は、リアルタイムトレース機能を備え、
前記リアルタイムトレース機能により前記ＣＰＵから前記ＩＣＥ装置へ前記プログラムの実行のリアルタイムトレースを実行し、
前記プログラムの実行中における前記リアルタイムトレースに基づく前記ＣＰＵ強制停止信号の発行位置及びタイミングで、前記ＩＣＥ装置のＣＰＵ制御機能から前記ＣＰＵに対して前記ＣＰＵ強制停止信号を発行及び出力することを特徴とする障害解析システム。
【請求項３】
請求項１記載の障害解析システムにおいて、
前記必要な時間として、
前記ＣＰＵのデバッグ機能により前記ＣＰＵ内に前記トレースの内容の第１のデータが記録されてから前記ＩＣＥ装置に対して送信されるまでの第１の時間と、
前記ＣＰＵのデバッグ機能が前記第１のデータを前記ＩＣＥ装置へ送信して前記ＩＣＥ装置が前記第１のデータを受信するまでの第２の時間と、
前記ＩＣＥ装置が前記受信した第１のデータをもとに前記ＣＰＵ強制停止信号を発行するか否かを判定する第３の時間と、
前記ＩＣＥ装置が前記ＣＰＵのデバッグ機能に対して前記ＣＰＵ強制停止信号を発行及び出力して前記ＣＰＵが前記ＣＰＵ強制停止信号を入力して前記プログラムの処理の動作を停止するまでの第４の時間と、を合わせた時間をもとに、
前記ＣＰＵ強制停止信号の発行位置及びタイミングを決定することを特徴とする障害解析システム。
【請求項４】
請求項１記載の障害解析システムにおいて、
前記対象機器は、組込みシステムであり、
前記メモリは、前記プログラムを格納するＲＯＭと、前記プログラムの一部を格納するＲＡＭとを有し、
前記ＣＰＵは、前記ＲＡＭを用いながら、前記ＲＯＭ上のプログラムを直接実行することを特徴とする障害解析システム。
【請求項５】
請求項１記載の障害解析システムにおいて、
前記ホストコンピュータのデバッガに対して、予め前記必要な時間及び処理ステップの定義が設定され、前記設定に基づき前記ＣＰＵ強制停止信号の発行位置が決定されることを特徴とする障害解析システム。
【請求項６】
請求項１記載の障害解析システムにおいて、
前記ＣＰＵは、前記プログラムについてのステップ実行機能を備え、前記ＣＰＵ強制停止信号の入力により前記プログラムの実行の動作を前記停止対象位置の手前の位置で停止し、前記ステップ実行機能により前記プログラムを前記停止対象位置までステップ実行して、前記停止対象位置でのイベントを取得することを特徴とする障害解析システム。
【請求項７】
請求項１記載の障害解析システムにおいて、
前記デバッガでは、ユーザにより前記イベントトレースの実行に係わるイベント情報が登録される処理を行い、
前記ＩＣＥ装置では、
前記イベント情報を格納する処理と、
前記ＣＰＵからの前記トレースのデータを格納する処理と、
前記トレースのデータと前記イベント情報のデータとを比較して前記トレースの対象であるか及び前記ＣＰＵ強制停止信号を発行するかを判定する処理と、
前記トレースのデータを前記デバッガへ転送する処理とを行い、
前記デバッガでは、前記トレースのデータを前記イベント情報の内容に基づき表示する処理を行うことを特徴とする障害解析システム。
【請求項８】
請求項１記載の障害解析システムにおいて、
前記デバッガは、前記ユーザにより登録されるイベント発生位置に応じて、前記プログラムの処理ステップを遡って関数の呼び出しの関係の解析により、前記ＣＰＵ強制停止信号の発行位置を決定することを特徴とする障害解析システム。
【請求項９】
請求項８記載の障害解析システムにおいて、
前記デバッガは、前記プログラムにおけるすべての分岐命令を含む箇所における分岐元アドレスと分岐先アドレスの関係の解析により、前記イベント発生位置に応じたすべての前記ＣＰＵ強制停止信号の発行位置を決定することを特徴とする障害解析システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを実行する情報処理装置及びシステムを対象としたデバッグ及び障害解析などを行うための情報処理装置及びシステムに関する。特に、デバッグ機能を持つＣＰＵと、ＣＰＵの制御が可能なＩＣＥ（In-Circuit Emulator）装置と、ＩＣＥ装置と連携可能なデバッガとを組み合わせて構成されるイベントトレースが可能な障害解析システムの技術に関する。
【背景技術】
【０００２】
従来のデバッガを用いたイベントトレースの技術では、特開２００１−３４５０３号公報（特許文献１）記載の技術のように、ブレークポイントを用いてプログラム上の任意の位置でイベントを発生させ、実行中のプログラムを停止し、停止したプログラムの情報を参照・取得することによって、トレースを実施している。
【０００３】
ブレークポイントの技術は、ＣＰＵのデバッグ機能として提供されるハードウェアブレークと、デバッグ対象のプログラムの一部をトラップ命令に置き換えるソフトウェアブレークとの２種類が存在する。
【０００４】
また、上記２種類のイベントトレースの他に、プログラムの挙動を確認する方法として、リアルタイムトレースがある。また、特開平１１−２４９５９号公報（特許文献２）に示されるように、リアルタイムトレース機能のリアルタイム性を向上させる手法として、トレース情報を可変長パケットで送信する方法が提案されている。
【特許文献１】特開２００１−３４５０３号公報
【特許文献２】特開平１１−２４９５９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従来技術において、前記ソフトウェアブレークを使ったイベントトレースでは、デバッガにより、プログラムのイベントを取得させる箇所の指定を行う。デバッガは、指定されたプログラムの位置を、プログラムの実行モジュール上のアドレス値に変更し、ターゲットボード（デバッグ対象機器）のメモリ上に格納されている実行モジュールのアドレス値の命令を、ＣＰＵのトラップ命令に置き換える。ＣＰＵがプログラムを実行中にトラップ命令を実行すると、ＣＰＵ自身が自身の機能を使って停止する。ＣＰＵが停止している間に、メモリ参照、レジスタ参照、スタックのトレースを実施し、時刻情報と共にバッファに記録する。
【０００６】
また、前記ハードウェアブレークを使ったイベント情報の取得では、デバッガを使ってイベントを取得させる箇所の指定を行う。デバッガは、指定されたプログラムの位置をプログラムの実行モジュール上のアドレス値に変更し、ターゲットボードのＣＰＵ上に存在するブレークポイントレジスタに登録する。ＣＰＵがプログラムを実行中にプログラムカウンタの値とブレークポイントレジスタの値とを比較し、一致した場合、ＣＰＵ自身を停止する。ＣＰＵが停止している間に、メモリ参照、レジスタ参照、スタックのトレースを実施し、時刻情報と共にバッファに記録する。
【０００７】
また、前記リアルタイムトレースは、ＣＰＵのデバッガ機能、ＩＣＥ装置、インタフェース用コネクタを用いて実現する。ＩＣＥ装置とＣＰＵは、インタフェース用コネクタで直接接続される。トレース対象のプログラムが実行されている間、ＣＰＵのデバッグ機能は、プログラムカウンタの値を監視する。プログラムカウンタの値が変更されると、ＣＰＵのデバッグ機能は、その値を、ＣＰＵの持つバッファエリアに記録する。バッファエリアに記録された値が閾値を超えると、ＣＰＵのデバック機能は、バッファに記録されたデータを、ＩＣＥ装置に対して送信する。ＩＣＥ装置は、データを受信すると、ＩＣＥ装置のバッファに、時刻情報と共に記録する。
【０００８】
従来技術のイベントトレース機能では、前述したようなブレークポイントを使用している。そのため、組込みシステムのプログラム等、ＲＯＭ上で動作するプログラムのイベントトレースを実施する場合、プログラムを書き換えるソフトウェアブレークポイントは使用できない。また、ハードウェアブレークポイントは、ＣＰＵの提供するブレークポイントレジスタの数に依存してしまい、任意の数のイベントを発生させることができない。
【０００９】
本発明は以上のような問題に鑑みてなされたものであり、その目的は、イベントトレースによるデバッグ及び障害解析システムの技術において、特に組込みシステム等、対象機器のメモリ（ＲＯＭ）上で動作するプログラムについてのイベントトレースを実施する際にも、対象機器（ＣＰＵ）によって提供されるブレークポイントレジスタの数に制限されることなく、プログラム中の任意数の停止対象位置（イベント発生位置）を登録することができ、それに伴い多数のイベントを取得することができる技術を提供することにある。
【課題を解決するための手段】
【００１０】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、次のとおりである。前記目的を達成するために、本発明は、デバッグ及び障害解析の対象となる機器で実行されるプログラムについてのイベントトレースを実行する手段を備える、組込みシステム等を対象とした障害解析システムの技術であって、イベントトレース機能を含むデバッグ機能を備えメモリ上のプログラムを実行するＣＰＵ（プロセッサ）を有する対象機器と、対象機器のＣＰＵとインタフェース（入出力機構）を介して接続されＣＰＵのデバッグ機能とインタフェースを介してＣＰＵを制御するＣＰＵ制御機能を備えるＩＣＥ装置と、ＩＣＥ装置と連携可能なＩＣＥ制御機能を備えるデバッガを有するホストコンピュータとを組み合わせて実現され、以下に示す技術的手段を備えることを特徴とする。
【００１１】
本システムは、イベントトレースのために対象機器のＣＰＵで実行中のプログラムを停止させるための手段として、ブレークポイントの手法は使用せず、ＣＰＵ強制停止信号（命令）を使用する。ホストコンピュータのデバッガからの制御に基づき、ＩＣＥ装置から対象機器のＣＰＵへインタフェースを介してＣＰＵ強制停止信号を与え、対応するＣＰＵ自身のＣＰＵ強制停止機能によりプログラム実行を停止させる。しかしながら、ＣＰＵ強制停止信号を用いる場合は、ブレークポイントの場合と異なり、プログラム中の特定の命令、即ち停止対象位置（イベント発生（取得）位置）及び対応する処理ステップなどを実行するタイミングでの停止は不可能である。
【００１２】
そこで、本発明では、ＣＰＵ強制停止信号を用いた場合における、ＩＣＥ装置と対象機器（ＣＰＵ）の間での実際にＣＰＵがプログラムを停止するまでの処理に必要となる時間（必要時間）の考慮及び設定に基づいて、目的の停止対象位置（イベント発生位置）よりも前の位置となる、ＣＰＵ強制停止信号発行位置（換言すればそれに対応するプログラム上の処理ステップ）を決定する。前記必要時間は、プログラム上の処理ステップなどと対応付けられる。前記必要時間は、予め考慮して、例えばユーザやメーカにより、システムのデバッガ等に設定する。
【００１３】
本システムは例えば以下の構成である。ＩＣＥ装置のＣＰＵ制御機能は、ＣＰＵ強制停止信号を対象機器のＣＰＵに対して発行及び出力する機能を有する。対象機器のＣＰＵは、ＣＰＵ強制停止信号の入力により自身の動作を強制停止する機能を有する。デバッガからの制御に基づき、ＣＰＵのイベントトレース機能によりＣＰＵからＩＣＥ装置へのプログラムの実行のトレースを実施する。ＩＣＥ装置と対象機器とにおける処理に必要な時間及び処理ステップに基づき、ユーザにより登録される停止対象位置（イベント発生位置）よりも前となる、ＣＰＵ強制停止信号の発行位置を決定する。プログラムの実行中の位置におけるトレースに基づく前記発行位置のタイミングで、ＩＣＥ装置からＣＰＵに対してＣＰＵ強制停止信号を発行及び出力し、これによりＣＰＵによるプログラムの実行の動作を停止対象位置またはその直前の位置で停止させ、停止対象位置でのイベントを取得する。
【００１４】
また特に、本システムは、ＣＰＵのデバッグ機能は、リアルタイムトレース機能を備え、リアルタイムトレース機能によりＣＰＵからＩＣＥ装置へのプログラムの実行のリアルタイムトレースを実施する。リアルタイムトレースに基づく前記発行位置のタイミングで、ＩＣＥ装置からＣＰＵに対してＣＰＵ強制停止信号を発行及び出力する。
【発明の効果】
【００１５】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば以下のとおりである。本発明によれば、イベントトレースによるデバッグ及び障害解析システムの技術において、特に組込みシステム等、対象機器のメモリ（ＲＯＭ）上で動作するプログラムについてのイベントトレースを実施する際にも、対象機器（ＣＰＵ）によって提供されるブレークポイントレジスタの数に制限されることなく、プログラム中の任意数の停止対象位置（イベント発生位置）を登録することができ、それに伴い多数のイベントを取得することができる。従って、組込みシステム等の対象機器のデバッグ及び障害解析の効率を向上できる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一部には原則として同一符号を付し、その繰り返しの説明は省略する。
【００１７】
（実施の形態１）
図１〜図１５を参照しながら本発明の実施の形態１の障害解析システムを説明する。図１は、障害解析システムの構成を示す。図２〜図５は、本システムで処理する情報データの例を示す。図６は、本システムでの特徴的な制御のための必要時間を示す。図７，図９〜図１０，図１３〜図１５は、本システムでの処理フローを示す。図８，図１１，図１２は、本システムで処理するプログラムの例を示す。
【００１８】
本実施の形態の障害解析システムは、組込みシステムである対象機器（３００）のＣＰＵ（３１０）及びＲＯＭ（３３０）上で実行するプログラム（３３１）について、ＣＰＵ強制停止信号（命令）を使用して、任意数のイベントトレースが実現可能なデバッグ及び障害解析を実現する情報処理システムである。なお、以下の説明では、プログラム上の１つの命令（あるいは処理ステップ）を実行するのに必要なサイクルの数は、どの命令でも１であるものとして説明する。この命令あたりの必要なサイクル数が命令によって異なる場合の構成では、ＣＰＵ（３１０）の仕様を参考に、命令あたりの必要なサイクル数を定義して、その値を使用すればよい。
【００１９】
＜システム＞
図１において、本障害解析システムの全体における機能ブロック構成を説明する。本障害解析システム（情報処理システム）１０００は、ホストコンピュータ１００と、ＩＣＥ装置（インサーキットエミュレータ装置）２００と、デバッグ対象機器（対象機器）３００とにより構成される。対象機器３００は、ユーザが使用するホストコンピュータ１００のデバッガ１１０及びそれと連携するＩＣＥ装置による、デバッグ及び障害解析の対象となる機器であり、例えば組込みシステムのマイコン基板である。
【００２０】
ホストコンピュータ１００では、デバッガ１１０が動作し、また、その他図示しないソフトウェアや入出力装置などが動作する。ＩＣＥ装置２００は、ＣＰＵ制御機能２０７などを有する独立した構成の装置であり、ホストコンピュータ１００のデバッガ１１０と対象機器３００との間に介在する。対象機器３００は、ＣＰＵ３１０と、ＲＡＭ３２０及びＲＯＭ３３０等のメモリとを有する構成である。ＩＣＥ装置２００と対象機器３００は、所定のインタフェースで接続される。
【００２１】
デバッガ１１０は、ユーザプログラム１１１、イベント情報登録機能１１２、ＣＰＵ強制停止信号発行位置決定機能１１３、必要時間定義１１４、イベント情報テーブル１１５、ＩＣＥ制御機能１１６、トレース結果表示機能１１７等を有する構成である。
【００２２】
ユーザプログラム１１１は、実行プログラム３３１と対応する、イベントトレース対象となるプログラムである。デバッガ１１０上のユーザプログラム１１１をもとに、ＩＣＥ装置２００を通じて、対象機器３００のＲＯＭ３３０上へ、実行プログラム（実行モジュール）３３１が導入される。
【００２３】
イベント情報登録機能１１２は、ユーザが、ユーザプログラム１１１（実行プログラム３３１）からイベントを発生させるプログラム上の位置（イベント発生（取得）位置）、取得する対象となる実行中のプログラムの内容、及びイベントトレース時に出力させたいメッセージ等を登録した場合に、イベント情報テーブル１１５にそれら（イベント情報）を記録・登録する処理を行う。
【００２４】
ＣＰＵ強制停止信号発行位置決定機能１１３は、イベント情報登録機能１１２によってイベント情報テーブル１１５の内容と、必要時間定義１１４からＣＰＵ強制停止信号の発行位置とを決定して、イベント情報テーブル１１５に記録する処理を行う。
【００２５】
必要時間定義１１４は、例えばユーザがシステム（対象機器３００とＩＣＥ装置２００を含む）のハードウェア仕様をもとに定義して設定する、ＩＣＥ装置２００−ＣＰＵ３１０間での実際の処理に必要な時間（処理ステップ）の情報である。この必要時間（ｔｘ）については図６にも示される。
【００２６】
イベント情報テーブル１１５は、プログラム上におけるイベント発生（取得）位置、取得対象となる実行中のプログラムの内容、ＣＰＵ強制停止信号を発行させる位置（ＣＰＵ強制停止信号発行位置）等の情報（イベント情報）が記録・登録されている。イベント情報テーブル１１５については図３にも示される。
【００２７】
ＩＣＥ制御機能１１６は、デバッガ１１０とＩＣＥ装置２００との間でのデータの送受信を実施し、ＩＣＥ装置２００を制御する。
【００２８】
トレース結果表示機能１１７は、ＩＣＥ制御機能１１６を使ってＩＣＥ装置２００からトレース結果を取得してホストコンピュータ１００上に表示する処理を行う。
【００２９】
ＩＣＥ装置２００は、イベント情報テーブル格納領域２０１、トレース対象判定機能２０２、変数情報取得機能２０３、トレース結果記録機能２０４、トレース結果格納領域２０５、トレース結果転送機能２０６、ＣＰＵ制御機能２０７を有する構成である。
【００３０】
イベント情報テーブル格納領域２０１は、ホストコンピュータ１００上のデバッガ１１０に組み込まれているＩＣＥ制御機能１１６から送信されるイベント情報テーブル１１５の内容が格納される領域である。
【００３１】
トレース対象判定機能２０２は、ＣＰＵ３１０のリアルタイムトレースの結果と、イベント情報テーブル格納領域２０１に記録されているデータとを比較して、ＣＰＵ強制停止信号を発行・送信するかどうか判定し、その判定結果が真の場合に、ＣＰＵ３１０上のＣＰＵ強制停止機能３１４に対しＣＰＵ強制停止信号を送信する。また、トレース対象判定機能２０２は、ＣＰＵ強制停止信号によりＣＰＵ３１０の実行プログラムの停止後（直後）に、ＣＰＵ３１０上のプログラムカウンタ３１６の値を参照し、その値（停止位置）がイベント情報テーブル格納領域２０１に記録されているデータにおける目的の停止位置（停止対象位置、イベント発生位置）よりも手前である場合は、ＣＰＵ３１０のステップ実行機能３１５を使い、前記目的の停止位置に一致するまでプログラムをステップ実行するように、ＣＰＵ３１０を制御する。
【００３２】
変数情報取得機能２０３は、ＣＰＵ強制停止信号により対象機器３００上で動作しているプログラムが停止した後に、ＣＰＵ３１０上のスタックポインタ３１７、汎用レジスタ３１８、メモリ（ＲＡＭ３２０及びＲＯＭ３３０）等から、プログラムの変数情報を取得する。
【００３３】
トレース結果記録機能２０４は、イベント情報テーブル格納領域２０１の情報を参照して、イベントトレースの結果をトレース結果格納領域２０５に記録する。
【００３４】
トレース結果格納領域２０５は、イベントトレースの結果が格納される領域である。
【００３５】
トレース結果転送機能２０６は、イベントトレース結果格納領域２０５の内容をホストコンピュータ１００上のデバッガ１１０のＩＣＥ制御機能１１６に転送する。
【００３６】
ＣＰＵ制御機能２０７は、デバッガ１１０のＩＣＥ制御機能１１６からの制御を受けて、対象機器３００のＣＰＵ３１０を制御し、プログラムの開始／終了を実施する。
【００３７】
対象機器３００において、ＣＰＵ３１０は、リアルタイムトレース機能３１１、リアルタイムトレース結果格納領域３１２、トレース結果転送機能３１３、ＣＰＵ強制停止機能３１４、ステップ実行機能３１５、プログラムカウンタ３１６、スタックポインタ３１７、汎用レジスタ３１８を有する構成である。ＣＰＵ３１０のデバッグ機能として、リアルタイムトレース機能３１１等の各機能を備えている。
【００３８】
リアルタイムトレース機能３１１は、プログラムカウンタ３１６の内容を、時刻情報とともにリアルタイムトレース結果格納領域３１２に格納する。
【００３９】
リアルタイムトレース結果格納領域３１２は、リアルタイムトレース結果が格納される領域である。
【００４０】
トレース結果転送機能３１３は、リアルタイムトレース結果格納領域３１２を監視し、その格納量が閾値を超えた場合に、トレース結果を、ＩＣＥ装置２００のトレース対象判定機能２０２に転送する。
【００４１】
ＣＰＵ強制停止機能３１４は、ＩＣＥ装置２００のトレース対象判定機能２０２に基づきＣＰＵ制御機能２０７から送信されるＣＰＵ強制停止信号を受信すると、ＣＰＵ３１０の動作、即ちプログラム（３３１）の実行を、強制停止する。
【００４２】
ステップ実行機能３１５は、プログラム（３３１）のステップ実行を行う。
【００４３】
プログラムカウンタ３１６は、実行中のプログラム（３３１）の命令のアドレス値が格納される。スタックポインタ３１７は、ＣＰＵ３１０の動作状態を保存する。汎用レジスタ３１８は、実行中のプログラム（３３１）の変数などが格納される。
【００４４】
組込みシステムである対象機器３００では、ＲＯＭ３３０上に、ユーザプログラム１１１に対応する実行プログラム３３１を有し、ＣＰＵ３１０がＲＡＭ３２０も用いながらＲＯＭ３３０上の実行プログラム３３１を直接実行する。ＲＡＭ３２０上の一部プログラム３２１は、実行プログラム３３１のうちの一部を一時的な処理のために読み書きしているものである。ＣＰＵ３１０は、ＲＯＭ３３０上の実行プログラム３３１における動的に変更する部分（プログラムコードの読み書き部分）については、プログラム実行時に、ＲＡＭ３２０上に一部プログラム３２１としてコピーして実行する。ＣＰＵ３１０は、ＲＯＭ３３０上の実行プログラム３３１におけるテキスト部分（プログラムコードの読み込み専用部分）については、プログラム実行時に、ＲＡＭ３２０上にコピーしない。
【００４５】
＜ユーザ登録イベント情報＞
図２において、ユーザがイベント情報登録機能１１２を使って登録するイベント情報の内容を説明する。このユーザ登録イベント情報４２９の内容としては、ＩＤ（識別情報）、イベント発生（取得）位置、メッセージ、参照変数情報などを有する。ＩＤは、イベントの管理番号である。イベント発生位置は、例えばプログラム名称とその行数（行番号）で表される。メッセージは、イベントトレースする際に記録・表示させるメッセージである。参照変数情報は、イベントトレース時に参照したい、実行中のプログラム（３３１）の変数の値である。この参照変数情報の内容は、イベント情報登録機能１１２により、イベント情報テーブル１１５の同一カラム名称の場所に記録される。
【００４６】
＜イベント情報テーブル＞
図３において、イベント情報テーブル１１５の内容（４３０）を説明する。このイベント情報テーブル１１５の内容（４３０）としては、図２のユーザ登録イベント情報４２９の内容（イベント発生位置、メッセージ、参照変数情報）の他に、イベント発生アドレス、ＣＰＵ強制停止信号発行位置（アドレス）、変数詳細（メモリ情報取得位置）などが登録される。
【００４７】
イベント発生アドレスは、イベント発生位置に対応する命令のアドレス値である。ＣＰＵ強制停止信号発行位置（アドレス）は、ＣＰＵ強制停止信号発行位置決定機能１１３によって決定されるＣＰＵ強制停止信号発行位置に対応する命令のアドレス値である。変数詳細（メモリ情報取得位置）は、取得する対象となる実行中のプログラムの内容を示す、取得する対象となるメモリ（ＲＡＭ３２０、ＲＯＭ３３０）のアドレス値、レジスタ（汎用レジスタ３１８等）などの情報が記載されている。
【００４８】
＜リアルタイムトレース結果＞
図４において、リアルタイムトレース機能３１１によってリアルタイムトレース結果格納領域３１２に記録されるリアルタイムトレース結果の内容（４３１）の一例を説明する。このリアルタイムトレース結果の内容（４３１）としては、リアルタイムトレースのログの通し番号であるＩＤ、トレースの時刻（時刻情報）、実行中の命令（命令のアドレス値を表すプログラムカウンタ３１６の値）等が記録される。
【００４９】
＜イベントトレース結果＞
図５において、トレース結果記録機能２０４によってトレース結果格納領域２０５に記録されるイベントトレース結果の内容（４３２）の一例を説明する。このイベントトレース結果の内容（４３２）としては、イベントトレースのログの通し番号であるＩＤ、トレースの時刻（時刻情報）、そして、トレース内容として、イベント情報テーブル１１５に記録されているメッセージ内容及び参照変数情報の参照結果などが記録される。
【００５０】
＜必要時間＞
図６において、必要時間（ｔｘ）、即ち、ＣＰＵ３１０のデバッグ機能によって、プログラムカウンタ３１６の値がＣＰＵ３１０内のバッファに記録されてから、ＩＣＥ装置２００側からＣＰＵ強制停止信号が発行されて、ＣＰＵ３１０が実際に動作を停止するに至るまでの処理に必要とする時間（遅延時間）について説明する。左側は、ＩＣＥ装置２００上の処理の流れ、右側は、ＣＰＵ３１０上の処理の流れを示している。処理上の位置として、時刻・時間と、実行プログラム（３３１）の処理ステップとが対応付けられる。
【００５１】
ＩＣＥ装置２００−ＣＰＵ３１０間において、ＣＰＵ３１０による実行プログラム３３１の実行中にて、ＣＰＵ強制停止信号発行位置に対応する命令が実行（Ｔ１）されてから、当該命令が実行されたことをＣＰＵ３１０から送信して（Ｔ２）、ＩＣＥ装置２００のトレース対象判定機能２０２が受信し（Ｔ３）、当該命令が実行されたことを判定してＣＰＵ強制停止信号を送信し（Ｔ４）、ＣＰＵ３１０による実行プログラム３３１の実行が停止する（Ｔ５）、といった一連の処理におけるｔ１〜ｔ４の合計の時間（必要時間ｔｘ）が必要である。
【００５２】
Ｔ０は、リアルタイムトレースの開始の位置を示す。Ｔ１は、ＣＰＵ強制停止信号発行位置（それに対応する命令が実行される位置）であり、実際の停止位置（Ｔ４）及び停止対象位置よりも前もってＣＰＵ強制停止信号を発行すべき位置を示す。Ｔ２は、ＣＰＵ３１０からＩＣＥ装置２００へのトレース結果の送信（転送）を開始する位置を示す。Ｔ３は、上記トレース結果の送信（転送）が終了する位置を示す。Ｔ４は、ＩＣＥ装置２００からＣＰＵ３１０へのＣＰＵ強制停止信号の送信を開始する位置を示す。Ｔ５は、上記ＣＰＵ強制停止信号の受信によりＣＰＵ３１０が実行プログラム３１１の実行を停止させる位置（実際の停止位置）を示す。
【００５３】
ｔ１は、ＣＰＵ３１０のデバッグ機能によってトレース結果がＣＰＵ３１０内のバッファ（リアルタイムトレース結果格納領域３１２）に記録されて、特にＣＰＵ強制停止信号発行位置（Ｔ１）から、ＩＣＥ装置２００に対して送信が開始（Ｔ２）されるまでの滞留時間である。ｔ２は、ＣＰＵ３１０のデバッグ機能がＩＣＥ装置２００のトレース対象判定機能２０２に対してトレース結果を送信する際に、ＣＰＵ３１０のデバッグ機能がトレース内容を送信してから、ＩＣＥ装置２００のトレース対象判定機能２０２がトレース結果を受け取るまでに必要なデータ転送時間である。ｔ３は、ＩＣＥ装置２００が、受信したトレース結果の情報をもとに、ＣＰＵ強制停止信号を発行するか否かを判定するのに要する判定時間である。ｔ４は、トレース対象判定機能２０２がＣＰＵ３１０のデバッグ機能に対し、ＣＰＵ強制停止信号を発行・送信してから、実際にＣＰＵ３１０が実行プログラム３３１の実行を停止するまでに要する時間である。上記実際の停止位置（Ｔ５）は、目的の停止対象位置（イベント発生位置）と一致することが望ましいが、その少し手前（直前）のステップの位置であっても問題ない。
【００５４】
＜ＣＰＵ強制停止信号発行位置の決定＞
次に、図７〜図９等を参照して、以下、図１の障害解析システムにおけるＣＰＵ強制停止信号発行位置決定機能１１３の処理について説明する。まず、ユーザは、ホストコンピュータ１００のデバッガ１１０において、イベント情報登録機能１１２を使い、図２に示したイベント情報を登録する。ユーザがすべてのイベント情報の登録を完了すると、イベント情報登録機能１１２は、そのイベント情報をもとに、イベント情報テーブル１１５に図３に示す様式で記録する。図７〜図９は、その動作のうち、ＣＰＵ強制停止位信号発行位置の登録を示している。
【００５５】
＜イベント情報登録＞
図７において、ユーザにより登録されるすべてのイベント情報を、一つずつイベント情報テーブル１１５に記録・登録する処理の流れを表している。なお図９，図１０は、図７の処理の一部を表している。これらの処理は、すべてユーザプログラム１１１における実行モジュール（実行プログラム３３１）を逆アセンブルした結果をもとに、処理が実施される。
【００５６】
図７のフローにおいて、処理が開始されると、まずＳ１（以下Ｓはフローの処理ステップを表す）で、実行プログラム３３１における遡るステップ数ｎを登録する。ここで、遡るステップ数ｎに関して説明する。
【００５７】
ＣＰＵ強制停止信号を使ってＣＰＵ３１０の動作（プログラム実行）を停止させる方法は、ブレークポイントを使用する方法とは異なる。ブレークポイントを使用する方法の場合、ユーザが定義したアドレスがＣＰＵ上のブレークポイントレジスタに登録され、そのアドレスが実行されるタイミングでＣＰＵの停止を行うことができる。
【００５８】
しかし本実施の形態のように、ＣＰＵ強制停止信号を使う方法の場合には、ＣＰＵ強制停止信号を発行してから実際にＣＰＵ３１０の動作を停止するまでに、先に図６に示したような遅延の必要時間（ｔｘ）が発生する。この時間（ｔｘ）は、先に説明した概略４つの時間（ｔ１〜ｔ４）の総和である。このようにＣＰＵ強制停止信号の発行から動作中のプログラム（３３１）が実際に停止するまでの時間（ｔｘ）を考慮した位置・タイミングでＣＰＵ強制停止信号を発行しないと、目的のアドレス（停止対象位置）を実行している時点（または直前）でＣＰＵ３１０の動作を停止することはできない。
【００５９】
先に示した必要時間（ｔｘ）は、以下に示す通り、システム（使用する対象機器３００）の仕様から前もって定義することができる時間（処理ステップ）である。例えば、ｔ１は、｛（ＣＰＵ３１０側のバッファメモリの大きさ）÷（書き込むデータの大きさ）×（１命令当たりの実行時間）｝となる。ｔ２は、｛（バッファの容量）÷（データ転送速度）｝となる。ｔ３は、使用するＩＣＥ装置２００の処理性能が、対象機器３００のＣＰＵ３１０の処理性能に対し十分に高速であると仮定して無視できる時間とする。ｔ４は、｛（ＣＰＵ強制停止信号の命令長）÷（データ転送速度）｝となる。以上から予め求めた時間の総和（ｔｘ）を、ＣＰＵ３１０の仕様で決まる１命令当たりの実行時間で割れば、遡るステップ数ｎが決定する。
【００６０】
プログラム（３３１）の実行上、停止対象位置（イベント発生位置）から上記遡るステップ数ｎ分だけ手前の位置及びタイミング（Ｔ１）に対応してＣＰＵ強制停止信号を発行するようにすれば、ＣＰＵ３１０は目的の位置（Ｔ５）またはその直前で動作停止することになる。この遡るステップ数ｎの値は、前もって求めておき、必要時間定義１１４として、デバッガ１１０に保存しておく。
【００６１】
次に、Ｓ２で、実行プログラム３３１における現在処理しているイベント発生位置を含む関数が、jump命令（分岐命令）を含むかどうかを、当該関数の先頭まで調べる。
【００６２】
図８はjump命令を含まない場合、図１１，図１２は含む場合の例である。各行で、アドレス、命令、オペランドを示している。Ｓ２で、当該関数の先頭は、プログラム（３３１）を参照すると、図８の関数ラベル４３３のステップ（行）に示すように、＜関数名＞（本例では＜main＞）という形などでラベル付けされているので、現在プログラム上の現在位置と、関数ラベルとの間の行で、jump命令が存在するか否かを調べればよい。jump命令を含む場合（Ｙ）は、Ｓ１０に進み、分岐命令（jump命令）を含む場合の処理を実施する。この処理は図１０で示される。jump命令を含まない場合（Ｎ）は、Ｓ３に進み、ｎにｎ−１を代入し、図８のステップ遡り４３４に示すように、処理するプログラムの部分を１ステップ遡る。
【００６３】
次に、Ｓ４で、ｎが０か否かを判定する。結果、ｎが０の場合（Ｙ）は、Ｓ９に進み、終了処理を実施する。この終了処理は図９で示される。ｎが０でない場合（Ｎ）は、Ｓ５に進み、現在位置が関数の先頭かどうかを調べる。関数の先頭だった場合（Ｙ）、Ｓ７に進む。関数ラベル４３３に示すラベルの情報を用いて、現在探索している関数を呼び出している箇所を検索する。その後、当該関数を呼び出している箇所すべてに対し、Ｓ３からの処理を繰り返す。関数の先頭で無い場合（Ｎ）、Ｓ６に進む。Ｓ６で現在位置が関数の呼び出し処理か否かを判定し、関数の呼び出し位置だった場合（Ｙ）、関数の先頭であった場合と同様にＳ７以降の処理を実施する。関数の呼び出し位置では無い場合（Ｎ）、Ｓ３に戻り、処理を繰り返す。
【００６４】
＜イベント情報登録の終了処理＞
図９において、図７におけるＳ９のイベント情報登録の終了処理を詳細に説明する。まずＳ１１で、現在位置（現在ステップ）が関数の先頭であるかどうかを判定する。関数の先頭で無い場合（Ｎ）、Ｓ１２に進み、現在位置が関数の呼び出し処理か否かを判定する。関数の呼び出し処理で無い場合（Ｎ）、Ｓ１４に進み、その時点で参照しているプログラムのアドレス値を、ＣＰＵ強制停止信号発行位置として登録する。このアドレス値は、図８では各行の先頭に記載されているアドレスに相当する。
【００６５】
Ｓ１１の判定にて現在位置が関数の先頭だった場合（Ｙ）及びＳ１２にて関数の呼び出し処理だった場合（Ｙ）、Ｓ１３に進む。Ｓ１３では、ユーザプログラム１１１すべてに対し、現在参照している関数を呼び出している箇所を検索する。現在参照している関数を呼び出している箇所のすべてに対し、Ｓ１４の処理を実施し、その時点で参照しているプログラムのラベル（アドレス値）を、ＣＰＵ強制停止信号発行位置としてイベント情報テーブル１１５に登録する。
【００６６】
＜分岐命令を含む場合の処理＞
図１０において、図７におけるＳ１０の分岐命令（jump命令）を含む場合の処理の実施を詳細に説明する。Ｓ１０において、関数内で、ループ処理や分岐処理といったjump命令を含む場合、Ｓ２１に進み、ループ処理や分岐処理の先頭箇所（アドレス）と末端箇所（アドレス）を検索・登録する。
【００６７】
ループ処理の場合は、図１１のループ制御４３５（ループ処理の末端から先頭へのjumpの例）に示す通り、末端の分岐処理のjump先が、ループ制御の先頭アドレスを指しているので、末端のjump命令のアドレスと、末端のjump命令のjump先であるアドレスとを登録すれば、前記先頭箇所と末端箇所の登録が可能である。
【００６８】
分岐処理の場合は、図１２の第１及び第２の分岐処理の構造（ステップ群）４３６，４３７に示すように、分岐に一致するか否かの判定を行う比較処理（「cmpl」）、比較マッチ（一致）しない場合における次の比較処理へのjump処理（「jne」）、比較マッチ時の実処理（「mov」「callq」）、分岐処理を抜けるためのjump処理、といった塊の組み合わせで成り立っている。つまり比較命令の次に必ずjump命令が来て、その後もう一度jump命令が来るという処理が、分岐の数だけ存在する。よって、１ステップずつ遡りながら、最初に見つけたjump命令のjump先を末端箇所４３８として登録し、その時点から前にある（比較命令＋jump命令）の組み合わせを、関数の先頭まで捜査し、（比較命令＋jump命令）の先頭にある比較命令のアドレスを先頭箇所として登録すれば、前記先頭箇所と末端箇所の登録が可能である。
【００６９】
次にＳ２２に進み、ｎにｎ−１を代入し、プログラムを１ステップ遡る。次にＳ２３に進み、その時点でｎが０か否かを判定する。ｎ＝０の場合（Ｙ）、Ｓ３２に進み、前記図９の終了処理を実施して終了する。ｎが０でない場合（Ｎ）、Ｓ２４に進み、その時点で参照しているプログラムが、Jump命令の末端部か否かを判定する。Jump命令の末端部で無い場合（Ｎ）、Ｓ２３に戻る。Jump命令の末端部だった場合（Ｙ）、Ｓ２５に進み、現在位置をJump命令の先頭箇所に置き換える。次にＳ２６に進みｎにｎ−１を代入し、プログラムを１ステップ遡る。次にＳ２７に進み、その時点でｎが０か否かを判定する。ｎ＝０の場合（Ｙ）、Ｓ３２に進み、前記終了処理を実施して終了する。
【００７０】
Ｓ２７で、ｎが０で無い場合（Ｎ）、Ｓ２８に進み、現在位置が関数の先頭かどうかを調べる。関数の先頭だった場合（Ｙ）、Ｓ３０に進み、ユーザプログラム１１１すべてに対し、現在探索している関数を呼び出している箇所を検索する。そしてその結果をもとに、Ｓ３１に進み、呼び出している箇所すべてに対し終了処理を実施する。関数の先頭で無い場合（Ｎ）、Ｓ２９に進み、現在位置が関数の呼び出し位置か否かを判定する。関数の呼び出し位置だった場合（Ｙ）、関数の先頭であった場合と同様にＳ３０以降の処理を実施する。関数の呼び出し位置では無い場合（Ｎ）、Ｓ２６に戻り、処理を繰り返す。
【００７１】
上記処理に関して、変数情報の取得位置の決定では、ユーザプログラム１１１の情報（コンパイルされたもの）に、ベースポインタからのオフセット値、参照するレジスタの値、メモリ（ＲＡＭ３２０等）上のアドレス値などが記載されているので、その値を登録する。
【００７２】
＜イベントトレース＞
次に、図１３〜図１５及び前記図４，図５等を参照して、イベント情報テーブル１１５に登録した内容を用いたイベントトレースの処理について説明する。図１３のフローは、イベント情報のＩＣＥ装置２００への登録から実際にイベントトレースを実施する流れについて示している。図１４のフローは、対象機器３００がリアルタイムトレースを実施して、ＩＣＥ装置２００に送信する処理を詳細に示している。図１５は、ＩＣＥ装置２００がリアルタイムトレース結果を受信し、イベントを発生させる箇所か否かを判定し、イベントを発生させてイベントトレースを実施する詳細を示している。
【００７３】
まず、図１３において、イベントトレースの流れを説明する。まずＳ４１に進み、ユーザは、デバッガ１１０のＩＣＥ制御機能１１６を使い、イベント情報テーブル１１５の情報を、ＩＣＥ装置２００のイベント情報テーブル格納領域２０１に送信する。次にＳ４２に進み、デバッガ１１０のＩＣＥ制御機能１１６を使い、ユーザプログラム１１１をＩＣＥ装置２００のＣＰＵ制御機能２０７に送信し、ＣＰＵ制御機能２０７から対象機器３００のメモリ（ＲＯＭ３３０）にプログラム（実行プログラム３３１）を送信する。次にＳ４３に進み、ＣＰＵ３１０でＲＯＭ３３０上のプログラム（実行プログラム３３１）を実行すると、ＣＰＵ３１０のリアルタイムトレース機能３１１が動作をはじめ、結果としてイベントトレースが開始される。
【００７４】
＜リアルタイムイベントトレース＞
次に、図１４において、公知技術であるリアルタイムトレース処理を説明する。プログラムが動作すると、ＣＰＵ３１０がトレースを取得し、インタフェースとしてＪＴＡＧインタフェース等を使い、対象機器３００からＩＣＥ装置２００やデバッガ１１０に結果を送信する、という仕組みは、例えば特許文献２（特開平１１−２４９５９号公報）等でも述べられているが、ここでは図１４を参照して簡単に説明する。
【００７５】
対象機器３００でＣＰＵ３１０によりプログラム（３３１）が動作を開始すると、Ｓ５１に進み、リアルタイムトレース機能３１１が動作を開始し、リアルタイムトレースの実行が開始される。次にＳ５２に進み、リアルタイムトレース機能３１１が、ＣＰＵ３１０のプログラムカウンタ３１６の値が変更されると、リアルタイムトレース結果格納領域３１２にトレース結果を格納する。次にＳ５３に進み、トレースの終了処理（その情報）がＣＰＵ制御機能２０７から送信されていないか判定し、終了の場合は（Ｙ）、トレースの処理を終了する。トレースを継続する場合は（Ｎ）、Ｓ５４に進み、リアルタイムトレース結果格納領域３１２に格納されているデータ（トレースデータ）が、送信対象となる数（閾値）を超えているか否か判定し、閾値を超えていた場合は（Ｎ）、Ｓ５５に進み、トレース対象判定機能２０２に対し、当該トレースデータを送信する。次にＳ５６に進み、リアルタイムトレース結果格納領域３１２における、送信完了データの位置付けを更新する。その後、Ｓ５２に戻り、リアルタイムトレース処理を続ける。Ｓ５４において、閾値を超えていない場合は（Ｙ）、その時点でＳ５２に戻り、リアルタイムトレース処理を続ける。
【００７６】
＜リアルタイムイベントトレース＞
次に、図１５において、ＩＣＥ装置２００がリアルタイムトレース結果を受信してから、イベントを発生位置か否かを判定し、イベントを発生させてイベントトレースを実施する詳細を説明する。対象機器３００でリアルタイムトレース機能３１１が動作を開始すると、トレース結果転送機能３１３から定期的にトレース結果がトレース対象判定機能２０２に送信される。トレース対象判定機能２０２は、受信した全データに対し（Ｓ６１）、イベント情報テーブル格納領域２０１に格納されている情報を参照して、Ｓ６２からＳ６９の処理を実施する。
【００７７】
Ｓ６２では、イベント情報テーブル１１５に登録されている命令かどうかの判定を実施する。登録されていない命令の場合は（Ｎ）、次のデータを処理するためにＳ６３に進み、処理を継続する。登録されている命令の場合は（Ｙ）、Ｓ６４に進み、ＣＰＵ制御機能２０７を使い、ＣＰＵ強制停止信号を、ＣＰＵ３１０のＣＰＵ強制停止信号機能３１４に対し送信する。次にＳ６５に進み、変数情報取得機能２０３を使い、ＣＰＵ３１０のプログラムカウンタ３１６の情報を取得する。
【００７８】
次にＳ６６に進み、イベント情報テーブル格納領域２０１に登録されている命令のアドレスと、プログラムカウンタ３１６に保存されている命令のアドレスとが一致するか否かを判定し、一致する場合は（Ｙ）、Ｓ６８に進み、スタックポインタ３１７、汎用レジスタ３１８、メモリ（ＲＯＭ３３０及びＲＡＭ３２０）等の値を参照することにより、スタックフレーム上にある局所変数の値や、レジスタの値、メモリ上にある変数の値などを取得する。そして、それらをトレース結果として、トレース結果記録機能２０４を使い、トレース結果格納領域２０５に記録する。その後、Ｓ６９に進み、ＣＰＵ制御機能２０７を使い、ＣＰＵ３１０の停止状態を解除して、受信データの処理を続ける。
【００７９】
以上のように、実施の形態１によれば、ユーザは、ユーザプログラム１１１についてのイベントトレースを、ブレークポイントを使わずに、ＣＰＵ強制停止信号を用いて実施することができる。それにより、組込みシステム等のように、ＲＯＭ３３０上で実行プログラム３３１が動作する場合でも、任意数のイベントを発生させてトレースを実施することが実現できる。
【００８０】
（実施の形態２）
次に、図１６〜図１７を参照しながら実施の形態２を説明する。実施の形態２は、基本構成については実施の形態１と同様であり、ＣＰＵ強制停止信号発行位置決定機能１１３におけるＣＰＵ強制停止信号発行位置の決定についての別の手法による構成例である。図１６，図１７に示すこの決定手法は、実施の形態１の図６，図８，図９の処理の別例であり、その他の処理は、実施の形態１と同様である。なお、プログラムにおける遡るステップ数（ｎ）は、実施の形態１と同様の方法によって予め定義しておく。
【００８１】
図１６（ａ）において、分岐処理を含む場合のプログラム（３３１）例の一部をグラフ化したものを示している。処理ステップの軸に沿って、左側枠は処理ステップのアドレスを示し、丸印は分岐命令４０やその分岐先アドレス４１の位置を示し、三角印はＣＰＵ強制停止信号発行位置３９やイベント発生位置（停止対象位置）４２を示す。ステップ群４４は、連続する命令などの塊や範囲であり、必要時間ｔｘ（全部または一部）に対応する。図１６（ｂ）はそれに対応する分岐ノード表４３であり、分岐命令４０、分岐元アドレス及び分岐先アドレス４１の対応関係を示す。
【００８２】
プログラムは、基本的には先頭から末端に向かってシーケンシャルに処理が実施される。しかしながら、実際には、分岐命令４０のように、プログラムの途中で処理の流れを別ける命令が含まれる場合が多く、これによりプログラムの処理の流れが複数あることが殆どである。
【００８３】
そこで、プログラムにおけるすべての処理の流れを網羅するために、プログラム（実行プログラム３３１）の逆アセンブル結果におけるすべての分岐命令４０（jump命令など）を抜き出し、その分岐命令４０に対応する、分岐命令のラベルを分岐元アドレスとし、分岐命令の引数のアドレスを分岐先のアドレスとして、図１６（ｂ）のような分岐ノード表４３の形式で登録する。
【００８４】
ユーザが登録したイベント発生位置４２から、プログラム上で任意数のステップだけ遡る場合、１ステップ遡る毎に、分岐ノード表４３の分岐先アドレスの何れかと、現在参照している命令のラベルとが一致しているかを参照し、一致した場合は、現在参照している命令と連続している命令を引き続き遡るだけでなく、分岐先アドレス４１に対応する分岐元アドレスからも遡り、ＣＰＵ強制停止信号発行位置３９を決定する。これにより、プログラム上でイベント発生位置４２に繋がるすべての処理の流れを網羅することができる。
【００８５】
図１６の例で説明すると、プログラム上で、あるイベント発生位置４２のアドレス‘0x0500’からステップを遡っている際に、アドレス‘0x0400’に到達した場合、まず、分岐先アドレス４１である‘0x0400’に連続する命令を引き続き遡って、ステップ群４４におけるＣＰＵ強制停止信号発行位置３９（アドレス‘0x0350’と‘0x0400’の間にある）を決定する。そしてそれだけでなく、当該分岐先アドレス４１である‘0x0400’に対応する分岐元アドレス‘0x0100’及び‘0x0200’に連続する命令も遡る対象に追加して、ステップ群４４におけるＣＰＵ強制停止信号発行位置３９（アドレス‘0x0100’，‘0x0200’の手前にある）を決定する。
【００８６】
図１７において、上記に関する具体例として、図１６（ｂ）の分岐ノード表４３を使って、ＣＰＵ強制停止信号発行位置を決定する処理について説明する。最初に、Ｓ７１に進み、パラメータｎに、予め定義してある、遡るステップ数を登録する。次にＳ７２に進み、ｎにｎ−１を代入する。次にＳ７３に進み、ｎが０であるか判定する。０の場合は（Ｙ）、Ｓ７６に進み、現在参照している命令のラベル（アドレス）を、ＣＰＵ強制停止信号発行位置として、イベント情報テーブル１１５に登録する。０でない場合は（Ｎ）、Ｓ７４で、現在位置が分岐先命令（アドレス）であるか、分岐ノード表４３を参照して判定する。分岐先命令の場合は（Ｙ）、Ｓ７５に進み、現在参照している命令のラベルに加え、分岐ノード表４３における分岐先アドレスが一致しているすべての行の分岐元アドレスを、処理の対象に追加し、Ｓ７２に戻って処理を繰り返す。これらをｎ＝０になるまで繰り返す。
【００８７】
以上のように、実施の形態２によれば、プログラム（３３１）の分岐構造をすべて把握することにより、ユーザが定義したイベント発生位置（４２）に到達するすべてのフロー上において、ＣＰＵ強制停止信号発信位置（３９）を定義することが可能となる。よって、プログラム（３３１）の実行上のいずれの分岐のフローにも対応してＣＰＵ強制停止信号を発行してイベント発生位置（４２）で停止させてイベントを取得することができる。
【００８８】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
【産業上の利用可能性】
【００８９】
本発明は、デバッグや障害解析を行う情報処理システム及び装置に利用可能である。
【図面の簡単な説明】
【００９０】
【図１】本発明の実施の形態１における障害解析システムの全体の機能ブロック構成を示す図である。
【図２】本発明の実施の形態１の障害解析システムにおける、ユーザが登録するイベント情報の内容を示す図である。
【図３】本発明の実施の形態１の障害解析システムにおける、イベント情報テーブルの内容を示す図である。
【図４】本発明の実施の形態１の障害解析システムにおける、リアルタイムトレースの結果の一例を示す図である。
【図５】本発明の実施の形態１の障害解析システムにおける、イベントトレースの結果の一例を示す図である。
【図６】本発明の実施の形態１の障害解析システムにおける、ＩＣＥ装置と対象機器のＣＰＵとの間における処理に必要な時間を説明するための図である。
【図７】本発明の実施の形態１の障害解析システムにおける、ユーザが登録したイベント情報をイベント情報テーブルに記録・登録する処理のフロー図である。
【図８】本発明の実施の形態１の障害解析システムにおける、プログラムにおける、ラベル（アドレス）と処理ステップ遡りに関する説明のための図である。
【図９】本発明の実施の形態１の障害解析システムにおける、図６の終了処理の詳しいフロー図である。
【図１０】本発明の実施の形態１の障害解析システムにおける、図６の分岐命令（jump命令）を含む場合の処理の詳しいフロー図である。
【図１１】本発明の実施の形態１の障害解析システムにおける、プログラムにおける、ループ処理の先頭部と末端部の探索に関する説明のための図である。
【図１２】本発明の実施の形態１の障害解析システムにおける、プログラムにおける、分岐処理の先頭部と末端部の探索に関する説明のための図である。
【図１３】本発明の実施の形態１の障害解析システムにおける、イベントトレースの処理のフロー図である。
【図１４】本発明の実施の形態１の障害解析システムにおける、リアルタイムトレース処理のフロー図である。
【図１５】本発明の実施の形態１の障害解析システムにおける、イベントトレースの詳細な処理のフロー図である。
【図１６】本発明の実施の形態２の障害解析システムにおける、（ａ）プログラムの分岐構成のグラフ化と、（ｂ）分岐ノード表とを示す図である。
【図１７】本発明の実施の形態２の障害解析システムにおける、分岐ノード表を用いたＣＰＵ強制停止信号発行位置決定処理のフロー図である。
【符号の説明】
【００９１】
１００…ホストコンピュータ、１１０…デバッガ、１１１…ユーザプログラム、１１２…イベント情報登録機能、１１３…ＣＰＵ強制停止信号発行位置決定機能、１１４…必要時間定義、１１５…イベント情報テーブル、１１６…ＩＣＥ制御機能、１１７…トレース結果表示機能、２００…ＩＣＥ装置、２０１…イベント情報テーブル格納領域、２０２…トレース対象判定機能、２０３…変数情報取得機能、２０４…トレース結果記録機能、２０５…トレース結果格納領域、２０６…トレース結果転送機能、２０７…ＣＰＵ制御機能、３００…デバッグ対象機器、３１０…ＣＰＵ、３１１…リアルタイムトレース機能、３１２…リアルタイムトレース結果格納領域、３１３…トレース結果転送機能、３１４…ＣＰＵ強制停止機能、３１５…ステップ実行機能、３１６…プログラムカウンタ、３１７…スタックポインタ、３１８…汎用レジスタ、３２０…ＲＡＭ、３２１…一部プログラム、３３０…ＲＯＭ、３３１…実行プログラム、４２９…ユーザ登録イベント情報、４３０…イベント情報テーブル（内容）、４３１…リアルタイムトレース結果（内容）、４３２…イベントトレース結果（内容）、４３３…関数ラベル、４３４…ステップ遡り、４３５…ループ制御、４３６，４３７…分岐処理の構造、４３８…末端箇所、４３９…ＣＰＵ強制停止信号発行位置、４４０…分岐命令、４４１…分岐先アドレス、４４２…イベント発生位置、４４３…分岐ノード表。
【図１】
2008033849.tif 000003
【図２】
2008033849.tif 000004
【図３】
2008033849.tif 000005
【図４】
2008033849.tif 000006
【図５】
2008033849.tif 000007
【図６】
2008033849.tif 000008
【図７】
2008033849.tif 000009
【図８】
2008033849.tif 000010
【図９】
2008033849.tif 000011
【図１０】
2008033849.tif 000012
【図１１】
2008033849.tif 000013
【図１２】
2008033849.tif 000014
【図１３】
2008033849.tif 000015
【図１４】
2008033849.tif 000016
【図１５】
2008033849.tif 000017
【図１６】
2008033849.tif 000018
【図１７】
2008033849.tif 000019