(57)【要約】【課題】  ループ実行中のトレースパターンは変化する。【解決手段】  トレース採取装置は、被トレース処理の実行により生成されるトレースデータを順次格納するトレースバッファと、第１のパターン表と、第１の解析バッファを格納するメモリを備える。同装置は、被トレース処理内の第１のループの各回の実行により生成される各々のトレースデータ（第１の区間データ）を入力する解析部も備える。同部は、入力データが、当該第１の区間データが第１のパターン表にすでに格納されたいずれかの第１の区間データとの一致（パターン一致）を検出しないと、入力した第１の区間データを第１のパターン表および第１の解析バッファに追記する。同部は、パターン一致を検出すると、第１の区間データの少なくとも一部を第１の解析バッファに格納せず、第１ループの終了を検出すると、第１の解析バッファの内容をトレースバッファに出力する。【選択図】      図１
2010079343.tif 000002
【特許請求の範囲】
【請求項１】
被トレース処理の実行により生成されるトレースデータを順次格納するトレースバッファと、第１のパターン表と、第１の解析バッファを格納するメモリと、
前記被トレース処理内の第１のループの各回の実行により生成される各々の前記トレースデータ（第１の区間データ）を入力して、当該第１の区間データが前記第１のパターン表にすでに格納されたいずれかの第１の区間データとの一致（パターン一致）を検出しないと、入力した前記第１の区間データを前記第１のパターン表および前記第１の解析バッファに追記し、
前記パターン一致を検出すると、前記第１の区間データの少なくとも一部を前記第１の解析バッファに格納せず、
前記第１ループの終了を検出すると、前記第１の解析バッファの内容を前記トレースバッファに出力する解析部を備える、トレース採取装置。
【請求項２】
第２のパターン表と、第２の解析バッファを格納する前記メモリと、
前記第１のループ内に包含される第２のループの各回の実行により生成される各々の前記トレースデータ（第２の区間データ）を入力して、前記第２の区間データが前記第２のパターン表に格納されたいずれかの第２の区間のトレースデータとの一致（パターン一致）を検出すると、前記第２の区間データを前記第２のパターン表および前記第２の解析バッファに追記し、
前記パターン一致を検出しないと、前記第２の区間データの少なくとも一部を前記第２の解析バッファに格納せず、
前記第２のループの終了を検出すると、前記第２の解析バッファの内容を前記第１の解析バッファに出力する前記解析部を備える、請求項１のトレース採取装置。
【請求項３】
トレースファイルを備え、
前記トレースバッファの内容を前記トレースファイルに出力する出力部を備える、請求項１または２のトレース採取装置。
【請求項４】
前記被トレース処理を実行し、前記第１のループの開始前および終了後、並びに、前記ループ内繰り返し処理の各回の開始時に、各々、種別の異なる前記トレースデータを生成する生成部と、
前記生成部が生成した前記トレースデータに基づいて、前記第１のループの開始および終了、並びに、前記第１のループの各回の実行の開始及び終了を検出する前記解析部を備える、請求項１乃至３の何れかのトレース採取装置。
【請求項５】
前記トレース採取装置に接続されて、前記被トレース処理を実行し、前記第１のループの開始前および終了後、並びに、前記ループ内繰り返し処理の各回の開始時に、各々、種別の異なる前記トレースデータを生成する外部生成装置と、
前記外部生成装置が生成した前記トレースデータに基づいて、前記第１のループの開始および終了、並びに、前記第１のループの各回の実行の開始及び終了を検出する前記解析部を備える請求項１乃至３の何れかのトレース採取装置を包含するトレース採取システム。
【請求項６】
被トレース処理の実行により生成されるトレースデータを順次格納するトレースバッファと、第１のパターン表と、第１の解析バッファを格納するメモリを備えたコンピュータに、
前記被トレース処理内の第１のループの各回の実行により生成される各々の前記トレースデータ（第１の区間データ）を入力して、当該第１の区間データが前記第１のパターン表にすでに格納されたいずれかの第１の区間データとの一致（パターン一致）を検出しないと、入力した前記第１の区間データを前記第１のパターン表および前記第１の解析バッファに追記し、
前記パターン一致を検出すると、前記第１の区間データの少なくとも一部を前記第１の解析バッファに格納せず、
前記第１ループの終了を検出すると、前記第１の解析バッファの内容を前記トレースバッファに出力する解析部を実行させる、トレース採取プログラム。
【請求項７】
第２のパターン表と、第２の解析バッファを格納する前記メモリを備えた前記コンピュータに、
前記第１のループ内に包含される第２のループの各回の実行により生成される各々の前記トレースデータ（第２の区間データ）を入力して、前記第２の区間データが前記第２のパターン表に格納されたいずれかの第２の区間のトレースデータとの一致（パターン一致）を検出すると、前記第２の区間データを前記第２のパターン表および前記第２の解析バッファに追記し、
前記パターン一致を検出しないと、前記第２の区間データの少なくとも一部を前記第２の解析バッファに格納せず、
前記第２のループの終了を検出すると、前記第２の解析バッファの内容を前記第１の解析バッファに出力する前記解析処理を実行させる、請求項６のトレース採取プログラム。
【請求項８】
トレースファイルを備えた前記コンピュータに、
前記トレースバッファの内容を前記トレースファイルに出力する出力処理を実行させる、請求項６または７のトレース採取プログラム。
【請求項９】
前記コンピュータに、
前記被トレース処理を実行し、前記第１のループの開始前および終了後、並びに、前記ループ内繰り返し処理の各回の開始時に、各々、種別の異なる前記トレースデータを生成する生成処理と、
前記生成部が生成した前記トレースデータに基づいて、前記第１のループの開始および終了、並びに、前記第１のループの各回の実行の開始及び終了を検出する前記解析処理を実行させる、請求項６乃至８の何れかのトレース採取装置。
【請求項１０】
被トレース処理の実行により生成されるトレースデータを順次格納するトレースバッファと、第１のパターン表と、第１の解析バッファを格納するメモリを備えたコンピュータが、
前記被トレース処理内の第１のループの各回の実行により生成される各々の前記トレースデータ（第１の区間データ）を入力して、当該第１の区間データが前記第１のパターン表にすでに格納されたいずれかの第１の区間データとの一致（パターン一致）を検出しないと、入力した前記第１の区間データを前記第１のパターン表および前記第１の解析バッファに追記し、
前記パターン一致を検出すると、前記第１の区間データの少なくとも一部を前記第１の解析バッファに格納せず、
前記第１ループの終了を検出すると、前記第１の解析バッファの内容を前記トレースバッファに出力する解析工程を有する、トレース採取方法。
【請求項１１】
第２のパターン表と、第２の解析バッファを格納する前記メモリを備えた前記コンピュータが、
前記第１のループ内に包含される第２のループの各回の実行により生成される各々の前記トレースデータ（第２の区間データ）を入力して、前記第２の区間データが前記第２のパターン表に格納されたいずれかの第２の区間のトレースデータとの一致（パターン一致）を検出すると、前記第２の区間データを前記第２のパターン表および前記第２の解析バッファに追記し、
前記パターン一致を検出しないと、前記第２の区間データの少なくとも一部を前記第２の解析バッファに格納せず、
前記第２のループの終了を検出すると、前記第２の解析バッファの内容を前記第１の解析バッファに出力する前記解析工程を有する、請求項１０のトレース採取方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はトレース情報取得装置、トレース情報取得プログラム、および、トレース情報取得方法に関する。
【背景技術】
【０００２】
ループ実行中にトレース情報を取得すると、同じパターンのトレース情報が繰り返し出力されることがある。この場合、大きなトレース用記憶域が必要となるうえ、解析が困難になる。または、情報が上書きされて失われる。これを解決するため、以下の技術が提案されている。
【０００３】
特許文献１には、マイクロ命令語の予め定めた特定パターンを検出した場合に、履歴登録を抑制する履歴登録制御回路が記載されている。特許文献２には、第１回目のループ終了によりトレースを終了し、最後のループ終了と同時にトレースを再開するトレースマスク制御回路が開示されている。
【０００４】
【特許文献１】特開昭５７−１９８５４
【特許文献２】特開平１１−７３３４４
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ループ実行中のトレースパターンは変化する。従って、特許文献１における特定パターンを予め決定しておくことは出来ない場合が多い。特許文献２では、第２回目以降のループで新たに出現したパターンのトレース情報は失われるという課題があった。
【０００６】
本発明は、上述した課題を解決するための、トレース情報取得装置、トレース情報取得プログラム、および、トレース情報取得方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一実施形態のトレース採取装置は、被トレース処理の実行により生成されるトレースデータを順次格納するトレースバッファと、第１のパターン表と、第１の解析バッファを格納するメモリと、前記被トレース処理内の第１のループの各回の実行により生成される各々の前記トレースデータ（第１の区間データ）を入力して、当該第１の区間データが前記第１のパターン表にすでに格納されたいずれかの第１の区間データとの一致（パターン一致）を検出しないと、入力した前記第１の区間データを前記第１のパターン表および前記第１の解析バッファに追記し、前記パターン一致を検出すると、前記第１の区間データの少なくとも一部を前記第１の解析バッファに格納せず、前記第１ループの終了を検出すると、前記第１の解析バッファの内容を前記トレースバッファに出力する解析部を備える。
本発明の一実施形態のトレース採取プログラムは、被トレース処理の実行により生成されるトレースデータを順次格納するトレースバッファと、第１のパターン表と、第１の解析バッファを格納するメモリを備えたコンピュータに、前記被トレース処理内の第１のループの各回の実行により生成される各々の前記トレースデータ（第１の区間データ）を入力して、当該第１の区間データが前記第１のパターン表にすでに格納されたいずれかの第１の区間データとの一致（パターン一致）を検出しないと、入力した前記第１の区間データを前記第１のパターン表および前記第１の解析バッファに追記し、前記パターン一致を検出すると、前記第１の区間データの少なくとも一部を前記第１の解析バッファに格納せず、前記第１ループの終了を検出すると、前記第１の解析バッファの内容を前記トレースバッファに出力する解析部を実行させる。
【０００８】
本発明の一実施形態のトレース採取方法は、被トレース処理の実行により生成されるトレースデータを順次格納するトレースバッファと、第１のパターン表と、第１の解析バッファを格納するメモリを備えたコンピュータが、前記被トレース処理内の第１のループの各回の実行により生成される各々の前記トレースデータ（第１の区間データ）を入力して、当該第１の区間データが前記第１のパターン表にすでに格納されたいずれかの第１の区間データとの一致（パターン一致）を検出しないと、入力した前記第１の区間データを前記第１のパターン表および前記第１の解析バッファに追記し、前記パターン一致を検出すると、前記第１の区間データの少なくとも一部を前記第１の解析バッファに格納せず、
前記第１ループの終了を検出すると、前記第１の解析バッファの内容を前記トレースバッファに出力する解析工程を有する。
【発明の効果】
【０００９】
パターンが変化するループ実行中に、同じシーケンスのトレース情報が大量に出力されるのを防止しつつ、異なるシーケンスのトレース情報は取得できる。
【発明を実施するための最良の形態】
【００１０】
図１は、本発明の第１の実施形態にかかるトレース採取装置１０の構成図である。トレース採取装置１０は、トレースファイル１２、生成部１４、解析部１５、出力部１６、メモリ２０を備える。メモリ２０は、ループ管理表２１、レベル記憶域２２、トレース領域２３を格納する。メモリ２０は、被トレース処理プログラム２４、トレース採取プログラム２５を格納していても良い。
【００１１】
生成部１４は、トレースの対象となる処理（被トレース処理）を実行してトレースデータ３０を生成して、解析部１５に出力する。生成部１４は機器の制御装置などであってハードウェアで実現される。また、生成部１４は、コンピュータ１１であるトレース採取装置１０のプロセッサ１３が、業務処理などを行う被トレース処理プログラム２４を実行することで実現されても良い。
【００１２】
解析部１５は、トレースデータ３０を入力してトレース領域２３に順次格納する。但し、解析部１５は、被トレース処理のループ実行中に発生したパターンをループ管理表２１に記録し、同一パターンのトレース情報は以降のループ実行中にトレース領域２３に格納しない。
【００１３】
出力部１６は、定期的またはトレース領域２３の使用率が高いとき等に、トレース領域２３に格納されたトレースデータ３０をトレースファイル１２に出力する。出力部１６は無くても良い。
【００１４】
解析部１５および出力部１６はハードウェアで実現される。解析部１５または出力部１６は、コンピュータ１１であるトレース採取装置１０のプロセッサ１３が、トレース採取プログラム２５を実行することで実現されても良い。
【００１５】
レベル記憶域２２は、被トレース処理の実行中ループのネストのレベル数（包含関係の階層数）を格納する。被トレース処理がループ実行中でないときこの値は、例えば０である。一番外側のループ（第１のループ）実行中、レベル記憶域２２は、例えば、１を格納する。第１のループにネストして包含される内側のループ（第２のループ）実行中、レベル記憶域２２は、例えば、２を格納する。 以降、実行中ループのネストが増すたびに、レベル記憶域２２は、１多い値を格納する。レベル記憶域２２の初期値は０である。
【００１６】
図２はトレースデータ３０の構成を示す。トレースデータ３０は種別３１と付加データ３２を包含する。種別３１は当該トレースデータ３０が生成された事象の種類を示す。種別３１は、例えば、loop entry、loop exit、loop pattern、他事象通知などである。loop entry、loop exitはおのおのループの開始と終了を示す。
【００１７】
loop patternはループ先頭の実行を示す。即ち、loop patternは、ループの各回の実行の開始と終了を示す。本発明に於いて、ループの一回の実行で生成されるトレースデータ３０の集合が区間データである。区間データは、ある回のループの実行開始を示すloop patternから次回の当該ループの実行開始を示すloop patternの直前までのトレースデータ３０の集合である。または、区間データは、ある回のループの実行開始を示すloop patternからループ終了を示すloop exitの直前までのトレースデータ３０の集合である。
【００１８】
他事象通知は、上記以外の事象の発生を通知するトレースデータ３０である。他事象通知は、例えば、routine entry／routine exit（一般関数コール開始／終了）、MPI entry／MPI exit（ＭＰＩ関数コール開始／終了）、send（メッセージ送信）などがある。ここで、ＭＰＩは、Message Passing Interfaceを意味する。
【００１９】
付加データ３２は、通知する事象に応じた詳細通知データである。loop entry、loop exit、loop patternの付加データ３２は、ループの識別子などを包含する。他事象通知の付加データ３２は、関数名やパラメータ値などを包含する。
【００２０】
図３は、被トレース処理プログラム２４のソースコード例（１）を示す。被トレース処理プログラム２４は、ループを含むプログラム（図中左側）に、例えば、トレース関数コールを挿入したもの（図中右側）である。トレース関数は、プロセッサ１３で実行されると、例えば、当該関数名と同じ種別３１を持つトレースデータ３０を生成する。例えば、プロセッサ１３がloop_entry関数を実行すると、loop entryのトレースデータ３０を生成する。なお、MPI entry、MPI exit、sendの各トレースデータ３０は、MPI_send関数で生成される。
【００２１】
図から明らかなように、loop_entry関数、loop_exit関数は、おのおの、ループの開始直前と終了直後の位置に挿入される。loop_pattern関数は、ループ内の先頭実行命令の直前に挿入される。routine_entry関数、routine_exit関数は、おのおの、関数コール（本図に於いては、calc1関数やcalc2関数コール）の直前直後に挿入される。専用のツールやコンパイラが、被トレース処理プログラム２４のソースプログラムの文脈を解析して、自動的にトレース関数を挿入する。プログラマが人手により挿入しても良い。
【００２２】
付加データ３２は、トレース関数のパラメータとして入力されても良いし、トレース関数内で生成されても良い。
【００２３】
トレースデータ３０は、トレース関数によらず、被トレース処理プログラム２４が直接生成しても良い。例えば、コンパイラが被トレース処理プログラム２４のソースプログラム（図中左側）をコンパイルするときにトレースデータ３０を生成するための命令を、オブジェクトプログラムに挿入しても良い。
【００２４】
図４は、トレース領域２３の構成を示す図である。トレース領域２３は、トレースバッファ４０と、領域ポインタ４１を包含する。トレースバッファ４０はトレースデータ３０を順次格納する。トレースバッファ４０は、通常、循環バッファである。領域ポインタ４１は、トレースバッファ４０の空き領域の先頭アドレスを指す。初期値は、トレースバッファ４０の先頭アドレスである。
【００２５】
解析部１５は、トレースデータ３０をトレースバッファ４０に追記するときは、先ず、領域ポインタ４１が指す領域以降にトレースデータ３０を格納する。格納後、同部は当該追記データの直後のアドレス（満杯時は、トレースバッファ４０の先頭アドレス）を領域ポインタ４１に格納する。
【００２６】
図５は、ループ管理表２１の構成を示す。ループ管理表２１はループネストの各レベルに対応して存在する。即ち、ループ管理表２１はレベル格納域２２の１以上の各値に対応して存在する。各レベル対応のループ管理表２１は、解析バッファ５０、バッファポインタ５１、パターン表５２、表ポインタ５３を包含する。
【００２７】
解析バッファ５０はトレースデータ３０を順次格納する。解析バッファ５０の初期値は例えばゼロである。バッファポインタ５１は、解析バッファ５０の空き領域の先頭アドレスを指す。バッファポインタ５１の初期値は、解析バッファ５０の先頭アドレスである。
【００２８】
解析部１５は、トレースデータ３０を解析バッファ５０に追記するときは、バッファポインタ５１が指す領域以降にトレースデータ３０を格納して、格納後、当該追記データの直後のアドレスをバッファポインタ５１に格納する。
【００２９】
パターン表５２は、パターンＩＤ５４とパターンデータ５５を対応させて順次格納する。パターン表５２の初期値は、例えば、ゼロである。パターンデータ５５は区間データ、即ち、トレースデータ３０の集合である。パターンデータ５５はその他のデータを包含しても良い。表ポインタ５３は、パターン表５２の空き領域の先頭アドレスを指す。表ポインタ５３の初期値は、パターン表５２の先頭アドレスである。
【００３０】
解析部１５は、パターンデータ５５をパターン表５２に追記するときは、表ポインタ５３が指す領域以降にパターンデータ５５を格納して、格納後、当該追記データの直後のアドレスを表ポインタ５３に格納する。
【００３１】
第１のループに対応するループ管理表２１は、第１の解析バッファ６１および第１のパターン表６２を包含する。 第２のループに対応するループ管理表２１は、第２の解析バッファ６３および第２のパターン表６４を包含する。ここで、第１のループは、一番外側のループを指し、ループネストのレベル（レベル格納域２２の値）が１のループである。第２のループは、第１のループ内でネストしているループを指し、ループネストのレベルが２のループである。
【００３２】
なお、ある時点のレベル記憶域２２の値（１以上）に対応するループ管理表２１、解析バッファ５０、パターン表５２は、その時点に於けるカレントレベルのループ管理表２１、解析バッファ５０、パターン表５２と呼ばれる。例えば、ある時点でレベル記憶域２２の値が１であれば、その時点に於けるカレントレベルの解析バッファ５０は、第１の解析バッファ６１である。ある時点でレベル記憶域２２の値が２であれば、その時点に於けるカレントレベルの解析バッファ５０は、第２の解析バッファ６３である。
【００３３】
図６は、解析部１５の動作フローチャートである。まず、解析部１５は、生成部１４から入力したトレースデータ３０の種別３１を判定する（Ｓ１）。
【００３４】
種別３１が他事象通知である場合、同部はループネストのレベル（レベル記憶域２２の値）を判定する（Ｓ５）。レベルが０であれば（Ｓ５でＹ）、同部は、入力したトレースデータ３０をトレースバッファ４０に追記して（Ｓ６）動作を終了する。レベルが０でなければ（Ｓ５でＮ）、同部は、入力したトレースデータ３０をカレントレベルの解析バッファ５０に追記して（Ｓ９）動作を終了する。即ち解析部１５は、入力したトレースデータ３０を、生成部１４がループ実行中であればカレントレベルの解析バッファ５０に、生成部１４がループ実行中でなければトレースバッファ４０に追記する。
【００３５】
種別３１がループ開始である場合、解析部１５は、入力したトレースデータ３０を、生成部１４がループ実行中であればカレントレベルの解析バッファ５０に、生成部１４がループ実行中でなければトレースバッファ４０に追記する（Ｓ５、Ｓ６、Ｓ９）。その後、同部は、レベル記憶域２２の値を１加算し、カレントレベルのループ管理表２１を初期化する（Ｓ８）。ループ管理表２１の初期化は、バッファポインタ５１、表ポインタ５３、解析バッファ５０およびパターン表５２の初期化を包含する。
【００３６】
種別３１がループ先頭実行である場合、解析部１５はカレントレベルの解析バッファ５０が空（初期状態）であるかを判定する（Ｓ２）。空でない場合（Ｓ２でＮ）、同部は同一パターン検出処理（図７参照）を実行する（Ｓ３）。空である場合（Ｓ２でＹ）、同部は同一パターン検出処理をスキップする。このスキップは、ループ開始に続く最初のループ先頭実行を示すトレースデータ３０が入力された場合に発生する。その後、同部は、入力したトレースデータ３０をカレントレベルの解析バッファ５０に追記して（Ｓ４）動作を終了する。
【００３７】
種別３１がループ終了である場合、解析部１５は、同一パターン検出処理（図７参照）の実行、入力トレースデータ３０のカレントレベルの解析バッファ５０への追記、レベル記憶域２２の値の１減算を行う（ＳＡ、ＳＢ、ＳＣ）。その後、同部はループネストのレベル（レベル記憶域２２の値）を判定する（ＳＤ）。レベルが０であれば（ＳＤでＹ）、同部は、第１の解析バッファ５０の内容をトレースバッファ４０に追記して（ＳＥ）動作を終了する。レベルが０でなければ（ＳＤでＮ）、同部は、元のレベルの解析バッファ５０の内容をカレントレベルの解析バッファ５０に追記して（ＳＦ）動作を終了する。
【００３８】
図７は、解析部１５の同一パターン検出処理部分の動作フローチャートである。カレントレベルのパターン表５２が空（初期値）であると（Ｓ１１でＹ）、解析部１５はパターン表５２への登録処理を行う。カレントレベルのパターン表５２が空（初期値）であるのは、ループ開始後、２回目のループ先頭実行を示すトレースデータ３０が入力された場合、即ち、ループの初回実行が終了した場合に発生する。
【００３９】
同部はパターンＩＤ５４を生成してパターン表５２に追記する（Ｓ１２）。パターンＩＤ５４は、例えば、入力したループ先頭実行を示すトレースデータ３０が有する付加データ３２内のループの識別子（処理中ループ識別子）にトレース採取装置１０に一意の通し番号を付加して生成する。
【００４０】
その後、同部は、最新区間開始データ以降のカレントレベルの解析バッファ５０のトレースデータ３０をパターン表５２のパターンデータ５５に追記する。最新区間開始データは、処理中ループ識別子と同じループ識別子を持つ最新（前回）のループ先頭実行を示すトレースデータ３０である（Ｓ１３）。即ち同部は、最新の区間データをパターン表５２に追記する。最新の区間データはループの最新回の実行で生成された区間データである。このとき同部は、パターンデータ５５に最新の区間データの終端を示すデータを付加して追記しても良い。例えば、同部は、パターンＩＤ５４の直後に最新の区間データのサイズを追記しても良い。または、同部は、区間データの最後に、区切り符号（パターンデータ５５として発生し得ない値など）を付加しても良い。
【００４１】
同部は、カレントレベルの解析バッファ５０の最新の区間開始データにパターンＩＤ５４を付加して（Ｓ１４）、同一パターン検出処理を終了する。パターンＩＤ５４の付加は、例えば、付加データ３２内のループの識別子を書き換えることで行う。
【００４２】
カレントレベルのパターン表５２が空でないと（Ｓ１１でＮ）、解析部１５は、最新の区間データとパターン表５２に登録済み区間データのおのおのと一致判定を行う（Ｓ１５）。同部は、パターン表５２に登録済みの区間データを順次取得し、当該区間データ内の各トレースデータ３０と最新の区間データ内の各トレースデータ３０を先頭から順次対比し、全てが一致するパターン表５２に登録済みの区間データ（一致区間データ）を検索する。このとき、同部は、対比するトレースデータ３０の種別３１および付加データ３２の全部を対比しても良い。同部は、種別３１だけ、または、種別３１および付加データ３２の一部（例えば、ある特定のパラメータ値など）だけを比較しても良い。
【００４３】
一致区間データを発見できた場合（Ｓ１６でＹ）、同部は、カレントレベルの解析バッファ５０の最新区間開始データに一致区間データのパターンＩＤ５４を付加する（Ｓ１７）。このパターンＩＤ５４は、当該パターンＩＤ５４のパターンのトレースデータ３０が生成されたことを示す。次に、同部は、バッファポインタ５１の値を当該トレースデータ３０の次のアドレスを示すように戻して（Ｓ１８）、同一パターン検出処理を終了する。即ち同部は、最新の区間データ中、最新区間開始データ以外を破棄（後続データで上書き）する。
【００４４】
一致区間データを発見できない場合（Ｓ１６でＮ）、同部はパターン表５２への登録処理を行う（Ｓ１２、Ｓ１３、Ｓ１４）。
【００４５】
以下は、本実施形態の動作の具体例に則した説明である。図８は、プロセッサ１３が図３に示した被トレース処理プログラム２４の例（１）を実行した場合に生成するトレースデータ３０の例（１）を示す。プログラム中の変数Ｎは２であるとする。なお、図８に示す通番３３は説明のリファレンス用に記載したものであり、必ずしも実際に生成されるデータではない。以降の図に於いても同様であり、通番３３は、必ずしも実際にトレースバッファ４０やパターン表５２に格納されているわけではない。
【００４６】
解析部１５は、ｔ１乃至ｔ３のトレースデータ３０をトレースバッファ４０に追記する。同部は、ｔ３でレベル１のループ管理表２１を初期化して、ｔ４乃至ｔ９のトレースデータ３０をレベル１の解析バッファ５０に追記する。同部は、ｔ１０でｔ４乃至ｔ９のトレースデータ３０を区間データとしてパターン表５２に追記する。図９は、解析部１５が、図８のトレースデータ３０の例（１）を入力して作成したパターン表５２の例（１）である。パターンＩＤ５４は、ループの識別子（Ｌ１）にＰ１を付加したものとしている。
【００４７】
同部は、ｔ１０乃至ｔ１５のトレースデータ３０を解析バッファ５０に追記する。ｔ１６において、同部は、最新の区間データ（ｔ１０乃至ｔ１５）とパターン表５２に登録された区間データ（ｔ４乃至ｔ９）の一致を検出する。同部は、バッファポインタ５１を操作してｔ１１乃至ｔ１５のトレースデータ３０を破棄する。同部は、最後にｔ１６のトレースデータ３０を解析バッファ５０に追記して、解析バッファ５０の内容をトレースバッファ４０に追記して処理を終了する。図１０は、解析部１５が、図８のトレースデータ３０の例（１）を入力して作成したトレースバッファ４０の例（１）である。
【００４８】
図１１は、被トレース処理プログラム２４のソースコード例（２）を示す。図１２は、プロセッサ１３が図１１に示した被トレース処理プログラム２４の例（２）を実行した場合に生成するトレースデータ３０の例（２）を示す。プログラム中の変数Ｎは３であるとする。
【００４９】
解析部１５は、ｔ１のトレースデータ３０をトレースバッファ４０に追記する。同部は、ｔ１でレベル１のループ管理表２１を初期化して、ｔ２乃至ｔ７のトレースデータ３０をレベル１の解析バッファ５０に追記する。同部は、ｔ８でｔ２乃至ｔ７のトレースデータ３０を区間データとしてパターン表５２に追記する。さらに、同部は、ｔ８乃至ｔ１０を解析バッファ５０に格納し、ｔ１１でｔ８乃至ｔ１０のトレースデータ３０を区間データとしてパターン表５２に追加して追記する。図１３は、解析部１５が、図１２のトレースデータ３０の例（２）を入力して作成したパターン表５２の例（２）である。パターンＩＤ５４は、ループの識別子（Ｌ１）にＰ１、Ｐ２を付加したものとしている。
【００５０】
同部は、ｔ１１乃至ｔ１３のトレースデータ３０を解析バッファ５０に追記する。ｔ１４において、同部は、最新の区間データ（ｔ１１乃至ｔ１３）とパターン表５２に登録された区間データ（ｔ８乃至ｔ１０）の一致を検出する。同部は、バッファポインタ５１を操作してｔ１２とｔ１３のトレースデータ３０を破棄する。同部は、最後にｔ１４のトレースデータ３０を追記して、解析バッファ５０の内容をトレースバッファ４０に追記して処理を終了する。図１４は、解析部１５が、図１２のトレースデータ３０の例（２）を入力して作成したトレースバッファ４０の例（２）である。
【００５１】
図１５は、被トレース処理プログラム２４のソースコード例（３）を示す。図１６は、プロセッサ１３が図１５に示した被トレース処理プログラム２４の例（３）を実行した場合に生成するトレースデータ３０の例（３）を示す。プログラム中の変数Ｎは３であるとする。図１７は、解析部１５が、図１６のトレースデータ３０の例（３）を入力して作成したパターン表５２の例（３）である。図１８は、解析部１５が、図１６のトレースデータ３０の例（３）を入力して作成したトレースバッファ４０の例（３）である。
【００５２】
図１９は、被トレース処理プログラム２４のソースコード例（４）を示す。このプログラムは、ネストしたループを持つ。図２０は、プロセッサ１３が図１９に示した被トレース処理プログラム２４の例（４）を実行した場合に生成するトレースデータ３０の例（４）を示す。プログラム中の変数Ｍ、Ｎは２であるとする。
【００５３】
解析部１５は、ｔ１のトレースデータ３０をトレースバッファ４０に追記する。同部は、ｔ１でレベル１のループ管理表２１を初期化して、ｔ２およびｔ３のトレースデータ３０をレベル１の解析バッファ５０に追記する。同部は、ｔ３でレベル２のループ管理表２１を初期化して、ｔ４乃至ｔ６のトレースデータ３０をレベル２の解析バッファ５０に追記する。同部は、ｔ７でｔ４乃至ｔ６のトレースデータ３０を区間データとしてレベル２のパターン表５２に追記する。図２１は、解析部１５が、図２０のトレースデータ３０の例（４）を入力して作成したレベル２のパターン表５２の例（４−１）である。パターンＩＤ５４は、ループの識別子（Ｌ２）にＰ１を付加したものとしている。
【００５４】
同部は、ｔ７乃至ｔ９のトレースデータ３０を解析バッファ５０に追記する。ｔ１０において、同部は、最新の区間データ（ｔ７乃至ｔ９）とパターン表５２に登録された区間データ（ｔ４乃至ｔ６）の一致を検出する。同部は、バッファポインタ５１を操作してｔ８とｔ９のトレースデータ３０を破棄する。ここで同部は、レベル２の解析バッファ５０にｔ１０のトレースデータ３０を追記して、レベル（レベル記憶域２２の値）を２から１に下げて、レベル２の解析バッファ５０内容をレベル１の解析バッファ５０に追記する。ここで追記されるデータは、ｔ４乃至ｔ１０のトレースデータ３０である。但し、ｔ８およびｔ９は破棄されている。
【００５５】
同部は、ｔ１１乃至ｔ１３をレベル１の解析バッファ５０に格納して、ｔ１４でｔ２乃至ｔ１３のトレースデータ３０を区間データとしてレベル１のパターン表５２に追加して追記する。図２２は、解析部１５が、図２０のトレースデータ３０の例（４）を入力して作成したレベル１のパターン表５２の例（４−２）である。パターンＩＤ５４は、ループの識別子（Ｌ１）にＰ１を付加したものとしている。
【００５６】
同部は、ｔ１５乃至ｔ２５で上述のｔ３乃至ｔ１３と同様に処理し、ｔ２６において、最新の区間データ（ｔ１４乃至ｔ２５）とパターン表５２に登録された区間データ（ｔ２とｔ１３）の一致を検出する。同部は、バッファポインタ５１を操作してｔ１５乃至ｔ２５のトレースデータ３０を破棄する。同部は、最後にｔ２６のトレースデータ３０を付加して、解析バッファ５０の内容をトレースバッファ４０に格納して処理を終了する。図２３は、解析部１５が、図１９のトレースデータ３０の例（４）を入力して作成したトレースバッファ４０の例（４）である。
【００５７】
本実施形態のトレース採取装置１０は、パターンが変化するループ実行中に、同じシーケンスのトレースデータ３０が大量に出力されるのを防止しつつ、異なるシーケンスのトレースデータ３０は取得できる。その理由は、解析部１５が、新規のパターンをループ管理表２１に登録し、登録済みパターンのトレースデータ３０の少なくとも一部はトレース領域２３に出力しないからである。
【００５８】
また、本実施形態のトレース採取装置１０は、ループのネストが存在しても、上述の効果を奏する。その理由は、ループ管理表２１をループネストのレベル対応に設け、解析部１５がパターンの登録、検出をネストレベル対応に実行するからである。
【００５９】
図２４は、本発明の第２の実施形態にかかるトレース採取システム７０の構成を示す。トレース採取システム７０は、トレース採取装置１０および当該トレース採取装置１０に接続される外部生成装置７１を包含する。本実施形態に於いて、トレース採取装置１０は、生成部１４を備えていなくても良い。トレースデータ３０は、外部生成装置７１から解析部１５に入力される。他の点は、第１の実施形態と同じである。
【００６０】
外部生成装置７１は、制御装置などであってハードウェアで実現されている。外部生成装置７１は、内部の記憶装置と演算装置を備え、当該演算装置が当該記憶装置に格納された被トレース処理プログラム２４を実行することで実現されても良い。
【００６１】
本実施形態のトレース採取システム７０は、当該装置外の被トレース処理のトレースデータ３０を採取できる。その理由は、トレースデータ３０は外部生成装置７１から入力するからである。
【００６２】
図２５は、本発明の基本的構成を示す。本発明にかかるトレース採取装置１０は、被トレース処理の実行により生成されるトレースデータ３０を順次格納するトレースバッファ４０と、第１のパターン表６２と、第１の解析バッファ６１を格納するメモリ２０を備える。更に、同装置は、被トレース処理内の第１のループの各回の実行により生成される各々のトレースデータ３０（第１の区間データ）を入力する解析部１５を備える。同部は、入力データが、当該第１の区間データが第１のパターン表６２にすでに格納されたいずれかの第１の区間データとの一致（パターン一致）を検出しないと、入力した第１の区間データを第１のパターン表６２および第１の解析バッファ６１に追記する。また、同部は、パターン一致を検出すると、第１の区間データの少なくとも一部を第１の解析バッファ６１に格納せず、第１ループの終了を検出すると、第１の解析バッファ６１の内容をトレースバッファ４０に出力する。
【図面の簡単な説明】
【００６３】
【図１】図１は、本発明の第１の実施形態にかかるトレース採取装置１０の構成図である。
【図２】図２はトレースデータ３０の構成を示す。
【図３】図３は、被トレース処理プログラム２４のソースコード例（１）を示す。
【図４】図４は、トレース領域２３の構成を示す図である。
【図５】図５は、ループ管理表２１の構成を示す。
【図６】図６は、解析部１５の動作フローチャートである。
【図７】図７は、解析部１５の同一パターン検出処理部分の動作フローチャートである。
【図８】図８は、プロセッサ１３が図３に示した被トレース処理プログラム２４の例（１）を実行した場合に生成するトレースデータ３０の例（１）を示す。
【図９】図９は、解析部１５が、図８のトレースデータ３０の例（１）を入力して作成したパターン表５２の例（１）である。
【図１０】図１０は、解析部１５が、図８のトレースデータ３０の例（１）を入力して作成したトレースバッファ４０の例（１）である。
【図１１】図１１は、被トレース処理プログラム２４のソースコード例（２）を示す。
【図１２】図１２は、プロセッサ１３が図１１に示した被トレース処理プログラム２４の例（２）を実行した場合に生成するトレースデータ３０の例（２）を示す。
【図１３】図１３は、解析部１５が、図１２のトレースデータ３０の例（２）を入力して作成したパターン表５２の例（２）である。
【図１４】図１４は、解析部１５が、図１２のトレースデータ３０の例（２）を入力して作成したトレースバッファ４０の例（２）である。
【図１５】図１５は、被トレース処理プログラム２４のソースコード例（３）を示す。
【図１６】図１６は、プロセッサ１３が図１５に示した被トレース処理プログラム２４の例（３）を実行した場合に生成するトレースデータ３０の例（３）を示す。
【図１７】図１７は、解析部１５が、図１６のトレースデータ３０の例（３）を入力して作成したパターン表５２の例（３）である。
【図１８】図１８は、解析部１５が、図１６のトレースデータ３０の例（３）を入力して作成したトレースバッファ４０の例（３）である。
【図１９】図１９は、被トレース処理プログラム２４のソースコード例（４）を示す。
【図２０】図２０は、プロセッサ１３が図１９に示した被トレース処理プログラム２４の例（４）を実行した場合に生成するトレースデータ３０の例（４）を示す。
【図２１】図２１は、解析部１５が、図２０のトレースデータ３０の例（４）を入力して作成したレベル２のパターン表５２の例（４−１）である。
【図２２】図２２は、解析部１５が、図２０のトレースデータ３０の例（４）を入力して作成したレベル１のパターン表５２の例（４−２）である。
【図２３】図２３は、解析部１５が、図１９のトレースデータ３０の例（４）を入力して作成したトレースバッファ４０の例（４）である。
【図２４】図２４は、本発明の第２の実施形態にかかるトレース採取システム７０の構成を示す。
【図２５】図２５は、本発明の基本的構成を示す。
【符号の説明】
【００６４】
１０    トレース採取装置
１１    コンピュータ
１２    トレースファイル
１３    プロセッサ
１４    生成部
１５    解析部
１６    出力部
２０    メモリ
２１    ループ管理表
２２    レベル記憶域
２３    トレース領域
２４    被トレースプログラム
２５    トレース採取プログラム
３０    トレースデータ
３１    種別
３２    付加データ
３３    通番
４０    トレースバッファ
４１    領域ポインタ
５０    解析バッファ
５１    バッファポインタ
５２    パターン表
５３    表ポインタ
５４    パターンＩＤ
５５    パターンデータ
６１    第１の解析バッファ
６２    第１のパターン表
６３    第２の解析バッファ
６４    第２のパターン表
７０    トレース採取システム
７１    外部生成装置
【図１】
2010079343.tif 000003
【図２】
2010079343.tif 000004
【図３】
2010079343.tif 000005
【図４】
2010079343.tif 000006
【図５】
2010079343.tif 000007
【図６】
2010079343.tif 000008
【図７】
2010079343.tif 000009
【図８】
2010079343.tif 000010
【図９】
2010079343.tif 000011
【図１０】
2010079343.tif 000012
【図１１】
2010079343.tif 000013
【図１２】
2010079343.tif 000014
【図１３】
2010079343.tif 000015
【図１４】
2010079343.tif 000016
【図１５】
2010079343.tif 000017
【図１６】
2010079343.tif 000018
【図１７】
2010079343.tif 000019
【図１８】
2010079343.tif 000020
【図１９】
2010079343.tif 000021
【図２０】
2010079343.tif 000022
【図２１】
2010079343.tif 000023
【図２２】
2010079343.tif 000024
【図２３】
2010079343.tif 000025
【図２４】
2010079343.tif 000026
【図２５】
2010079343.tif 000027