(57)【要約】【課題】デバッグ対象のプログラム、機器の通常の動作で得られる情報から、過去の任意時点でのメモリ状態を再現する。【解決手段】バスアクセス情報記憶部１は、デバッグ対象機器のＣＰＵとメモリ間のバス上に流れるデータを時間順に整列させたバスアクセス情報を記憶する。デバッグ対象機器にて障害が発生した場合に、バス情報解析部２が、障害発生時のメモリ情報６をもとに過去の特定時点までバスアクセス情報のレコードを遡ってバスアクセス情報を解析する。バス情報解析部２は、バスアクセスがメモリへのＲｅａｄならば読み出されたデータ値を当該アドレスの特定時点での記憶内容として確定し、メモリへのＷｒｉｔｅならばデータが書き込まれたアドレスを不定領域とする。不定領域探索部５は、バスアクセス情報を特定時点から更に遡って解析し、特定時点での不定領域の記憶内容を特定して、特定時点でのメモリ内容を再現する。【選択図】図１
2008191796.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサとメモリを用いてプログラムを実行するプログラム実行装置おけるプログラムの実行に対する解析を行う解析装置であって、
前記プログラム実行装置のプログラムの実行において障害が発生した場合に、前記障害の発生までに前記プロセッサと前記メモリとの間で利用された情報が時系列で示されている時系列情報を時系列上の特定時点まで遡って解析し、前記メモリの記憶領域ごとに前記特定時点での記憶内容を特定する時系列情報解析部と、
前記メモリ内の記憶領域のうち前記時系列情報解析部による解析によっても記憶内容が特定されない記憶領域を不定領域として管理する不定領域管理部と、
前記時系列情報を前記特定時点から更に遡って解析し、前記特定時点での前記不定領域の記憶内容を特定する不定領域探索部とを有することを特徴とする解析装置。
【請求項２】
前記解析装置は、更に、
前記メモリから前記プロセッサへ読み出された読み出しデータの値と読み出しのあった記憶領域とが示されるレコード及び前記プロセッサから前記メモリに書き込まれた書き込みデータの値と書き込みのあった記憶領域とが示されるレコードを少なくとも有する複数レコードの情報を前記時系列情報として記憶する時系列情報記憶部を有し、
前記時系列情報解析部は、
前記時系列情報のレコードを時系列上の特定時点まで遡りながら取得し、取得したレコードに読み出しデータの値が示されている場合に、当該読み出しデータの値を当該レコードに示されている記憶領域の前記特定時点での記憶内容として特定し、取得したレコードに書き込みデータの値が示されている場合に、当該レコードに示されている記憶領域を不定領域とすることを特徴とする請求項１に記載の解析装置。
【請求項３】
前記不定領域探索部は、
前記時系列情報のレコードを前記特定時点から更に遡りながら取得し、取得したレコードに示されている記憶領域が不定領域に一致するか否かを判断し、取得したレコードに示されている記憶領域が不定領域に一致する場合に、当該レコードに示されているデータの値を前記特定時点での前記不定領域の記憶内容として特定することを特徴とする請求項２に記載の解析装置。
【請求項４】
前記解析装置は、
前記障害が発生した際の前記メモリの記憶内容を記憶領域ごとに示すメモリ情報を、記憶領域ごとに、前記時系列情報解析部により特定された記憶内容及び前記不定領域探索部により特定された記憶内容のいずれかに更新するメモリ情報更新部を有することを特徴とする請求項１に記載の解析装置。
【請求項５】
前記解析装置は、更に、
前記プロセッサがプログラムの実行においてフェッチした命令のプログラムカウンタ値が各レコードに示されている複数レコードの情報を前記時系列情報として記憶する時系列情報記憶部を有し、
前記時系列情報解析部は、
前記時系列情報の複数レコードのうち特定のプログラムカウンタ値が示されているレコードを時系列上の前記特定時点とし、前記特定のプログラムカウンタ値が示されているレコードまで時系列情報のレコードを遡って取得し、取得した各々のレコードを解析し、
前記不定領域探索部は、
前記特定のプログラムカウンタ値が示されているレコードから更に遡って時系列情報のレコードを取得し、取得した各々のレコードを解析することを特徴とする請求項１に記載の解析装置。
【請求項６】
前記解析装置は、更に、
前記メモリから前記プロセッサへ読み出された読み出しデータの値と読み出しのあった記憶領域とが示されるレコード及び前記プロセッサから前記メモリに書き込まれた書き込みデータの値と書き込みのあった記憶領域とが示されるレコードを少なくとも有する複数レコードの情報を前記時系列情報として記憶する時系列情報記憶部を有し、
前記時系列情報解析部は、
前記時系列情報の複数レコードのうち特定のデータ値及び特定の記憶領域の少なくともいずれかが示されているレコードを時系列上の前記特定時点とし、前記特定のデータ値及び特定の記憶領域の少なくともいずれかが示されているレコードまで時系列情報のレコードを遡って取得し、取得した各々のレコードを解析し、
前記不定領域探索部は、
前記特定のデータ値及び特定の記憶領域の少なくともいずれかが示されているレコードから更に遡って時系列情報のレコードを取得し、取得した各々のレコードを解析することを特徴とする請求項１に記載の解析装置。
【請求項７】
前記不定領域探索部は、
解析の対象となる記憶領域の範囲を解析対象記憶領域範囲として指定し、
前記時系列情報のレコードを前記特定時点から更に遡りながら取得し、取得したレコードに示されている記憶領域が解析対象記憶領域範囲に含まれるか否かを判断し、取得したレコードに示されている記憶領域が解析対象記憶領域範囲に含まれる場合に、取得したレコードに示されている記憶領域が不定領域に一致するか否かを判断することを特徴とする請求項３に記載の解析装置。
【請求項８】
プロセッサとメモリを用いてプログラムを実行するプログラム実行装置に対する解析をコンピュータが行う解析方法であって、
前記プログラム実行装置のプログラムの実行において障害が発生した場合に、前記障害の発生までに前記プロセッサと前記メモリとの間で利用された情報が時系列で示されている時系列情報を、前記コンピュータが時系列上の特定時点まで遡って解析し、前記メモリの記憶領域ごとに前記特定時点での記憶内容を特定する時系列情報解析ステップと、
前記コンピュータが、前記メモリ内の記憶領域のうち前記時系列情報解析ステップによる解析によっても記憶内容が特定されない記憶領域を不定領域として管理する不定領域管理ステップと、
前記コンピュータが、前記時系列情報を前記特定時点から更に遡って解析し、前記特定時点での前記不定領域の記憶内容を特定する不定領域探索ステップとを有することを特徴とする解析方法。
【請求項９】
プロセッサとメモリを用いてプログラムを実行するプログラム実行装置に対する解析をコンピュータに実行させるプログラムであって、
前記プログラム実行装置のプログラムの実行において障害が発生した場合に、前記障害の発生までに前記プロセッサと前記メモリとの間で利用された情報が時系列で示されている時系列情報を時系列上の特定時点まで遡って解析し、前記メモリの記憶領域ごとに前記特定時点での記憶内容を特定する時系列情報解析処理と、
前記メモリ内の記憶領域のうち前記時系列情報解析処理による解析によっても記憶内容が特定されない記憶領域を不定領域として管理する不定領域管理処理と、
前記時系列情報を前記特定時点から更に遡って解析し、前記特定時点での前記不定領域の記憶内容を特定する不定領域探索処理とをコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、コンピュータプログラムのデバッグ時等に利用されるメモリバックトレース技術に関する。
【背景技術】
【０００２】
従来のメモリバックトレース方式は、デバッグ対象となるプログラムや機器にメモリのバックトレースに必要な情報を取得するための手段を追加することによって、過去の任意時点のメモリ状態の再現を行っていた（例えば、特許文献１）。
【０００３】
図１１、１２に、特許文献１における全体図及び逆ステップ実行手段のフロー図を示す。
図１１でのデバッグ手段は、命令実行シミュレータやデバッガが想定されており、被デバッグプログラムの機械語命令を１命令ずつ解釈、実行していく。
バッファ書込み手段は各命令の解釈時に変更されるレジスタ、メモリの内容を実行履歴バッファに格納していく。
図１２に示す逆ステップ実行手段では、上記実行履歴バッファに格納された更新前のレジスタ、メモリの情報を順次書き戻すことで、過去のメモリ内容の再現を実現している。
【特許文献１】特開平５−１０８４０４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
従来のメモリバックトレース方式は、デバッグ対象に何らかの変更を行うため、本来のプログラムの動作と、少なからずの相違が生じてしまう。
その結果、ソフトウェア障害で最も解析困難なものの１つとされているタイミング障害（互いに副作用を及ぼす複数のプログラムの特異な実行順序の結果生じる障害）の再現を困難し、場合によっては不再現なものとしてしまうという課題があった。
【０００５】
この発明は、上記のような課題を解決することを主な目的の一つとしており、デバッグ対象のプログラム、機器の通常の動作で得られる情報から、過去の任意時点でのメモリ状態を再現し、デバッグの効率を向上させることを主な目的とする。
【課題を解決するための手段】
【０００６】
本発明に係る解析装置は、
プロセッサとメモリを用いてプログラムを実行するプログラム実行装置におけるプログラムの実行に対する解析を行う解析装置であって、
前記プログラム実行装置のプログラムの実行において障害が発生した場合に、前記障害の発生までに前記プロセッサと前記メモリとの間で利用された情報が時系列で示されている時系列情報を時系列上の特定時点まで遡って解析し、前記メモリの記憶領域ごとに前記特定時点での記憶内容を特定する時系列情報解析部と、
前記メモリ内の記憶領域のうち前記時系列情報解析部による解析によっても記憶内容が特定されない記憶領域を不定領域として管理する不定領域管理部と、
前記時系列情報を前記特定時点から更に遡って解析し、前記特定時点での前記不定領域の記憶内容を特定する不定領域探索部とを有することを特徴とする。
【発明の効果】
【０００７】
本発明によれば、時系列情報を時系列上の特定時点まで遡って解析して特定時点でのメモリの記憶内容を特定するとともに、記憶内容が特定されない記憶領域を不定領域として管理し、特定時点までの解析の後に、更に時間を遡って特定時点における不定領域の記憶内容を確定するようにしているので、プログラム実行装置のプロセッサとメモリ間に通常流れるデータのみから、過去の特定時点でのメモリ内容を再現することができる。このため、プログラムに対する変更が不要であり、プログラムの動作が変更してしまう事態を回避することができる。また、タイミング障害の再現が可能となり、デバッグ効率を向上させることができる。
【発明を実施するための最良の形態】
【０００８】
実施の形態１．
図１は、本実施の形態に係るメモリバックトレース装置（解析装置）１００の全体構成例を示す構成図である。
メモリバックトレース装置１００は、図示していないデバッグ対象機器（プログラム実行装置）におけるプログラムの実行に対する解析を行う装置である。デバッグ対象機器（プログラム実行装置）は、プロセッサとメモリを用いてプログラムを実行する装置である。
【０００９】
図１において、バスアクセス情報記憶部１（時系列情報記憶部）は、バスアクセス情報（時系列情報）を記憶する。バスアクセス情報とは、デバッグ対象機器のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）とメモリ間のバス上に流れるデータを時間順に整列させた情報である。
バス情報解析部２（時系列情報解析部）は、バスアクセス情報からデータを時間と逆順に読み出し解析する手段である。
メモリ情報更新部３は、バス情報解析部２からの指示でメモリ情報６の内容を書き換える手段である。
不定領域管理部４は、バス情報解析部２からの指示でメモリ情報６の内容を不定とした領域を管理する手段である。
不定領域探索部５は、不定領域管理部４で管理されている不定領域の値を確定させるためにバスアクセス情報を更に時間の逆順に読み出し解析する手段である。
メモリ情報６は、障害が発生した時点でのメモリ内容を初期値として持つメモリ領域である。
【００１０】
図２は、図１におけるバスアクセス情報で保持されているデータの一例を示したものである。
バスアクセス情報は、プログラム実行のためにフェッチされた命令のアドレスを示すプログラムカウンタ値（ＰＣ値）、そのＰＣ値でフェッチされた命令、命令の実行によってアクセスされたメモリのアドレス、メモリアクセスのＲｅａｄ／Ｗｒｉｔｅ属性の区別、メモリアクセスの結果メモリバス上に流れたデータ（Ｒｅａｄの場合はメモリから読込んだ値、Ｗｒｉｔｅの場合はメモリに書き込んだ値）が、命令の実行順にレコードの形で並んでいるものである。
【００１１】
図３は、図１における不定領域管理部４が管理する不定領域管理テーブルの一例を示したものである。
不定領域管理テーブルは、バス情報解析部２の処理により、再現すべきメモリ情報６の値が不定値となった個所を管理しているもので、不定となった領域のアドレスおよび不定となったことを示すメモリ情報６内に仮りに設定した値（暫定メモリ値）から構成されている。
【００１２】
図４は、以降の記載内容の理解を補佐するための図で、本実施の形態における動作の全体の流れを示したものである。
本実施の形態の目的は、デバッグ対象の機器（プログラム実行装置）から得た障害発生時点のメモリ情報と、プログラムの実行に伴うバスアクセス情報から、デバッグ対象機器以外のパソコン等のコンピュータ（メモリバックトレース装置１００）上にて、デバッグ対象機器の“メモリ内容を再現したい時点Ａ”のメモリ情報を再現することである。なお、障害発生時点のメモリ情報は、図１におけるメモリ情報６の初期値となる。
まず、障害発生時点から“メモリ内容を再現したい時点Ａ”までのバスアクセス情報を、図１におけるバス情報解析部２にて解析、メモリ情報へ随時反映していく。
この反映の際、バスアクセスがメモリへのＲｅａｄならば値の確定を、メモリへのＷｒｉｔｅならばその瞬間以前の値は上書きされているので不明な値となるため、不定領域として別管理をする。以上を“メモリ内容を再現したい時点Ａ”まで行うと、時点Ａでのメモリ情報は、不定領域が点在する、いわゆる虫食いの状態で再現される。
この虫食いされた不定領域を、時点Ａより更に過去にさかのぼって値を確定するために、図１における不定領域探索部５にて、時点Ａより過去のバスアクセス情報を解析し、時点Ａでのメモリ情報に反映させる。
なお、不定領域探索部５では、時点Ａよりも以前のバスアクセス情報を検査するため、不定領域に対してのＲｅａｄ、Ｗｒｉｔｅいずれの場合でも時点Ａでの該領域の値を確定できる。
以上２段階のバスアクセス情報の解析部を設けることで、時点Ａのメモリ情報を確定させることができる。
【００１３】
本実施の形態では、バスアクセス情報記憶部１は、図２に示すように、デバッグ対象機器（プログラム実行装置）のメモリからプロセッサへ読み出された読み出しデータの値と読み出しのあった記憶領域とが示されるレコード及びプロセッサからメモリに書き込まれた書き込みデータの値と書き込みのあった記憶領域とが示されるレコード等から構成されるバスアクセス情報（時系列情報）を記憶しており、デバッグ対象機器のプログラムの実行において障害が発生した場合に、プロセッサとメモリとの間で利用された情報の内容をバスアクセス情報における時系列上の特定時点（図４の時点Ａ）までレコードごとに遡って解析し、メモリの記憶領域ごとに特定時点での記憶内容を特定する。具体的には、バス情報解析部２は、取得したレコードに読み出しデータの値が示されている場合に、当該読み出しデータの値を当該レコードに示されている記憶領域の特定時点での記憶内容として特定し、取得したレコードに書き込みデータの値が示されている場合に、当該レコードに示されている記憶領域を不定領域とする。
また、不定領域管理部４は、メモリ内の記憶領域のうちバス情報解析部２による解析によっても記憶内容が特定されない記憶領域を不定領域として管理する。
更に、不定領域探索部５は、バスアクセス情報を特定時点（図４の時点Ａ）から更に遡って解析し、特定時点での不定領域の記憶内容を特定する。具体的には、不定領域探索部５は、バスアクセス情報のレコードを特定時点（図４の時点Ａ）から更に遡りながら取得し、取得したレコードに示されている記憶領域が不定領域に一致するか否かを判断し、取得したレコードに示されている記憶領域が不定領域に一致する場合に、当該レコードに示されているデータの値を特定時点での不定領域の記憶内容として特定する。
【００１４】
次に各要素の動作について図５〜図７のフローチャートに沿って説明する。
まず、図５は、バス情報解析部２の処理フロー（時系列情報解析ステップ）を示す。
バス情報解析部２では、まずバスアクセス情報のどの位置からレコードを読み出すかを示すＰｏｓ変数を初期化する（Ｓ５１）。
通常は障害が検出された最終のバスアクセス情報である、最終レコードの位置を指す。
次に、バス情報解析部２は、Ｐｏｓをデクリメント（Ｓ５２）した後、Ｐｏｓの位置のバスアクセス情報レコードをバスアクセス情報から読み出す（Ｓ５３）。
ステップＳ５４にて、読み出したバスアクセス情報レコードにＲｅａｄ／Ｗｒｉｔｅのメモリアクセス属性がなければ、バス情報解析部２は、解析の終了条件判定（Ｓ５７）に進む。
ステップＳ５４にてメモリアクセス属性があれば、バス情報解析部２は、ＲｅａｄかＷｒｉｔｅかを判定して、Ｒｅａｄならばその時点でのメモリ内容がレコード内のデータ値に確定できるためメモリ情報更新部３を呼び出し（Ｓ５５）、不定領域管理部４へ不定領域管理テーブルから対応するエントリの削除を指示する。メモリアクセス属性がＷｒｉｔｅならば不定領域管理部４へ不定領域管理テーブルへのエントリの追加を指示する（Ｓ５６）。
その後、バス情報解析部２は、ステップＳ５７にてバスアクセス情報解析の終了有無を判定し、解析終了ならば不定領域探索部５を呼び出した後（Ｓ５８）処理を終了する。
解析終了でなければステップＳ５２に戻りバスアクセス情報の解析を続ける。
ステップＳ５７における終了条件とは、図４の特定時点Ａに対応するレコード位置に到達しているか否かを判断するための条件であり、例えば、特定個のレコード（例えば、１００レコード）を遡った場合や、予め指定した特定のレコード（バスアクセス情報の解析上特徴的なレコード等）に到達した場合に終了する。
また、バスアクセス情報の各レコードに時刻情報（例えば、各レコードに示されるＰＣ値にインクリメントされた時刻の情報）を付加し、バスアクセス情報の時刻情報において特定の時間分遡った場合に終了するようにしてもよい。
【００１５】
図６は、不定領域管理部４の処理フロー（不定領域管理ステップ）を示す。
不定領域管理部４は、バス情報解析部２からの指示で動作を開始し、まずバス情報解析部２から渡されたバスアクセス情報レコードのアクセス属性がＲｅａｄかＷｒｉｔｅかを判定する（Ｓ６１）。Ｒｅａｄ、Ｗｒｉｔｅのどちらの場合も、不定領域管理部４は、バス情報解析部２からアクセス属性の情報を取得する。
Ｒｅａｄの場合、不定領域管理部４は、メモリ情報の内容が確定したため、図３に示した不定領域管理テーブルに既に不定領域として登録されている同一アドレスのエントリがあるかをチェックし（Ｓ６２）、エントリがあればそのエントリを削除し（Ｓ６３）、なければ何もせずに処理を終了する。
ステップＳ６１にてＷｒｉｔｅの場合、不定領域管理部４は、不定領域管理テーブルに既に不定領域として登録されている同一アドレスのエントリがあるかをチェックし（Ｓ６４）、エントリが無ければ新たにエントリを追加し（Ｓ６５）、メモリ情報更新部３へ不定を示すデータの書込みを指示して（Ｓ６６）処理を終了する。
ステップＳ６４にて同一アドレスのエントリがなければ何もせずに処理を終了する。
【００１６】
図７は、不定領域探索部５の処理フロー（不定領域探索ステップ）を示す。
不定領域探索部５は、バス情報解析部２の処理が終了する直前に実行され、不定領域管理部４から不定領域管理テーブルの不定領域のエントリを得る（Ｓ７１）。
次に、不定領域探索部５は、バス情報解析部２から渡されたバスアクセス情報のレコード位置を保持して置き、新変数ｒＰｏｓにコピーする（Ｓ７２）。
不定領域探索部５は、ｒＰｏｓをデクリメントした（Ｓ７３）後、バスアクセス情報からｒＰｏｓの位置のレコードを読み出す（Ｓ７４）。
読み出したレコードにメモリアクセス属性があれ（Ｓ７５）ば、不定領域探索部５は、不定領域のエントリに示されているアドレスと読み出したバスアクセス情報のレコードに示されているアドレスが一致するかを判定する（Ｓ７６）。
バスアクセス情報レコードにメモリアクセス属性がなかったり（Ｓ７５）、不定領域エントリに示されているアドレスとのバスアクセス情報のレコードのアドレスが一致しなかった（Ｓ７６）場合は、不定領域探索部５は、次の位置のバスアクセス情報を得るためにステップＳ７３に戻る。
ステップＳ７６にて不定領域エントリとのアドレスが一致した場合、メモリ情報更新部３へバスアクセス情報レコードのデータ値をメモリ情報６へ書き出す指示（Ｓ７７）をした後、不定領域管理テーブルからエントリを削除する（Ｓ７８）。その後不定領域のエントリの有無をチェック（Ｓ７９）し、エントリがあれば再度ステップＳ７１から処理を繰り返し、エントリがなければ処理を終了する。
ステップＳ７６においてメモリ情報へ書き出すデータ値は、図４で示した特定時点Ａにおいて不定領域に格納されていたデータ値である。
【００１７】
なお、メモリ情報更新部３は、メモリ情報６に対し、バス情報解析部２、不定領域管理部４又は不定領域探索部５から指定されたアドレスに、指定された値を書き込むだけの処理のため、処理フロー及び処理の説明は割愛する。
【００１８】
このように、メモリへのＷｒｉｔｅ時には一旦メモリ内容を不定にし、必要なバスアクセス情報を解析した後に、更に時間をさかのぼって不定なメモリ領域の値を確定するようにしているので、ＣＰＵとメモリ間のバスに通常流れるデータのみから、過去の時点でのメモリ内容を再現することができる。
【００１９】
以上、本実施の形態では、プロセッサとメモリ間のバスを流れるバスアクセス情報と障害発生時のメモリ内容を示すメモリ情報に対し、
（ａ）バスアクセス情報を時間の逆順に辿り、メモリの更新状況を解析するバス情報解析手段、
（ｂ）メモリ情報の内容を書き換えるメモリ情報更新手段、
（ｃ）メモリへの書込みにより、それ以前の時刻の値を特定できなくなる領域を管理する不定領域管理手段、
（ｄ）バスアクセス情報を時間の逆順に辿り、メモリ情報内の不定領域の値を特定する不定領域探索手段を有し、障害発生時点からの任意の過去の時点のメモリ内容を再現するメモリバックトレース方式について説明した。
【００２０】
実施の形態２．
以上の実施の形態１では、過去の任意の時間点でのメモリ内容の再現をするようにしたものであるが、次にプログラム上の特定地点でのメモリ内容を再現する場合の実施の形態を示す。
なお、本実施の形態に係るメモリバックトレース装置１００も図１と同様の構成を有する。
【００２１】
図８は、プログラムの特定位置の通過時のメモリ内容を再現する場合の、バス情報解析部２の処理フロー（時系列情報解析ステップ）を示す。
図８においてＳ５１〜Ｓ５８は、図５と同じである。
図８では、ステップＳ５４からＳ５６にてバスアクセス情報の解析及びメモリ情報、不定領域管理テーブルの更新を完了した後、Ｓ８１にてＰｏｓ位置のバスアクセス情報のＰＣ値が予め指定された値と一致しているかを比較し、一致していた場合にはバスアクセス情報の解析を終了し、Ｓ５８へ進むようになっている。
これにより、プログラムの特定の位置（ＰＣ値）にてバスアクセス情報の解析を中断させ、その時点でのメモリ内容の再現をすることができる。
【００２２】
つまり、図８に示す例では、バス情報解析部２は、バスアクセス情報のレコードのうち特定のプログラムカウンタ値が示されているレコードを時系列上の特定時点（図４の時点Ａ）とし、特定のプログラムカウンタ値が示されているレコードまでバスアクセス情報のレコードを遡って取得し、取得した各々のレコードを解析し、不定領域探索部５は、特定のプログラムカウンタ値が示されているレコードから更に遡ってバスアクセス情報のレコードを取得し、取得した各々のレコードを解析する。
なお、図８の例では、バス情報解析部２の解析終了判定の基準の一つとしてＰＣ値を参照する以外は、実施の形態１と同様であり、バス情報解析部２、メモリ情報更新部３、不定領域管理部４及び不定領域探索部５の動作は実施の形態１に示したものと同じである。
【００２３】
また図９は、メモリの特定位置の内容が特定の値に変更された時点のメモリ内容を再現する場合のバス情報解析部２の処理フロー（時系列情報解析ステップ）を示す。
図９においてＳ５１〜Ｓ５８は図５と同じで、バスアクセス情報がＷｒｉｔｅ属性の場合に、Ｓ５６にて不定領域の管理情報を更新した後、Ｓ９１にてバスアクセス情報のアドレス及びデータ値が、予め指定された値と一致しているかを判断し、一致していた場合にはバスアクセス情報の解析を終了し、Ｓ５８へ進むようになっている。
これにより、メモリの特定位置の内容が特定の値に変更された時点にてバスアクセス情報の解析を中断させ、その時点でのプログラムの位置の特定、及びメモリ内容の再現をすることができる。
【００２４】
つまり、図９に示す例では、バス情報解析部２は、バスアクセス情報のレコードのうち特定のデータ値及び特定の記憶領域の少なくともいずれかが示されているレコードを時系列上の特定時点（図４の時点Ａ）とし、特定のデータ値及び特定の記憶領域の少なくともいずれかが示されているレコードまでバスアクセス情報のレコードを遡って取得し、取得した各々のレコードを解析し、不定領域探索部５は、特定のデータ値及び特定の記憶領域の少なくともいずれかが示されているレコードから更に遡ってバスアクセス情報のレコードを取得し、取得した各々のレコードを解析する。
図９の例では、バス情報解析部２の解析終了判定の基準の一つとしてデータ値又はアドレスを参照する以外は、実施の形態１と同様であり、バス情報解析部２、メモリ情報更新部３、不定領域管理部４及び不定領域探索部５の動作は実施の形態１に示したものと同じである。
【００２５】
以上、本実施の形態では、バス情報解析手段において、あらかじめ指定されたプログラムカウンタ値に一致した時点でバスアクセス情報を辿ることを中断するメモリバックトレース方式について説明した。
【００２６】
また、本実施の形態では、バス情報解析手段において、あらかじめ指定されたメモリのアドレス及びそのアドレスに書き込まれたデータ値に一致した時点でバスアクセス情報を辿ることを中断するメモリバックトレース方式について説明した。
【００２７】
実施の形態３．
以上の実施の形態では、メモリ内容の再現位置を特定するものであるが、次に不定領域の探索部を高速に実行する場合の実施の形態を示す。
なお、本実施の形態に係るメモリバックトレース装置１００も図１と同様の構成を有する。
【００２８】
図１０は、ソフトウェアのデバッグ時には全てのメモリ情報は必要とせず、ごく狭い限られた区域のメモリ情報を手がかりにするケースが多いことに着眼し、不定領域のうちメモリ内容を確定させるメモリ領域を限定する場合の不定領域探索部５の処理フロー（不定領域探索ステップ）を示す。
図１０において、Ｓ７１〜Ｓ７９は図７と同じである。
ステップＳ７１にて不定領域のエントリを得たら、不定領域探索部５は、Ｓ１０１にて不定領域のアドレスが予め指定された範囲（解析対象記憶領域範囲）のメモリ領域内か否かを判断し、領域内であるなら次の不定領域を得るためにＳ７９へ進むようになっている。
これにより、値確定が不要な不定領域に対してＳ７３からＳ７６によるバスアクセス情報の探索処理を省くことができ、不定領域探索の全体処理を高速に実行することができる。
【００２９】
つまり、図１０の例では、不定領域探索部５は、解析の対象となる記憶領域の範囲を解析対象記憶領域範囲として指定し、バスアクセス情報のレコードを特定時点から更に遡りながら取得し、取得したレコードに示されている記憶領域が解析対象記憶領域範囲に含まれるか否かを判断し、取得したレコードに示されている記憶領域が解析対象記憶領域範囲に含まれる場合に、取得したレコードに示されている記憶領域が不定領域に一致するか否かを判断する。他方、取得したレコードに示されている記憶領域が解析対象記憶領域範囲に含まれない場合は、当該レコードに対する解析は行わない。
解析対象記憶領域として、バス情報解析部２にて最後に検出されたメモリアドレス周辺のメモリのみを解析の対象とするようにしてもよい。
本実施の形態では、不定領域探索部５が処理の高速化のために解析対象記憶領域範囲内か否かの判定を行う以外は、実施の形態１と同様であり、バス情報解析部２、メモリ情報更新部３、不定領域管理部４及び不定領域探索部５の動作は実施の形態１に示したものと同じである。
【００３０】
以上、本実施の形態では、不定領域探索手段において、特定のアドレス周辺のメモリのみを値特定の対象とするメモリバックトレース方式について説明した。
【００３１】
また、本実施の形態では、不定領域探索手段において、バス情報解析手段にて最後に検出されたメモリアドレス周辺のメモリのみを値特定の対象とするメモリバックトレース方式について説明した。
【００３２】
最後に実施の形態１〜３に示したメモリバックトレース装置１００のハードウェア構成例について説明する。
図１３は、実施の形態１〜３に示すメモリバックトレース装置１００のハードウェア資源の一例を示す図である。なお、図１３の構成は、あくまでもメモリバックトレース装置１００のハードウェア構成の一例を示すものであり、メモリバックトレース装置１００のハードウェア構成は図１３に記載の構成に限らず、他の構成であってもよい。
【００３３】
図１３において、メモリバックトレース装置１００は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。ＣＰＵ９１１は、バス９１２を介して、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９１３、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。更に、ＣＰＵ９１１は、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７と接続していてもよい。また、磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。
通信ボード９１５、キーボード９０２、スキャナ装置９０７、ＦＤＤ９０４などは、入力部、入力装置の一例である。
また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力部、出力装置の一例である。
【００３４】
通信ボード９１５は、ネットワークに接続されていてもよい。例えば、通信ボード９１５は、ＬＡＮ（ローカルエリアネットワーク）、インターネット、ＷＡＮ（ワイドエリアネットワーク）などに接続されていても構わない。
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。
【００３５】
上記プログラム群９２３には、実施の形態１〜３の説明において「〜部」、「〜手段」として説明している機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
ファイル群９２４には、実施の形態１〜３の説明において、「〜の判断」、「〜の計算」、「〜の比較」、「〜の登録」、「〜の更新」、「〜の設定」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリになどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのＣＰＵの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、実施の形態１〜３で説明しているフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００３６】
また、実施の形態１〜３の説明において「〜部」、「〜手段」として説明しているものは、「〜回路」、「〜装置」、「〜機器」、であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」、「〜手段」として説明しているものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、実施の形態１〜３の「〜部」、「〜手段」としてコンピュータを機能させるものである。あるいは、実施の形態１〜３の「〜部」、「〜手段」の手順や方法をコンピュータに実行させるものである。
【００３７】
このように、実施の形態１〜３に示すメモリバックトレース装置１００は、処理装置たるＣＰＵ、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータであり、上記したように「〜部」、「〜手段」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【図面の簡単な説明】
【００３８】
【図１】実施の形態１に係るメモリバックトレース装置の構成例を示す図。
【図２】実施の形態１に係るバスアクセス情報の例を示す図。
【図３】実施の形態１に係る不定領域管理テーブルの例を示す図。
【図４】実施の形態１に係るデータ再現処理の全体の流れを示す図。
【図５】実施の形態１に係るバス情報解析部の動作例を示すフローチャート図。
【図６】実施の形態１に係る不定領域管理部の動作例を示すフローチャート図。
【図７】実施の形態１に係る不定領域探索部の動作例を示すフローチャート図。
【図８】実施の形態２に係るバス情報解析部の動作例を示すフローチャート図。
【図９】実施の形態２に係るバス情報解析部の動作例を示すフローチャート図。
【図１０】実施の形態３に係る不定領域探索部の動作例を示すフローチャート図。
【図１１】従来技術を説明する図。
【図１２】従来技術を説明する図。
【図１３】実施の形態１〜３に係るメモリバックトレース装置のハードウェア構成例を示す図。
【符号の説明】
【００３９】
１  バスアクセス情報記憶部、２  バス情報解析部、３  メモリ情報更新部、４  不定領域管理部、５  不定領域探索部、６  メモリ情報、１００  メモリバックトレース装置。
【図１】
2008191796.tif 000003
【図２】
2008191796.tif 000004
【図３】
2008191796.tif 000005
【図４】
2008191796.tif 000006
【図５】
2008191796.tif 000007
【図６】
2008191796.tif 000008
【図７】
2008191796.tif 000009
【図８】
2008191796.tif 000010
【図９】
2008191796.tif 000011
【図１０】
2008191796.tif 000012
【図１１】
2008191796.tif 000013
【図１２】
2008191796.tif 000014
【図１３】
2008191796.tif 000015