(57)【要約】【課題】トレース効率を向上させるようにコンピュータプログラムをコンパイルする方法を提供する。【解決手段】該コンピュータプログラムは、該コンピュータプログラムによって生成されるトレースデータの出力を起動させるための、複数のトレース動作を含み、該コンパイルする方法は、該コンピュータプログラムを、該コンピュータプログラムの中間バージョンを形成するコードに変成するステップと、該変成したコードを分析するステップと、該トレース動作のうちの少なくともいくつかを、修正したトレース動作と置き換えるステップと、該コードを、データ処理システム上での実行に好適なコードに変成するステップと、該修正したトレース動作を、それらが置き換えた該トレース動作と関連付ける翻訳データを生成するステップと、を含む。【選択図】図１
2010079894.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータプログラムをコンパイルする方法であって、前記コンピュータプログラムは、前記コンピュータプログラムによって生成されるトレースデータの出力を起動させるための、複数のトレース動作を含み、前記コンパイルする方法は、
前記コンピュータプログラムを、前記コンピュータプログラムの中間バージョンを形成するコードに変成するステップと、
前記変成したコードを分析するステップと、
前記トレース動作のうちの少なくともいくつかを、修正したトレース動作と置き換えるステップと、
前記コードを、データ処理システム上での実行に好適なコードに変成するステップと、
前記修正したトレース動作を、それらが置き換えた前記トレース動作と関連付ける翻訳データを生成するステップと、
を含む、方法。
【請求項２】
前記方法は、修正したトレース動作とのその置き換えが、前記トレース動作の実行コストを削減する前記少なくともいくつかのトレース動作を判定するように、前記変成したコードを分析し、および前記分析に基づいて置き換えるように、前記少なくともいくつかのトレース動作を選択する、請求項１に記載の方法。
【請求項３】
前記置き換えるステップは、前記トレース動作のうちの少なくとも２つを、少なくとも１つの修正したトレース動作と置き換えるステップを含む、請求項１に記載の方法。
【請求項４】
前記分析するステップは、前記中間バージョンのコードの基本ブロック内で少なくとも２つのトレース動作を識別するステップを含み、前記基本ブロックは、１つの命令をその中で実行した場合に、前記命令の全てを実行するコードのブロックであり、前記置き換えるステップは、前記少なくとも２つのトレース動作を、前記修正したトレース動作のうちの少なくとも１つと置き換えるステップを含む、請求項３に記載の方法。
【請求項５】
前記置き換えるステップは、前記トレース動作のうちの少なくとも１つを、少なくとも１つの修正したトレース動作、および、前記修正したトレース動作の実行に関して、前記少なくともいくつかのトレース動作をいつ実行したのかを示す、関連するタイムスタンプ補正データと置き換えるステップを含む、請求項１に記載の方法。
【請求項６】
翻訳データを生成する前記ステップは、前記トレース動作のそれぞれの実行と、それらを置き換えた前記修正したトレース動作との間のサイクル数の推定値を生成するステップを含む、請求項１に記載の方法。
【請求項７】
記置き換えるステップは、前記トレース動作のうちの少なくとも１つを、前記少なくとも１つのトレース動作によって出力されるデータよりも少ないデータを出力する、修正したトレース動作と置き換えるステップを含む、請求項２に記載の方法。
【請求項８】
前記置き換えるステップは、前記トレース動作のうちの少なくとも１つを、前記少なくとも１つのトレース動作が必要とするものよりも少ない処理ステップを行うように、前記コンピュータプログラムが必要とする修正したトレース動作と置き換えるステップを含む、請求項２に記載の方法。
【請求項９】
前記トレース動作のうちの少なくとも１つは、前記修正したトレース動作のうちの少なくとも１つによって置き換えられている時に、前記トレース動作を移動させることができる程度を示すタグデータを含み、前記置き換えるステップは、どのトレース動作を置き換えるのかを判定する時に前記タグデータに対応する、請求項１に記載の方法。
【請求項１０】
前記コンピュータプログラムは、修正したトレース動作を形成するようにトレース動作を移動できなくする、バリア指示を含む、請求項１に記載の方法。
【請求項１１】
前記翻訳データを出力するように前記コードを実行するプロセッサを制御するための、前記変成したプログラム内にコードを含める、さらなるステップを含む、請求項１に記載の方法。
【請求項１２】
前記方法は、
前記少なくともいくつかのトレース動作を、修正したトレース動作と置き換える前記ステップに続く、前記修正したコードを分析するステップと、
前記トレース動作または修正したトレース動作のうちの少なくともいくつかと、修正したトレース動作と置き換えるステップと、のさらなる２つのステップを含み、
前記２つのステップを、前記修正したコードを分析する前記ステップが、前記以前に修正したコードと比較した時に、前記修正したコードが、前記トレース動作の実行コストを大幅に削減していないことを示すまで繰り返す、
請求項２に記載のコンピュータプログラムをコンパイルする方法。
【請求項１３】
プログラムの挙動を監視する方法であって、
トレースデータおよび翻訳データを受信するステップであって、前記トレースデータは、監視されている前記プログラムが実行するトレース動作に応答して出力し、前記翻訳データは、前記トレース動作のうちの少なくともいくつかに対応するデータを含み、前記トレース動作のうちの前記少なくともいくつかは、修正したトレース動作である、ステップと、
前記修正したトレース動作に応答して生成するトレースデータを識別するステップと、
それを修正する前に前記プログラムのバージョン内に存在するトレース動作が出力したであろうトレースデータを代表する、翻訳したトレースデータを生成するように、前記翻訳データを使用して前記識別したトレースデータを翻訳するステップと、
を含む、方法。
【請求項１４】
前記翻訳したトレースデータは、あらゆるタイムスタンプデータを除いて、それを修正する前のバージョンの前記プログラム内に存在するトレース動作が出力したであろうトレースデータと同一である、請求項１３に記載のプログラムの挙動を監視する方法。
【請求項１５】
前記トレースデータを使用して前記プログラムの挙動を分析する、さらなるステップを含む、請求項１３に記載のプログラムの挙動を監視する方法。
【請求項１６】
前記翻訳データを、監視されている前記システムから、前記トレースデータで受信する、請求項１３に記載のプログラムの挙動を監視する方法。
【請求項１７】
組み込んだシステム上で実行するコンピュータプログラムの挙動を分析する方法であって、前記コンピュータプログラムは、前記コンピュータプログラムが生成したトレースデータの出力を起動させるための、複数のトレース動作を含み、前記方法は、
前記コンピュータプログラムを、前記コンピュータプログラムの中間バージョンを形成するコードに変成するステップと、
前記変成したコードを分析するステップと、
前記トレース動作のうちの少なくともいくつかを、修正したトレース動作と置き換えるステップと、
前記コードを、データ処理システム上での実行に好適なコードに変成するステップと、
前記修正したトレース動作に応答して出力したトレースデータの解釈を可能にするように、前記修正したトレース動作を、それらが置き換えた前記トレース動作と関連付ける翻訳データを生成するステップと、
前記変成したコードを前記データ処理システムに出力するステップと、
前記翻訳データをプログラム監視装置に出力するステップと、
前記変成したコードを前記データ処理システム上で実行するステップと、
前記プログラム監視装置において、前記データ処理システムからトレースデータを受信するステップと、
前記トレースデータ内で識別するステップであって、トレースデータは、前記修正したトレース動作に応答して生成する、ステップと、
それを修正する前に前記プログラムのバージョン内に存在するトレース動作が出力したであろうトレースデータを代表する、トレースデータを生成するように、前記翻訳データを使用して前記識別したトレースデータを翻訳するステップと、
前記トレースデータを使用して前記プログラムの挙動を分析するステップと、
を含む、方法。
【請求項１８】
請求項１に記載の方法のステップを行うように、データ処理装置を制御するためのコンピュータプログラム。
【請求項１９】
請求項１３に記載の方法のステップを行うように、データ処理装置を制御するためのコンピュータプログラム。
【請求項２０】
前記コンピュータプログラムが生成するトレースデータの出力を起動するための複数のトレース動作を含む、コンピュータプログラムをコンパイルするためのコンパイラであって、
前記コンピュータプログラムを、前記コンピュータプログラムの中間バージョンを形成するコードに変成するための変成回路と、
前記変成したコードを分析するための分析回路と、
を備え、前記変成回路は、前記トレース動作のうちの少なくともいくつかを、修正したトレース動作と置き換えるように、および前記コードを、データ処理システム上での実行に好適なコードに変成するように、ならびに前記修正したトレース動作を、それらが置き換えた前記トレース動作と関連付ける翻訳データを生成するように、前記分析回路によって行われる分析に対応する、
コンパイラ。
【請求項２１】
プログラムの挙動を監視するための分析装置であって、
トレースデータおよび翻訳データを受信するための入力であって、前記トレースデータは、監視されている前記プログラムが実行するトレース動作に応答して出力し、前記翻訳データは、前記トレース動作のうちの少なくともいくつかに対応するデータを含み、前記トレース動作のうちの前記少なくともいくつかは、修正したトレース動作である、入力と、
前記修正したトレース動作に応答して生成するトレースデータを識別するための識別回路と、
それを修正する前に前記プログラムのバージョン内に存在するトレース動作が出力したであろうトレースデータを代表する、翻訳したトレースデータを生成するように、前記受信した翻訳データを使用して前記識別したトレースデータを翻訳するための翻訳回路と、
を備える、分析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理分野に関し、より具体的には、プログラムの挙動監視分野に関する。
【背景技術】
【０００２】
データ処理装置は、ますます複雑になってきており、したがって、最適化であろうと、障害の発見であろうと、大量のデータを抽出して分析せずにそれらの性能を分析することがますます困難になっている。
【０００３】
プログラムの挙動を監視するための既知の技術は、ハードウェアによって、またはプログラムに挿入するコードによって生成し得るトレースデータを収集するものである。したがって、トレース呼び出しに応答するプログラムの実行中の特定の時点で、トレース呼び出しに対応するトレースデータを出力することになる。このトレースデータは、その時点でのプロセッサの状態、特定の変数の値、および／またはこのトレース呼び出しが生じた時間を示し得る。
【０００４】
しかしながら、このようにプログラムの挙動を監視するには、いくつかの欠点がある。トレース呼び出しをプログラムに挿入することで、その挙動を変化および変形させることができるが、挿入したコードは、プログラムのサイズ、および実行にかかる時間の両方を増加させる。さらに、このように大量のデータが容易に生成される可能性があり、概して、ハードウェアからトレースデータを送信するため帯域幅が制限される。
【０００５】
これらの不利点のうちの少なくともいくつかを軽減し、一方で、なおも有用なトレースデータを収集できることが望ましいだろう。
【発明の概要】
【課題を解決するための手段】
【０００６】
本発明の第１の態様は、コンピュータプログラムをコンパイルする方法であって、該コンピュータプログラムは、該コンピュータプログラムが生成するトレースデータの出力を起動させるための、複数のトレース動作を含み、該コンパイルする方法は、該コンピュータプログラムを、該コンピュータプログラムの中間バージョンを形成するコードに変成するステップと、該変成したコードを分析するステップと、該トレース動作のうちの少なくともいくつかを、修正したトレース動作と置き換えるステップと、該コードを、データ処理システム上での実行に好適なコードに変成するステップと、該修正したトレース動作を、それらが置き換えた該トレース動作と関連付ける翻訳データを生成するステップと、を含む方法を提供する。
【０００７】
本発明は、コンピュータプログラムを、コードの中間バージョンまたは表現を作成するようにコンパイルする時、コードのうちの少なくともいくつかの順序付けが変更することを認識している。コンピュータプログラムコードがトレース動作を含む場合は、次いで、これらのトレース動作をまた、コード内で移動させてもよく、この移動はそれらの有効性を変更することができる。本発明は、この中間バージョンのコードによって、おそらくはコードの再編成に起因するトレース動作内の冗長性を識別して、必要に応じて除去できるようになることを認識している。したがって、分析に続いて、特定の識別したトレース動作を、修正したトレース動作と置き換え、例えば冗長データを生成するトレース動作を除去、または他のトレース動作と併合できる。この段階でのコードの分析およびトレース動作の修正は、コード内でのトレース動作数の削減をもたらすことができ、いかなるトレース動作も無く、非計測コード（ｕｎｉｎｓｔｒｕｍｅｎｔｅｄ  ｃｏｄｅ）にさらに類似させることになり、また、処理を必要とするトレース動作の量も削減し、それによって、目標システムの処理オーバーヘッドを削減することになり、また、生成した冗長データの量を削減しトレースデータの出力に必要な帯域幅を削減できる。本発明はまた、トレース動作の修正によって、トレースデータを分析するシステムがそれらを理解できなくなり得るので、どのようにトレース動作が修正されたのかを示す翻訳データを生成することを認識している。この翻訳データによって、修正したトレース動作によって出力されるトレースデータを、それらが置き換えたトレース動作に関連付けることが可能となり、したがって、修正したコードは、翻訳データの使用によって理解することができるトレースデータを出力する。したがって、本発明によって、トレース動作は、コンパイラ段階で修正することができ、トレースデータのより効果的な生成および出力を可能にする。
【０００８】
いくつかの実施形態においては、該方法は、修正したトレース動作とのその置き換えが、該トレース動作の実行コストを削減する該少なくともいくつかのトレース動作を判定するように、該変成したコードを分析し、および該分析に基づいて置き換えるように、該少なくともいくつかのトレース動作を選択する。
【０００９】
どのようにトレース動作を修正するのかを分析する時に、本発明の実施形態は、トレース動作の実行コストを削減し、それによって、実行する時のトレースの効率を向上させようとする。コンパイラ段階でトレース動作を修正することによって、生成するデータを少なくすることができるだけでなく、トレース動作の数も削減することができ、処理能力、使用するエネルギ、および実行時間を削減することができる。したがって、本発明は、トレースに関連するコストを削減しようとするものであり、これらのコストは、生成したトレースデータの量、実行したトレース動作の数、実行時間、トレースの生成に必要な能力およびエネルギを含み得る。
【００１０】
いくつかの実施形態においては、該置き換えるステップは、該トレース動作のうちの少なくとも２つを、少なくとも１つの修正したトレース動作と置き換えるステップを含む。
【００１１】
修正したトレース動作は、単一の元のトレース動作を置き換えてもよく、おそらく修正したトレース動作はあまりトレースデータを生成しないが、いくつかの実施形態においては、修正したトレース動作を、いくつかのトレース動作を併合することによって生成する。したがって、２つのトレース動作を、単一の修正したトレース動作と置き換えてもよく、または、複数のトレース動作を、より少ない修正したトレース動作と置き換えてもよい。これは、置き換えたいくつかのトレース動作のうちのいくつかが同じデータを出力する場合に、行うトレース動作の数を削減し、また、出力するトレースデータの量も削減できる。
【００１２】
いくつかの実施形態においては、該分析するステップは、該中間バージョンのコードの基本ブロック内で少なくとも２つのトレース動作を識別するステップを含み、該基本ブロックは、１つの命令をその中で実行する場合に、該命令の全てを実行するコードのブロックであり、該置き換えるステップは、該少なくとも２つのトレース動作を、該修正したトレース動作のうちの少なくとも１つと置き換えるステップを含む。
【００１３】
併合することができるトレース動作の一例は、中間バージョンのコードの基本ブロック内でのトレース動作である。基本ブロックは、１つの命令をその中で実行する場合に、命令の全てを実行するコードのブロックである。したがって、同じ基本ブロック内に見出すトレース動作を、全て実行し、したがって、より少ないトレース動作に併合することができる。
【００１４】
いくつかの実施形態においては、該置き換えるステップは、該トレース動作のうちの少なくとも１つを、少なくとも１つの修正したトレース動作、および、該修正したトレース動作の実行に関して、該少なくともいくつかのトレース動作をいつ実行したのかを示す、関連するタイムスタンプ補正データと置き換えるステップを含む。
【００１５】
トレースデータは、トレース動作をいつ実行したのかを示す、タイムスタンプを含んでもよい。したがって、元のトレース動作がタイムスタンプを含んだ場合、修正したトレース動作に関連した翻訳データも、修正したトレース動作の実行に関して、修正したトレース動作が置き換える元のトレース動作をいつ実行するのかを示す、タイムスタンプデータを含む場合に好都合となり得る。
【００１６】
いくつかの実施形態においては、翻訳データを生成する該ステップは、該トレース動作のそれぞれの実行と、それらを置き換えた該修正したトレース動作との間のサイクル数の推定値を生成するステップを含む。
【００１７】
修正したトレース動作に関して、元のトレース動作をいつ実行するのかを計算する１つの方法は、動作間のサイクル数を推定すること、および翻訳データ内にこの推定値を含めることである。したがって、修正したトレース動作が、タイムスタンプデータを含む場合、個々のトレースデータがいつそれらのトレースデータを生成するのかを推定することができる。
【００１８】
いくつかの実施形態においては、該置き換えるステップは、該トレース動作のうちの少なくとも１つを、該少なくとも１つのトレース動作が出力するデータよりも少ないデータを出力する、修正したトレース動作と置き換えるステップを含む。
【００１９】
修正したトレース動作は、トレース動作の実行コストを削減するために別のトレース動作を置き換えるが、これは、元のトレース動作が出力したデータよりも少ないデータを出力することによって達成できる。中間バージョン段階でのコードの分析から、データ出力のうちのいくつかが冗長データ、すなわち、すでに出力したデータ、またはすでに出力したデータから計算することができるデータを識別できる。当てはまる場合には、生成した翻訳データが、出力するデータからの誘導を可能にするならば、このデータを出力する必要は無い。
【００２０】
いくつかの実施形態においては、該置き換えるステップは、該トレース動作のうちの少なくとも１つを、該少なくとも１つのトレース動作が必要とするものよりも少ない処理ステップを行うように、該コンピュータプログラムを必要とする修正したトレース動作と置き換えるステップを含む。
【００２１】
削減することができる他のコストは、処理ステップによるコストであり、修正したトレース動作は、コンピュータが実行するのを必要とする処理ステップが、それが置き換えたトレース動作よりも少なくなる程度になり得る。例えば、トレース動作は、出力する２つの変数の積を必要としてもよく、これは、目標システムは、この値の計算が必要となることを意味する。目標システム上の処理能力が重要である場合、個々に２つの値を出力して、トレースデータを分析するシステム上で積を計算することが好都合となり得る。
【００２２】
いくつかの実施形態においては、該トレース動作のうちの少なくとも１つを、該修正したトレース動作のうちの少なくとも１つによって置き換える時に、該トレース動作を移動させることができる程度を示すタグデータを含み、該置き換えるステップは、どのトレース動作を置き換えるのかを判定する時に該タグデータに対応する。
【００２３】
タグデータは、トレース動作に関連しているかもしれない。このタグデータは、コンパイラに関するヒントまたは指令を提供し、最終のコンパイルしたバージョンのコード内には存在しないデータである。このタグデータは、修正中にトレース動作を移動させることができる程度の、データ指示を含んでもよい。中間バージョンのコードを分析して、トレースデータを、修正したトレース動作と置き換える時には、このタグデータは、タグデータを有する元のトレース動作を置き換える修正したトレース動作が、この元のトレース動作からの許容量を超えない程度であると見なされる。
【００２４】
いくつかの実施形態においては、該コンピュータプログラムは、修正したトレース動作を形成するようにトレース動作を移動できなくする、バリア指示を含む。
【００２５】
コンパイラに関するヒントまたは指令として存在するさらなる情報は、いくつかの形態を取ることができ、例えば命令となり得る、バリア指示であってもよい。これらは、コンパイラが、それら全体にトレース動作を移動させないように指示するように、プログラム内に挿入することができる。タグデータと同様に、これらを、最終バージョンのコンパイルしたコードから削除するが、適切な様態でコードを再編成するのを補助するように、コンパイラによって使用する。
【００２６】
いくつかの実施形態においては、該方法は、該翻訳データを出力するように該コードを実行するプロセッサを制御するための、該変成されるプログラム内にコードを含める、さらなるステップを含む。
【００２７】
生成する翻訳データは、変成したコードで出力してもよく、その場合、変成したコードは、翻訳データを出力するようにコードを実行するプロセッサを制御するステップを含まなければならない。このように、翻訳コードは、コンパイルドコードを実行しているプロセッサを介して、分析器に利用可能である。別の実施形態においては、翻訳データを、例えばデータ記憶部を介して、異なる方法で分析器に利用できるようにする。この後者は、コードをコンパイルし、トレースデータを分析する装置が、同じ装置である場合がある。代替的に、翻訳データは、バイナリプログラム内に組み込んでもよいが、実行する時に出力しなくてもよい。例えば、トレースデータを分析する分析器上のバイナリの別個のコピーから読み込まれたバイナリに関連した、デバッグテーブルの形態であってもよい。
【００２８】
いくつかの実施形態においては、該方法は、該少なくともいくつかのトレース動作を、修正したトレース動作と置き換える該ステップに続く、該修正したコードを分析するステップと、該トレース動作または修正したトレース動作のうちの少なくともいくつかと、修正したトレース動作と置き換えるステップと、のさらなる２つのステップを含み、該２つのステップを、該修正したコードを分析する該ステップが、該以前に修正したコードと比較した時に、該修正したコードが、該トレース動作の実行コストを大幅に削減していないことを示すまで繰り返す。
【００２９】
トレース動作の修正は、さらなる修正がもはや大幅にコスト節減しなくなる時点まで、それらを修正し、修正したコードを分析して、さらなる修正を行うように、再帰的に行うことができる。さらなるステップで置き換えたトレース動作は、元のトレース動作および／または以前のステップ内ですでに修正したものであってもよいことに留意されたい。さらなる修正がもはや大幅にコスト節減しなくなる時点は、必要とする処理ステップの数を比較して、それらを削減しないことを見出だすことによって、または実行速度を比較して、これが所定の量を超えて削減しないことを見出だして、意味を成さないものと判断することによって判定することができる。
【００３０】
本発明の第２の態様は、プログラムの挙動を監視する方法であって、トレースデータおよび翻訳データを受信するステップであって、該トレースデータは、監視されている該プログラムによって実行されるトレース動作に応答して出力するトレースデータであり、該翻訳データは、該トレース動作のうちの少なくともいくつかに対応するデータを含み、該トレース動作のうちの該少なくともいくつかは、修正したトレース動作である、ステップと、該修正したトレース動作に応答して生成するトレースデータを識別するステップと、それを修正する前に該プログラムのバージョン内に存在するトレース動作が出力したであろうトレースデータを代表する、翻訳したトレースデータを生成するように、該翻訳データを使用して該識別したトレースデータを翻訳するステップと、を含む方法を提供する。
【００３１】
本発明の第１の態様によってコンパイルしたプログラムが生成するトレースデータは、同じく本発明の第１の態様によって生成した翻訳データを使用することによって理解および分析することができる。したがって、修正したトレース動作によって生成されるトレースデータを識別し、関連する翻訳データを見出だし、次いで修正したトレースデータは、それを修正する前にプログラムのバージョン内に存在するトレースデータ動作によって出力したであろうトレースデータを代表するトレースデータを形成するように、再構成することができる。次いで、このトレースデータを分析することができる。
【００３２】
それを修正する前にプログラムのバージョン内に存在するトレース動作が出力したであろうトレースデータを代表する、翻訳したトレースデータは、元のデータを期待するツールによって分析することを可能にする元のトレースデータに十分に類似するならば、多数の形態を取ることができるが、いくつかの実施形態においては、わずかに異なり得るタイムスタンプを除いて、全ての態様の元のトレースデータと同一である。ただし、いくつかの実施形態においては、これらも同等物であることを保証することが可能である。
【００３３】
いくつかの実施形態においては、方法は、該トレースデータを使用して該プログラム挙動を分析する、さらなるステップを含む。
【００３４】
トレースデータを、元のトレースデータに類似した形態に訂正すると、元のトレースデータを予想した従来のツールによって、またはこの特定のコンパイルしたコードを分析するためのツールによって分析することができる。
【００３５】
いくつかの実施形態においては、該翻訳データを、監視されている該システムから、該トレースデータと共に受信するが、他の実施形態においては、翻訳データを、分析システム上に記憶するか、合意した場所の１つのファイル内に収納するか、実行可能なファイルの１つのセクションに収納するか、あるいは分析システムによって参照されるプログラムのメモリ画像の一部とすることができる。
【００３６】
本発明の第３の態様は、組み込んだシステムで実行するコンピュータプログラムの挙動を分析する方法であって、該コンピュータプログラムは、該コンピュータプログラムが生成したトレースデータの出力を起動させるための、複数のトレース動作を含み、該方法は、該コンピュータプログラムを、該コンピュータプログラムの中間バージョンを形成するコードに変成するステップと、該変成したコードを分析するステップと、該トレース動作のうちの少なくともいくつかを、修正したトレース動作と置き換えるステップと、該コードを、データ処理システム上での実行に好適なコードに変成するステップと、該修正したトレース動作に応答して出力したトレースデータの解釈を可能にするように、該修正したトレース動作を、それらが置き換えた該トレース動作と関連付ける翻訳データを生成するステップと、該変成したコードを該データ処理システムに出力するステップと、該翻訳データをプログラム監視装置に出力するステップと、該変成したコードを該データ処理システム上で実行するステップと、該プログラム監視装置において、該データ処理システムからトレースデータを受信するステップと、該トレースデータ内で識別するステップであって、トレースデータは、該修正したトレース動作に応答して生成する、ステップと、それを修正する前に該プログラムのバージョン内に存在するトレース動作が出力したであろうトレースデータを代表する、トレースデータを生成するように、該翻訳データを使用して該識別したトレースデータを翻訳するステップと、該トレースデータを使用して該プログラムの挙動を分析するステップと、を含む方法を提供する。
【００３７】
コードのコンパイリングおよび生成したトレースデータのその後の分析は、単一の装置で行うことができる。
【００３８】
本発明の第４の態様は、本発明の第１の態様に記載の方法のステップを行うように、データ処理装置を制御するためのコンピュータプログラムを提供する。
【００３９】
本発明の第５の態様は、本発明の第２の態様に記載の方法のステップを行うように、データ処理装置を制御するためのコンピュータプログラムを提供する。
【００４０】
本発明の第６の態様は、該コンピュータプログラムが生成するトレースデータの出力を起動するための複数のトレース動作を含む、コンピュータプログラムをコンパイルするためのコンパイラであって、該コンピュータプログラムを、該コンピュータプログラムの中間バージョンを形成するコードに変成するための変成回路と、該変成したコードを分析するための分析回路と、を備え、該変成回路は、該トレース動作のうちの少なくともいくつかを、修正したトレース動作と置き換えるように、および該コードを、データ処理システム上での実行に好適なコードに変成するように、ならびに該修正したトレース動作を、それらが置き換えた該トレース動作と関連付ける翻訳データを生成するように、該分析回路が行う分析に対応する、コンパイラを提供する。
【００４１】
本発明の第７の態様は、プログラムの挙動を監視するための分析装置であって、トレースデータおよび翻訳データを受信するための入力であって、該トレースデータは、監視されている該プログラムが実行するトレース動作に応答して出力し、該翻訳データは、該トレース動作のうちの少なくともいくつかに対応するデータを含み、該トレース動作のうちの該少なくともいくつかは、修正したトレース動作である、入力と、該修正したトレース動作に応答して生成するトレースデータを識別するための識別回路と、それを修正する前に該プログラムのバージョン内に存在するトレース動作が出力したであろうトレースデータを代表する、翻訳したトレースデータを生成するように、該受信した翻訳データを使用して該識別したトレースデータを翻訳するための翻訳回路と、を備える分析装置を提供する。
【００４２】
本発明の上述の、および他の目的、特徴、および利点は、添付図面とともに読み取られる例示的実施形態の以下の詳細な説明から明らかとなろう。
【図面の簡単な説明】
【００４３】
【図１】組み込みシステムによって処理されるコンピュータプログラムの挙動を監視するための、データ処理装置を概略的に示す図である。
【図２】トレース動作を含むコードをコンパイルするためのデータ処理装置を示す図である。
【図３】修正したトレース動作を形成するように修正した、トレース動作のいくつかの実施例を示す図である。
【図４】修正したトレースデータを分析する前に、修正したトレースデータを従来のトレースデータに変換するための方法のステップを示す、流れ図である。
【図５】コンピュータプログラムのコンパイル中に、トレースデータを修正するための方法のステップを示す流れ図である。
【発明を実施するための形態】
【００４４】
図１は、組み込みシステム２０が実行するコンピュータプログラムの挙動を監視するためのデータ処理装置１０を示している。分析されるプログラムは、コンパイラ４０によってコンパイルされる。
【００４５】
コンピュータプログラムは、処理した時にトレースデータの出力を起動させるプログラムコード内に、トレース動作を有する。これらの動作は、トレース動作に基づいて、「トレース呼び出し」命令、関数呼び出し、インライン化関数呼び出し、マクロおよび特殊機械コード命令、トレースデータ出力を含む、多数の異なるものであってもよい。
【００４６】
コンパイラ４０によるコンパイル中に、プログラムを、コードの中間バージョンまたは表現に変成する。この変換は、コード内で移動させている機能および命令を伴ってもよい。
【００４７】
組み込みシステム２０による実行に好適な形態へのコードの再編成に加えて、コンパイラ４０は、それらに関連するオーバーヘッドの削減を試みるように、トレース動作のうちのいくつかを修正する。これらのオーバーヘッドは、生成するトレースデータの量、トレース動作の数、および必要とされる処理能力を含んでもよい。
【００４８】
このオーバーヘッドの削減は、目標システムに関する処理要件を削減するように、冗長なトレースデータの生成の回避または少なくとも削減、トレース動作の併合、および、いくつかの実施形態においては、トレースデータ出力の変更に関わる。したがって、単一の修正したトレース呼び出しを形成するように、プログラムコードの再編成によって、現在、同じ基本ブロック内で互いの近くに生じているトレース呼び出しを併合することができる。さらに、２つの引数ｘおよびｙが１つのトレース呼び出しによって出力し、次いでそれらの積が第２のトレース呼び出しによって出力する場合、第１のトレース呼び出しだけが出力し、２つの値の乗算が、目標システム２０ではなくトレースを分析する分析器（ホストデバッガ）によって行われるように、トレース呼び出しを併合することができる。このようなトレース呼び出しの併合は、目標システム２０によるコードの処理速度を増加させ、トレース動作無しで、コードの実行を元のプログラムの実行に類似させるという利点を有する。
【００４９】
したがって、コンパイラ４０は、テストするプログラムをコンパイルして、コード内でトレース動作を修正する。トレース動作の修正は、一組の修正したトレース動作を数回訂正してもよいという点で、再帰的に行ってもよく、変成したコードは、トレースに関連するそれ以上のコスト節減が無くなる、または意味を成さなくなることが見出されるまで分析する。これらのコスト節減は、トレース動作の実行コストの節減であり、生成されるトレースデータ、トレース動作の数、処理能力、使用されるエネルギ、および実行時間を含む。コンパイルしたコードは、次いでコンパイラ４０によって出力し、実行のために組み込みシステム２０へ送信する。修正したトレース動作を有するコンパイルしたコードの生成に加えて、コンパイラ４０は、修正したトレース動作を、それらが生成したトレース動作と関連付ける情報を含む、翻訳テーブルも生成する。本実施形態においては、この翻訳テーブルを、データ処理装置１０上のデータ記憶部５０に直接送信する。別の実施形態においては、コンパイルしたコードを有する組み込みシステム２０に送信してもよい。これは、コードを、一方のシステムでコンパイルし、他方のシステム上で分析する場合に適切なものとなり得る。
【００５０】
次いで、コンパイルしたコードを組み込みシステム２０によって実行し、コンパイルしたコード内でトレース動作によって生成されるトレースデータを、組み込みシステムから出力し、インターフェース６０で受信する。次いで、このトレースデータを、データ処理装置１０内で分析器７０によって分析する。分析器７０は、データ記憶部５０に記憶してある翻訳テーブルにもアクセスする。したがって、分析器７０は、トレースデータ、および予想していないトレース呼び出しに対応するあらゆるトレースデータ、すなわち元のコード内に存在せず、データ記憶部５０内に記憶した翻訳テーブルを使用して、それらが修正されていなければトレース呼び出しによって生成したであろう形態に関連し、したがって、理解することができる形態に再構成するものに注目する。再構成したトレースデータは、修正していないトレース呼び出しによって出力されるであろうトレースデータと同一であってもよく、またはタイムスタンプデータを除いて、同じものであってもよい。次いで、従来の分析技術を使用して、このトレースデータを分析することができる。
【００５１】
翻訳テーブル内の適切な翻訳データを識別できるようにするために、修正したトレースデータを識別するデータは、それが生成するトレースデータとともに出力し、この識別データを、翻訳データとともに翻訳テーブル内にも記憶する。
【００５２】
このようにトレース動作を修正することによって、コンパイラ４０は、組み込みシステム２０の、行うトレース呼び出しの数、出力するトレースデータ、および処理オーバーヘッドのうちの少なくともいくつかを削減する。
【００５３】
本実施形態には図示されていないが、組み込みシステム２０によるデータ出力を削減するように、追加的な圧縮技術を使用してもよい。
【００５４】
図２は、データ処理装置１２内のコンパイラ４０が、データ記憶部５５内に記憶しているプログラムをコンパイルし、一方で、図１に記載の装置に類似した過程で、プログラムのコンパイルが、プログラム内でトレース動作を修正する、代替的な一実施形態を示している。しかしながら、本実施形態においては、プログラムをコンパイルするデータ処理装置１２は、それを分析する装置でない。したがって、修正したトレース呼び出しのためのコードブックとして生成される翻訳テーブルは、インターフェース６０を介して、コンパイルしたコードとともに、コンパイラ４０によって組み込みシステム２０に出力される。コンパイルしたコードは、翻訳テーブルを出力するようにプロセッサに指示する命令を含む。したがって、出力２２を介して分析システムに接続した時に、組み込みシステム２０は、コンパイルしたコードを実行し、このコードに応答して、トレース出力２２を介して、生成するトレースデータとともに翻訳テーブルを出力する。次いで、このトレースデータは、翻訳テーブルを使用して、この別個のシステムによって分析することができる。
【００５５】
いくつかの実施形態においては、該別個のシステムは、従来のトレース分析器であり、修正したトレース動作によって生成したトレースデータを、元のトレース動作によって出力したであろうトレースデータに変換するように翻訳テーブルを使用する、追加的なブロックを有する。一旦この変換を行うと、次いで、従来のトレース分析器は、トレースデータを分析することができる。
【００５６】
図３は、修正したトレース動作を形成するように修正した、トレース動作のいくつかの実施例を示している。図３ａは、本実施形態においては、コンパイラは生成したコードの中間表現の範囲内で、基本ブロック内にある３つのトレースイベントを示している。コンパイラは、これらの３つのイベントが、１つを実行した時に、それらを全て実行するように、同じ基本ブロック内にあること、およびそれらが、個々のトレース呼び出しの実行の間で変化しない引数を含むことを認識しており、この場合はｃｔｒａｃｅ  １９，ｘ，ｙで示される、新しい圧縮されたトレースを生成するように、これらのトレースを組み合わせる。１９は、この修正したトレース呼び出しのための識別データであり、ｘおよびｙは、出力する引数である。これらの引数は、元の３つトレース呼び出しによって出力した引数である。
【００５７】
この圧縮したトレース呼び出しの生成に加えて、コンパイラは、修正したトレースデータを、修正していないプログラムが送信するであろうトレースデータへ翻訳することができるテーブルも作成する。この場合、図３ａに示されるように、ヒト可読形態に翻訳する場合は、この修正したトレース呼び出しに対応するテーブルエントリが検索を行う。したがって、修正したトレース呼び出しとして１９を認識し、それによって出力される引数としてＡＢを認識する。したがって、１９として示すトレースイベントを２つの引数（ＡＢ）とともに受信する時、分析器は、これらを、それが予想されていたｅｖｅｎｔ１に適合させ、元の修正していないトレース呼び出しｅｖｅｎｔ１に対応するトレースデータとして、５というトレースデータおよび第１の引数Ａを生成することができる。また、それが予想されていて、修正したトレース呼び出しＡおよびＢとともに受信される２つの引数のトレースデータ（ｘおよびｙに対応する）を生成する、ｅｖｅｎｔ２に適合させることもできる。また、それが予想されていて、第２の引数、すなわちＢおよび数字の７を出力したであろう、第３のトレース呼び出しｅｖｅｎｔ３に適合させることもできる。
【００５８】
概して、トレースデータはまた、それに添付したタイムスタンプを有し、それは、固有のもの、または元々表されたトレース動作の順序を反映するものであることをシステムがタイムスタンプに要求するものであってもよい。そのような場合、修正したトレースデータを元の形態に翻訳する時に、分析器は、その修正したトレースイベントで受信したタイムスタンプに余分のフィールドを追加してもよい。したがって、修正したトレースイベント１９がタイムスタンプ２０００を有する場合、３つ元のトレース呼び出しは、ｅｖｅｎｔ１に対しては２０００．１、ｅｖｅｎｔ２に対しては２０００．２、ｅｖｅｎｔ３に対しては２０００．３となり得る。代替的に、他の実施形態においては、図３ｂに示されるように、コンパイラは、修正していないコードでの別個の呼び出し間のサイクル数を推定し、情報をテーブル内に含めてもよい。ここで、ｅｖｅｎｔ１は、修正したトレース命令ｅｖｅｎｔ１９の５サイクル前に生じるものと推定し、一方で、ｅｖｅｎｔ２は、２サイクル前に生じるものと推定し、ｅｖｅｎｔ３は、３サイクル後のものと推定する。したがって、修正したトレースデータは、それが２０００で生じたことを示すタイムスタンプを有していた時には、元のトレースデータは、示されているように再構成することができる。
【００５９】
このように回数を推定することによって、いくつかのタイムスタンプおよび重複する別個の修正したイベントをもたらす可能性があるので、そのような場合に、イベントの正確な順序付けを保護するように、機構が、タイミングを微調整するために必要となり得る。このような微調整は、コンパイラ内に構築することができる。
【００６０】
修正することができる代替のトレース呼び出しを図３ｃに示すが、これらは、出力するデータの量、および試験している目標システムが必要とする処理の量の削減に関係している。この場合、コンパイラは、データｘ  ｙおよびｘ＋ｙの出力は不要であり、単に、元のトレース呼び出しがｘ  ｙおよびｘ＋ｙを出力したであろうことを示す翻訳データとともに、ｘおよびｙを出力することで、デバッグホストは、出力する削減したデータからさらなるデータを生成することができる。
【００６１】
トレース呼び出しが、引数に加えて特定の値、または互いに乗算した２つの引数の出力を必要とする別の実施形態においては、これらの値を個々に出力し、それらを組み合わせた処理ステップを、目標システムにではなく、デバッグホストに行うことが望ましいかもしれない。状況によっては、これは、出力するトレースデータの量を増加させる可能性があるが、これは、目標システムの処理要件を削減することが重要な場合には許容できるものとなり得る。乗算した引数の値が、何らかの理由で、トレースではなくプログラムによって必要とされる場合、そのような状況においては、いずれの場合においても標的システムが乗算ステップを実行する必要があるため、乗算した値を出力するべきであって、乗算した値を出力することによって、出力したデータおよびデバッグホスト上で実行した処理を低減させることに留意されたい。
【００６２】
翻訳データの圧縮も行うことができる。例えば、翻訳したイベント４２が元のイベントＸ、Ｙ、Ｚに対応し、翻訳したイベント５３が翻訳したイベントＸ、Ｙ、Ｚ、Ｐ、Ｑに対応する場合、図３ｄは、現在のイベント５３に必要とされる翻訳テーブルのデータを、イベント４２に対して存在する情報を使用することによって、どのようにして削減することができるのかを示している。
【００６３】
図４は、修正したトレースデータを、従来のトレースデータに変換し、次いでそれを分析する方法を示す流れ図を示している。トレースデータは、翻訳テーブルとともに受信される。次いでトレースデータを分析し、トレース呼び出しによって生成したトレースデータの各組またはセグメントを、元のプログラム内に存在するトレース呼び出しに対応しているかどうか検査する。そうである場合は、次いで、次のトレースデータセグメントを検査する。そうでない場合は、次いで、翻訳テーブルを読み込み、この動作に対応する翻訳データにアクセスし、トレースデータを、元のプログラムによって出力されたであろうトレースデータに対応するように修正する。元のプログラムが出力したであろうトレースデータと同一であるように修正しなくてもよいが、元のトレースデータを予想したツールによって分析することができるように、十分に類似したものとなることに留意されたい。例えば、トレースデータがタイムスタンプを含む場合、これらは、元のプログラムが出力したであろうタイムスタンプと全く同じものでなくてもよいが、分析するコードに十分類似したものである。
【００６４】
図５は、コード内のトレース呼び出しの数および出力したトレースデータを削減するように、コード内のトレース呼び出しを修正する方法のいくつかのステップを示している。示したステップは、必ずしも示した順序で行うとは限らず、また、ステップのうちのいくつかは、互いに並行して行なってもよいことに留意されたい。示されている実施例においては、単一の修正したトレース呼び出しを形成するように、基本ブロック内の複数のトレース呼び出しを併合し、それによって、コード内のトレース呼び出しの数を削減し、おそらくは出力したデータの量を削減する。
【００６５】
さらに、冗長なデータを出力しないように、冗長なデータを出力するトレース呼び出しも識別して修正する。図示していないさらなる最適化ステップをコードに行ってもよい。例えば、等冪であるものとしてタグが付けられたトレースイベントを検出してもよく、同じイベントの隣接するインスタンスが存在し、それらのうちの１つだけを発する必要がある場合は、したがって、残りを削除することができる。これは、標準的な併合プロセスによってすでに対処されている場合もあることに留意されたい。さらに、これらの動作をそれを超えて移動させるべきではない制限を示す、特定の動作に対するバリア命令またはタグが存在してもよい。トレース呼び出しの併合を決定した時は、これらの指定制限を超えて、いかなる併合も行わない。加えて、いくつかのトレースイベントは、タグをオンまたはオフにするたこと、およびトレース呼び出しをいつ修正したのかを示すタグを有してもよく、これらのタグを分析し、トレース呼び出しをオフにした場合は、それをコードから削除する。
【００６６】
いくつかの実施形態においては、トレースデータによって発することができるイベントの数に制限があってもよく、修正したトレースイベントの生成は、イベントの数を増加させ得る。この制限が問題である場合、どのトレースイベントまたは呼び出しを修正するのかを決定した時に、図に示されているさらなるステップを実行して、制限を超えないようにしてもよい。そのような場合、コンパイラは、コードを分析し、利用可能なイベントを最も効率的に使用するか、比較的頻繁に生じる修正したイベントだけを生成するか、または多数のトレース動作または出力したトレース動作を削減することができるように、種々のイベントの頻度を計算する。これは、符号化空間から最良の値を得ようとするために行う。
【００６７】
本発明の例示的実施形態を図面を参照しながら本願明細書に詳述したが、本発明は、それらの厳密な実施形態に限定するものではなく、また、種々の変更および修正は、添付の特許請求の範囲に記載の本発明の範囲および趣旨から逸脱することなく、当業者によって行うことができるものと理解されたい。例えば、本発明の範囲を逸脱しない範囲で、以下の従属請求項の特徴の、独立請求項の特徴との種々の組み合わせを行うことができる。
【符号の説明】
【００６８】
１０  データ処理装置
２０  組み込みシステム
４０  コンパイラ
５０  データ記憶部
６０  インターフェース
７０  分析器
【図１】
2010079894.tif 000003
【図２】
2010079894.tif 000004
【図３Ａ】
2010079894.tif 000005
【図３Ｂ】
2010079894.tif 000006
【図３Ｃ】
2010079894.tif 000007
【図３Ｄ】
2010079894.tif 000008
【図４】
2010079894.tif 000009
【図５】
2010079894.tif 000010
【外国語明細書】
2010079894.tif 000011
2010079894.tif 000012
2010079894.tif 000013
2010079894.tif 000014
2010079894.tif 000015
2010079894.tif 000016
2010079894.tif 000017
2010079894.tif 000018
2010079894.tif 000019
2010079894.tif 000020
2010079894.tif 000021
2010079894.tif 000022
2010079894.tif 000023
2010079894.tif 000024
2010079894.tif 000025
2010079894.tif 000026
2010079894.tif 000027
2010079894.tif 000028
2010079894.tif 000029
2010079894.tif 000030
2010079894.tif 000031
2010079894.tif 000032
2010079894.tif 000033
2010079894.tif 000034
2010079894.tif 000035
2010079894.tif 000036
2010079894.tif 000037
2010079894.tif 000038