(57)【要約】【課題】デバッグ作業に必要なトレース情報を効率良く取得する。【解決手段】デバッグ対象プログラムの実行によって、ＣＰＵ１０１がアクセスしたアクセスアドレスを取得するメモリアクセスアドレス取得部１０３と、取得したアドレスを格納するアドレス格納部１０４と、格納した最新のアドレスと一つ前のアドレスからオフセット値を計算するオフセット値計算部１０５と、オフセット値を格納するオフセット値格納部１０６と、最新のオフセット値と一つ前のオフセット値を比較して両者が一致するか否かを判定するオフセット値比較部１０７と、２つのオフセット値が一致した場合にその回数をカウントするカウンタ１０６ａと、２つのオフセット値が一致しない場合に、オフセットの基準となるベースアドレスとオフセット値、及びオフセット値の一致した回数を出力するメモリアクセスアドレス情報出力部１０８から構成される。【選択図】図１
2008158662.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵとメモリを有するプロセッサ上で動作するプログラムにより、前記ＣＰＵが前記メモリに対してアクセスしたアクセス状況を示すデータを、トレース情報として取得するメモリアクセストレース情報取得方法であって、
前記メモリに対するアクセスアドレスを格納するステップと、
前記アクセスアドレスと前記アクセスアドレスの一つ前のアクセスアドレスとのオフセット値を１つ以上計算するステップと、
前記オフセット値を１つ以上計算した結果を示すオフセット値群がそれ以前に計算された前記オフセット値群と比較して、一致するか否かを判定する判定ステップと、
前記オフセット値群がそれ以前に計算された前記オフセット値群と一致すると判定した場合に、一致した回数をカウントするカウントステップと、
前記オフセット値群がそれ以前に計算された前記オフセット値群と一致しないと判定した場合に、前記一致した回数を出力する出力ステップと
を有するメモリアクセストレース情報取得方法。
【請求項２】
請求項１に記載のメモリアクセストレース情報取得方法であって、
前記判定ステップにおいて、前記オフセット値を一つ前の前記オフセット値と比較して、一致するか否かを判定し、
前記カウントステップにおいて、前記オフセット値が一つ前の前記オフセット値と一致すると判定した場合に、一致した回数をカウントし、
前記出力ステップにおいて、前記オフセット値が一つ前の前記オフセット値と一致しないと判定した場合に、前記アクセスアドレス、前記オフセット値、及び前記一致した回数を出力するメモリアクセストレース情報取得方法。
【請求項３】
請求項１に記載のメモリアクセストレース情報取得方法であって、
前記ＣＰＵの前記プログラムを実行するイベントを検出するステップと、
前記イベントが検出されなかった場合に、前記オフセット値を第１のバッファに格納するステップと
を有し、
前記判定ステップにおいて、前記イベントが検出された場合に、前記第１のバッファの内容を第２のバッファに格納された前記オフセット値群を示すパターンと比較して、一致するか否かを判定し、
前記カウントステップにおいて、前記第１のバッファの内容が前記パターンと一致すると判定した場合に、一致した回数をカウントするステップを有し、
前記出力ステップにおいて、前記第１のバッファの内容が前記パターンと一致しないと判定した場合に、前記パターン及び前記一致した回数を出力し、前記第１のバッファの内容を前記第２のバッファの内容に反映するメモリアクセストレース情報取得方法。
【請求項４】
請求項３に記載のメモリアクセストレース情報取得方法であって、更に、
前記イベントを検出する毎に、オフセット値の基準となるベースアドレスを格納するステップと、
前記判定ステップにおいて前記第１のバッファの内容が前記パターンと一致すると判定した場合に、前記ベースアドレスを前記第２のバッファに格納するステップと
を有し、
前記出力ステップにおいて、前記第１のバッファの内容が前記パターンと一致しないと判定した場合には、前記パターン、前記一致した回数、及び１つ以上の前記ベースアドレスを示す前記ベースアドレス群を出力するメモリアクセストレース情報取得方法。
【請求項５】
請求項３に記載のメモリアクセストレース情報取得方法であって、更に、
前記判定ステップにおいて前記第１のバッファの内容が前記パターンと一致しないと判定した場合に、
前記パターンに対応するラベルを出力するステップと、
前記パターンを前記出力ステップにおいて既に出力したことのあるパターンと比較して、一致するか否かを判定するステップと、
前記パターンが前記出力ステップにおいて既に出力したことのあるパターンと一致しないと判定した場合に、前記パターンに新規のラベルを付与するステップと、
前記パターンが前記出力ステップにおいて既に出力したことのあるパターンと一致すると判定した場合に、前記既に出力したことのあるパターンと同じラベルを付与するステップと
を有するメモリアクセストレース情報取得方法。
【請求項６】
請求項３に記載のメモリアクセストレース情報取得方法であって、
前記第１のバッファの内容を前記一致した回数が最大となるパターンと比較して、一致するか否かを判定するステップと、
前記第１のバッファの内容が前記一致した回数が最大となるパターンと一致しないと判定した場合に、前記パターンに対応するラベルを出力するステップと、
前記第１のバッファの内容が前記一致した回数が最大となるパターンと一致すると判定した場合に、前記一致したパターンの優先度を上げるステップと
を有し、
前記出力ステップにおいて、前記判定ステップにおいて前記第１のバッファの内容が前記パターンと一致しないと判定した場合に、前記パターンに対応するラベル及び前記一致した回数を出力し、前記第１のバッファの内容を最も優先度の低い前記第２のバッファの内容に反映するメモリアクセストレース情報取得方法。
【請求項７】
ＣＰＵとメモリを有するプロセッサ上で動作するプログラムにより、前記ＣＰＵが前記メモリに対してアクセスしたアクセス状況を示すデータを、トレース情報として取得するメモリアクセストレース情報取得装置であって、
前記ＣＰＵの前記メモリに対するアクセスアドレスを取得するアクセスアドレス取得部と、
取得した前記アクセスアドレスを格納するアクセスアドレス格納部と、
前記アクセスアドレス格納部に格納したアクセスアドレスと一つ前の前記アクセスアドレスとのオフセット値を１つ以上計算するオフセット値計算部と、
前記オフセット値を１つ以上計算した結果を示すオフセット値群を格納するオフセット値格納部と、
前記オフセット値格納部に格納したオフセット値群とそれ以前に計算された前記オフセット値群と比較して、一致するか否かを判定するオフセット値比較部と、
前記オフセット値群がそれ以前に計算された前記オフセット値群と一致すると判定した場合に、一致した回数をカウントするカウンタと、
前記オフセット値群がそれ以前に計算された前記オフセット値群と一致しないと判定した場合に、前記カウンタの値を出力するトレース情報出力部と、
を有するメモリアクセストレース情報取得装置。
【請求項８】
請求項７に記載のメモリアクセストレース情報取得装置であって、
前記オフセット値比較部は、前記オフセット値格納部に格納したオフセット値と一つ前の前記オフセット値と比較して、一致するか否かを判定し、
前記カウンタは、前記オフセット値が一つ前の前記オフセット値と一致すると判定した場合に、一致した回数をカウントし、
前記トレース情報出力部は、前記オフセット値が一つ前の前記オフセット値と一致しないと判定した場合に、前記アクセスアドレス、前記オフセット値、及び前記カウンタの値を出力するメモリアクセストレース情報取得装置。
【請求項９】
請求項７に記載のメモリアクセストレース情報取得装置であって、
前記ＣＰＵの前記プログラムを実行するイベントを検出するイベント検出部を有し、
前記オフセット値格納部は、検出した前記イベント間における前記オフセット値を格納するオフセット値バッファおよび前記オフセット値群を示すパターンを格納するパターンバッファを有し、
前記オフセット値比較部は、前記オフセット値バッファに格納した前記オフセット値と前記パターンバッファ格納したパターンを比較して、一致するか否かを判定し、
前記カウンタは、前記オフセット値バッファの内容が前記パターンと一致すると判定した場合に、一致した回数をカウントし、
前記トレース情報出力部は、前記オフセット値バッファの内容が前記パターンと一致しないと判定した場合に、前記パターン及び前記前記カウンタの値を出力するメモリアクセストレース情報取得装置。
【請求項１０】
請求項１ないし６のいずれかに記載のメモリアクセストレース情報取得方法の各ステップをコンピュータに実行させるためのプログラム。
【請求項１１】
請求項１０に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＰＵとメモリを有するプロセッサ上で動作するプログラムにより、前記ＣＰＵが前記メモリに対してアクセスしたアクセス状況を示すデータをトレース情報として取得するメモリアクセストレース情報取得方法、メモリアクセストレース情報取得装置、メモリアクセストレース情報取得プログラム、及び記録媒体に関する。
【背景技術】
【０００２】
コンピュータシステムにおけるプログラムの動作確認や、プログラム開発におけるデバッグ作業に役立たせるために、コンピュータがどのように命令やメモリアクセスを実行したかを示すデータをトレース情報として取得することが一般に行われている。しかし、トレース情報の全てを取得するには、データ量が膨大となるため効率良く取得する必要がある。
【０００３】
従来、トレース情報を効率良く取得する方法として、プログラムの分岐命令のみを取得し、プログラムの実行後に命令を復帰させる分岐トレース方法が知られている。また、命令のトレース情報を一時的に蓄えておき、トレース情報のパターンを検出して、一致した箇所を他の情報に置き換えることでデータ量を削減するようにした技術が開示されている（例えば、特許文献１、２参照）。更に、分岐命令の繰り返し回数をカウントし、分岐命令と繰り返し回数を出力することでデータ量を削減する技術が開示されている（例えば、特許文献３参照）。
【特許文献１】特許第３４９８７０２号公報
【特許文献２】特許第２７０２４６２号公報
【特許文献３】特開平０５−０１２０６１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
このような従来の技術によれば、命令のトレース情報は効率良く取得できるものの、データのトレース情報を効率良く取得することが困難であるため、デバッグ作業を行うことが困難である。
【０００５】
また、取得したデータのパターンを比較する際に、メモリ容量が十分であれば問題ないが、メモリ容量に制限がある場合は、パターンを効率良く蓄えなければパターンを検出することが困難である。
【０００６】
本発明は、上記事情に鑑みてなされたものであって、メモリに対するアクセス状況を示すデータをデバッグ作業に必要なトレース情報として効率良く取得できるともに、記憶容量に限りのあるメモリを有効に利用してトレース情報のパターンを効率良く検出することを可能にするメモリアクセストレース情報取得方法、メモリアクセストレース情報取得装置、メモリアクセストレース情報取得プログラム、及び記録媒体を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するために、本発明の第１のメモリアクセストレース情報取得方法は、ＣＰＵとメモリを有するプロセッサ上で動作するプログラムにより、前記ＣＰＵが前記メモリに対してアクセスしたアクセス状況を示すデータを、トレース情報として取得するメモリアクセストレース情報取得方法であって、前記メモリに対するアクセスアドレスを格納するステップと、前記アクセスアドレスと前記アクセスアドレスの一つ前のアクセスアドレスとのオフセット値を１つ以上計算するステップと、前記オフセット値を１つ以上計算した結果を示すオフセット値群が１つ前の前記オフセット値群と比較して、一致するか否かを判定する判定ステップと、前記オフセット値群が一つ前の前記オフセット値群と一致すると判定した場合に、一致した回数をカウントするカウントステップと、前記オフセット値群が一つ前の前記オフセット値群と一致しないと判定した場合、前記一致した回数を出力する出力ステップとを有する方法としている。
【０００８】
この方法により、メモリに対するアクセス状況を示すデータをデバッグ作業に必要なトレース情報として効率良く取得できるともに、記憶容量に限りのあるメモリを有効に利用してトレース情報のパターンを効率良く検出する
【０００９】
また、本発明の第２のメモリアクセストレース情報取得方法は、前記判定ステップにおいて、前記オフセット値を一つ前の前記オフセット値と比較して、一致するか否かを判定し、前記カウントステップにおいて、前記オフセット値が一つ前の前記オフセット値と一致すると判定した場合に、一致した回数をカウントし、前記出力ステップにおいて、前記オフセット値が一つ前の前記オフセット値と一致しないと判定した場合に、前記アクセスアドレス、前記オフセット値、及び前記一致した回数を出力する方法としている。
【００１０】
この方法により、オフセット値の一致する回数をカウントすることで出力するトレース情報の量を減少させることができ、従来に比べてより多くのメモリアクセス状況を取得することが可能となる。
【００１１】
また、本発明の第３のメモリアクセストレース情報取得方法は、前記ＣＰＵの前記プログラムを実行するイベントを検出するステップと、前記イベントが検出されなかった場合に、前記オフセット値を第１のバッファに格納するステップとを有し、前記判定ステップにおいて、前記イベントが検出された場合に、前記第１のバッファの内容を第２のバッファに格納された前記オフセット値群を示すパターンと比較して、一致するか否かを判定し、前記カウントステップにおいて、前記第１のバッファの内容が前記パターンと一致すると判定した場合に、一致した回数をカウントするステップを有し、前記出力ステップにおいて、前記第１のバッファの内容が前記パターンと一致しないと判定した場合に、前記パターン及び前記一致した回数を出力し、前記第１のバッファの内容を前記第２のバッファの内容に反映する方法としている。
【００１２】
この方法により、オフセット値が一定でない範囲を省略することができるので、出力する情報量を減少させることが可能となり、従来に比べてより多くのメモリアクセス状況を取得することができる。
【００１３】
更に、本発明の第４のメモリアクセストレース情報取得方法は、前記イベントを検出する毎に、オフセット値の基準となるベースアドレスを格納するステップと、前記判定ステップにおいて前記第１のバッファの内容が前記パターンと一致すると判定した場合に、前記ベースアドレスを前記第２のバッファに格納するステップとを有し、前記出力ステップにおいて、前記第１のバッファの内容が前記パターンと一致しないと判定した場合には、前記パターン、前記一致した回数、及び１つ以上の前記ベースアドレスを示す前記ベースアドレス群を出力する方法としている。
【００１４】
この方法により、イベントを取得した際のアドレスのオフセット値が一定でないものに対しても、デバッグ作業に必要なデータトレース情報を効率良く取得することができる。
【００１５】
また、本発明の第５のメモリアクセストレース情報取得方法は、前記判定ステップにおいて前記第１のバッファの内容が前記パターンと一致しないと判定した場合に、前記パターンに対応するラベルを出力するステップと、前記パターンを前記出力ステップにおいて既に出力したことのあるパターンと比較して、一致するか否かを判定するステップと、前記パターンが前記出力ステップにおいて既に出力したことのあるパターンと一致しないと判定した場合に、前記パターンに新規のラベルを付与するステップと、前記パターンが前記出力ステップにおいて既に出力したことのあるパターンと一致すると判定した場合に、前記既に出力したことのあるパターンと同じラベルを付与するステップとを有する方法としている。
【００１６】
この方法により、同じパターンは一度しか検出されないようにすることができるので、出力する情報量をさらに減少させることが可能となり、デバッグ作業に必要なデータトレース情報を効率良く取得することができる。
【００１７】
また、本発明の第６のメモリアクセストレース情報取得方法は、前記第１のバッファの内容を前記一致した回数が最大となるパターンと比較して、一致するか否かを判定するステップと、前記第１のバッファの内容が前記一致した回数が最大となるパターンと一致しないと判定した場合に、前記パターンに対応するラベルを出力するステップと、前記第１のバッファの内容が前記一致した回数が最大となるパターンと一致すると判定した場合に、前記一致したパターンの優先度を上げるステップとを有し、前記出力ステップにおいて、前記判定ステップにおいて前記第１のバッファの内容が前記パターンと一致しないと判定した場合に、前記パターンに対応するラベル及び前記一致した回数を出力し、前記第１のバッファの内容を最も優先度の低い前記第２のバッファの内容に反映する方法としている。
【００１８】
この方法により、使用頻度が高いパターンを残しておくことができるので、パターンを格納するためのメモリ量が少ない場合でも、メモリアクセス状況を効率良く取得することが可能となる。
【００１９】
また、本発明の第１のメモリアクセストレース情報取得装置は、ＣＰＵとメモリを有するプロセッサ上で動作するプログラムにより、前記ＣＰＵが前記メモリに対してアクセスしたアクセス状況を示すデータを、トレース情報として取得するメモリアクセストレース情報取得装置であって、前記ＣＰＵの前記メモリに対するアクセスアドレスを取得するアクセスアドレス取得部と、取得した前記アクセスアドレスを格納するアクセスアドレス格納部と、前記アクセスアドレス格納部に格納したアクセスアドレスと一つ前の前記アクセスアドレスとのオフセット値を１つ以上計算するオフセット値計算部と、前記オフセット値を１つ以上計算した結果を示すオフセット値群を格納するオフセット値格納部と、前記オフセット値格納部に格納したオフセット値群と一つ前の前記オフセット値群と比較して、一致するか否かを判定するオフセット値比較部と、前記オフセット値群が一つ前の前記オフセット値群と一致すると判定した場合に、一致した回数をカウントするカウンタと、前記オフセット値群が一つ前の前記オフセット値群と一致しないと判定した場合に、前記カウンタの値を出力するトレース情報出力部と、を有する構成としている。
【００２０】
この構成により、メモリに対するアクセス状況を示すデータをデバッグ作業に必要なトレース情報として効率良く取得できるともに、記憶容量に限りのあるメモリを有効に利用してトレース情報のパターンを効率良く検出することができる。
【００２１】
また、本発明の第２のメモリアクセストレース情報取得装置は、前記オフセット値比較部は、前記オフセット値格納部に格納したオフセット値と一つ前の前記オフセット値と比較して、一致するか否かを判定し、前記カウンタは、前記オフセット値が一つ前の前記オフセット値と一致すると判定した場合に、一致した回数をカウントし、前記トレース情報出力部は、前記オフセット値が一つ前の前記オフセット値と一致しないと判定した場合に、前記アクセスアドレス、前記オフセット値、及び前記カウンタの値を出力する構成としている。
【００２２】
この構成により、オフセット値の一致する回数をカウントすることで出力するトレース情報の量を減少させることができ、従来に比べてより多くのメモリアクセス状況を取得することが可能となる。
【００２３】
また、本発明の第３のメモリアクセストレース情報取得装置は、前記ＣＰＵの前記プログラムを実行するイベントを検出するイベント検出部を有し、前記オフセット値格納部は、検出した前記イベント間における前記オフセット値を格納するオフセット値バッファおよび前記オフセット値群を示すパターンを格納するパターンバッファを有し、前記オフセット値比較部は、前記オフセット値バッファに格納した前記オフセット値と前記パターンバッファ格納したパターンを比較して、一致するか否かを判定し、前記カウンタは、前記オフセット値バッファの内容が前記パターンと一致すると判定した場合に、一致した回数をカウントし、前記トレース情報出力部は、前記オフセット値バッファの内容が前記パターンと一致しないと判定した場合に、前記パターン及び前記前記カウンタの値を出力する構成としている。
【００２４】
この構成により、オフセット値が一定でない範囲を省略することができるので、出力する情報量を減少させることが可能となり、従来に比べてより多くのメモリアクセス状況を取得することができる。
【００２５】
また、本発明の第１のプログラムは、上記のメモリアクセストレース情報取得方法の各ステップをコンピュータに実行させるためのプログラム。
【００２６】
これにより、本発明をコンピュータの処理によって実現することができ、メモリに対するアクセス状況を示すデータをデバッグ作業に必要なトレース情報として効率良く取得できるともに、記憶容量に限りのあるメモリを有効に利用してトレース情報のパターンを効率良く検出することが可能となる。
【００２７】
また、本発明の第１の記録媒体は、上記のプログラムを記録したコンピュータ読み取り可能な記録媒体である。
【００２８】
これにより、メモリに対するアクセス状況を示すデータをデバッグ作業に必要なトレース情報として効率良く取得できるともに、記憶容量に限りのあるメモリを有効に利用してトレース情報のパターンを効率良く検出することが可能となる。
【発明の効果】
【００２９】
本発明によれば、メモリに対するアクセス状況を示すデータをデバッグ作業に必要なトレース情報として効率良く取得できるともに、記憶容量に限りのあるメモリを有効に利用してトレース情報のパターンを効率良く検出することを可能にするメモリアクセストレース情報取得方法、メモリアクセストレース情報取得装置、メモリアクセストレース情報取得プログラム、及び記録媒体を提供できる。
【発明を実施するための最良の形態】
【００３０】
以下、本発明に係るメモリアクセストレース情報取得方法、メモリアクセストレース情報取得装置、メモリアクセストレース情報取得プログラム、及び記録媒体の複数の実施形態について説明する。尚、記録媒体にはメモリアクセストレース情報取得プログラムが記録されている。
【００３１】
（第１の実施形態）
まず、本発明に係る第１の実施形態のプロセッサを例示する。図１は、本実施形態に係るプロセッサの概略構成を示すブロック図である。
【００３２】
図１において、プロセッサ１００は、各部の制御を行う中央処理装置（ＣＰＵ）１０１と、プログラム及びデータを格納するメモリ１０２と、プログラムの実行によってＣＰＵ１０１がアクセスしたアクセスアドレスを取得するメモリアクセスアドレス取得部１０３と、取得したアドレスを格納するアドレス格納部１０４と、アドレス格納部１０４に格納されている最新のアドレスと一つ前のアドレスからオフセット値を計算するオフセット値計算部１０５と、計算したオフセット値を格納するオフセット値格納部１０６と、オフセット格納部１０６に格納されている最新のオフセット値と一つ前のオフセット値を比較して両者が一致するか否かを判定するオフセット値比較部１０７と、判定の結果で最新のオフセット値と一つ前のオフセット値が一致した場合に、一致した回数をカウントするカウンタ１０６ａと、最新のオフセット値と一つ前の一致しない場合に、アドレス格納部１０４に格納されているオフセットの基準となるベースアドレスとオフセット値格納部１０６に格納されているオフセット値、及びカウンタ１０６ａのカウント値を出力するメモリアクセスアドレス情報出力部１０８を有する構成である。
【００３３】
プロセッサ１００は、ＣＰＵ１０１がメモリ１０２に格納されたメモリアクセストレース情報取得プログラムを実行することによりメモリアクセストレース情報取得装置として機能し、トレース情報の生成対象である対象プログラムを実行する際のメモリアクセストレース情報を取得して出力する。
【００３４】
対象プログラムは、Ｃ言語を用いて記述されることがある。Ｃ言語で記述されたプログラムは、Ｃ言語コンパイラによってプロセッサ１００が理解することが可能な機械語とほぼ１対１に対応するアセンブリ言語に変換される。さらに、このアセンブリ言語は、アセンブラとリンカによってプロセッサ１００上で実行可能な機械語に変換される。
【００３５】
図２は、Ｃ言語ソースコード１０の一部がＣ言語コンパイラによってどのようにアセンブリ言語コード１１に変換されるかの例を示したものである。
【００３６】
図２（ａ）に示すＣ言語ソースコード１０の破線で囲まれた実行文は、図２（ｂ）に示すアセンブリ言語コード１１の破線で囲まれた部分に対応する。ここで、アセンブリ言語コード１１の破線内の“ＰＣ”は、命令アドレスを示すプログラムカウンタ値を示し、“ＭＮＥＭＯＮＩＣ”は、“ＰＣ”に対応するニーモニックを示している。
【００３７】
図３は、図２の対象プログラムを実行した際のメモリアクセストレース情報の例を示すものである。図３（ａ）に示す従来のメモリアクセストレース情報２０は、基本となるアドレス、オフセット値、オフセット値の繰り返し回数を計算することで、情報を圧縮した図３（ｂ）に示すようなメモリアクセストレース情報２１に変換することができる。ここで、“ＡＤＲＳ”はメモリアクセスが発生したアドレス、“＃”はメモリアクセスアドレスの前回とのオフセット値、“ＲＥＰＥＡＴ”はオフセット値の繰り返し回数を表している。
【００３８】
次に、以上のように構成された本実施形態のプロセッサについて、メモリアクセストレース情報の取得処理方法を説明する。図４は、本実施形態におけるメモリアクセストレース情報の取得処理手順を説明するためのフローチャートである。
【００３９】
ステップＳ１００の初期化手順において、ＣＰＵ１０１がカウンタ１０６ａに初期値“１”を、終了フラグに“ＯＦＦ”をそれぞれセットするとともに、アドレス格納部１０４がベースアドレス及び比較アドレス１、２、オフセット格納部１０６が比較オフセット値１、２をそれぞれクリアする。
【００４０】
まず、メモリアクセスアドレス取得部１０３がメモリアクセスアドレスを取得できたか否かを判定し（ステップＳ１０１）、メモリアクセスアドレスを取得できたと判定した場合は、アドレス格納部１０４がベースアドレスが空であるか否かを判定する（ステップＳ１０２）。
【００４１】
ステップＳ１０２における判定の結果、ベースアドレスが空であると判定した場合は、アドレス格納部１０４が取得したアドレスをベースアドレス及び比較アドレス１にそれぞれセットして（ステップＳ１０３、ステップＳ１０４）、ステップＳ１０１の手順に戻り、次のメモリアクセスアドレスを取得したか否かを判定する。
【００４２】
一方、ステップＳ１０１の手順でメモリアクセスアドレスを取得できなかったと判定した場合は、ＣＰＵ１０１が終了フラグを“ＯＮ”にセットして（ステップＳ１２０）、後述するステップＳ１１３にスキップする。
【００４３】
また、ステップＳ１０２の手順でベースアドレスが空でないと判定した場合は、アドレス格納部１０４が取得したアドレスを比較アドレス２にセットして（ステップＳ１０５）、オフセット値計算部１０５が比較アドレス１と比較アドレス２のオフセット値を計算する（ステップＳ１０６）。
【００４４】
次に、アドレス格納部１０４が比較アドレス２のアドレスを比較アドレス１にセットして（ステップＳ１０７）、オフセット値格納部１０６が比較オフセット値１が空であるか否かを判定する（ステップＳ１０８）。その結果、比較オフセット値１が空であると判定した場合は、オフセット値格納部１０６がステップＳ１０６の手順で計算したオフセット値を比較オフセット値１にセットして（ステップＳ１０９）、ステップＳ１０１の手順に戻る。
【００４５】
一方、ステップＳ１０８の手順において、比較オフセット値１が空でないと判定した場合は、オフセット値格納部１０６がステップＳ１０６の手順で計算したオフセット値を比較オフセット値２にセットし（ステップＳ１１０）、オフセット値比較部１０７が比較オフセット値１と比較オフセット値２が同じであるか否かを判定する（ステップＳ１１１）。
【００４６】
ステップＳ１１１における判定の結果、比較オフセット値１と比較オフセット値２が同じであると判定した場合は、オフセット値計算部１０５がカウンタ１０６ａの値を“１”増加して（ステップＳ１１２）、ステップＳ１０１の手順に戻る。
【００４７】
一方、ステップＳ１１１の手順で比較オフセット値１と比較オフセット値２が同じでないと判定した場合は、メモリアクセスアドレス情報出力部１０８がベースアドレスを出力するとともに（ステップＳ１１３）、オフセット値比較部１０７がカウンタ１０６ａの値が“１”より大きいか否かを判定する（ステップＳ１１４）。その結果、カウンタ値は“１”より大きいと判定した場合は、メモリアクセスアドレス情報出力部１０８が比較オフセット値１及びカウンタ１０６ａのカウンタ値をそれぞれ出力する（ステップＳ１１５、Ｓ１１６）。
【００４８】
また、ステップＳ１１４の手順でカウンタ１０６ａのカウンタ値が“１”以下であると判定した場合は、ステップＳ１１７の手順にスキップする。
【００４９】
ステップＳ１１７では、ＣＰＵ１０１が終了フラグが“ＯＮ”であるか否かを判定し、終了フラグが“ＯＦＦ”であると判定した場合は、ＣＰＵ１０１がカウンタ１０６ａの値と比較オフセット値１を初期値に戻すとともに（ステップＳ１１８）、アドレス格納部１０４が取得したメモリアクセスアドレスをベースアドレスにセットして（ステップＳ１１９）、ステップＳ１０１の手順に戻り、次のメモリアクセスアドレスを取得する。
【００５０】
一方、ステップＳ１１７において、終了フラグが“ＯＮ”であると判定した場合は、メモリアクセストレース情報の取得処理を終了する。
【００５１】
次に、本実施形態におけるメモリアクセストレース情報取得処理の具体例について、図３を参照しながら説明する。
【００５２】
図３（ａ）において、初めにアドレス“０ｘ１０”のデータを取得すると、図４に示したフローチャートのステップＳ１０２の手順でベースアドレスは空であるので、アドレス“０ｘ１０”はステップＳ１０３の手順でベースアドレスにセットされ、ステップ１０４の手順で比較アドレス１にセットされる。
【００５３】
次に、アドレス“０ｘ１４”のデータを取得すると、ステップＳ１０２の手順では、ベースアドレスに“０ｘ１０”が既にセットされているので空ではないと判定され、取得したアドレス“０ｘ１４”は、ステップＳ１０５の手順で比較アドレス２にセットされる。
【００５４】
ステップＳ１０６では、比較アドレス１に格納されているアドレス“０ｘ１０”と、比較アドレス２に格納されているアドレス“０ｘ１４”のオフセット値をオフセット値計算部１０５によって計算し、“＃０ｘ４”を得る。そして、次のデータに対する比較に備えるために、続くステップＳ１０７の手順で比較アドレス２に格納されているアドレス“０ｘ１４”を比較アドレス１にセットする。
【００５５】
次に、ステップＳ１０８における判定の結果、比較オフセット値１は空となっているので、ステップＳ１０６の手順で計算したオフセット値“＃０ｘ４”を、続くステップＳ１０９の手順で比較オフセット値１にセットする。
【００５６】
次いで、アドレス“０ｘ１８”のデータを取得すると、上記したと同様にステップＳ１０８までの処理を実行する。
【００５７】
ステップＳ１０８では、比較オフセット値１に“＃０ｘ４”が格納されているため、ステップＳ１１０の手順に進んで比較オフセット値２に“０ｘ１４”と“０ｘ１８”のオフセット値“＃０ｘ４”をセットし、更に、ステップＳ１１１においてこれら二つのオフセット値が同じであるか否かの判定を行う。
【００５８】
ここで、比較オフセット値１と比較オフセット値２にそれぞれ格納されているオフセット値は、同じ“＃０ｘ４”であるので、ステップＳ１１２の手順でカウンタ１０６ａにおけるカウンタ値を“１”増やして“２”に変更する。
【００５９】
次のアドレス“０ｘ１Ｃ”のデータからアドレス“０ｘ２Ｃ”のデータまで同様の処理を行うと、ベースアドレスが“０ｘ１０”、比較アドレス１が“０ｘ２Ｃ”、比較オフセット値１が“＃０ｘ４”、カウンタ値が“７”という状態になる。
【００６０】
続いて、例えばアドレス“０ｘ１００”のデータを取得したとすると、上記したと同様に、ステップＳ１０８までの処理を行う。
【００６１】
ステップＳ１０８では、比較オフセット値１に“＃０ｘ４”が格納されているため、ステップＳ１１０の処理手順で、比較オフセット値２に“０ｘ２Ｃ”と“０ｘ１００”のオフセット値“＃０ｘＤ４”をセットし、ステップＳ１１１の手順オフセット値が同じかどうかの判定処理を行う。
【００６２】
ここで、比較オフセット値１と比較オフセット値２に格納されているオフセット値は、それぞれ“＃０ｘ４”と“＃０ｘＤ４”になっていて異なっているので、ステップＳ１１３の手順でベースアドレス“０ｘ１０”を出力するとともに、次のステップＳ１１４の手順でカウンタ値が“１”より大きいか否かを判定する。
【００６３】
このとき、カウンタ１０６ａのカウンタ値は“７”となっていて“１”より大きいので、比較オフセット値１に格納されているオフセット値“＃０ｘ４”と、カウンタ値“７”を出力して、終了フラグの状態を判定するステップＳ１１７の処理を行う。
【００６４】
ステップＳ１１７の手順では、終了フラグが初期値の“ＯＦＦ”であるため、続くステップＳ１１８の手順において、カウンタ１０６ａのカウンタ値“７”と、比較オフセット値１に格納されているオフセット値“＃０ｘ４”をクリアし、更にステップＳ１１９の手順で取得したアドレス“０ｘ１００”をベースアドレスにセットしてステップＳ１０１の手順に戻り、メモリアクセスアドレスを取得したか否かの判定を繰り返す。
【００６５】
そして、ステップＳ１０１の手順で、例えば次のアドレスが取得できなかった場合は、ステップＳ１２０の手順で終了フラグを“ＯＮ”にセットしてからステップＳ１１３の手順に進み、ベースアドレス“０ｘ１００”を出力する。
【００６６】
次のステップＳ１１４では、カウンタ値が初期値“１”になっているので、ステップＳ１１７にジャンプして終了フラグを判定する処理を実行する。その結果、終了フラグはステップＳ１２０で“ＯＮ”にセットしてあったので、メモリアクセストレース情報取得処理を終了し、図３（ｂ）に示すようなメモリアクセストレース情報２１を取得することができる。
【００６７】
以上説明したように、このような本発明に係る第１の実施形態のメモリアクセストレース情報取得方法、メモリアクセストレース情報取得装置、メモリアクセストレース情報取得プログラム、記録媒体によれば、オフセット値の一致する回数をカウントすることで出力するトレース情報の量を減少させることができ、デバッグ作業に必要なメモリアクセス状況を効率良く取得することが可能となる。
【００６８】
（第２の実施形態）
まず、本発明の第２の実施形態に係るプロセッサを例示する。図５は、第２の実施形態に係るプロセッサの概略構成を示すブロック図である。
【００６９】
図５において、プロセッサ２００は、各部の制御を行うＣＰＵ２０１と、プログラム及びデータを格納するメモリ２０２と、ＣＰＵ２０２がアクセスしたメモリアクセスアドレスを取得するメモリアクセスアドレス取得部２０３と、取得したアドレスを格納するアドレス格納部２０４と、イベントを検出するイベント検出部２０５と、アドレス格納部２０４に格納されている最新のアドレスと一つ前のアドレスからオフセット値を計算するオフセット値計算部２０６と、計算したオフセット値を格納するオフセット値格納部２０７と、検出したイベントからイベントまでのオフセット値を格納する一時格納バッファ２０８と、オフセット値のパターンを格納するパターンバッファ２０９と、一時格納バッファ２０８によって格納されたオフセット値とパターンバッファ２０９によって格納されたオフセット値のパターンを比較して両者が一致するか否かを判定するパターン比較部２１０と、パターン比較部２１０における判定で、一時格納バッファ２０８によって格納されたオフセット値とパターンバッファ２０９によって格納されたオフセット値のパターンが一致した場合に、一致した回数をカウントするカウンタ２０９ａと、パターン比較部２１０における判定で、一時格納バッファ２０８によって格納されたオフセット値とパターンバッファ２０９によって格納されたオフセット値のパターンが一致しない場合に、パターンバッファ２０９によって格納されているオフセット値を出力するメモリアクセスアドレス情報出力部２１１を有する構成である。
【００７０】
プロセッサ２００は、ＣＰＵ２０１がメモリ２０２に格納されたトレース情報取得プログラムを実行することによりメモリアクセストレース情報取得装置として機能し、トレース情報の生成対象である対象プログラムを実行する際のメモリアクセストレース情報を取得して出力する。なお、本実施形態の対象プログラムは、前述した第１の実施の形態における対象プログラムと同じであるので、説明を省略する。
【００７１】
図６は、Ｃ言語ソースコード１２の一部がＣ言語コンパイラによってどのようにアセンブリ言語コード１３に変換されるかの例を示したものである。
【００７２】
図６（ａ）に示すＣ言語ソースコード１２の破線で囲まれた実行文は、図６（ｂ）に示すアセンブリ言語コード１３の破線で囲まれた部分に対応する。ここで、アセンブリ言語コード１３の破線内の“ＰＣ”は、命令アドレスを示すプログラムカウンタ値を示し、“ＭＮＥＭＯＮＩＣ”は“ＰＣ”に対応するニーモニックを示している。
【００７３】
図７は、図６に示す対象プログラムを実行した際のメモリアクセストレース情報の例を示したものである。図７（ａ）に示す従来のメモリアクセストレース情報２２は、基本となるアドレス、オフセット値、オフセット値の繰り返し回数を計算することで、情報を圧縮した図７（ｂ）に示すようなメモリアクセストレース情報２３に変換することができる。ここで、“ＬＯＯＰ”は分岐によりループの先頭に戻るイベント、“ＬＯＯＰ＿ＢＥＧＩＮ”及び“ＬＯＯＰ＿ＥＮＤ”は、それぞれパターンの開始と終了を表している。
【００７４】
次に、以上のように構成された本実施形態のプロセッサについて、メモリアクセストレース情報の取得処理方法を説明する。図８は、本実施形態におけるメモリアクセストレース情報の取得処理手順を説明するためのフローチャートである。
【００７５】
ステップＳ２００の初期化手順において、ＣＰＵ２０１がカウンタ２０９ａに初期値“１”を、終了フラグに“ＯＦＦ”をそれぞれ設定するとともに、一時格納バッファ２０８、パターンバッファ２０９をそれぞれクリアする。
【００７６】
まず、ステップＳ２０１においてイベント検出部２０５がイベントを取得し、パターン比較部２１０が取得したイベントが指定のイベントと一致するか否かを判定する（ステップＳ２０２）。
【００７７】
判定の結果、イベントが一致しない場合は、ステップＳ２０３においてメモリアクセスアドレス取得部２０３がメモリアクセスアドレスを取得したか否かを判定する。その結果、取得したと判定した場合は、メモリアクセスアドレス取得部２０３がそのメモリアクセスアドレスが初めて取得したものであるか否かを判定する（ステップＳ２０４）。
【００７８】
取得したメモリアクセスアドレスが初めてのものであると判定した場合は、アドレス格納部２０４がそのメモリアクセスアドレスを比較アドレス１にセットする（ステップＳ２０５）とともに、メモリアクセスアドレス情報出力部２１１がその情報を出力して（ステップＳ２０６）、ステップＳ２０１の手順に戻り、イベント検出部２０５によって次のイベントを取得する。
【００７９】
一方、ステップＳ２０２の手順で取得したイベントが指定のイベントと一致したと判定した場合は、後述するステップＳ２１１にスキップする。
【００８０】
また、ステップＳ２０３の手順でメモリアクセスアドレスを取得できなかったと判定した場合は、ＣＰＵ２０１が終了フラグを“ＯＮ”にセットして（ステップＳ２２０）、後述するステップＳ２１１にスキップする。
【００８１】
更に、ステップＳ２０４の手順で、取得したメモリアクセスアドレスが２回目以降のものであると判定した場合は、アドレス格納部２０４がそのメモリアクセスアドレスを比較アドレス２にセットする（ステップＳ２０７）。
【００８２】
続いて、比較アドレス１及び比較アドレス２にそれぞれセットしてあるメモリアクセスアドレスからそのオフセット値をオフセット計算部２０６が計算して（ステップＳ２０８）、一時格納バッファ２０８が計算結果を格納する（ステップＳ２０９）。
【００８３】
そして、アドレス格納部２０４が比較アドレス２にセットしてあるメモリアクセスアドレスを比較アドレス１にセットした後（ステップＳ２１０）、ステップＳ２０１の手順に戻る。
【００８４】
ステップＳ２１１では、パターン比較部２１０が一時格納バッファ２０８によって格納されているオフセット値のパターンがパターンバッファ２０９に格納されているパターンと一致するか否かを判定する。
【００８５】
判定の結果、パターンが一致した場合は、ＣＰＵ２０１がカウンタ２０９ａの値を“１”増加させ（ステップＳ２１２）、一時格納バッファ２０８をクリアして（ステップＳ２１９）、ステップＳ２０１の手順に戻り、イベント検出部２０５によって次のイベントを取得する。
【００８６】
一方、ステップＳ２１１における判定の結果、パターンが一致しない場合は、メモリアクセスアドレス情報出力部２１１がステップＳ２１３でパターンバッファ２０９によって格納されているパターンを出力し、続くステップＳ２１４において、パターン比較部２１０がカウンタ２０９ａの値が“１”より大きいか否かを判定する。
【００８７】
ステップＳ２１４における判定の結果、カウンタ値が“１”より大きい場合は、メモリアクセスアドレス情報出力部２１１がそのカウンタ値を出力して（ステップＳ２１５）、続くステップＳ２１６の手順に進む。一方、ステップＳ２１４でカウンタ値が“１”以下であると判定した場合は、ステップＳ２１６の手順にスキップする。
【００８８】
ステップＳ２１６では、ＣＰＵ２０１が終了フラグが“ＯＮ”であるか否かを判定する。判定の結果、“ＯＮ”ではないと判定した場合は、続くステップＳ２１７で、ＣＰＵ２０１がカウンタ２０９ａに“１”をセットして初期値に戻すとともに、一時格納バッファ２０８の内容をパターンバッファ２０９に反映して（ステップＳ２１８）、ステップＳ２１９の手順に進み、一時格納バッファ２０８をクリアする。
【００８９】
一方、ステップＳ２１６で終了フラグが“ＯＮ”であると判定した場合は、メモリアクセスアドレス情報出力部２１１が一時格納バッファ２０８の内容を出力して（ステップＳ２２１）、メモリアクセストレース情報の取得処理を終了する。
【００９０】
なお、以上のメモリアクセストレース情報取得処理手順では、初期化手順ステップＳ２００でパターンバッファ２０９の内容を空にしているが、検出頻度が高いか、叉は、始めに出やすいパターン等を格納しておいてもよい。
【００９１】
また、ステップＳ２０１ではイベントを取得しているが、分岐などの特定の命令や、ユーザが挿入したイベント、ループの先頭などに置き換えてもよい。
【００９２】
次に、本実施形態におけるメモリアクセストレース情報取得処理の具体例について、図７を参照しながら説明する。
【００９３】
図７（ａ）において、初めにアドレス“０ｘ１０”のデータを取得すると、ステップＳ２０４の手順で初めてのメモリアクセスアドレスと判定され、取得したアドレス“０ｘ１０”がステップＳ２０５の手順で比較アドレス１にセットされるとともに、次のステップＳ２０６の手順で出力される。
【００９４】
次に、アドレス“０ｘ３０”のデータを取得すると、ステップＳ２０４の手順で２回目以降のアドレスと判定されるので、ステップＳ２０７において、この取得したアドレス“０ｘ３０”が比較アドレス２にセットされる。
【００９５】
ステップＳ２０８では、比較アドレス１に格納されているアドレス“０ｘ１０”と、比較アドレス２に格納されているアドレス“０ｘ３０”のオフセット値“＃０ｘ２０”をオフセット値計算部２０６によって計算し、ステップＳ２０９の手順でこのオフセット値“＃０ｘ２０”を一時格納バッファ２０８によって格納する。そして、次のデータに対する比較に備えるため、ステップＳ２１０で比較アドレス２に格納されているアドレス“０ｘ３０”を比較アドレス１にセットする。
【００９６】
次に、アドレス“０ｘ５０”を取得すると、上記したと同様にステップＳ２０９までの処理を行い、一時格納バッファ２０８に“＃０ｘ２０”、“＃０ｘ２０”が格納される。
【００９７】
次いで、イベント“ＬＯＯＰ”を取得すると、ステップＳ２０２における判定の結果、指定イベントと一致するので、ステップＳ２１１にスキップし、一時格納バッファ２０８によって格納されている内容“０ｘ２０”をパターンと比較して一致するか否かの判定処理を行う。
【００９８】
ステップＳ２１１における判定の結果、パターンバッファ２０９は空であるので一時格納バッファ２０８によって格納されている内容“０ｘ２０”とは一致せず、ステップＳ２１３の処理に進んでパターンバッファ２０９によって格納されているパターンを出力するが、この場合パターンバッファ２０９は空であるので何も出力しない。
【００９９】
次に、カウンタ２０９ａの値が“１”を超えているかどうかを判定するステップＳ２１４では、カウンタ値が“１”であるのでステップＳ２１６にスキップし、終了フラグが“ＯＮ”であるか否かを判定する。すると、終了フラグは初期化設定した“ＯＦＦ”のままであるので、ステップＳ２１７の手順でカウンタ２０９ａの値をクリアするとともに、ステップＳ２１８の手順で一時格納バッファ２０８によって格納されている“＃０ｘ２０”、“＃０ｘ２０”をパターンバッファ２０９に反映させ、ステップＳ２１９の手順で一時格納バッファ２０８をクリアする。
【０１００】
次いで、図７（ａ）に示すアドレス“０ｘ１４”、“０ｘ３４”、“０ｘ５４”の各データに対して同様の処理を行うと、一時格納バッファ２０８にオフセット値“＃−０ｘ３Ｃ”、“＃０ｘ２０”、“＃０ｘ２０”が格納され、パターンバッファ２０９に“＃０ｘ２０”、“＃０ｘ２０”が格納された状態になる。
【０１０１】
次のイベント“ＬＯＯＰ”に対して同様に処理を行うと、ステップＳ２１３でパターン“＃０ｘ２０”、“＃０ｘ２０”を出力し、ステップＳ２１８で一時格納バッファ２０８の内容“＃−０ｘ３Ｃ”、“＃０ｘ２０”、“＃０ｘ２０”をパターンバッファ２０９に反映する。
【０１０２】
続いて、アドレス“０ｘ１８”、“０ｘ３８”、“０ｘ５８”の各データに対して同様の処理を行うと、一時格納バッファ２０８にオフセット値“＃−０ｘ３Ｃ”、“＃０ｘ２０”、“＃０ｘ２０”が格納され、パターンバッファ２０９に“＃−０ｘ３Ｃ”、“＃０ｘ２０”、“＃０ｘ２０”が格納された状態になる。
【０１０３】
次に、イベント“ＬＯＯＰ”に対してステップＳ２１１の処理を行うと、パターンが一致するため、ステップＳ２１２でカウンタの値を“１”増加して“２”に変更し、ステップＳ２１９で一時格納バッファ２０８をクリアする。
【０１０４】
次のアドレス“０ｘ１Ｃ”のデータからアドレス“０ｘ６Ｃ”の後に来るイベントの“ＬＯＯＰ”まで同様に処理を行うと、パターンバッファ２０９に格納されたパターンが“＃−０ｘ３Ｃ”、“＃０ｘ２０”となり、カウンタ２０９ａの値が“７”という状態になる。
【０１０５】
そして、例えば次のアドレスが取得できなかった場合は、ステップＳ２２０の手順で終了フラグを“ＯＮ”にセットして、ステップＳ２１１の処理を実行する。
【０１０６】
このとき、一時格納バッファ２０８は空になっているのでパターンバッファ２０９の内容とは一致せず、ステップＳ２１３でパターンバッファ２０９に格納されているパターン“＃−０ｘ３Ｃ”、“＃０ｘ２０”、“＃０ｘ２０”を出力して、ステップＳ２１４でカウンタ２０９ａの値が“１”より大きいかどうかを判定する。すると、カウンタ値は“７”になっているので、ステップＳ２１５の手順でこれを出力して、次のステップＳ２１６の処理を行う。
【０１０７】
ステップＳ２１６において、終了フラグは“ＯＮ”になっているのでステップＳ２２１の手順に進み、一時格納バッファ２０８の内容を出力する。しかし、一時格納バッファ２０８は空であるので、何も出力することなくメモリアクセストレース情報取得処理を終了し、図７（ｂ）に示すようなメモリアクセストレース情報２３を取得することができる。
【０１０８】
以上説明したように、このような本発明に係る第２の実施形態のメモリアクセストレース情報取得方法、メモリアクセストレース情報取得装置、及びメモリアクセストレース情報取得プログラムによれば、オフセット値が一定でない範囲を省略することで、出力する情報量を減少させることができ、デバッグ作業に必要なメモリアクセス状況を効率良く取得することが可能となる。
【０１０９】
（第３の実施形態）
本発明の第３の実施形態に係るプロセッサは、図５で示した第２の実施形態と同一の構成であり、説明を省略する。
【０１１０】
図５において、本実施形態のプロセッサ２００は、ＣＰＵ２０１がメモリ２０２に格納されたトレース情報取得プログラムを実行することによりメモリアクセストレース情報取得装置として機能し、トレース情報の生成対象である対象プログラムを実行する際のメモリアクセストレース情報を取得して出力する。なお、本実施形態の対象プログラムは、前述した第２の実施の形態における対象プログラムと同じであるので、説明を省略する。
【０１１１】
図９は、図６に示す対象プログラムを実行した際のメモリアクセストレース情報の例である。図７（ａ）に示す従来のメモリアクセストレース情報２４は、基本となるアドレス、オフセット値、オフセット値の繰り返し回数を計算することで、情報を圧縮した図９（ａ）および（ｂ）に示すようなメモリアクセストレース情報２５に変換することができる。ここで、“ＬＯＯＰ＋ＡＤＲＳ”は、ループの先頭アドレスを表している。
【０１１２】
次に、本実施形態のプロセッサについて、メモリアクセストレース情報の取得処理方法を説明する。本実施形態におけるメモリアクセストレース情報の取得処理方法は、前述した本発明の第２の実施の形態におけるメモリアクセストレース情報取得処理方法の変形例である。図１０は、本実施形態のメモリアクセストレース情報取得処理手順を説明するためのフローチャートである。
【０１１３】
図１０において、本実施形態のメモリアクセストレース情報取得処理方法Ｓ２ａは、図８に示した第２の実施形態のメモリアクセストレース情報取得方法Ｓ２の、初めてオフセットの基準となるアドレスを取得したか否かを判定するステップＳ２０４に代えて、アドレス格納部２０４がベースアドレスが空であるか否かを判定するステップＳ２４６の手順を設けるとともに、初めて取得したアドレスを出力するステップＳ２０６の手順に代えて、アドレス格納部２０４が取得したアドレスをベースアドレスにセットするステップＳ２４１の手順を設けるものである。
【０１１４】
また、一時格納バッファ２０８をクリアするステップＳ２１９の手順に代えて、ベースアドレスをパターンバッファ２０９によって格納するステップＳ２４２の手順、及びアドレス格納部によってベースアドレスを、ＣＰＵ２０１によって一時格納バッファ２０８をクリアするステップＳ２４３の手順を設けている。更に、終了フラグが“ＯＮ”であるか否かを判定するステップＳ２１６の手順の直前に、パターンバッファ２０９によって格納されたベースアドレス群をメモリアクセスアドレス情報出力部２１１が出力するステップＳ２４４を追加し、また、一時格納バッファ２０８の内容を出力するステップＳ２２１に代えて、メモリアクセスアドレス情報出力部２１１が一時格納バッファ２０８によって格納されているオフセット値に加えてベースアドレスの内容も併せて出力するステップＳ２４５を設けるものである。なお、ステップＳ２４４の手順は、前述した第１の実施形態に記載した方法に置き換えてもよい。
【０１１５】
次に、本実施形態におけるメモリアクセストレース情報取得処理の具体例について、図７を参照しながら説明する。
【０１１６】
図７（ａ）において、初めにアドレス“０ｘ１０”のデータを取得すると、ベースアドレスが空であるか否かを判定するステップＳ２４６では、ベースアドレスが空であるので、取得したアドレス“０ｘ１０”を比較アドレス１及びベースアドレスにセットする（ステップＳ２０５、Ｓ２４１）。
【０１１７】
次に、アドレス“０ｘ３０”のデータを取得すると、ベースアドレスには“０ｘ１０”がセットされているので、ステップＳ２４６の次の手順はステップＳ２０７となり、取得したアドレス“０ｘ３０”が比較アドレス２にセットされる。
【０１１８】
続くステップＳ２０８では、アドレス格納部２０４の比較アドレス１に格納されているアドレス“０ｘ１０”と、比較アドレス２に格納されているアドレス“０ｘ３０”のオフセット値“＃０ｘ２０”をオフセット値計算部２０６によって計算し、ステップＳ２０９の手順で比較アドレス１に格納されている“０ｘ２０”を一時格納バッファ２０８によって格納する。その後、次のデータに対する比較に備えて、比較アドレス２に格納されているアドレス“０ｘ３０”を比較アドレス１にセットする（ステップＳ２１０）。
【０１１９】
次に、アドレス“０ｘ５０” のデータを取得し、上記したと同様にステップＳ２０９までの処理を行うと、一時格納バッファ２０８には“＃０ｘ２０”、“＃０ｘ２０”が格納される。
【０１２０】
次いで、ステップＳ２０１でイベント“ＬＯＯＰ”を取得すると、ステップＳ２０２における判定の結果、指定イベントと一致するので、ステップＳ２１１の処理を実行する。
【０１２１】
ステップＳ２１１では、一時格納バッファ２０８によって格納されている内容をパターンと比較するが、パターンバッファ２０９が空であるのでステップＳ２１３の処理に進み、パターンバッファ２０９によって格納されているパターンを出力する。この場合パターンバッファ２０９は空であるので何も出力することなく、続くステップＳ２１４の手順を実行する。
【０１２２】
ステップＳ２１４では、カウンタの値が“１”以下であるので、ステップＳ２４４の手順にスキップして、パターンバッファ２０９に格納されているベースアドレス群を出力する手順を実行する。この場合パターンバッファ２０９は空であるので何も出力することなく、終了フラグを判定するステップＳ２１６の手順に進む。
【０１２３】
すると、終了フラグは“ＯＦＦ”であるので、ステップＳ２１７でカウンタ２０９ａに“１”をセットして初期値に戻し、ステップＳ２１８で一時格納バッファ２０８によって格納されている“＃０ｘ２０”、“＃０ｘ２０”をパターンバッファ２０９に反映させた後、ベースアドレスをパターンバッファ２０９によって格納するステップＳ２４２の手順と、ベースアドレス及び一時格納バッファ２０８をクリアするステップＳ２４３の手順を実行する。
【０１２４】
次に、アドレス“０ｘ１４”、“０ｘ３４”、“０ｘ５４”の各データに対して同様の処理を行うと、一時格納バッファ２０８にオフセット値“＃０ｘ２０”、“＃０ｘ２０”が、ベースアドレスに“０ｘ１４”、パターンバッファ２０９に“＃０ｘ２０”、“＃０ｘ２０”が、パターンバッファ２０９にベースアドレス群（“０ｘ１０”）がそれぞれ格納されている状態になる。
【０１２５】
続いて、イベント“ＬＯＯＰ” を取得してステップＳ２１１の判定処理を行うと、一時格納バッファ２０８の内容がパターンと一致するので、ステップＳ２１２でカウンタ２０９ａの値を“１”増やして“２”とし、ステップＳ２４２でベースアドレス“０ｘ１４”をパターンバッファ２０８に格納するとともに、ステップＳ２４３でベースアドレス及び一時格納バッファ２０９をクリアする。
【０１２６】
次のアドレス“０ｘ１Ｃ”のデータからアドレス“０ｘ６Ｃ”の後に来るイベント “ＬＯＯＰ”まで同様に処理を行うと、パターンバッファ２０９の内容が“＃０ｘ２０”、“＃０ｘ２０”、カウンタ２０９ａの値が“８”という状態になる。
【０１２７】
そして、例えば次のアドレスが取得できなかった場合は、ステップＳ２２０の手順で終了フラグを“ＯＮ”にセットし、ステップＳ２１１の処理を実行する。すると、一時格納バッファ２０８は空になっているので、ステップＳ２１３でパターン“＃０ｘ２０”、“＃０ｘ２０”を出力して、カウンタ２０９ａの値を判定するステップＳ２１４の手順に進む。
【０１２８】
ステップＳ２１４において、カウンタ２０９ａの値は“１”より大きいので、次のステップＳ２１５でその値を出力するとともに、ステップＳ２４４でパターンバッファ２０９によって格納されたベースアドレス群（“０ｘ１０、“０ｘ１４”、・・・、“０ｘ２Ｃ”）を出力して、終了フラグを判定するステップＳ２１６の手順を実行する。
【０１２９】
ステップＳ２１６では、終了フラグが“ＯＮ”になっているので、ステップＳ２４５の手順に進み、ベースアドレスと一時格納バッファ２０８の内容を出力する。この場合、ベースアドレスと一時格納バッファ２０８はいずれも空となっているので何も出力することなく、メモリアクセストレース情報取得処理を終了する。これにより、図９（ａ）に示すメモリアクセストレース情報２４を取得することができる。
【０１３０】
また、パターンバッファ２０９によって格納されたベースアドレス群を出力するステップＳ２４４の手順を、図４において示した第１の実施形態の方法に置き換えることでも、図９（ｂ）に示すメモリアクセストレース情報２５を取得することができる。
【０１３１】
以上説明したように、このような本発明に係る第３の実施形態のメモリアクセストレース情報取得方法、メモリアクセストレース情報取得装置、メモリアクセストレース情報取得プログラム、及び記録媒体によれば、イベントを取得した際のアドレスのオフセット値が一定でないものに対しても、デバッグ作業に必要なデータトレース情報を効率良く取得することができる。
【０１３２】
（第４の実施形態）
本発明の第４の実施形態に係るプロセッサは、図５で示した第２の実施形態と同一の構成であり、説明を省略する。
【０１３３】
図５において、本実施形態のプロセッサ２００は、ＣＰＵ２０１がメモリ２０２に格納されたトレース情報取得プログラムを実行することによりメモリアクセストレース情報取得装置として機能し、トレース情報の生成対象である対象プログラムを実行する際のメモリアクセストレース情報を取得して出力する。
【０１３４】
図１２は、図１１に示すようなＣ言語ソースコード１４で記述された対象プログラムを実行した際のメモリアクセストレース情報の例を示すものである。図１２（ａ）に示す従来のメモリアクセストレース情報２６は、基本となるアドレス、パターン、パターンの繰り返し回数を計算することで、図１２（ｂ）に示すように、情報を圧縮したメモリアクセストレース情報２７に変換することができる。ここで、“ＬＯＯＰ  ＲＥＰＥＡＴ”は、“ＬＯＯＰ＿ＢＥＧＩＮ”から“ＬＯＯＰ＿ＥＮＤ”までに同じパターンが繰り返された回数を表している。
【０１３５】
次に、本実施形態のプロセッサについて、メモリアクセストレース情報の取得処理方法を説明する。本実施形態におけるメモリアクセストレース情報の取得処理方法は、前述した本発明の第２の実施の形態におけるメモリアクセストレース情報取得処理方法の変形例であり、図１３は、本実施形態のメモリアクセストレース情報取得処理手順を説明するためのフローチャートである。
【０１３６】
図１３に示す本実施形態のメモリアクセストレース情報取得処理手順は、図８で示した第２の実施形態のメモリアクセストレース情報取得処理におけるフローチャートのステップＳ２１１とステップ２１３の間にステップＳ２５０を追加し、ステップＳ２１８とステップＳ２１９の間にステップＳ２５１〜Ｓ２５４をそれぞれ追加したものである。
【０１３７】
ステップＳ２５０は、ステップＳ２１１において一時格納バッファ２０８の内容がパターンと一致しないと判定した際に、メモリアクセスアドレス情報出力部２１１がラベルを出力する処理手順であり、ステップＳ２５１は、ステップＳ２１８で一時格納バッファ２０８の内容をパターンバッファ２０９に反映した際に、パターン比較部２１０が既に同じパターンを出力しているか否かを判定する手順である。なお、このステップＳ２５０の手順を追加することにより、パターンを出力する処理のステップＳ２１３は、初めてラベルを出力するときにのみパターンを出力し、以降はパターンを出力しない構成になっている。
【０１３８】
また、ステップＳ２５２は、ステップＳ２５１における判定の結果、既に同じパターンが出力されている場合に、ＣＰＵ２０１がそのパターンのラベルを取得する手順であり、ステップＳ２５３は、ステップＳ２５１で同じパターンが出力されていないと判定された場合に、ＣＰＵ２０１が新規ラベルを取得する手順である。さらに、ステップＳ２５４は、ステップＳ２５２叉はステップＳ２５３の手順で取得したラベルをパターンバッファ２０９によって格納する手順である。
【０１３９】
次に、本実施形態におけるメモリアクセストレース情報取得処理の具体例について、図１２（ａ）に示したメモリアクセストレース情報２６を参照しながら説明する。
【０１４０】
図１２（ａ）におけるアドレス“０ｘ１０”のデータからアドレス“０ｘ５０”のデータまでは、第２の実施形態と同様の処理を行い、一時格納バッファ２０８には“＃０ｘ２０”、“＃０ｘ２０”が格納される。
【０１４１】
次に、イベント“ＬＯＯＰ” を取得して、パタンーン比較部２１０が一時格納バッファ２０８によって格納されている内容をパターンと比較するステップＳ２１１を実行すると、パターンバッファ２０９は空になっているので、ステップＳ２５０の処理に進んでメモリアクセスアドレス情報出力部２１１がラベルを出力し（空の場合は何も出力しない）、更にステップＳ２１３でメモリアクセスアドレス情報出力部２１１がパターンを出力して（空の場合は何も出力しない）、ステップＳ２１４でパターン比較部２１０がカウンタ２０９ａの値が“１”より大きいか否かの判定を行う。
【０１４２】
すると、カウンタ２０９ａの値は“１”以下であるので、終了フラグを判定するステップＳ２１６にスキップする。このとき、終了フラグは“ＯＦＦ”であるので、ステップＳ２１７でＣＰＵ２０１がカウンタ２０９ａをクリアし、ステップＳ２１８で一時格納バッファ２０８の内容“＃０ｘ２０”、“＃０ｘ２０”をパターンバッファ２０９に反映させた後、ステップＳ２５１の処理を行う。
【０１４３】
既に同じパターンを出力しているか否かを判定するステップＳ２５１では、既に出力したパターンに一致するものがないので、続くステップＳ２５３の処理で新規ラベル“ＬＯＯＰ１”を取得し、ステップＳ２５４でパターンバッファ２０９によって取得したラベルを格納して、ステップＳ２１９の手順でＣＰＵ２０１が一時格納バッファ２０８をクリアする。
【０１４４】
次のアドレス“０ｘ１４”のデータからアドレス“０ｘ６Ｃ”の後に来るイベント“ＬＯＯＰ”まで同様に処理を行うと、パターンバッファ２０９の内容が“＃−０ｘ３Ｃ”、“＃０ｘ２０”、“＃０ｘ２０”となり、カウンタ２０９ａの値が“７”、ラベルが“ＬＯＯＰ２”という状態になる。
【０１４５】
次に、例えばアドレス“０ｘ１００”のデータを取得すると、上記したと同様に、ステップＳ２０９までの処理を実行する。
【０１４６】
再び、アドレス“０ｘ１０”のデータからのループが発生したとき、アドレス“０ｘ５０”のデータまでは上記したと同様の処理を行い、一時格納バッファ２０８によって“＃０ｘＡ４”、“＃−０ｘＦ０”、“＃０ｘ２０”、“＃０ｘ２０”が格納される。
【０１４７】
次に、イベント“ＬＯＯＰ” を取得して、ステップＳ２１１の判定処理を行うと、パターンバッファ２０８の内容は“ＬＯＯＰ２”になっていて一致しないので、ステップＳ２５０の処理に進んでメモリアクセスアドレス情報出力部２１１がラベルを出力し（空の場合は何も出力しない）、更にステップＳ２１３でパターン“＃−０ｘ３Ｃ”、“＃０ｘ２０”、“＃０ｘ２０”を出力して、ステップＳ２１４の手順でパターン比較部２１０がカウンタ２０９ａの値が“１”より大きいか否かの判定を行う。
【０１４８】
すると、カウンタ２０９ａの値は“７”になっていて“１”より大きいので、ステップＳ２１５の手順でメモリアクセスアドレス情報出力部２１１がこの値を出力して、ＣＰＵ２０１が終了フラグを判定するステップＳ２１６の処理を行う。
【０１４９】
このとき、終了フラグは“ＯＦＦ”になっているので、ステップＳ２１７の手順でＣＰＵ２０１がカウンタ２０９ａをクリアし、ステップＳ２１８で一時格納バッファ２０８の内容“＃０ｘＡ４”、“＃−０ｘＦ０”、“＃０ｘ２０”、“＃０ｘ２０”をパターンバッファ２０９に反映させた後、ステップＳ２５１の処理を実行する。
【０１５０】
ステップＳ２５１における判定処理の結果、既に出力したパターンに一致するものがないので、続くステップＳ２５３の手順でＣＰＵ２０１が新規ラベルの“ＬＯＯＰ３”を取得し、ステップＳ２５４でパターンバッファ２０９によってラベルを格納するとともに、ステップＳ２１９でＣＰＵ２０１が一時格納バッファ２０８をクリアする。
【０１５１】
次のアドレス“０ｘ１４”のデータからアドレス“０ｘ５４”のデータまで上記したと同様の処理を行うと、一時格納バッファ２０８の内容が“＃−０ｘ３Ｃ”、“＃０ｘ２０”、“＃０ｘ２０”、パターンバッファ２０９の内容が“＃０ｘＡ４”、“＃−０ｘＦ０”、“＃０ｘ２０”、“＃０ｘ２０”という状態になる。
【０１５２】
次に、イベント“ＬＯＯＰ” を取得してステップＳ２１１の判定処理を実行すると、パターンバッファ２０８の内容は“ＬＯＯＰ３”となっていて一致しないため、ステップＳ２５０の手順でメモリアクセスアドレス情報出力部２１１がラベル“ＬＯＯＰ３”を出力し、続くステップＳ２１３でパターン“＃０ｘＡ４”、“＃−０ｘＦ０”、“＃０ｘ２０”、“＃０ｘ２０”をメモリアクセスアドレス情報出力部２１１が出力した後、ステップＳ２１４の判定処理を行う。
【０１５３】
ステップＳ２１４において、カウンタ２０９ａの値は“１”以下であるので、終了フラグを判定するステップＳ２１６にスキップする。すると、終了フラグは“ＯＦＦ”であるので、ステップＳ２１７でＣＰＵ２０１がカウンタ２０９ａをクリアし、ステップＳ２１８で一時格納バッファ２０８の内容“＃−０ｘ３Ｃ”、“＃０ｘ２０”、“＃０ｘ２０”をパターンバッファ２０９に反映させた後、ステップＳ２５１の処理を行う。
【０１５４】
ステップＳ２５１では、既に出力したパターンに一致するものがあるので、続くステップＳ２５２でＣＰＵ２０１がラベル“ＬＯＯＰ２”を取得し、ステップＳ２５４でパターンバッファ２０９によって取得したラベルを格納して、ステップＳ２１９でＣＰＵ２０１が一時格納バッファ２０８をクリアする。
【０１５５】
次のアドレス“０ｘ１Ｃ”のデータからアドレス“０ｘ６Ｃ”の後に来るイベント“ＬＯＯＰ”まで同様に処理を行うことにより、図１２（ｂ）に示すメモリアクセストレース情報２７を取得することができる。
【０１５６】
以上説明したように、このような本発明に係る第４の実施形態のメモリアクセストレース情報取得方法、メモリアクセストレース情報取得装置、メモリアクセストレース情報取得プログラム、及び記録媒体によれば、既に出力したことのあるパターンは一度しか検出されないようにすることができるので、パターンを格納するメモリを縮減して、なおかつ、多くのパターンを一致させることが可能となり、デバッグ作業に必要なデータトレース情報を効率良く取得することができる。
【０１５７】
（第５の実施形態）
本発明の第５の実施形態に係るコンピュータシステムのプロセッサは、図５で示した第２の実施形態と同一の構成であり、説明を省略する。
【０１５８】
図５において、本実施形態のプロセッサ２００は、ＣＰＵ２０１がメモリ２０２に格納されたトレース情報取得プログラムを実行することによってメモリアクセストレース情報取得装置として機能し、トレース情報の生成対象である対象プログラムを実行する際のメモリアクセストレース情報を取得して出力する。
【０１５９】
また、本実施形態における対象プログラム及びメモリアクセストレース情報は、それぞれ図６及び図７に示した第２の実施の形態と同じであり、説明を省略する。
【０１６０】
次に、本実施形態のプロセッサについて、メモリアクセストレース情報の取得処理方法を説明する。本実施形態におけるメモリアクセストレース情報の取得処理方法は、前述した本発明の第２の実施の形態におけるメモリアクセストレース情報取得処理方法の変形例である。図１４は、本実施形態のメモリアクセストレース情報取得処理手順を説明するためのフローチャートである。
【０１６１】
図１４に示す本実施形態のメモリアクセストレース情報取得処理手順は、図８で示した第２の実施形態のメモリアクセストレース情報取得処理におけるフローチャートのステップＳ２１１に代えてステップＳ２６５を設け、ステップＳ２１２とステップＳ２１９の間にステップＳ２６０を追加する。また、変更したステップＳ２６５とステップＳ２１３の間にステップＳ２６２を追加し、更に、ステップＳ２１８に代えて、ステップＳ２６６、Ｓ２６１、Ｓ２６３、Ｓ２６４を設けるものである。
【０１６２】
ステップＳ２６５は、パターン比較部２１０が一時格納バッファ２０８の内容がカウンタ２０９ａの値が最大となるパターンと一致するか判定する手順であり、ステップＳ２６０は、ステップＳ２６０において一時格納バッファ２０８の内容がカウンタ値が最大となるパターンと一致すると判定した際に、一致したパターンの優先度をＣＰＵ２０１が上げる手順である。
【０１６３】
また、ステップＳ２６２は、ステップＳ２６５において一時格納バッファ２０８の内容がカウンタ値が最大となるパターンと一致しないと判定した際に、メモリアクセスアドレス情報出力部２１１がラベルを出力する手順である。なお、このステップＳ２６２の手順を追加することにより、パターンを出力するステップＳ２１３は、初めてラベルを出力するときにのみパターンを出力し、以降はパターンを出力しない構成になっている。
【０１６４】
さらに、ステップＳ２６６は、パターン比較部２１０が一時格納バッファ２０８の内容がパターンと一致するか否かを判定する手順であり、ステップＳ２６１は、ステップＳ２６３において一時格納バッファ２０８の内容がパターンと一致しないと判定した際に、一時格納バッファ２０８の内容を最も優先度の低いパターンバッファ２０９に反映する手順である。
【０１６５】
また、ステップＳ２６３はＣＰＵ２０１がラベルを取得する手順であり、ステップＳ２６４は取得したラベルをパターンバッファ２０９によって格納する手順である。
【０１６６】
次に、本実施形態におけるメモリアクセストレース情報取得処理の具体例について、図１２（ａ）に示したメモリアクセストレース情報２６を参照しながら説明する。ここで、パターンバッファ２０９は２つのパターンを格納でき、パターン毎にカウンタ値を保持するものとする。
【０１６７】
図１２（ａ）におけるアドレス“０ｘ１０”のデータからアドレス“０ｘ５０”のデータまでは、第２の実施形態と同様の処理を行い、一時格納バッファ２０８によって“＃０ｘ２０”、“＃０ｘ２０”が格納される。
【０１６８】
次に、イベント“ＬＯＯＰ” を取得してステップＳ２６５の処理を実行すると、パターンバッファ２０９は空であるので、ステップＳ２６２の処理に進んでメモリアクセスアドレス情報出力部２１１がラベルを出力し（空の場合は何も出力しない）、更に、ステップＳ２１３でメモリアクセスアドレス情報出力部２１１がパターンを出力し（を出力するとともに空の場合は何も出力しない）、パターン比較部２１０がステップＳ２１４でカウンタ２０９ａの値が“１”より大きいか否かの判定を行う。
【０１６９】
すると、カウンタ２０９ａの値は “０”であるので、終了フラグを判定するステップＳ２１６にスキップする。このとき、終了フラグは“ＯＦＦ”であるので、ステップＳ２１７の手順でＣＰＵ２０１がカウンタ２０９ａをクリアし、ステップＳ２６６の処理を実行する。
【０１７０】
ステップＳ２６６では、一時格納バッファ２０８の内容“＃０ｘ２０”、“＃０ｘ２０”がパターンと一致しないので、これをパターンバッファ１によって反映し（ステップＳ２６１）、ＣＰＵ２０１がラベルの“ＬＯＯＰ１”を取得して（ステップＳ２６３）、パターンバッファ２０９によって格納する（ステップＳ２６４）。
【０１７１】
次のアドレス“０ｘ１４”のデータからアドレス“０ｘ５４”のデータまで同様に処理を行うと、パターンバッファ２０９によって“＃−０ｘ３Ｃ”、“＃０ｘ２０”、“＃０ｘ２０”が格納される。
【０１７２】
次に、イベント“ＬＯＯＰ” を取得してステップＳ２６０の判定処理を行うと、パターンバッファ２０８の内容は“ＬＯＯＰ１”になっていて一致しないので、ステップＳ２６２でメモリアクセスアドレス情報出力部２１１がこのラベル“ＬＯＯＰ１”を出力し、ステップＳ２１３でメモリアクセスアドレス情報出力部２１１がパターン“＃０ｘ２０”、“＃０ｘ２０”を出力して、ステップＳ２１４でパターン比較部２１０がカウンタ２０９ａの値が“１”より大きいか否かの判定を行う。
【０１７３】
すると、カウンタ２０９ａの値は“１”以下であるので、ステップＳ２１６にスキップして終了フラグを判定する。このとき、終了フラグは“ＯＦＦ”であるので、ステップＳ２１７でＣＰＵ２０１がカウンタ２０９ａをクリアし、ステップＳ２６６の手順で、パターン比較部２１０が一時格納バッファ２０８の内容“＃−０ｘ３Ｃ”、“＃０ｘ２０”、“＃０ｘ２０”がパターンと一致するか否かを判定する。
【０１７４】
ステップＳ２６６における判定の結果、パターンは一致しないので、一時格納バッファ２０８の内容“＃−０ｘ３Ｃ”、“＃０ｘ２０”、“＃０ｘ２０”をパターンバッファ２０９に反映させ（ステップＳ２６１）、更に、ＣＰＵ２０１がラベル“ＬＯＯＰ２”を取得して（ステップＳ２６３）、パターンバッファ２０９によって格納する（ステップＳ２６４）。
【０１７５】
次のアドレス“０ｘ１８”のデータからアドレス“０ｘ５８”のデータまで、上記したと同様の処理を行うと、一時格納バッファ２０８によって“＃−０ｘ３Ｃ”、“＃０ｘ２０”、“＃０ｘ２０” が格納される。
【０１７６】
次に、イベント“ＬＯＯＰ” を取得してステップＳ２６５の判定処理を行うと、一時格納バッファ２０８の内容がパターンと一致するため、ＣＰＵ２０１がカウンタ２０９ａの値を“１”増加させて“２”とし（ステップＳ２１２）、一致したパターンバッファ２の優先度を上げて（ステップＳ２６０）、一時格納バッファ２０８をクリアする（ステップＳ２１９）。
【０１７７】
続くアドレス“０ｘ１Ｃ”のデータからアドレス“０ｘ６Ｃ”の後に来るイベント“ＬＯＯＰ”まで同様に処理を行うと、パターンバッファ１が“＃０ｘ２０”、“＃０ｘ２０”、パターンバッファ１のラベルが“ＬＯＯＰ１”、パターンバッファ２が“＃−０ｘ３Ｃ”、“＃０ｘ２０”、“＃０ｘ２０”、パターンバッファ２のラベルが“ＬＯＯＰ２”、カウンタ２０９ａの値が“７”となって、パターンバッファ２の優先度が高いという状態になる。
【０１７８】
次に、例えばアドレス“０ｘ１００”のデータを取得したとすると、上記したと同様にステップＳ２０９までの処理を行う。
【０１７９】
再び、アドレス“０ｘ１０”のデータからループが発生すると、アドレス“０ｘ５０”のデータまでは上記したと同様の処理を行い、一時格納バッファ２０８には“＃０ｘＡ４”、“＃−０ｘＦ０”、“＃０ｘ２０”、“＃０ｘ２０”が格納される。
【０１８０】
次に、イベント“ＬＯＯＰ” を取得してステップＳ２６５の判定処理を行うと、パターンバッファ２０９の内容はカウンタ値が最大の“ＬＯＯＰ２”になっていて一致しないので、ステップＳ２６２の手順でメモリアクセスアドレス情報出力部２１１がラベル“ＬＯＯＰ２”を出力し、ステップＳ２１３でメモリアクセスアドレス情報出力部２１１がパターン“＃−０ｘ３Ｃ”、“＃０ｘ２０”を出力して、ステップＳ２１４でパターン比較部２１０がカウンタ２０９ａの値が“１”より大きいか否かの判定を行う。
【０１８１】
すると、カウンタ２０９ａの値は“１”より大きいので、ステップＳ２１５の手順でこの値を出力して、終了フラグを判定するステップＳ２１６の処理を行う。すると、終了フラグは“ＯＦＦ”であるので、ステップＳ２１７の手順でＣＰＵ２０１がカウンタ２０９ａをクリアし、ステップＳ２６６の処理を行う。
【０１８２】
ステップＳ２６６における判定の結果、一時格納バッファ２０８の内容はパターンと一致しないので、ステップＳ２６１でＣＰＵ２０１が一時格納バッファの内容“＃０ｘＡ４”、“＃−０ｘＦ０”、“＃０ｘ２０”、“＃０ｘ２０”を優先度の低いパターンバッファ１に反映させた後、ステップＳ２６３の手順でラベル“ＬＯＯＰ３”を取得し、ステップＳ２６４でこのラベルをパターンバッファによって格納して、ＣＰＵ２０１がステップＳ２１９で一時格納バッファ２０８をクリアする。
【０１８３】
次のアドレス“０ｘ１４”のデータからアドレス“０ｘ５４”のデータまで上記したと同様の処理を行うと、一時格納バッファ２０８の内容が“＃−０ｘ３Ｃ”、“＃０ｘ２０”、“＃０ｘ２０”、パターンバッファ１が“＃０ｘＡ４”、“＃−０ｘＦ０”、“＃０ｘ２０”、“＃０ｘ２０”、パターンバッファ２が“＃−０ｘ３Ｃ”、“＃０ｘ２０”、“＃０ｘ２０”という状態になる。
【０１８４】
次いで、イベント“ＬＯＯＰ” を取得してステップＳ２６５の判定処理を行うと、パターンバッファはラベル“ＬＯＯＰ２”に一致するので、ＣＰＵ２０１がカウンタ２０９ａの値を“１”増加させて“２”とし（ステップＳ２１２）、一致したパターンバッファ２の優先度を上げて（ステップＳ２６０）、一時格納バッファをクリアする（ステップＳ２１９）。
【０１８５】
次のアドレス“０ｘ１４”のデータからアドレス“０ｘ６Ｃ”の後に来るイベント“ＬＯＯＰ”まで同様に処理を行うことにより、図１２（ｂ）に示すメモリアクセストレース情報２７を取得することができる。
【０１８６】
以上説明したように、このような本発明に係る第５の実施形態のメモリアクセストレース情報取得方法、メモリアクセストレース情報取得装置、メモリアクセストレース情報取得プログラム、及び記録媒体によれば、優先度が大きいパターンを残しておくことでパターンを一致させる頻度を多くすることができ、デバッグ作業に必要なデータトレース情報を効率良く取得することが可能となる。
【０１８７】
なお、本実施形態では、一致したパターンの優先度を上げるようにしたが、一般的に知られているデータ置換のアルゴリズムを使用してもよい。
【０１８８】
また、パターンバッファの初期値は空に設定したが、発生する頻度の高いパターンを初期値として格納しておいてもよい。
【産業上の利用可能性】
【０１８９】
本発明のメモリアクセストレース情報取得方法、メモリアクセストレース情報取得装置、メモリアクセストレース情報取得プログラム、及び記録媒体は、メモリに対するアクセス状況を示すデータをデバッグ作業に必要なトレース情報として効率良く取得できるともに、記憶容量に限りのあるメモリを有効に利用してトレース情報のパターンを効率良く検出することを可能にする効果を有し、プログラムのデバッグを支援するシステムのデバッガ等に有用である。
【図面の簡単な説明】
【０１９０】
【図１】本発明の第１の実施形態に係るメモリアクセストレース情報取得装置の概略構成を示すブロック図
【図２】（ａ）本発明の第１の実施形態に係るデバッグ対象プログラムのＣ言語ソースコードの一部を示す図  （ｂ）本発明の第１の実施形態に係るデバッグ対象プログラムの変換されたアセンブリ言語コードの一部を示す図
【図３】（ａ）従来のメモリアクセストレース情報を示す図  （ｂ）本発明の第１の実施形態に係るメモリアクセストレース情報を示す図
【図４】本発明の第１の実施形態に係るメモリアクセストレース情報の取得処理手順を説明するためのフローチャート
【図５】本発明の第２〜第５の実施形態に係るメモリアクセストレース情報取得装置の概略構成を示すブロック図
【図６】（ａ）本発明の第２の実施形態に係るデバッグ対象プログラムのＣ言語ソースコードの一部を示す図  （ｂ）本発明の第２の実施形態に係るデバッグ対象プログラムの変換されたアセンブリ言語コードの一部を示す図
【図７】（ａ）従来のメモリアクセストレース情報を示す図  （ｂ）本発明の第２の実施形態に係るメモリアクセストレース情報を示す図
【図８】本発明の第２の実施形態に係るメモリアクセストレース情報の取得処理手順を説明するためのフローチャート
【図９】（ａ）本発明の第３の実施形態に係るメモリアクセストレース情報を示す図  （ｂ）本発明の第３の実施形態に係るメモリアクセストレース情報を示す図
【図１０】本発明の第３の実施形態に係るメモリアクセストレース情報の取得処理手順を説明するためのフローチャート
【図１１】本発明の第４の実施形態に係るデバッグ対象プログラムのソースコードを示す図
【図１２】（ａ）従来のメモリアクセストレース情報を示す図  （ｂ）本発明の第４の実施形態に係るメモリアクセストレース情報を示す図
【図１３】本発明の第４の実施形態に係るメモリアクセストレース情報の取得処理手順を説明するためのフローチャート
【図１４】本発明の第５の実施形態に係るメモリアクセストレース情報の取得処理手順を説明するためのフローチャート
【符号の説明】
【０１９１】
１００、２００  プロセッサ
１０１、２０１  ＣＰＵ
１０２、２０２  メモリ
１０３、２０３  メモリアクセスアドレス取得部
１０４、２０４  アドレス格納部
１０５、２０６  オフセット値計算部
１０６、２０７  オフセット値格納部
１０６ａ、２０９ａ  カウンタ
１０７  オフセット値比較部
１０８、２１１  メモリアクセスアドレス情報出力部
２０８  一時格納バッファ
２０９  パターンバッファ
２１０  パターン比較部
【図１】
2008158662.tif 000003
【図２】
2008158662.tif 000004
【図３】
2008158662.tif 000005
【図４】
2008158662.tif 000006
【図５】
2008158662.tif 000007
【図６】
2008158662.tif 000008
【図７】
2008158662.tif 000009
【図８】
2008158662.tif 000010
【図９】
2008158662.tif 000011
【図１０】
2008158662.tif 000012
【図１１】
2008158662.tif 000013
【図１２】
2008158662.tif 000014
【図１３】
2008158662.tif 000015
【図１４】
2008158662.tif 000016