JP4125053B2 - Log acquisition method - Google Patents
Log acquisition method Download PDFInfo
- Publication number
- JP4125053B2 JP4125053B2 JP2002191127A JP2002191127A JP4125053B2 JP 4125053 B2 JP4125053 B2 JP 4125053B2 JP 2002191127 A JP2002191127 A JP 2002191127A JP 2002191127 A JP2002191127 A JP 2002191127A JP 4125053 B2 JP4125053 B2 JP 4125053B2
- Authority
- JP
- Japan
- Prior art keywords
- log
- function
- log acquisition
- called
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Description
【0001】
【発明の属する技術分野】
本発明は、複数にモジュール分けされたソフトウェアの処理ログを取得するための技術に関するものである。
【0002】
【従来の技術】
従来より、再現率の低いソフトウェアの障害に対しては、ソフトウェアの処理ログを取得し、当該処理ログを解析することによって、障害の原因をつきとめ、その対策を講じてきた。
【0003】
【発明が解決しようとする課題】
しかし、上記従来の処理ログの取得には以下のような問題点がある。
(1)ユーザの動作環境でもログを取得しつづけるためには、ソフトウェアのモジュール自体に手を加え、処理ログ取得ルーチンを追加しなければならず、処理ログ取得のための作業負荷が大きかった。
(2)処理ログ取得はモジュール毎に行うため、生成されたログはモジュール単位のものとなってしまい、ソフトウェア全体の処理を、完全に時間順のログとして取得するのが困難である。このため、全体の処理ログとしての見通しが悪く、ログを解析して障害の原因を発見するまでのプロセスに工数がかかっていた。
【0004】
本発明は、上記課題を鑑みてなされたものであり、複数にモジュール分けされたソフトウェアの処理ログを容易に取得でき、かつ、ソフトウェアの障害の原因の解析のための工数を削減することが可能なログ取得方法、ならびに該方法をコンピュータによって実現させるためのプログラム、および該プログラムを格納した記憶媒体を提供することを目的とする。
【0005】
【課題を解決するための手段】
上記の目的を達成するために本発明に係るログ取得方法は以下のような構成を備える。即ち、
関数を記憶したダイナミックリンクライブラリと、該関数のアドレスを記憶したインポート関数アドレステーブルと、該ダイナミックリンクライブラリ内の関数を呼び出して実行する対象プログラムとを記憶するプログラム記憶手段と、プログラムを記憶する記憶媒体と、ログが記録されるログ記録手段と、プログラムを実行する実行手段とを有し、前記実行手段が前記記憶媒体に記憶されたプログラムを実行することにより実現される書き換え手段と、呼び出し手段とを備えた情報処理装置において、前記対象プログラムの実行中のログを取得するログ取得方法であって、
前記書き換え手段が、前記対象プログラムの実行前に、前記ダイナミックリンクライブラリ内の各関数に対応するログ取得のための関数を当該ダイナミックリンクライブラリ内にロードし、前記インポート関数アドレステーブル上に記憶された各関数のアドレスを、対応する前記ログ取得のための関数のアドレスに書き換える工程と、
前記呼び出し手段が、前記対象プログラムが呼び出そうとする呼び出し対象の関数に対する前記インポート関数アドレステーブル上の書き換え後の前記対応するログ取得のための関数のアドレスに基づいて、前記ログ取得のための関数を呼び出して前記実行手段に実行させることで実現されるログ取得手段を起動する工程と、
前記ログ取得手段が、前記呼び出し手段による呼び出しに関わるログを前記ログ記録手段に記録し、前記呼び出し手段により呼び出された前記ログ取得のための関数に対応する前記呼び出し対象の関数を呼び出して、該呼び出し対象の関数を前記実行手段に実行させる工程と、
前記ログ取得手段が、前記呼び出し対象の関数の実行結果を受け取って該実行結果に関わるログを前記ログ記録手段に記録し、当該実行結果を前記対象プログラムに渡す工程とを備える。
【0006】
【発明の実施の形態】
【第1の実施形態】
本実施形態は、あるモジュールから別のモジュール内に存在する関数の呼び出しが行われる際の仕組みである、メモリに保持されたインポート関数アドレス、または仮想関数アドレステーブル(Virtual Address Table)を利用して、モジュール間の関数呼び出しをフックしてログに記録することで、ソフトウェアのモジュール自体に手を加えることなく、ソフトウエア全体の処理を、時間順のログとして取得することを可能にするものである。以下に具体的に説明する。
【0007】
<システム構成>
図1は、本発明の各実施形態にかかるログ取得方法を実現するコンピュータ(ソフトウェア評価システム)の構成をあらわす図である。説明を簡略化するために、本実施形態では、本ソフトウェア評価システムが1台のPC内部に構築されるものとするが、本発明のログ取得方法の特徴は1台のPC内部に構築されるか、あるいは複数のPCにネットワークシステムとして構築されるかによらず有効である。
【0008】
本ソフトウェア評価システムを搭載するコンピュータには、CPU1、チップセット2、RAM3、ハードディスクコントローラ4、ディスプレイコントローラ5、ハードディスクドライブ6、CD−ROMドライブ7、ディスプレイ8が搭載されている。また、CPUとチップセットを繋ぐ信号線11、チップセット2とRAM3とを繋ぐ信号線12、チップセット2と各種周辺機器とを繋ぐ周辺機器バス13、ハードディスクコントローラ4とハードディスクドライブ6とを繋ぐ信号線14、ハードディスクコントローラ4とCD−ROMドライブ7とを繋ぐ信号線15、ディスプレイコントローラ5とディスプレイ8とを繋ぐ信号線16が搭載されている。
【0009】
<関数処理に対する処理ログ取得>
本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムを説明するために、まず図2によって、複数のモジュールに分かれたソフトウェアが、通常の状態でどのようにメモリにロードされるかを説明する。
【0010】
通常、複数のモジュールに分かれたソフトウェアは、全体の制御を行う実行ファイルEXE(23)と、モジュールとして存在しEXEの補完的な役割を担うダイナミックリンクライブラリDLL(27)とに分かれており、メモリにはEXEとDLLの両方がロードされる。EXEはコードセグメント(28)とデータセグメント(29)、そしてインポート関数アドレステーブル(22)から成っている。更に、インポート関数アドレステーブルは、関数の所属するDLLによって分かれており(21, 24)、DLLごとにそれぞれの関数がロードされたアドレスが書かれている(30〜35)。DLLの関数の実体は、DLLごとに分かれて(25, 26)ロードされ、それぞれの関数は該当するDLLの一部としてロードされる(36〜41)。この図では、1本のEXEがA.DLL及びB.DLLの2つのダイナミックリンクライブラリ内の関数を使用している例を示しており、実際に使用される関数はFunc AA, Func AB, Func AC, Func BA, Func BB, Func BCの6個となっている。
【0011】
EXEのコードセグメント内にあるコードが関数Func AAを呼び出す場合には、まずインポート関数アドレステーブル内に書かれたFunc AAのアドレス(30)が読み込まれる。ここには実際にはA.DLLの一部として読み込まれたFunc AAコード(36)のアドレスが書かれており、そのアドレスをコールすることによって、EXEのコードはA.DLLのFunc AAを呼び出すことができる。
【0012】
図3は、本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムのメモリ構成をあらわす図であり、図2とは、ログ取得用のコードに対してIAT Patch(Import Address Table Patch)という手法を用いて、関数呼び出しをリダイレクトしているという点で異なっている。
【0013】
ログ取得が開始されると、メモリ内にはIAT Patch用のDLLであるC.DLL(58)がロードされる。C.DLLはインポート関数アドレステーブル(52)内に書かれた関数のアドレスを、C.DLL内のログ取得コードであるFunc CAA, Func CAB, Func CAC, Func CBA,Func CBB, Func CBCのアドレスに書き換える(61〜66)。C.DLL内のFunc CAA, Func CAB, Func CAC, Func CBA, Func CBB, Func CBCのコード(73〜78)は、ログを記録すると共に、元々の関数呼び出しを受けるべくメモリにロードされている、該当する関数であるFunc AA, Func AB, Func AC, Func BA, Func BB, Func BC(67〜72)を呼び出す。
【0014】
図4Aは、図3におけるIAT Patchの処理をあらわす図、図4Bはログ取得処理の流れを示すフローチャートである。説明を簡略化するために、この図ではEXEがA.DLL内のFunc AAを呼び出す際に、IAT Patchによるログ取得コードがどのように動作するかの例をあらわしている。
【0015】
EXE(図4Aの91)がFunc AAをコールすると(図4Aの94)、C.DLL内にあるログ取得コードがDLL名/関数名をメモリに保存し(図4BのステップS402)、呼び出し時刻をメモリに保存し、呼び出し時のパラメータをメモリに保存し、呼び出し時のポインタパラメータの指すメモリ内容を、別メモリに保存する(図4Aの95、図4BのステップS403)。その後C.DLLは本来呼び出されるはずであった、A.DLL(図4Aの93)内のFunc AAをコールする(図4Aの96、図4BのステップS404)。A.DLLのFunc AA処理(図4Aの97)が終了し、C.DLLに制御がリターンすると(図4Aの98)、C.DLLはリターン時の時刻をメモリに保存し、戻り値をメモリに保存し、リターン時にポインタパラメータが指すメモリ内容を、別メモリに保存する(図4Aの99)。その後、C.DLLは保存したログ情報をファイルに書き込み(図4Aの100、図4BのステップS405)、あたかもA.DLLのFunc AAが通常通りに終了したかのように、EXEにリターンする(101)。
【0016】
図5は、本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムの内部構成をあらわす図である。通常は実行形式のEXE(113)が、DLL−1(116)やDLL−2(117)内の関数を呼び出すが、ここではAPIトレーサと呼ばれるログ取得コードを埋め込み(114)、処理ログを生成している(115)。APIトレーサは、DLL−1やDLL−2の関数定義を記述したファイル(111)と、どのDLLのどの関数のインポート関数テーブルを書き換えてログを取得するかの設定シナリオ(トレースシナリオ112)を元に動作する。
【0017】
<メソッド処理に対する処理ログ取得>
次に、本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムにおいて、実行ファイルEXE(118)がCOM(Component Object Model)サーバでエクスポートされているインターフェースのインスタンス作成時に、どのようにメモリにロードされるかを説明するために、まず、図6によって、通常の状態でどのようにメモリにロードされるかを説明する。
【0018】
通常、インターフェースのインスタンス作成を行うと、COMサーバ内で、要求されたインターフェース(121, 122)と、そのメソッド(:オブジェクト指向プログラミングにおいて、オブジェクトの実行する手続きを記述したプログラム、130〜135)が作成され、それらは、メモリ上に両方がロードされる。ここで、virtual address table(仮想アドレステーブル)は作成された各インターフェース毎に作られ(118, 120)、作成要求を行ったEXEに渡される。このvirtual addres tableには各メソッドの作成されたアドレスが書かれている(124〜129)。EXEはこれら情報を利用し、各インターフェースに対して呼び出しを行う。この図では、1本のEXEがInterface A及びInterface Bの2つのインターフェースのインスタンスを作成しており、そのインターフェース内部のメソッドを使用している例を示しており、実際に使用されているメソッドは、Method AA, Method AB, Method AC, Method BA, Method BB, Method BCとなっている。
【0019】
EXEのコードが関数Method AAを呼び出す場合には、まずvirtual address table内に書かれたMethod AAのアドレス(124)が読み込まれる。ここには実際にはCOMサーバのInterface Aの一部として作成されたMethod AAコード(130)のアドレスが書かれており、そのアドレスをコールすることによって、EXEのコードはInterface AのMethod AAを呼び出すことができる。
【0020】
図7は、本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムのメモリ構成をあらわす図であり、図6とは、ログ取得用のコードに対してVTable Patch(virtual address table Patch)という手法を用いて、メソッド呼び出しをリダイレクトしているという点で異なっている。
【0021】
ログ取得が開始されると、メモリ内にはVTable Patch用のDLL(143)がロードされる。このDLLはvirtual address table(136, 138)内に書かれたメソッドのアドレスを、DLL内のログ取得コードであるMethod A'A, Method A'B, MethodA'C, Method B'A, Method B'B, Method B'Cのアドレスに書き換える(145〜150)。DLL内のMethod A'A,Method A'B, Method A'C, Method B'A, Method B'B, Method B'Cのコード(157〜162)は、ログを記録すると共に、元々のメソッド呼び出しを受けるべくメモリにロードされている、該当するメソッドであるMethod AA, Method AB, Method AC, Method BA, Method BB, MethodBC(157〜162)を呼び出す。
【0022】
図8Aは、図7におけるVTable Patchの処理をあらわす図、図8Bはログ取得処理の流れを示すフローチャートである。説明を簡略化するために、この図ではEXEがCOMサーバ内のInterface AのMethodAAを呼び出す際に、VTable Patchによるログ取得コードがどのように動作するかの例をあらわしている。
【0023】
EXE(図8Aの163)がMethod AAをコールすると(図8Aの166)、DLL内にあるログ取得コードがモジュール名/インターフェース名/メソッド名をメモリに保存し(図8BのステップS802)、呼び出し時刻をメモリに保存し、呼び出し時のパラメータをメモリに保存し、呼び出し時のポインタパラメータの指すメモリ内容を、別メモリに保存する(図8Aの167、図8BのステップS803))。その後DLLは本来呼び出されるはずであった、COMサーバ(図8Aの165)内のMethod AAをコールする(図8Aの168、図8BのステップS804))。COMサーバのMethod AA処理(図8Aの169)が終了し、DLLに制御がリターンすると(図8Aの170)、DLLはリターン時の時刻をメモリに保存し、戻り値をメモリに保存し、リターン時にポインタパラメータが指すメモリ内容を、別メモリに保存する(図8Aの171)。その後、DLLは保存したログ情報をファイルに書き込み(図8Aの172、図8BのステップS805)、あたかもCOMサーバのMethod AAが通常通りに終了したかのように、EXEにリターンする(図8Aの173)。
【0024】
図9は、本発明の第1の実施形態にかかるソフトウェア評価システムの内部構成をあらわす図である。通常は実行形式のEXE(176)が、COMサーバ1(179)やCOMサーバ2(180)内のメソッドを呼び出すが、ここではAPIトレーサと呼ばれるログ取得コードを埋め込み(177)、処理ログを生成している(178)。APIトレーサは、COMサーバ1(179)やCOMサーバ2の関数定義を記述したファイル(174)と、どのCOMサーバのどのインターフェースのどのメソッドのvirtual address tableを書き換えてログを取得するかの設定シナリオ(175)を元に動作する。
【0025】
<実施例>
図10は、本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムに対して、それぞれの関数及びメソッドのパラメータの形式や、戻り値の形式を指示する、関数定義ファイルの例を示す図である。DLL/インターフェース名及び関数/メソッド名を記述し(「関数/メソッド」とは、「関数またはメソッド」の意、以下同じ)、その関数/メソッドに対する、パラメータ及び戻り値の型が示されている。本実施形態にかかるログ取得方法を実現するソフトウェア評価システムは、この関数定義ファイルによって指示された内容を元に、それぞれの関数/メソッドがどのようなパラメータ/戻り値を有しているかを判断し、その内容をログとして取得する。
【0026】
図11は、図10に示した関数定義ファイルを用いて、本発明の実施形態にかかるソフトウェア評価システムで取得した、ログの一例を示す図である。それぞれの呼び出しに対して、関数/メソッドが呼び出された時刻、及びその際のパラメータ/戻り値が、ログとして生成される。
【0027】
以上の説明から明らかなように、本実施形態にかかるログ取得方法によれば、複数にモジュール分けされたソフトウエアの処理ログの取得において、モジュール自体に変更を加えることなく、モジュール内に用意された関数/メソッドの呼び出しをログとして記録することが可能となり、処理ログ取得のための作業負荷を低減することが可能となる。また、生成されるログは、時間順のログとして取得することができ、ログの解析が容易となるため、ソフトウェアの障害の原因の解析のための工数を削減することが可能となる。
【0028】
【第2の実施形態】
本実施形態では、さらにvirtual address tableにプレースギャップ(Place Gap)が存在する場合の処理について説明する。
【0029】
図12は、本発明の第2の実施形態にかかるログ取得方法を実現するソフトウェア評価システムに対して、virtual address tableの内部にプレースギャップが存在する場合に、インターフェースのインスタンス作成時にどのようにメモリにロードされるかの例である。図12は、図6と関連付けながら説明する。図6の例と異なるのは、Method BBとMethod BCに関する部分である。Interface Bに対するVTable(203)には、Method BBが置かれているべき部分に、プレースギャップと呼ばれるダミールーチンへのアドレス(211)が置かれており、このInterface Bを派生させてMethod BBを実装した際にも、VTable上のMethod BCへのアドレス(212)のオフセットが変わらないようになっている。すなわちプレースギャップとは、仮想関数を持つインターフェースに対して、派生クラスのために予約されたVTable上のエリアを指す。派生前のInterface Bにおいては、Method BBは実装されていないため、実際のコードはMethod BAとMethod BCの間にはギャップは存在しない(216、217)。
【0030】
図13は、本発明の第2の実施形態にかかるログ取得方法を実現するソフトウェア評価システムに対して、virtual address tableの内部にプレースギャップが存在する場合に、ログ取得コードがどのようなメモリ配置で置かれるかをあらわす図であり、本実施形態を最もよくあらわすものである。図13は、図7と関連付けながら説明する。
【0031】
ログ取得が開始されると、メモリ内にはVTable Patch用のDLL(228)がロードされる。このDLLはvirtual address table(221、223)内に書かれたメソッドのアドレスを、DLL内のログ取得コードであるMethod A'A, Method A'B, Method A'C, Method B'A, Method B'Cのアドレスに書き換える(230〜233、235)。図7と異なるのは、プレースギャップ(234)を自動検知して、その部分に関しては書き換えを行わないことであり、更に、Method B'Bのコードがメモリ上に配置されないことである。DLL内のMethod A'A, Method A'B, Method A'C, Method B'A, Method B'Cのコード(241〜245)は、ログを記録すると共に、元々のメソッド呼び出しを受けるべくメモリにロードされている、該当するメソッドであるMethod AA, Method AB, Method AC, Method BA, Method BC(236〜240)を呼び出す。
【0032】
図14は、本発明の第2の実施形態にかかるログ取得方法を実現するソフトウェア評価システムにおける、メモリロード時の処理の流れを示す図であり、図13と共に、本実施形態の特徴を最もよくあらわすものである。
【0033】
処理が開始されると(ステップS1)、自らがIndexとして参照するメモリエリアをゼロに初期化する(ステップS2)。このIndexは、関数定義ファイルに記載されているメソッドの順番をあらわすものである。次に、関数定義ファイルに書かれたIndex nのメソッドの属性をオペレーティングシステムから読み込み(ステップS3)、属性情報からその関数が仮想関数であるかどうかを判断する(ステップS4)。仮想関数である場合、オペレーティングシステム(OS)から、Index nのメソッドに対するプレースギャップのオフセットpを読み込み(ステップS5)、pが真の値であるかどうか、すなわちヌルポインタでないかどうかを判断する(ステップS6)。ここではpが真の値かによって、プレースギャップが存在するかどうかを判断しているが、例えば0xFFFFFFFFといった規定値を「プレースギャップが存在しない」という意味と定義しているオペレーティングシステムに対しては、同様に0xFFFFFFFFかどうかの判断を行う。
【0034】
プレースギャップが存在しない場合、もしくはステップS4で仮想関数でないと判断した場合には、ログ取得コードを図7のように生成する。具体的には、メモリ上にログ取得コードを置き(ステップS7)、オペレーティングシステムからIndex nのメソッドに対するVTable上のオフセットmを読み込み(ステップS8)、ステップS9にてオフセットmのアドレスをログ取得コードのアドレスに書き換える。
【0035】
ステップS9が終了した場合には、Index nをインクリメントする(ステップS10)。また、ステップS6においてプレースギャップが存在すると判断された場合は、Index nをインクリメントする(ステップS10)。つまり、この場合にはメモリ内のプレースギャップの領域は、ログ取得であるメソッドのアドレスに書き換えられないこととなる。この処理は、メモリロード処理が終了するまで(ステップS11)続行される。
【0036】
図15は、本発明の第2の実施形態にかかるログ取得方法を実現するソフトウェア評価システムに対して、それぞれの関数及びメソッドのパラメータの形式や、戻り値の形式を指示する、関数定義ファイルの例である。DLL/インターフェース名及び関数/メソッド名を記述し、その関数/メソッドに対する、パラメータ及び戻り値の型が示されている。本実施形態にかかるログ取得方法を実現するソフトウェア評価システムは、この関数定義ファイルによって指示された内容を元に、それぞれの関数/メソッドがどのようなパラメータ/戻り値を有しているかを判断し、その内容をログとして取得する。
【0037】
なお、プレースギャップに関する定義は、通常オペレーティングシステムが提供している機能であるため、この関数定義ファイルには記述されない。このため、図15は図10と同様になる。
【0038】
図16は、図15に示した関数定義ファイルを用いて、図12に示したプレースギャップを持つインターフェースに対して、本発明の第2の実施形態にかかるログ取得方法を実現するソフトウェア評価システムで取得した、ログの一例である。それぞれの呼び出しに対して、関数/メソッドが呼び出された時刻、及びその際のパラメータ/戻り値が、ログとして生成される。なお、VTable上にプレースギャップがあるにも関わらず、プレースギャップの後に配置されたMethod BCの呼び出しに対するログが取得できているのは、図14で示した流れ、すなわち本実施形態を施したことによるものであり、プレースギャップの検知が行われない限り、通常はMethod BCのようにプレースギャップの後に配置されたメソッドに関しては、ログを取得できない。
【0039】
以上の説明から明らかなように、本実施形態によれば、virtual address tableのプレースギャップを、オペレーティングシステムから返される情報から自動的に判断することで、virtual address tableにプレースギャップがあっても、ログの取得が可能となる。
【0040】
【第3の実施形態】
通常、プレースギャップは上記第2の実施形態のように、クラスの派生に伴う仮想関数の解決のために用いられるが、それ以外に使われるケースも存在する。
【0041】
図17は、本発明の第3の実施形態にかかるログ取得方法を実現するソフトウェア評価システムにおける、メモリロード時の処理の流れを示す図であり、図14とは別の一例である。
【0042】
処理が開始されると(ステップS21)、自らがIndexとして参照するメモリエリアをゼロに初期化する(ステップS22)。このIndexは、関数定義ファイルに記載されているメソッドの順番をあらわすものである。次にオペレーティングシステムから、Index nのメソッドに対するプレースギャップのオフセットpを読み込み(ステップS23)、pが真の値であるかどうか、すなわちヌルポインタでないかどうかを判断する(ステップS24)。ここではpが真の値かによって、プレースギャップが存在するかどうかを判断しているが、例えば0xFFFFFFFFといった規定値を「プレースギャップが存在しない」という意味と定義しているオペレーティングシステムに対しては、同様に0xFFFFFFFFかどうかの判断を行う。
【0043】
プレースギャップが存在しない場合、もしくはステップS24で仮想関数でないと判断した場合には、ログ取得コードを図7のように生成する。具体的には、メモリ上にログ取得コードを置き(ステップS25)、オペレーティングシステムからIndex nのメソッドに対するVTable上のオフセットmを読み込み(ステップS26)、オフセットmのアドレスをログ取得コードのアドレスに書き換える(ステップS27)。
【0044】
ステップS27が終了した場合には、Index nをインクリメントする(ステップS10)。また、ステップS24においてプレースギャップが存在すると判断された場合は、Index nをインクリメントする(ステップS28)。つまり、この場合には、メモリ内のプレースギャップの領域は、ログ取得コードであるメソッドのアドレスに書き換えられないこととなる。この処理は、メモリロード処理が終了するまで(ステップS29)続行される。
【0045】
この処理によって、プレースギャップが仮想関数以外のためのものであった場合でも、図16に示されるような、プレースギャップの後に配置されたメソッドの呼び出しに対するログを取得することが可能である。
【0046】
【第4の実施形態】
本実施形態では、メソッド内部でインターフェースのインスタンスが生成された場合の処理について説明する。
【0047】
本実施形態では、すべてのメソッド呼び出しにおけるパラメータ及び戻り値について、ログ取得対象のインターフェースのパラメータ乃至戻り値であるかどうかを判断し、判断した結果、ログ取得対象のインターフェースである場合に、別途ログ取得コードをメモリにロードしてそのログ取得コードのアドレスにパラメータ乃至戻り値を書き換えて関数をリターンさせることにより、メソッド内部でインターフェースのインスタンスが生成された場合であっても、そのインスタンス内部のメソッドに対する呼び出しに関するログを、自動的に記録できるようにする。以下に詳細を述べる。
【0048】
図18は、本発明の第4の実施形態にかかるログ取得方法を実現するソフトウェア評価システムに対して、それぞれの関数及びメソッドのパラメータの形式や、戻り値の形式を指示する、関数定義ファイルの例である。DLL名及び関数/メソッド名を記述し、その関数/メソッドに対する、パラメータ及び戻り値の型が示されている。本発明の実施形態にかかるソフトウェア評価システムは、この関数定義ファイルによって指示された内容を元に、それぞれの関数/メソッドがどのようなパラメータ/戻り値を有しているかを判断し、その内容をログとして取得する。なお、本実施形態では、Interface AのMethod ABが、出力パラメータとして、Method AB内部で生成されたInterface Bのインスタンスへのポインタを返すようになっている。また、Interface AのMethod ACが、戻り値として、Method AB内部で生成されたInterface Bのインスタンスへのポインタを返すようになっている。DLL内にコードとして記述されたInterface B内のメソッドを、EXEが呼び出すためには、先にMethod AB乃至Method ACを用いて、Interface Bのインスタンスを生成し、そのインスタンスのメモリアドレスを知っておく必要がある。
【0049】
図19は、図18に示した関数定義ファイルを用いて、本発明の実施形態にかかるソフトウェア評価システムで取得した、ログの一例である。それぞれの呼び出しに対して、関数/メソッドが呼び出された時刻、及びその際のパラメータ/戻り値が、ログとして生成される。
【0050】
図20は、本発明の実施形態にかかるログ取得方法を実現するソフトウェア評価システムにおける、処理の流れを示す図である。
【0051】
処理が開始されると(ステップS2001)、設定された関数/メソッドが呼び出されるたびに、DLL名/インターフェース名/メソッド名/呼び出し時の時刻をHDDに保存し(ステップS2002)、その呼び出しに対してのパラメータをHDDに保存して(ステップS2003)。本体のメソッドを呼び出す(ステップS2004)。
【0052】
メソッド内部の処理が終了すると、DLL名/インターフェース名/メソッド名/終了時の時刻をHDDに保存し(ステップS2005)、その呼び出しに対してのパラメータ及び戻り値をHDDに保存する(ステップS2006)。
【0053】
次に、パラメータがインターフェースへのポインタとして定義されているかどうかを、図18に示した関数定義ファイルに基づいて判断し(ステップS2007)、定義されている場合は、メモリ上にそのポインタに対するログ取得コードを生成して(ステップS2008)、該当するパラメータ乃至戻り値を、ログ取得コードのメモリアドレスに書き換える(ステップS2009)。ステップS2009の処理が終了するか、もしくはステップS2007においてインターフェースポインタとして定義されていないことを判断した場合は、関数のリターン処理を行う(ステップS2010)。
【0054】
この処理は、評価対象となるプログラムが終了するまで(ステップS2011)続行される。
【0055】
メソッドがパラメータ乃至戻り値としてEXEに返した、インターフェースのインスタンスへのポインタを、ログ取得コードにリダイレクトすることにより、以後そのポインタを用いて呼び出されたメソッドの呼び出し、例えば図18のInterface BのMethod BAの呼び出しに対しても、図19のようにパラメータ/戻り値/時刻などを記録することが可能となる。
【0056】
【第5の実施形態】
図21は、本発明の実施形態にかかるソフトウェア評価システムにおける、処理の流れを示す図であり、図20とは別の一例である。
【0057】
処理が開始されると(ステップS2121)、設定された関数/メソッドが呼び出されるたびに、DLL名/インターフェース名/メソッド名/呼び出し時の時刻をHDDに保存し(ステップS2122)、その呼び出しに対してのパラメータをHDDに保存して(ステップS2123)。本体のメソッドを呼び出す(ステップS2124)。
【0058】
メソッド内部の処理が終了すると、DLL名/インターフェース名/メソッド名/終了時の時刻をHDDに保存し(ステップS2125)、その呼び出しに対してのパラメータ及び戻り値をHDDに保存する(ステップS2126)。次に、パラメータがインターフェースへのポインタとして定義されているかどうかを、図18に示した関数定義ファイルに基づいて判断し(ステップS2127)、定義されている場合は、そのインターフェースがトレースシナリオに書かれる。
【0059】
トレース対象(ログ取得対象)かどうかを判断する(ステップS2128、ステップS2129)。トレース対象であると判断した場合、メモリ上にそのポインタに対するログ取得コードを生成して(ステップS2130)、該当するパラメータ乃至戻り値を、ログ取得コードのメモリアドレスに書き換える(ステップS2131)。ステップS2131の処理が終了するか、もしくはステップS2127においてインターフェースポインタとして定義されていないことを判断した場合か、もしくはステップS2129でトレース対象でないことを判断した場合は、関数のリターン処理を行う(ステップS2132)。
【0060】
この処理は、評価対象となるプログラムが終了するまで(ステップS2133)続行される。
【0061】
上記第4の実施形態と異なり、第5の実施形態では、パラメータ乃至戻り値がトレース対象の場合のみ、ログ取得コードの生成とアドレスのリダイレクトを行うため、使用メモリの節約と、ログを取得したいEXE及びDLLの処理速度低下防止に効果がある。
【0062】
【他の実施形態】
なお、本発明は、複数の機器(例えばホストコンピュータ,インタフェイス機器、リーダ、プリンタなど)から構成されるシステムに適用しても、一つの機器からなる装置(例えば、複写機、ファクシミリ装置など)に適用してもよい。
【0063】
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読出し実行することによっても、達成されることは言うまでもない。
【0064】
この場合、記憶媒体から読出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【0065】
プログラムコードを供給するための記憶媒体としては、例えば、フロッピ(登録商標)ディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、磁気テープ、不揮発性のメモリカード、ROMなどを用いることができる。
【0066】
また、コンピュータが読出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム)などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【0067】
さらに、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【0068】
【発明の効果】
以上説明したように本発明によれば、複数にモジュール分けされたソフトウェアの処理ログを容易に取得でき、かつ、ソフトウェアの障害の原因の解析のための工数を削減することが可能となる。
【図面の簡単な説明】
【図1】本発明の第1の実施形態にかかるログ取得方法を実現するコンピュータ(ソフトウェア評価システム)の構成をあらわす図である。
【図2】本発明の第1の実施形態にかかるログ取得方法を説明するためにあらわした、関数ロード時の通常のメモリ構成をあらわす図である。
【図3】本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムのIAT Patch使用時のメモリ構成をあらわす図である。
【図4A】本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムのIAT Patchを使用時の状態を示す図である。
【図4B】本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムのログ取得処理の流れを示す図である。
【図5】本発明の第1の実施形態にかかるソフトウェア評価システムのIAT Patchを使用時の内部構成をあらわす図である。
【図6】本発明の第1の実施形態にかかるログ取得方法を説明するためにあらわした、COMサーバのインターフェースのインスタンス作成時の通常のメモリ構成をあらわす図である。
【図7】本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムのVTable Patch使用時のメモリ構成をあらわす図である。
【図8A】本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムのVTable Patchを使用時の状態を示す図である。
【図8B】本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムのログ取得処理の流れを示す図である。
【図9】本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムの、内部構成をあらわす図である。
【図10】本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムに対して、それぞれの関数及びメソッドのパラメータの形式や、戻り値の形式を指示する、関数定義ファイルの例を示す図である。
【図11】本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムで取得した、ログの一例を示す図である。
【図12】本発明の第2の実施形態にかかるログ取得方法を実現するソフトウェア評価システムに対して、virtual address tableの内部にプレースギャップが存在する場合に、インターフェースのインスタンス作成時にどのようにメモリにロードされるかの例を示す図である。
【図13】本発明の第2の実施形態にかかるログ取得方法を実現するソフトウェア評価システムに対して、virtual address tableの内部にプレースギャップが存在する場合に、ログ取得コードがどのようなメモリ配置で置かれるかをあらわす図である。
【図14】本発明の第2の実施形態にかかるログ取得方法を実現するソフトウェア評価システムにおける、処理の流れを示す図である。
【図15】本発明の第2の実施形態にかかるログ取得方法を実現するソフトウェア評価システムに対して、それぞれの関数及びメソッドのパラメータの形式や、戻り値の形式を指示する、関数定義ファイルの例を示す図である。
【図16】本発明の第2の実施形態にかかるログ取得方法を実現するソフトウェア評価システムで取得した、ログの一例を示す図である。
【図17】本発明の第3の実施形態にかかるログ取得方法を実現するソフトウェア評価システムにおける、メモリロード時の処理の流れ図である。
【図18】本発明の第4の実施形態にかかるログ取得方法を実現するソフトウェア評価システムに対して、それぞれの関数及びメソッドのパラメータの形式や、戻り値の形式を指示する、関数定義ファイルの例を示す図である。
【図19】本発明の第4の実施形態にかかるログ取得方法を実現するソフトウェア評価システムで取得した、ログの一例を示す図である。
【図20】本発明の第4の実施形態にかかるログ取得方法を実現するソフトウェア評価システムにおける、処理の流れを示す図である。
【図21】本発明の第5の実施形態にかかるログ取得方法を実現するソフトウェア評価システムにおける、処理の流れを示す図である。
【符号の説明】
1:CPU
2:チップセット
3:RAM
4:ハードディスクコントローラ
5:ディスプレイコントローラ
6:ハードディスクドライブ
7:CD−ROMドライブ
8:ディスプレイ
11:CPUとチップセットを繋ぐ信号線
12:チップセットとRAMを繋ぐ信号線
13:チップセットと各種周辺機器とを繋ぐ周辺機器バス
14:ハードディスクコントローラとハードディスクドライブを繋ぐ信号線
15:ハードディスクコントローラとCD−ROMドライブを繋ぐ信号線
16:ディスプレイコントローラとディスプレイを繋ぐ信号線[0001]
BACKGROUND OF THE INVENTION
The present invention relates to a technique for acquiring a processing log of software divided into a plurality of modules.
[0002]
[Prior art]
In the past, for software failures with low recall, the cause of the failure has been identified by taking a software processing log and analyzing the processing log, and countermeasures have been taken.
[0003]
[Problems to be solved by the invention]
However, the acquisition of the conventional processing log has the following problems.
(1) In order to continue to acquire logs even in the user's operating environment, the software module itself has to be modified and a processing log acquisition routine has to be added, resulting in a heavy workload for acquiring the processing logs.
(2) Since processing log acquisition is performed for each module, the generated log is for each module, and it is difficult to acquire the entire software processing as a log in time order. For this reason, the prospect as the whole processing log was bad, and it took man-hours to analyze the log and discover the cause of the failure.
[0004]
The present invention has been made in view of the above problems, and can easily acquire a software processing log divided into a plurality of modules, and can reduce the number of steps for analyzing the cause of a software failure. An object of the present invention is to provide a simple log acquisition method, a program for realizing the method by a computer, and a storage medium storing the program.
[0005]
[Means for Solving the Problems]
In order to achieve the above object, a log acquisition method according to the present invention has the following configuration. That is,
A dynamic link library storing functions, an import function address table storing addresses of the functions, and a target program that calls and executes the functions in the dynamic link library; The Program storage means for storing; A storage medium for storing the program; Log recording means for recording a log; and execution means for executing a program, wherein the execution means Storage media A log acquisition method for acquiring a log during execution of the target program in an information processing apparatus comprising a rewriting means implemented by executing a program stored in the memory and a calling means,
The rewriting means loads a log acquisition function corresponding to each function in the dynamic link library into the dynamic link library and stores it in the import function address table before executing the target program. Rewriting the address of each function to the address of the corresponding function for log acquisition;
The call means is configured to acquire the log based on the address of the corresponding function for log acquisition after rewriting on the import function address table for the function to be called that the target program is to call. Starting a log acquisition means realized by calling a function and causing the execution means to execute;
The log acquisition unit records a log related to a call by the calling unit in the log recording unit, calls the function to be called corresponding to the function for log acquisition called by the calling unit, and Causing the execution means to execute a function to be called;
The log acquisition unit includes a step of receiving an execution result of the function to be called, recording a log related to the execution result in the log recording unit, and passing the execution result to the target program.
[0006]
DETAILED DESCRIPTION OF THE INVENTION
[First Embodiment]
In this embodiment, an import function address stored in a memory or a virtual function address table (Virtual Address Table), which is a mechanism when a function existing in another module is called from one module, is used. By hooking function calls between modules and recording them in the log, it is possible to acquire the entire software process as a log in time order without modifying the software module itself. . This will be specifically described below.
[0007]
<System configuration>
FIG. 1 is a diagram showing the configuration of a computer (software evaluation system) that implements a log acquisition method according to each embodiment of the present invention. In order to simplify the explanation, in this embodiment, it is assumed that the software evaluation system is built inside one PC, but the feature of the log acquisition method of the present invention is built inside one PC. It is effective regardless of whether it is constructed as a network system on a plurality of PCs.
[0008]
A computer on which this software evaluation system is mounted includes a
[0009]
<Acquire processing log for function processing>
In order to explain the software evaluation system for realizing the log acquisition method according to the first embodiment of the present invention, first, how the software divided into a plurality of modules is loaded into the memory in a normal state according to FIG. Explain how.
[0010]
Usually, the software divided into a plurality of modules is divided into an executable file EXE (23) that performs overall control and a dynamic link library DLL (27) that exists as a module and plays a complementary role of EXE. Is loaded with both EXE and DLL. EXE consists of a code segment (28), a data segment (29), and an import function address table (22). Furthermore, the import function address table is divided by the DLL to which the function belongs (21, 24), and the address at which each function is loaded is written for each DLL (30-35). The entity of the DLL function is loaded separately for each DLL (25, 26), and each function is loaded as a part of the corresponding DLL (36-41). This figure shows an example in which one EXE uses functions in two dynamic link libraries of A.DLL and B.DLL, and the functions actually used are Func AA, Func AB, and Func. AC, Func BA, Func BB, and Func BC.
[0011]
When the code in the EXE code segment calls the function Func AA, the Func AA address (30) written in the import function address table is first read. Here, the address of the Func AA code (36) actually read as part of A.DLL is written, and by calling that address, the EXE code calls Func AA of A.DLL. be able to.
[0012]
FIG. 3 is a diagram showing a memory configuration of the software evaluation system that implements the log acquisition method according to the first embodiment of the present invention. FIG. 2 is different from FIG. 2 in terms of IAT Patch (Import Address) for the log acquisition code. It is different in that the function call is redirected using a technique called “Table Patch”.
[0013]
When log acquisition is started, C.DLL (58), which is a DLL for IAT Patch, is loaded into the memory. C.DLL is the address of the function written in the import function address table (52), and the address of the log acquisition code in C.DLL is Func CAA, Func CAB, Func CAC, Func CBA, Func CBB, Func CBC (61-66). Func CAA, Func CAB, Func CAC, Func CBA, Func CBB, and Func CBC code (73-78) in C. DLL are logged and loaded into memory to receive the original function call The corresponding functions Func AA, Func AB, Func AC, Func BA, Func BB, and Func BC (67 to 72) are called.
[0014]
4A is a diagram showing the processing of the IAT Patch in FIG. 3, and FIG. 4B is a flowchart showing the flow of the log acquisition processing. In order to simplify the explanation, this figure shows an example of how the log acquisition code by IAT Patch operates when EXE calls Fun AA in A.DLL.
[0015]
When EXE (91 in FIG. 4A) calls Func AA (94 in FIG. 4A), the log acquisition code in C.DLL saves the DLL name / function name in memory (step S402 in FIG. 4B), and the call time Is stored in the memory, the parameter at the time of calling is stored in the memory, and the memory content pointed to by the pointer parameter at the time of calling is stored in another memory (95 in FIG. 4A, step S403 in FIG. 4B). After that, C.DLL calls Func AA in A.DLL (93 in FIG. 4A), which was supposed to be called (96 in FIG. 4A, step S404 in FIG. 4B). When the A.DLL Func AA process (97 in FIG. 4A) ends and control returns to C.DLL (98 in FIG. 4A), C.DLL stores the return time in memory and stores the return value in memory. The memory contents pointed to by the pointer parameter at the time of return are stored in another memory (99 in FIG. 4A). Thereafter, C.DLL writes the saved log information to a file (100 in FIG. 4A, step S405 in FIG. 4B), and returns to EXE as if A.DLL Func AA ended normally ( 101).
[0016]
FIG. 5 is a diagram showing the internal configuration of the software evaluation system that implements the log acquisition method according to the first embodiment of the present invention. Normally, the executable EXE (113) calls a function in the DLL-1 (116) or DLL-2 (117). Here, a log acquisition code called an API tracer is embedded (114) to generate a processing log. (115). The API tracer is based on a file (111) describing function definitions of DLL-1 and DLL-2, and a setting scenario (trace scenario 112) of rewriting the import function table of which function of which DLL and acquiring the log. To work.
[0017]
<Acquire process log for method process>
Next, in the software evaluation system that implements the log acquisition method according to the first embodiment of the present invention, when an instance of an interface in which the execution file EXE (118) is exported by a COM (Component Object Model) server is created, In order to explain how the data is loaded into the memory, first, how it is loaded into the memory in a normal state will be described with reference to FIG.
[0018]
Normally, when an instance of an interface is created, the requested interface (121, 122) and its method (: a program describing a procedure executed by an object in object-oriented programming, 130 to 135) in the COM server are displayed. They are both loaded into memory. Here, a virtual address table (virtual address table) is created for each created interface (118, 120), and passed to the EXE that made the creation request. In this virtual address table, addresses where each method is created are written (124 to 129). EXE uses these information to make a call to each interface. In this figure, one EXE creates instances of two interfaces, Interface A and Interface B, and shows an example of using the methods inside that interface. , Method AA, Method AB, Method AC, Method BA, Method BB, Method BC.
[0019]
When the EXE code calls the function Method AA, the address (124) of the Method AA written in the virtual address table is first read. Here, the address of the Method AA code (130) created as part of Interface A of the COM server is actually written, and by calling this address, the code of EXE executes Method AA of Interface A. Can be called.
[0020]
FIG. 7 is a diagram showing a memory configuration of the software evaluation system that implements the log acquisition method according to the first embodiment of the present invention. FIG. 6 is different from FIG. 6 in terms of VTable Patch (virtual address) for the log acquisition code. This method is different in that the method call is redirected using a method called “table Patch”.
[0021]
When log acquisition is started, a DLL (143) for VTable Patch is loaded in the memory. This DLL uses the address of the method written in the virtual address table (136, 138) as the method A'A, Method A'B, Method A'C, Method B'A, Method B, which is the log acquisition code in the DLL. Rewrite to the address of 'B, Method B'C (145-150). Method A'A, Method A'B, Method A'C, Method B'A, Method B'B, Method B'C code (157-162) in the DLL records the log and the original method Method AA, Method AB, Method AC, Method BA, Method BB, MethodBC (157 to 162), which are the corresponding methods loaded in the memory to receive the call, are called.
[0022]
8A is a diagram showing the processing of the VTable Patch in FIG. 7, and FIG. 8B is a flowchart showing the flow of the log acquisition processing. In order to simplify the explanation, this figure shows an example of how the log acquisition code by VTable Patch operates when EXE calls MethodAA of Interface A in the COM server.
[0023]
When EXE (163 in FIG. 8A) calls Method AA (166 in FIG. 8A), the log acquisition code in the DLL stores the module name / interface name / method name in memory (step S802 in FIG. 8B) and calls The time is saved in the memory, the parameter at the time of calling is saved in the memory, and the memory content pointed to by the pointer parameter at the time of calling is saved in another memory (167 in FIG. 8A, step S803 in FIG. 8B). Thereafter, the DLL calls Method AA in the COM server (165 in FIG. 8A), which was supposed to be called (168 in FIG. 8A, step S804 in FIG. 8B)). When the Method AA process (169 in FIG. 8A) of the COM server ends and control returns to the DLL (170 in FIG. 8A), the DLL stores the return time in the memory, stores the return value in the memory, and returns. The memory content pointed to by the pointer parameter is saved in another memory (171 in FIG. 8A). Thereafter, the DLL writes the saved log information to the file (172 in FIG. 8A, step S805 in FIG. 8B), and returns to EXE as if Method AA of the COM server was terminated normally (in FIG. 8A). 173).
[0024]
FIG. 9 is a diagram showing the internal configuration of the software evaluation system according to the first embodiment of the present invention. Normally, the execution format EXE (176) calls a method in the COM server 1 (179) or the COM server 2 (180). Here, a log acquisition code called an API tracer is embedded (177) to generate a processing log. (178). The API tracer sets a file (174) in which the function definitions of the COM server 1 (179) and the
[0025]
<Example>
FIG. 10 is a diagram of a function definition file for instructing the software evaluation system that implements the log acquisition method according to the first embodiment of the present invention, the format of each function and method parameter, and the format of the return value. It is a figure which shows an example. Describes the DLL / interface name and function / method name ("function / method" means "function or method", the same applies hereinafter), and indicates the parameter and return type for that function / method. . The software evaluation system that implements the log acquisition method according to the present embodiment determines what parameters / return values each function / method has based on the contents instructed by the function definition file. , Get the contents as a log.
[0026]
FIG. 11 is a diagram showing an example of a log acquired by the software evaluation system according to the embodiment of the present invention using the function definition file shown in FIG. For each call, the time when the function / method is called and the parameters / return values at that time are generated as a log.
[0027]
As is clear from the above description, according to the log acquisition method according to the present embodiment, the acquisition of the processing log of the software divided into a plurality of modules is prepared in the module without changing the module itself. The function / method calls can be recorded as a log, and the work load for acquiring the processing log can be reduced. In addition, the generated log can be acquired as a chronological log and the log can be easily analyzed. Therefore, the number of steps for analyzing the cause of the software failure can be reduced.
[0028]
[Second Embodiment]
In the present embodiment, a process when a place gap (Place Gap) exists in the virtual address table will be described.
[0029]
FIG. 12 shows how a memory is created when an interface instance is created when a place gap exists in the virtual address table for the software evaluation system that implements the log acquisition method according to the second embodiment of the present invention. Is an example of what is loaded. FIG. 12 is described in association with FIG. What is different from the example of FIG. 6 is a portion related to Method BB and Method BC. In the VTable (203) for Interface B, an address (211) to a dummy routine called a place gap is placed in the portion where Method BB should be placed, and Method BB is implemented by deriving Interface B. In this case, the offset of the address (212) to the Method BC on the VTable is not changed. That is, the place gap refers to an area on the VTable reserved for a derived class with respect to an interface having a virtual function. In the interface B before the derivation, the Method BB is not implemented, so that there is no gap between the Method BA and the Method BC in the actual code (216, 217).
[0030]
FIG. 13 shows what kind of memory arrangement the log acquisition code has when a place gap exists in the virtual address table for the software evaluation system that implements the log acquisition method according to the second embodiment of the present invention. It is a figure showing whether it is placed, and this embodiment is best shown. FIG. 13 is described in association with FIG.
[0031]
When log acquisition is started, a DLL (228) for VTable Patch is loaded in the memory. This DLL uses the address of the method written in the virtual address table (221, 223) as the method A'A, Method A'B, Method A'C, Method B'A, Method which is the log acquisition code in the DLL. Rewrite to the address of B′C (230 to 233, 235). The difference from FIG. 7 is that the place gap (234) is automatically detected and rewriting is not performed for that portion, and the code of Method B′B is not arranged in the memory. Method A'A, Method A'B, Method A'C, Method B'A, Method B'C code (241-245) in the DLL records the log and also stores the original method call. Method AA, Method AB, Method AC, Method BA, and Method BC (236 to 240), which are the corresponding methods loaded in (1), are called.
[0032]
FIG. 14 is a diagram showing a flow of processing at the time of memory loading in the software evaluation system that implements the log acquisition method according to the second embodiment of the present invention, and together with FIG. It is what you represent.
[0033]
When the process is started (step S1), a memory area that is referred to as an index is initialized to zero (step S2). This Index represents the order of methods described in the function definition file. Next, the attribute of the Index n method written in the function definition file is read from the operating system (step S3), and it is determined from the attribute information whether the function is a virtual function (step S4). If the function is a virtual function, the offset p of the place gap for the method of Index n is read from the operating system (OS) (step S5), and it is determined whether p is a true value, that is, whether it is not a null pointer ( Step S6). Here, whether or not a place gap exists is determined based on whether or not p is a true value. However, for an operating system in which a defined value such as 0xFFFFFFFF is defined as meaning that there is no place gap, for example. Similarly, it is determined whether it is 0xFFFFFFFF.
[0034]
If there is no place gap, or if it is determined in step S4 that it is not a virtual function, a log acquisition code is generated as shown in FIG. Specifically, the log acquisition code is placed in the memory (step S7), the offset m on the VTable for the Index n method is read from the operating system (step S8), and the address of the offset m is acquired in step S9 as the log acquisition code. Rewrite to the address.
[0035]
When step S9 is completed, Index n is incremented (step S10). If it is determined in step S6 that there is a place gap, Index n is incremented (step S10). That is, in this case, the place gap area in the memory cannot be rewritten to the address of the method for log acquisition. This process is continued until the memory load process is completed (step S11).
[0036]
FIG. 15 is a diagram of a function definition file for instructing the software evaluation system that implements the log acquisition method according to the second embodiment of the present invention, the format of each function and method parameter, and the format of the return value. It is an example. The DLL / interface name and function / method name are described, and the parameter and return type for the function / method are shown. The software evaluation system that implements the log acquisition method according to the present embodiment determines what parameters / return values each function / method has based on the contents instructed by the function definition file. , Get the contents as a log.
[0037]
Note that definitions regarding place gaps are not provided in this function definition file because they are functions normally provided by the operating system. Therefore, FIG. 15 is similar to FIG.
[0038]
FIG. 16 is a software evaluation system that implements the log acquisition method according to the second embodiment of the present invention for the interface having the place gap shown in FIG. 12 using the function definition file shown in FIG. It is an example of the acquired log. For each call, the time when the function / method is called and the parameters / return values at that time are generated as a log. It should be noted that the log for the method BC call placed after the place gap can be acquired even though there is a place gap on the VTable, that is, the flow shown in FIG. As long as the place gap is not detected, it is usually impossible to obtain a log for a method arranged after the place gap, such as Method BC.
[0039]
As is clear from the above description, according to the present embodiment, by automatically determining the place gap of the virtual address table from the information returned from the operating system, even if there is a place gap in the virtual address table, Log acquisition is possible.
[0040]
[Third Embodiment]
Normally, the place gap is used for resolving a virtual function accompanying the derivation of a class as in the second embodiment, but there are cases where it is used other than that.
[0041]
FIG. 17 is a diagram showing a processing flow at the time of memory loading in the software evaluation system that implements the log acquisition method according to the third embodiment of the present invention, which is an example different from FIG.
[0042]
When the process is started (step S21), the memory area referred to by itself as an index is initialized to zero (step S22). This Index represents the order of methods described in the function definition file. Next, the offset p of the place gap for the Index n method is read from the operating system (step S23), and it is determined whether or not p is a true value, that is, whether it is not a null pointer (step S24). Here, whether or not a place gap exists is determined based on whether or not p is a true value. However, for an operating system in which a defined value such as 0xFFFFFFFF is defined as meaning that there is no place gap, for example. Similarly, it is determined whether it is 0xFFFFFFFF.
[0043]
If there is no place gap, or if it is determined in step S24 that it is not a virtual function, a log acquisition code is generated as shown in FIG. Specifically, the log acquisition code is placed in the memory (step S25), the offset m on the VTable for the Index n method is read from the operating system (step S26), and the address of the offset m is rewritten to the address of the log acquisition code. (Step S27).
[0044]
When step S27 is completed, Index n is incremented (step S10). If it is determined in step S24 that there is a place gap, Index n is incremented (step S28). That is, in this case, the place gap area in the memory cannot be rewritten to the address of the method that is the log acquisition code. This process is continued until the memory load process ends (step S29).
[0045]
By this processing, even when the place gap is for a function other than a virtual function, it is possible to obtain a log for a method call placed after the place gap as shown in FIG.
[0046]
[Fourth Embodiment]
In the present embodiment, processing when an instance of an interface is generated inside a method will be described.
[0047]
In the present embodiment, it is determined whether the parameters and return values in all method calls are the parameters or return values of the log acquisition target interface. Even if an interface instance is generated inside a method by loading the acquisition code into memory, rewriting the parameter or return value to the address of the log acquisition code and returning the function, the method inside the instance Enable automatic logging of calls to. Details are described below.
[0048]
FIG. 18 is a diagram of a function definition file for instructing the software evaluation system that implements the log acquisition method according to the fourth embodiment of the present invention, the format of each function and method parameter, and the format of a return value. It is an example. The DLL name and the function / method name are described, and the parameter and return type for the function / method are shown. The software evaluation system according to the embodiment of the present invention determines what parameters / return values each function / method has based on the contents instructed by the function definition file, and determines the contents. Get as a log. In the present embodiment, Method AB of Interface A returns a pointer to an instance of Interface B generated inside Method AB as an output parameter. Also, Method A Method AC of Interface A returns a pointer to an instance of Interface B generated inside Method AB as a return value. In order for EXE to call a method in Interface B described as a code in DLL, first create an instance of Interface B using Method AB to Method AC, and know the memory address of the instance There is a need.
[0049]
FIG. 19 is an example of a log acquired by the software evaluation system according to the embodiment of the present invention using the function definition file shown in FIG. For each call, the time when the function / method is called and the parameters / return values at that time are generated as a log.
[0050]
FIG. 20 is a diagram showing the flow of processing in the software evaluation system that implements the log acquisition method according to the embodiment of the present invention.
[0051]
When processing is started (step S2001), each time a set function / method is called, the DLL name / interface name / method name / call time is stored in the HDD (step S2002). All parameters are stored in the HDD (step S2003). A method of the main body is called (step S2004).
[0052]
When the processing inside the method ends, the DLL name / interface name / method name / end time is stored in the HDD (step S2005), and the parameters and return values for the call are stored in the HDD (step S2006). .
[0053]
Next, it is determined whether or not the parameter is defined as a pointer to the interface based on the function definition file shown in FIG. 18 (step S2007). If the parameter is defined, a log for the pointer is acquired on the memory. A code is generated (step S2008), and the corresponding parameter or return value is rewritten to the memory address of the log acquisition code (step S2009). If it is determined that the process of step S2009 is completed or not defined as an interface pointer in step S2007, a function return process is performed (step S2010).
[0054]
This process is continued until the program to be evaluated ends (step S2011).
[0055]
By redirecting the pointer to the interface instance returned to EXE as a parameter or return value by the method, the method is called by using the pointer, for example, Method of Interface B in FIG. Also for a BA call, parameters / return values / time and the like can be recorded as shown in FIG.
[0056]
[Fifth Embodiment]
FIG. 21 is a diagram showing a flow of processing in the software evaluation system according to the embodiment of the present invention, which is an example different from FIG.
[0057]
When the processing is started (step S2121), each time the set function / method is called, the DLL name / interface name / method name / calling time is stored in the HDD (step S2122). All parameters are stored in the HDD (step S2123). A method of the main body is called (step S2124).
[0058]
When the processing inside the method ends, the DLL name / interface name / method name / end time is stored in the HDD (step S2125), and the parameters and return value for the call are stored in the HDD (step S2126). . Next, it is determined whether or not the parameter is defined as a pointer to the interface based on the function definition file shown in FIG. 18 (step S2127). If defined, the interface is written in the trace scenario. .
[0059]
It is determined whether it is a trace target (log acquisition target) (step S2128, step S2129). If it is determined that it is a trace target, a log acquisition code for the pointer is generated on the memory (step S2130), and the corresponding parameter or return value is rewritten to the memory address of the log acquisition code (step S2131). When the process of step S2131 ends, or when it is determined that it is not defined as an interface pointer in step S2127, or when it is determined that it is not a trace target in step S2129, a function return process is performed (step S2132). ).
[0060]
This process is continued until the program to be evaluated ends (step S2133).
[0061]
Unlike the fourth embodiment, in the fifth embodiment, the log acquisition code is generated and the address is redirected only when the parameter or the return value is to be traced. It is effective in preventing a decrease in processing speed of EXE and DLL.
[0062]
[Other Embodiments]
Note that the present invention can be applied to a system including a plurality of devices (for example, a host computer, an interface device, a reader, and a printer), and a device (for example, a copying machine and a facsimile device) including a single device. You may apply to.
[0063]
Another object of the present invention is to supply a storage medium storing software program codes for implementing the functions of the above-described embodiments to a system or apparatus, and the computer (or CPU or MPU) of the system or apparatus stores the storage medium. Needless to say, this can also be achieved by reading and executing the program code stored in the.
[0064]
In this case, the program code itself read from the storage medium realizes the functions of the above-described embodiment, and the storage medium storing the program code constitutes the present invention.
[0065]
As a storage medium for supplying the program code, for example, a floppy (registered trademark) disk, hard disk, optical disk, magneto-optical disk, CD-ROM, CD-R, magnetic tape, nonvolatile memory card, ROM, or the like is used. be able to.
[0066]
Further, by executing the program code read by the computer, not only the functions of the above-described embodiments are realized, but also an OS (operating system) operating on the computer based on the instruction of the program code. It goes without saying that a case where the function of the above-described embodiment is realized by performing part or all of the actual processing and the processing is included.
[0067]
Further, after the program code read from the storage medium is written in a memory provided in a function expansion board inserted into the computer or a function expansion unit connected to the computer, the function expansion is performed based on the instruction of the program code. It goes without saying that the CPU or the like provided in the board or the function expansion unit performs part or all of the actual processing, and the functions of the above-described embodiments are realized by the processing.
[0068]
【The invention's effect】
As described above, according to the present invention, it is possible to easily obtain a processing log of software divided into a plurality of modules, and to reduce the man-hours for analyzing the cause of software failure.
[Brief description of the drawings]
FIG. 1 is a diagram showing a configuration of a computer (software evaluation system) that implements a log acquisition method according to a first embodiment of the present invention.
FIG. 2 is a diagram showing a normal memory configuration at the time of loading a function, for explaining a log acquisition method according to the first embodiment of the present invention;
FIG. 3 is a diagram showing a memory configuration when using the IAT Patch of the software evaluation system that implements the log acquisition method according to the first embodiment of the present invention;
FIG. 4A is a diagram showing a state when using the IAT Patch of the software evaluation system that implements the log acquisition method according to the first embodiment of the present invention;
FIG. 4B is a diagram showing a flow of log acquisition processing of the software evaluation system that implements the log acquisition method according to the first embodiment of the present invention;
FIG. 5 is a diagram showing an internal configuration when using the IAT Patch of the software evaluation system according to the first embodiment of the present invention.
FIG. 6 is a diagram showing a normal memory configuration at the time of creating an instance of a COM server interface, for explaining a log acquisition method according to the first embodiment of the present invention;
FIG. 7 is a diagram showing a memory configuration when using the VTable Patch of the software evaluation system that implements the log acquisition method according to the first embodiment of the present invention;
FIG. 8A is a diagram showing a state when using the VTable Patch of the software evaluation system that implements the log acquisition method according to the first embodiment of the present invention;
FIG. 8B is a diagram showing a flow of log acquisition processing of the software evaluation system that implements the log acquisition method according to the first embodiment of the present invention;
FIG. 9 is a diagram showing an internal configuration of a software evaluation system that implements a log acquisition method according to the first embodiment of the present invention;
FIG. 10 is a diagram of a function definition file for instructing the software evaluation system that implements the log acquisition method according to the first embodiment of the present invention, the format of each function and method parameter, and the format of a return value; It is a figure which shows an example.
FIG. 11 is a diagram showing an example of a log acquired by the software evaluation system that implements the log acquisition method according to the first embodiment of the present invention.
FIG. 12 shows how a memory is created when an interface instance is created when a place gap exists in the virtual address table for the software evaluation system that implements the log acquisition method according to the second embodiment of the present invention; It is a figure which shows the example of whether it is loaded.
FIG. 13 is a diagram illustrating a memory evaluation configuration of a log acquisition code when a place gap exists in a virtual address table for a software evaluation system that implements a log acquisition method according to a second embodiment of the present invention; It is a figure showing how to be placed.
FIG. 14 is a diagram showing a flow of processing in a software evaluation system that implements a log acquisition method according to a second embodiment of the present invention;
FIG. 15 is a diagram of a function definition file for instructing the software evaluation system that implements the log acquisition method according to the second embodiment of the present invention, the parameter format of each function and method, and the format of a return value; It is a figure which shows an example.
FIG. 16 is a diagram illustrating an example of a log acquired by a software evaluation system that implements a log acquisition method according to the second embodiment of the present invention;
FIG. 17 is a flowchart of processing when loading a memory in a software evaluation system that implements a log acquisition method according to a third embodiment of the present invention;
FIG. 18 is a diagram of a function definition file for instructing the software evaluation system that implements the log acquisition method according to the fourth embodiment of the present invention, the format of each function and method parameter, and the format of a return value; It is a figure which shows an example.
FIG. 19 is a diagram illustrating an example of a log acquired by a software evaluation system that implements a log acquisition method according to the fourth embodiment of the present invention;
FIG. 20 is a diagram showing a flow of processing in a software evaluation system that implements a log acquisition method according to a fourth embodiment of the present invention;
FIG. 21 is a diagram showing a flow of processing in a software evaluation system that implements a log acquisition method according to a fifth embodiment of the present invention;
[Explanation of symbols]
1: CPU
2: Chipset
3: RAM
4: Hard disk controller
5: Display controller
6: Hard disk drive
7: CD-ROM drive
8: Display
11: Signal line connecting CPU and chipset
12: Signal line connecting chipset and RAM
13: Peripheral device bus connecting chipset and various peripheral devices
14: Signal line connecting hard disk controller and hard disk drive
15: Signal line connecting hard disk controller and CD-ROM drive
16: Signal line connecting display controller and display
Claims (8)
前記書き換え手段が、前記対象プログラムの実行前に、前記ダイナミックリンクライブラリ内の各関数に対応するログ取得のための関数を当該ダイナミックリンクライブラリ内にロードし、前記インポート関数アドレステーブル上に記憶された各関数のアドレスを、対応する前記ログ取得のための関数のアドレスに書き換える工程と、
前記呼び出し手段が、前記対象プログラムが呼び出そうとする呼び出し対象の関数に対する前記インポート関数アドレステーブル上の書き換え後の前記対応するログ取得のための関数のアドレスに基づいて、前記ログ取得のための関数を呼び出して前記実行手段に実行させることで実現されるログ取得手段を起動する工程と、
前記ログ取得手段が、前記呼び出し手段による呼び出しに関わるログを前記ログ記録手段に記録し、前記呼び出し手段により呼び出された前記ログ取得のための関数に対応する前記呼び出し対象の関数を呼び出して、該呼び出し対象の関数を前記実行手段に実行させる工程と、
前記ログ取得手段が、前記呼び出し対象の関数の実行結果を受け取って該実行結果に関わるログを前記ログ記録手段に記録し、当該実行結果を前記対象プログラムに渡す工程と
を備えることを特徴とするログ取得方法。A dynamic link library that stores functions, an import function address table that stores addresses of the functions, a program storage unit that stores a target program that calls and executes functions in the dynamic link library, and a memory that stores programs a medium, and logging means logs are recorded, and a means for executing the program, and rewriting means for the execution unit is realized by executing a program stored in the storage medium, calling means A log acquisition method for acquiring a log during execution of the target program,
The rewriting means loads a log acquisition function corresponding to each function in the dynamic link library into the dynamic link library and stores it in the import function address table before executing the target program. Rewriting the address of each function to the address of the corresponding function for log acquisition;
The call means is configured to acquire the log based on the address of the corresponding function for log acquisition after rewriting on the import function address table for the function to be called that the target program is to call. Starting a log acquisition means realized by calling a function and causing the execution means to execute;
The log acquisition unit records a log related to a call by the calling unit in the log recording unit, calls the function to be called corresponding to the function for log acquisition called by the calling unit, and Causing the execution means to execute a function to be called;
The log acquisition unit includes a step of receiving an execution result of the function to be called, recording a log related to the execution result in the log recording unit, and passing the execution result to the target program. Log acquisition method.
前記書き換え手段が、前記対象プログラムの実行前に、前記インターフェース内の各メソッドに対応するログ取得のためのメソッドをインターフェース内にロードし、前記仮想アドレステーブル上に記憶された各メソッドのアドレスを、対応する前記ログ取得のためのメソッドのアドレスに書き換える工程と、
前記呼び出し手段が、前記対象プログラムが呼び出そうとする呼び出し対象のメソッドに対する前記仮想アドレステーブル上の書き換え後の前記アドレスに基づいて、前記ログ取得のためのメソッドを呼び出して前記実行手段に実行させることで実現されるログ取得手段を起動する工程と、
前記ログ取得手段が、前記呼び出し手段による呼び出しに関わるログを前記ログ記録手段に記録し、前記呼び出し手段により呼び出された前記ログ取得のためのメソッドに対応する前記呼び出し対象のメソッドを呼び出して、該呼び出し対象のメソッドを前記実行手段に実行させる工程と、
前記ログ取得手段が、前記呼び出し対象のメソッドの実行結果を受け取って該実行結果に関わるログを前記ログ記録手段に記録し、当該実行結果を前記対象プログラムに渡す工程と
を備えることを特徴とするログ取得方法。An interface that stores methods, the virtual address table storing an address of the method, a program storage means for storing a target program to be executed by calling a method in the interface, and a storage medium for storing a program, logs Information comprising: a log recording means to be recorded; an execution means for executing a program; the rewriting means realized by the execution means executing a program stored in the storage medium; and a calling means In a processing apparatus, a log acquisition method for acquiring a log during execution of the target program,
Before executing the target program, the rewriting means loads a method for log acquisition corresponding to each method in the interface into the interface , and stores the address of each method stored in the virtual address table, Rewriting the address of the corresponding method for acquiring the log;
The calling unit calls the method for acquiring the log and causes the execution unit to execute based on the rewritten address on the virtual address table for the method to be called that the target program is to call. Starting the log acquisition means realized by
The log acquisition unit records a log related to a call by the calling unit in the log recording unit, calls the method to be called corresponding to the method for log acquisition called by the calling unit, and Causing the execution means to execute a method to be called;
The log acquisition unit includes a step of receiving an execution result of the method to be called, recording a log related to the execution result in the log recording unit, and passing the execution result to the target program. Log acquisition method.
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002191127A JP4125053B2 (en) | 2002-06-28 | 2002-06-28 | Log acquisition method |
US10/465,280 US7188279B2 (en) | 2002-06-28 | 2003-06-20 | Method, program, and storage medium for acquiring logs |
EP03254034A EP1376365A3 (en) | 2002-06-28 | 2003-06-25 | Method for acquiring logs for program debugging |
CN03149336.XA CN1276355C (en) | 2002-06-28 | 2003-06-27 | Run journal obtaining method, program and storage medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002191127A JP4125053B2 (en) | 2002-06-28 | 2002-06-28 | Log acquisition method |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2004038311A JP2004038311A (en) | 2004-02-05 |
JP2004038311A5 JP2004038311A5 (en) | 2007-03-01 |
JP4125053B2 true JP4125053B2 (en) | 2008-07-23 |
Family
ID=31700841
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002191127A Expired - Fee Related JP4125053B2 (en) | 2002-06-28 | 2002-06-28 | Log acquisition method |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4125053B2 (en) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006172204A (en) | 2004-12-16 | 2006-06-29 | Canon Inc | Information processor, information processing method, computer program and storage medium |
JP4886188B2 (en) | 2004-12-16 | 2012-02-29 | キヤノン株式会社 | Information processing apparatus and control method therefor, computer program, and storage medium |
JP4681868B2 (en) | 2004-12-16 | 2011-05-11 | キヤノン株式会社 | Information processing apparatus and control method therefor, computer program, and storage medium |
JP4681923B2 (en) | 2005-04-01 | 2011-05-11 | キヤノン株式会社 | Information processing apparatus and control method therefor, computer program, and storage medium |
US9535814B2 (en) * | 2014-03-31 | 2017-01-03 | Nec Corporation | Dynamic border line tracing for tracking message flows across distributed systems |
-
2002
- 2002-06-28 JP JP2002191127A patent/JP4125053B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2004038311A (en) | 2004-02-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9514029B2 (en) | Partial recording of a computer program execution for replay | |
US20090172664A1 (en) | Adding a profiling agent to a virtual machine to permit performance and memory consumption analysis within unit tests | |
US7478282B2 (en) | Log acquisition method and its control program and storage medium | |
US7188279B2 (en) | Method, program, and storage medium for acquiring logs | |
US7086034B2 (en) | Method, program, and storage medium for acquiring logs | |
JP4681868B2 (en) | Information processing apparatus and control method therefor, computer program, and storage medium | |
US8972794B2 (en) | Method and apparatus for diagnostic recording using transactional memory | |
US7426660B2 (en) | Method, program, and storage medium for acquiring logs | |
US5701486A (en) | Tracing technique for application programs using protect mode addressing | |
US11836070B2 (en) | Reducing trace recording overheads with targeted recording via partial snapshots | |
JP4125053B2 (en) | Log acquisition method | |
JP4280749B2 (en) | Log acquisition method, program, and storage medium | |
JP4125055B2 (en) | Log acquisition method | |
JP4125056B2 (en) | Log acquisition method | |
JP4503203B2 (en) | Method and apparatus for creating test program for evaluating information processing apparatus, and program describing processing for the same | |
JP4125054B2 (en) | Log acquisition method | |
JP2009064125A (en) | Server device and program thereof | |
JP4886188B2 (en) | Information processing apparatus and control method therefor, computer program, and storage medium | |
JP2006031248A (en) | Software evaluation system for generating log by hooking function call | |
US7519868B2 (en) | Information processing apparatus, information processing method, computer program, and storage medium | |
JP2001134464A (en) | Method and device for processing information | |
JP2006040020A (en) | Software evaluation system for acquiring function log and detecting color output data from handle parameter | |
JPH1165875A (en) | In-circuit emulator |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050615 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070117 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20071001 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20071130 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20071225 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080225 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20080414 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20080507 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4125053 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110516 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120516 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120516 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130516 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140516 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |