(57)【特許請求の範囲】
【請求項１】
ライン番号が定義されているソースコードから生成されたプログラムにトレースコードをリンクさせてロードモジュールを生成するロードモジュール生成部と、
前記プログラムを解析し、前記ソースコードのライン番号ごとに、各ライン番号に対応する前記プログラム内のプログラム要素のプロセス空間上のアドレスが定義されるアドレス定義情報を生成するデバッグ情報生成部と、
前記トレースコードの起動対象となるライン番号を起動対象ライン番号として入力する入力部と、
前記アドレス定義情報を参照し、前記起動対象ライン番号に対応するプログラム要素のプロセス空間上のアドレスを前記トレースコードを起動させるフックポイントとして特定し、前記ロードモジュールがロードされたプログラム実行装置において前記フックポイントに存在するプログラム要素を前記プログラム実行装置内の所定の領域に退避させるとともに、前記トレースコードを起動させるフックコードを前記フックポイントに書き込むフックコード書込み部とを有することを特徴とするプログラムトレース管理装置。
【請求項２】
前記デバッグ情報生成部は、
前記ソースコードのライン番号ごとに、各ライン番号に対応するプログラム要素のデータサイズを定義するデータサイズ情報を生成し、
前記フックコード書込み部は、
前記アドレス定義情報を参照してフックポイントを特定するとともに、前記データサイズ情報を参照して前記フックポイントに存在するプログラム要素のデータサイズを特定し、前記フックポイントから当該データサイズ分のプログラム要素を前記プログラム実行装置内の所定の領域に退避させるとともに、前記フックポイントから当該データサイズ分の範囲にフックコードを書き込むことを特徴とする請求項１に記載のプログラムトレース管理装置。
【請求項３】
前記フックコード書込み部は、
前記プログラム実行装置において前記ロードモジュールが実行された際に前記トレースコードを起動させて前記プログラム実行装置に前記トレースコードを実行させるとともに、前記トレースコードの実行が完了した後に、前記フックポイントに対して前記プログラム実行装置内の所定の領域に退避させているプログラム要素を前記プログラム実行装置に実行させるフックコードを前記フックポイントに書き込むことを特徴とする請求項１又は２に記載のプログラムトレース管理装置。
【請求項４】
前記デバッグ情報生成部は、
前記ソースコードに含まれている関数ごとに、各関数に対応するプログラム要素のプロセス空間上のアドレスを定義する関数アドレス情報を生成し、
前記プログラムトレース管理装置は、更に、
前記プログラム実行装置において前記トレースコードが実行されて生成されたトレースログであって、前記トレースコードが起動された起動フックポイントが示されるトレースログを前記関数アドレス情報と照合して解析し、前記トレースログに示される起動フックポイントが前記関数アドレス情報により特定されるいずれかのアドレスと一致する場合に、前記トレースログ内の起動フックポイントの表示を対応する関数の表示に置換し、起動フックポイントの表示が関数の表示に置換された後のトレースログであるトレース結果情報を出力するトレースログ照合部を有することを特徴とする請求項１〜３のいずれかに記載のプログラムトレース管理装置。
【請求項５】
コンピュータが、ライン番号が定義されているソースコードから生成されたプログラムにトレースコードをリンクさせてロードモジュールを生成するロードモジュール生成ステップと、
前記コンピュータが、前記プログラムを解析し、前記ソースコードのライン番号ごとに、各ライン番号に対応する前記プログラム内のプログラム要素のプロセス空間上のアドレスが定義されるアドレス定義情報を生成するデバッグ情報生成ステップと、
前記コンピュータが、前記トレースコードの起動対象となるライン番号を起動対象ライン番号として入力する入力ステップと、
前記コンピュータが、前記アドレス定義情報を参照し、前記起動対象ライン番号に対応するプログラム要素のプロセス空間上のアドレスを前記トレースコードを起動させるフックポイントとして特定し、前記ロードモジュールがロードされたプログラム実行装置において前記フックポイントに存在するプログラム要素を前記プログラム実行装置内の所定の領域に退避させるとともに、前記トレースコードを起動させるフックコードを前記フックポイントに書き込むフックコード書込みステップとを有することを特徴とするプログラムトレース管理方法。
【請求項６】
ライン番号が定義されているソースコードから生成されたプログラムにトレースコードをリンクさせてロードモジュールを生成するロードモジュール生成ステップと、
前記プログラムを解析して、前記ソースコードのライン番号ごとに、各ライン番号に対応する前記プログラム内のプログラム要素のプロセス空間上のアドレスが定義されるアドレス定義情報を生成するデバッグ情報生成ステップと、
前記トレースコードの起動対象となるライン番号を起動対象ライン番号として入力する入力ステップと、
前記アドレス定義情報を参照し、前記起動対象ライン番号に対応するプログラム要素のプロセス空間上のアドレスを前記トレースコードを起動させるフックポイントとして特定し、前記ロードモジュールがロードされたプログラム実行装置において前記フックポイントに存在するプログラム要素を前記プログラム実行装置内の所定の領域に退避させるとともに、前記トレースコードを起動させるフックコードを前記フックポイントに書き込むフックコード書込みステップとをコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムトレースに関する。
【背景技術】
【０００２】
プログラムの動作を解析するためのプログラムトレースという手法がある。
プログラムトレースでは、プログラム実行時に特定関数が呼び出されたこと、特定の値が変更されたこと、特定の処理経路を通過したことなどをトレースログとして残し、ソフトウェアの動作を外部より把握するための仕組みである。
【０００３】
プログラムトレースを利用してトレースログを取得する際、プログラムのソースコードにトレースコードを埋め込む、または、あらかじめトレースコードが埋め込まれたプログラムに対してトレースＯＮ／ＯＦＦフラグを設定するなどして、プログラムをコンパイルした後、動作させるという手間があった。
また、トレース位置を変更する場合は、ソースコードを変更してコンパイルし直す、外部からフラグを操作するなどの手間が必要であった。
また、トレース位置を指定する際にも複雑な手順を追って設定する必要があり、トレース位置の変更時など手間が煩雑であった。
また、取得したトレースログを解析する場合においても、バイナリのアドレス値などが表示されるのみで一覧性が悪く、トレースログ解析を行うことは容易ではなかった。
【０００４】
特許文献１では、トレース位置を決定する手法について、フックポイント検出規則に決められた規則に基づいてトレース位置を決定し、外部からソースコードを変更することなくトレースする位置を変更する手法が記載されている。
【０００５】
特許文献２では、予めソースコード内にトレースコードが埋め込まれたソフトウェアを動作させトレースログを取得する手法が記載されている。
また、特許文献２では、そのトレースログを取得するか否かを、外部に設定されたテーブルを参照することで決定する手法、更には、その外部テーブルを編集することでソースコードを変更せずトレースをＯＮ／ＯＦＦする手法が記載されている。
【０００６】
特許文献３では、トレースにて取得したログをソースコードより抽出した定義情報に従い、表示形式を変更することでデバッグの作業効率及び信頼性を向上させる手法が記載されている。
また、特許文献３では、入力装置からの入力に従い、特定のトレースログの表示ＯＮ／ＯＦＦや、名称変更などを行い出力ログの一覧性を向上させるための手法が記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００９−２３７６１０号公報
【特許文献２】特開平２−１２７７３６号公報
【特許文献３】特開平９−１６４３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
従来の手法では、トレースする位置を設定する際、複雑な手順を使用する必要があった。
特許文献１では、トレースする位置を確定する際に、アセンブラ命令を検出対象としたフックポイント検出規則を定義し、その定義に従いバイナリ内を検索し、そこにトレースコードを埋め込む必要があった。
特許文献２では、予めソースコード内にトレースコードを埋め込んでおく必要があった。
また、トレースログを解析する方法についても、予めトレースログと関数データを照合するための定義情報を作成して用意しておく必要がある。
特許文献３では、ソースファイルから抽出した定義情報ファイルを用意し、その定義情報ファイルとトレースログを付き合わせる。
その定義情報データを読み取るために複数の手段が必要となっており複雑な構成であった。
【０００９】
この発明は、上記のような課題を解決することを主な目的の一つとしており、多くの指定情報や複雑な指定手順を必要とすることなく、簡易な指定手順によって詳細なトレース結果情報を取得可能とする仕組みを提供することを主な目的とする。
【課題を解決するための手段】
【００１０】
本発明に係るプログラムトレース管理装置は、
ライン番号が定義されているソースコードから生成されたプログラムにトレースコードをリンクさせてロードモジュールを生成するロードモジュール生成部と、
前記プログラムを解析し、前記ソースコードのライン番号ごとに、各ライン番号に対応する前記プログラム内のプログラム要素のプロセス空間上のアドレスが定義されるアドレス定義情報を生成するデバッグ情報生成部と、
前記トレースコードの起動対象となるライン番号を起動対象ライン番号として入力する入力部と、
前記アドレス定義情報を参照し、前記起動対象ライン番号に対応するプログラム要素のプロセス空間上のアドレスを前記トレースコードを起動させるフックポイントとして特定し、前記ロードモジュールがロードされたプログラム実行装置において前記フックポイントに存在するプログラム要素を前記プログラム実行装置内の所定の領域に退避させるとともに、前記トレースコードを起動させるフックコードを前記フックポイントに書き込むフックコード書込み部とを有することを特徴とする。
【発明の効果】
【００１１】
本発明では、起動対象ライン番号に対応するプログラム要素のアドレスをフックポイントとして特定し、トレースコードを起動させるフックコードをフックポイントに書き込むため、ソースコードのライン番号を指定するのみで、詳細なトレース結果情報を取得することができる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１に係るプログラムトレース解析装置とプログラム実行装置の構成例を示す図。
【図２】実施の形態１に係るプログラムトレースの全体の流れを示すフローチャート図。
【図３】実施の形態１に係るトレース準備段階の動作例を示すフローチャート図。
【図４】実施の形態１に係るトレースログ取得段階の動作例を示すフローチャート図。
【図５】実施の形態１に係るトレース解析段階の動作例を示すフローチャート図。
【図６】実施の形態１に係るプログラム、フックコード及びトレースコードの関係を示す図。
【図７】実施の形態１に係るプログラムトレース解析装置とプログラム実行装置のハードウェア構成例を示す図。
【発明を実施するための形態】
【００１３】
実施の形態１．
本実施の形態では、多くの指定情報や複雑な指定手順を必要とすることなく、限定された指定情報と簡易な指定手順からだけでも、詳細なトレース結果情報を取得可能とする仕組みを説明する。
限定された指定情報としては、例えばソースコードのライン番号とする。
詳細なトレース結果情報とは、例えばソースコード上の指定したライン番号、プログラム名、プロセス名、関数名、実行時刻を含む情報である。
【００１４】
このために、本実施の形態では、まず限定された指定情報、例えばソースコード上のトレース対象ラインのライン番号のみを指定する。
次に、デバッグ情報を参照し、指定されたトレース対象のライン番号に対応するプログラム上のアドレスとサイズを検出する。
次に、検出したアドレスに対してフックコードを書き込む。
次に、フックコードによってトレースコードが起動し、トレースコードの実行によりトレースログが生成される。
次に、生成したトレースログを取り出し、デバッグ情報と照合することにより詳細なトレース結果情報を得ることが可能となる。
以下にて、本実施の形態に係るプログラムトレースの詳細を図面を参酌して説明する。
【００１５】
図１は実施の形態１に係るプログラムトレース解析装置１００とプログラム実行装置２００の構成例を示す。
図１において、プログラム実行装置２００は、トレース記録手段４０１を持ったオペレーティングシステム４００上でロードモジュール３００を実行する計算機である。
また、プログラムトレース解析装置１００は、ロードモジュール３００を生成するとともに、プログラム実行装置２００でのプログラムトレースのための準備処理及びプログラムトレースの結果であるトレースログ４０２に対する照合処理を行う計算機である。
プログラムトレース解析装置１００とプログラム実行装置２００は、例えばＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）を介して接続されていてもよい。
そして、後述するプログラムトレース解析装置１００からプログラム実行装置２００内のロードモジュール３００へのフックコード３０２の書込みや、プログラム実行装置２００からプログラムトレース解析装置１００へのトレースログの供給は、ＬＡＮを介した通信で行うようにしてもよい。
【００１６】
プログラムトレース解析装置１００において、ロードモジュール生成部１０１は、ソースコード１５１をコンパイルしてプログラム実行装置２００で実行可能なプログラム３０１を生成するとともに、プログラム３０１にトレースコード３０３をリンクさせてロードモジュール３００を生成する。
ソースコード１５１にはライン番号が定義されている。
ロードモジュール３００の生成は、既存技術により実現可能である。
【００１７】
デバッグ情報生成部１０２は、コンパイルされたプログラム３０１を解析して、デバッグ情報１５２を生成する。
デバッグ情報１５２は、図１に示すように、関数アドレス情報と、ライン−アドレス−サイズ情報から構成される。
関数アドレス情報は、ソースコード１５１に含まれている関数ごとに、各関数に対応するプログラム要素（プログラム３０１のコードブロック）のプログラム実行装置２００におけるプロセス空間上のアドレスを定義する情報である。
例えば、関数Ｘに対応するプログラム要素は、プログラム３０１のプロセス空間の先頭アドレスからＮ番目のアドレスに格納されるといった情報である。
ライン−アドレス−サイズ情報は、ソースコード１５１のライン番号ごとに、各ライン番号に対応するプログラム要素（プログラム３０１のコードブロック）のプログラム実行装置２００におけるプロセス空間上のアドレスと、当該プログラム要素のデータサイズとを定義する情報である。
例えば、ソースコード１５１の２０行目に対応するプログラム要素は、プログラム３０１のプロセス空間の先頭アドレスからＭ番目のアドレスに格納され、データサイズはＰバイトであるといった情報である。
ライン−アドレス−サイズ情報は、アドレス定義情報及びデータサイズ情報の例である。
なお、図１では、デバッグ情報生成部１０２が、プログラム実行装置２００にロードモジュール３００がロードされた後に、プログラム実行装置２００内のロードモジュール３００からデバッグ情報１５２を生成するようにも見えるが、デバッグ情報生成部１０２は、ロードモジュール３００がプログラム実行装置２００にロードされる前にデバッグ情報１５２を生成する。
また、デバッグ情報１５２の生成は、既存技術により実現可能である。
【００１８】
入力部１０３は、ロードモジュール３００がプログラム実行装置２００にロードされた後に、プログラムトレース解析装置１００のユーザから、トレースコード３０３の起動対象となるライン番号を起動対象ライン番号として入力する。
【００１９】
トレース指示部１０４は、入力部１０３から起動対象ライン番号を取得し、後述のフックコード書込み部１０５に起動対象ライン番号を通知するとともに、起動対象ライン番号に対応するアドレスにフックコード３０２に書き込むよう指示する。
【００２０】
フックコード書込み部１０５は、トレース指示部１０４からの指示によってデバッグ情報１５２を参照し、プログラム３０１にフックコード３０２を書き込む。
より具体的には、フックコード書込み部１０５は、デバッグ情報１５２のライン−アドレス−サイズ情報から、起動対象ライン番号に対応するプログラム要素のプロセス空間上のアドレスを抽出し、抽出したアドレスを、起動対象ライン番号に対応するプログラム要素のプログラム実行装置２００でのフックポイントとして特定する。
そして、ロードモジュール３００がロードされたプログラム実行装置２００においてフックポイントに存在するプログラム要素をプログラム実行装置２００内のスタブ領域に退避させるとともに、トレースコード３０３を起動させるフックコード３０２をフックポイントに書き込む。
例えば、起動対象ライン番号としてソースコード１５１の２０行目が指示され、ライン−アドレス−サイズ情報には、ソースコード１５１の２０行目のプログラム要素のアドレスがプロセス空間上の先頭アドレスからＭ番目と記述され、データサイズはＰバイトと記述されていれば、フックコード書込み部１０５は、プログラム３０１のプロセス空間の先頭アドレスからＭ番目のアドレスに格納されているＰバイト分のプログラム要素をスタブ領域に退避させるとともに、Ｍ番目のアドレスにフックコード３０２を書き込む。
フックコード書込み部１０５によるフックコードの書き込みは、例えば、プログラム実行装置２００と通信を行い、プログラム実行装置２００のオペレーティングシステム４００内のファイルシステムに、対象となるアドレス（例えば、プログラム３０１のプロセス空間の先頭アドレスからＭ番目のアドレス）とデータサイズ（例えば、Ｐバイト）を通知し、書き込み対象となるフックコード３０２を送信することにより行う。
【００２１】
ここで、フックコード３０２とトレースコード３０３との関係を、図１と図６を用いて説明する。
【００２２】
フックポイントにフックコード３０２が書き込まれた後にプログラム３０１が実行され、プログラム３０１の実行の過程でフックコード３０２が実行されると、フックコード３０２によりトレースコード３０３が呼び出される。
トレースコード３０３では、トレース発行手段３０４がオペレーティングシステム４００のトレース記録手段４０１を用いて、呼び出された時点におけるプログラム３０１の状況をトレースログ４０２に記録する。
【００２３】
なお、フックコード書込み部１０５が書き込むフックコード３０２は、トレースコード３０３の実行が完了した後に、スタブ領域に退避させている本来のプログラム要素をプログラム実行装置２００に実行させる機能を持つフックコードである。
【００２４】
トレースログ照合部１０６は、プログラム実行装置２００よりトレースコード３０３が実行されトレースログ４０２が生成されると、トレースログ４０２を取り出し、デバッグ情報１５２と照合しトレースログ４０２を置換し、トレース結果情報１５３を出力する。
トレースログ４０２には、トレースコード３０３が起動されたフックポイントである起動フックポイントが示される。
トレースログ照合部１０６は、トレースログ４０２に示される起動フックポイントとデバッグ情報１５２の関数アドレス情報とを照合し、関数アドレス情報に示されるアドレスと、起動フックポイントのアドレスが一致する場合に、トレースログ４０２内の起動フックポイントの表示を対応する関数の表示に置換し、起動フックポイントの表示が関数の表示に置換された後のトレースログ４０２をトレース結果情報として出力する。
例えば、トレースログ４０２には、プログラム３０１のプロセス空間の先頭アドレスからＮ番目のアドレスが起動フックポイントとして記述されており、また、関数アドレス情報には、関数Ｘのプログラム要素は、プログラム３０１のプロセス空間の先頭アドレスからＮ番目のアドレスに格納されると記述されていれば、両者が一致するので、トレースログ照合部１０６は、トレースログ４０２内の起動フックポイントの表示（先頭アドレスからＮ番目）を「関数Ｘ」と置換する。
【００２５】
以下、図２〜図５のフローチャートを参照して、本実施の形態に係るプログラムトレース解析装置１００とプログラム実行装置２００の動作例を説明する。
なお、図２は、本実施の形態に係るプログラムトレースの全体の流れを示すフローチャート図である。
図３は、本実施の形態に係るトレース準備段階の動作例を示すフローチャート図である。
図４は、本実施の形態に係るトレースログ取得段階の動作例を示すフローチャート図である。
図５は、本実施の形態に係るトレース解析段階の動作例を示すフローチャート図である。
【００２６】
図２に示すように、まず、プログラムトレース解析装置１００によってトレースの準備が行われる（Ｓ１０１）。
次に、プログラム実行装置２００によってトレースログが取得され（Ｓ１０２）、トレースログの取得が完了すると（Ｓ１０３でＹＥＳ）、プログラムトレース解析装置１００によってトレースログの解析が行われる（Ｓ１０４）。
以上が、トレースログの全体の流れである。
なお、Ｓ１０１の詳細は図３に示し、Ｓ１０２の詳細は図４に示し、Ｓ１０４の詳細は図５に示す。
【００２７】
次に、図３を参照して、トレースの準備処理について説明する。
【００２８】
まず、ロードモジュール生成部１０１がソースコード１５１をコンパイルし、プログラム３０１を生成する（Ｓ１０１１）。
次に、ロードモジュール生成部１０１が、プログラム３０１とトレースコード３０３をリンクしロードモジュール３００を生成する（Ｓ１０１２）。
次に、デバッグ情報生成部１０２が、プログラム３０１からデバッグ情報１５２を抽出する（Ｓ１０１３）。
前述したように、デバッグ情報１５２には、プログラムに含まれている関数のアドレスが示される関数アドレス情報、ソースコード１５１とバイナリのアドレスの対応及びソースコード１５１に対応するバイナリのデータサイズが示されるライン−アドレス−サイズ情報が含まれている。
【００２９】
次に、一般的なロード手段を用いてロードモジュール３００をプログラム実行装置２００へロードする（Ｓ１０１４）。
【００３０】
次に、ユーザは入力部１０３にソースコード１５１のライン番号（起動対象ライン番号）を入力し、トレース指示部１０４が起動対象ライン番号をフックコード書込み部１０５へ通知する（Ｓ１０１５）。
次に、トレース指示部１０４より起動対象ライン番号を受取ったフックコード書込み部１０５は、デバッグ情報１５２のライン−アドレス−サイズ情報を参照し、起動対象ライン番号に対応するプログラムアドレスを検出し（Ｓ１０１６）、プログラム実行装置２００上にロードされているプログラム３０１に対してフックコード３０２を埋め込む。
埋め込みの手法は、フックコード書込み部１０５が検出した起動対象ライン番号に対応するアドレスから始まる該当サイズ分（ライン−アドレス−サイズ情報に記述されているデータサイズ分）のバイナリコードを、スタブ領域に一時退避する（Ｓ１０１７）。
次に、フックコード書込み部１０５は、上記で検出したアドレスから始まるサイズ分のバイナリコードにフックコード３０２を上書きする（Ｓ１０１８）。
以上でトレースの準備は完了である。
【００３１】
次に、図４を参照して、トレースログの取得処理について説明する。
【００３２】
まず、プログラム実行装置２００上でロードモジュール３００を実行する（Ｓ１０２１）。
そして、ロードモジュール３００が実行される過程でプログラム内のフックコード３０２が実行されると（Ｓ１０２２でＹＥＳ）、フックコード３０２はトレースコード３０３を呼び出す。
トレースコード３０３はトレース発行手段３０４によりエラーシステムコールを発行する（Ｓ１０２３）。
なお、エラーシステムコールは発行されるときに、プログラムの実行アドレス（つまり、起動フックポイント）を引数とする。
オペレーティングシステム４００はシステムコールが発行されると、トレース記録手段４０１によりシステムコールの引数（プログラムの実行アドレス（つまり、起動フックポイント））、実行時間、実行プログラム名、実行プロセスＩＤの情報をトレースログ４０２として記録する（Ｓ１０２４）。
トレースが実行された後、プログラム実行装置２００は、トレースの準備（Ｓ１０１７）にてスタブ領域に退避させているプログラムのバイナリコードを実行する（Ｓ１０２５）。
このことで、トレースログ４０２を記録しつつフックコード３０２が埋め込まれる以前のプログラム要素も実行され、プログラム３０１の本来の処理も行われる。
以上でトレースログ取得は完了である。
【００３３】
次に、図５を参照して、トレースログ解析処理について説明する。
【００３４】
まず、トレースログ照合部１０６は、プログラム実行装置２００に記録されたトレースログ４０２を取り出す（Ｓ１０４１）。
次に、トレースログ照合部１０６は、取り出したトレースログ４０２内をチェックし（Ｓ１０４２）、エラーシステムコールを抽出し（Ｓ１０４３でＹＥＳ）、その引数（プログラムの実行アドレス（つまり、起動フックポイント））とデバッグ情報１５２の関数アドレス情報とを照合する。
エラーシステムコールの引数と関数アドレスが合致している場合（Ｓ１０４４でＹＥＳ）は、トレースログ照合部１０６は、そのエラーシステムコールをプログラムの関数名に置換する（Ｓ１０４５）。
全てのトレースログ４０２の照合が終われば（Ｓ１０４６）、トレースログ照合部１０６は、関数名に置換後のトレースログ４０２をトレース結果情報１５３として出力する（Ｓ１０４７）。
以上でトレースログ解析は完了である。
【００３５】
なお、限定された指定情報として指定する起動対象ライン番号は一つでもよいし、複数のライン番号を指定してもよい。
また、複数のソースコードファイルをまたがって指定してもよい。
【００３６】
以上のように、本実施の形態に係るプログラムトレース解析方式を用いることで、限定された指定情報と簡易な指定手順からのみで（具体的には、ソースコード１５１のライン番号を指定するのみで）、詳細なトレース結果情報（具体的には、ソースコードライン番号、プログラム名、実行したプロセス、実行された時刻、実行した関数）を取得することができる。
そして、このトレース結果情報を参照することで、プログラムの詳細な動作解析が可能になり、プログラムの品質向上や、異常発生時のトラブルシューティングの対応力強化を図ることができる。
【００３７】
以上、本実施の形態では、
プログラムのトレースを行なうプログラムトレース解析方式において、以下の手段を備えたプログラムトレース解析方式を説明した。
プログラムをコンパイル、リンクするロードモジュール生成部、
コンパイルされたプログラムからデバッグ情報を抽出するデバッグ情報生成部、
限定された指定情報を指定するトレース指示部、
トレース指示部からの指示によってデバッグ情報を参照しプログラムにフックコードを書き込むフックコード書込み部、
フックコード書込み部によってプログラムに書込まれ、プログラムが実行されたときにトレース発行手段を呼び出すフックコード、
フックコードから呼び出され、オペレーティングシステム内のトレース記録手段を呼び出すトレース発行手段、
トレース発行手段を備えるトレースコード、
トレースログを記録するトレース記録手段、
プログラム実行装置よりトレースログを取り出し、デバッグ情報と照合しトレースログを置換し、トレース結果情報を出力するトレース照合部。
【００３８】
また、本実施の形態では、
限定された指定情報がソースコードのライン番号であることを説明した。
【００３９】
最後に、本実施の形態に示したプログラムトレース解析装置１００とプログラム実行装置２００（以下、両者をあわせてプログラムトレース解析装置１００等と表記する）のハードウェア構成例について説明する。
図７は、本実施の形態に示すプログラムトレース解析装置１００等のハードウェア資源の一例を示す図である。
なお、図７の構成は、あくまでもプログラムトレース解析装置１００等のハードウェア構成の一例を示すものであり、プログラムトレース解析装置１００等のハードウェア構成は図７に記載の構成に限らず、他の構成であってもよい。
また、プログラムトレース解析装置１００とプログラム実行装置２００で異なるハードウェア構成であってもよい。
【００４０】
図７において、プログラムトレース解析装置１００等は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。
ＣＰＵ９１１は、バス９１２を介して、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９１３、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。
更に、ＣＰＵ９１１は、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７と接続していてもよい。また、磁気ディスク装置９２０の代わりに、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、光ディスク装置、メモリカード（登録商標）読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置の一例である。
通信ボード９１５、キーボード９０２、マウス９０３、スキャナ装置９０７などは、入力装置の一例である。
また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力装置の一例である。
【００４１】
前述したように、プログラムトレース解析装置１００とプログラム実行装置２００は、例えばＬＡＮ（ローカルエリアネットワーク）を介して接続されていてもよい。
このため、通信ボード９１５は、例えば、ＬＡＮに接続されている。
また、プログラムトレース解析装置１００とプログラム実行装置２００は、例えばインターネットやＷＡＮ（ワイドエリアネットワーク）を介して接続されていてもよい。
【００４２】
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。
プログラム群９２３のプログラムは、ＣＰＵ９１１がオペレーティングシステム９２１、ウィンドウシステム９２２を利用しながら実行する。
プログラム実行装置２００にロードされたロードモジュール３００は、プログラム群９２３の一部として、プログラム実行装置２００内の磁気ディスク装置９２０に格納される。
また、ソースコード１５１はプログラム群９２３の一部として、やデバッグ情報１５２はファイル群９２４の一部として、プログラムトレース解析装置１００内の磁気ディスク装置９２０に格納される。
【００４３】
また、ＲＡＭ９１４には、ＣＰＵ９１１に実行させるオペレーティングシステム９２１のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。
また、ＲＡＭ９１４には、ＣＰＵ９１１による処理に必要な各種データが格納される。
【００４４】
また、ＲＯＭ９１３には、ＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）プログラムが格納され、磁気ディスク装置９２０にはブートプログラムが格納されている。
プログラムトレース解析装置１００等の起動時には、ＲＯＭ９１３のＢＩＯＳプログラム及び磁気ディスク装置９２０のブートプログラムが実行され、ＢＩＯＳプログラム及びブートプログラムによりオペレーティングシステム９２１が起動される。
【００４５】
上記プログラム群９２３には、本実施の形態の説明において「〜部」として説明している機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
【００４６】
ファイル群９２４には、本実施の形態の説明において、「〜の判断」、「〜の抽出」、「〜の生成」、「〜の比較」、「〜の照合」、「〜の通知」、「〜の特定」、「〜の設定」、「〜の置換」、「〜の選択」、「〜の入力」、「〜の出力」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。
「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。
ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出される。
そして、読み出された情報やデータや信号値や変数値やパラメータは、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのＣＰＵの動作に用いられる。
抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、本実施の形態で説明しているフローチャートの矢印の部分は主としてデータや信号の入出力を示す。
データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ等の記録媒体に記録される。
また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００４７】
また、本実施の形態の説明において「〜部」として説明しているものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。
すなわち、本実施の形態で説明したフローチャートに示すステップ、手順、処理により、本発明に係る「プログラムトレース管理方法」を実現することができる。
また、「〜部」として説明しているものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。
或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。
ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。
プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。
すなわち、プログラムは、本実施の形態の「〜部」としてコンピュータを機能させるものである。あるいは、本実施の形態の「〜部」の手順や方法をコンピュータに実行させるものである。
【００４８】
このように、本実施の形態に示すプログラムトレース解析装置１００等は、処理装置たるＣＰＵ、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータである。
そして、上記したように「〜部」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【符号の説明】
【００４９】
１００  プログラムトレース解析装置、１０１  ロードモジュール生成部、１０２  デバッグ情報生成部、１０３  入力部、１０４  トレース指示部、１０５  フックコード書込み部、１０６  トレースログ照合部、１５１  ソースコード、１５２  デバッグ情報、１５３  トレース結果情報、２００  プログラム実行装置、３００  ロードモジュール、３０１  プログラム、３０２  フックコード、３０３  トレースコード、３０４  トレース発行手段、４００  オペレーティングシステム、４０１  トレース記録手段、４０２  トレースログ。
【図１】
0005686686.tif 000002
【図２】
0005686686.tif 000003
【図３】
0005686686.tif 000004
【図４】
0005686686.tif 000005
【図５】
0005686686.tif 000006
【図６】
0005686686.tif 000007
【図７】
0005686686.tif 000008