JP4280749B2 - ログ取得方法およびプログラム、記憶媒体 - Google Patents

ログ取得方法およびプログラム、記憶媒体 Download PDF

Info

Publication number
JP4280749B2
JP4280749B2 JP2006024741A JP2006024741A JP4280749B2 JP 4280749 B2 JP4280749 B2 JP 4280749B2 JP 2006024741 A JP2006024741 A JP 2006024741A JP 2006024741 A JP2006024741 A JP 2006024741A JP 4280749 B2 JP4280749 B2 JP 4280749B2
Authority
JP
Japan
Prior art keywords
function
log acquisition
log
acquisition method
parameter
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
Application number
JP2006024741A
Other languages
English (en)
Other versions
JP2006221630A (ja
Inventor
タン シャンウェイ
ハン ジン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Publication of JP2006221630A publication Critical patent/JP2006221630A/ja
Application granted granted Critical
Publication of JP4280749B2 publication Critical patent/JP4280749B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Description

本発明は、複数にモジュール分けされたソフトウェアの処理ログを取得するための技術に関するものである。
従来より、再現率の低いソフトウェアの障害に対しては、ソフトウェアの処理ログを取得し、当該処理ログを解析することによって、障害の原因をつきとめ、その対策を講じてきた。
しかし、上記従来の処理ログの取得には以下のような問題点がある。
(1)ユーザの動作環境でもログを取得しつづけるためには、ソフトウェアのモジュール自体に手を加え、処理ログ取得ルーチンを追加しなければならず、処理ログ取得のための作業負荷が大きかった。
(2)処理ログ取得はモジュール毎に行うため、生成されたログはモジュール単位のものとなってしまい、ソフトウェア全体の処理を、完全に時間順のログとして取得するのが困難である。このため、全体の処理ログとしての見通しが悪く、ログを解析して障害の原因を発見するまでのプロセスに工数がかかっていた。
かかる問題を解決するための方法として、特許文献1乃至5には、それぞれ、複数にモジュール分けされたソフトウェアの処理ログを容易に取得し、ソフトウェアの障害の原因を解析するのに必要な工数を低減させるための方法が記載されている。
特願2002−191127 特願2002−191128 特願2002−191129 特願2002−191130 特願2003−099465
しかしながら、特許文献1乃至4に記載の場合、EXEによって呼び出される全ての関数/メソッドの処理ログを取得することとしているため、取得される処理ログの数が膨大となる。特許文献5には、APIトレーサ内において“オペレーティングシステムの範囲”ならびに“オペレーティングシステムから呼び出される例外的なモジュール”を指定することにより、EXEによって呼び出される関数/メソッドのうち、処理ログを取得する対象を、オペレーティングシステム内およびいくつかの例外的な指定モジュールに限定する旨の実施形態が示されているが、この場合も取得される処理ログの数は膨大な数となる。
本発明は、上記課題を鑑みてなされたものであり、複数にモジュール分けされたソフトウェアの処理ログを容易に取得でき、かつ、パラメータを処理ログとして選択的に取得することができるログ取得方法であって、取得される処理ログの量が抑制でき、ソフトウェアの障害の原因の解析のための工数を削減することが可能なログ取得方法を提供することを目的とする。
上記の目的を達成するために本発明に係るログ取得方法は以下のような構成を備える。即ち、
所定の処理を行う関数を備えるプログラムの実行中のログを取得するログ取得方法であって、
ロードされた前記所定の処理を行う関数のアドレスを、ログ取得のための関数のアドレスに書き換える工程を備え、
前記ログ取得のための関数は、
前記所定の処理を行う関数を呼び出し、該所定の処理を実行させ、受け取った実行結果を前記プログラムに渡す工程と、
前記関数を呼び出す際のパラメータが構造を指すポインタを含む場合に、当該ポインタの指す構造に含まれる更に下位レベルの構造を指す更なるポインタの探索、現在のレベルが設定レベルに達するまで繰り返し実行し、当該設定レベルに達すると終了する工程と、
前記関数を呼び出す際のパラメータと、該パラメータが構造を指すポインタを含む場合に探索された構造のデータとを含む、前記関数を呼び出す際の情報を記録する工程と
前記実行結果を受け取った際の情報を記録する工程とを備える。
本発明によれば、複数にモジュール分けされたソフトウェアの処理ログを容易に取得でき、かつ、パラメータを処理ログとして選択的に取得することができる。これにより、取得される処理ログの量が抑制でき、ソフトウェアの障害の原因の解析のための工数を削減することが可能なログ取得方法を提供することが可能となる。
なお、当該方法は、Java(登録商標)アプリケーションをトレースするためだけでなく、C言語やC++言語、パスカル等の他のプログラム言語によって作成されるアプリケーションをトレースする場合にも適用可能である。
本発明の他の特徴や効果は、下記記載ならびに添付の図面から明らかとなるであろう。
以下、必要に応じて添付図面を参照しながら本発明の各実施形態を詳細に説明する。
[第1の実施形態]
本実施形態は、あるモジュールから別のモジュール内に存在する関数の呼び出しが行われる際の仕組みである、メモリに保持されたインポート関数アドレス、または仮想関数アドレステーブル(Virtual Address Table)を利用して、モジュール間の関数呼び出しをフックしてログに記録することで、ソフトウェアのモジュール自体に手を加えることなく、ソフトウエア全体の処理を、時間順のログとして取得することを可能にするものである。以下に具体的に説明する。
<システム構成>
図1は、本発明の各実施形態にかかるログ取得方法を実現するコンピュータ(ソフトウェア評価システム)の構成をあらわす図である。説明を簡略化するために、本実施形態では、本ソフトウェア評価システムが1台のPC内部に構築されるものとするが、本発明のログ取得方法の特徴は1台のPC内部に構築されるか、あるいは複数のPCにネットワークシステムとして構築されるかによらず有効である。
本ソフトウェア評価システムを搭載するコンピュータには、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が搭載されている。
<関数処理に対する処理ログ取得>
本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムを説明するために、まず図2によって、複数のモジュールに分かれたソフトウェアが、通常の状態でどのようにメモリにロードされるかを説明する。
通常、複数のモジュールに分かれたソフトウェアは、全体の制御を行う実行ファイル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個となっている。
EXEのコードセグメント内にあるコードが関数Func AAを呼び出す場合には、まずインポート関数アドレステーブル内に書かれたFunc AAのアドレス(30)が読み込まれる。ここには実際にはA.DLLの一部として読み込まれたFunc AAコード(36)のアドレスが書かれており、そのアドレスをコールすることによって、EXEのコードはA.DLLのFunc AAを呼び出すことができる。
図3は、本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムのメモリ構成をあらわす図であり、図2とは、ログ取得用のコードに対してIAT Patch(Import Address Table Patch)という手法を用いて、関数呼び出しをリダイレクトしているという点で異なっている。
ログ取得が開始されると、メモリ内には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)を呼び出す。
図4Aは、図3におけるIAT Patchの処理をあらわす図、図4Bはログ取得処理の流れを示すフローチャートである。説明を簡略化するために、この図ではEXEがA.DLL内のFunc AAを呼び出す際に、IAT Patchによるログ取得コードがどのように動作するかの例をあらわしている。
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)。
図5は、本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムの内部構成をあらわす図である。通常は実行形式のEXE(113)が、DLL−1(116)やDLL−2(117)内の関数を呼び出すが、ここではAPIトレーサと呼ばれるログ取得コードを埋め込み(114)、処理ログを生成している(115)。APIトレーサは、DLL−1やDLL−2の関数定義を記述したファイル(111)と、どのDLLのどの関数のインポート関数テーブルを書き換えてログを取得するかの設定シナリオ(トレースシナリオ112)を元に動作する。
<メソッド処理に対する処理ログ取得>
次に、本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムにおいて、実行ファイルEXE(118)がCOM(Component Object Model)サーバでエクスポートされているインターフェースのインスタンス作成時に、どのようにメモリにロードされるかを説明するために、まず、図6によって、通常の状態でどのようにメモリにロードされるかを説明する。
通常、インターフェースのインスタンス作成を行うと、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となっている。
EXEのコードが関数Method AAを呼び出す場合には、まずvirtual address table内に書かれたMethod AAのアドレス(124)が読み込まれる。ここには実際にはCOMサーバのInterface Aの一部として作成されたMethod AAコード(130)のアドレスが書かれており、そのアドレスをコールすることによって、EXEのコードはInterface AのMethod AAを呼び出すことができる。
図7は、本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムのメモリ構成をあらわす図であり、図6とは、ログ取得用のコードに対してVTable Patch(virtual address table Patch)という手法を用いて、メソッド呼び出しをリダイレクトしているという点で異なっている。
ログ取得が開始されると、メモリ内にはVTable Patch用のDLL(143)がロードされる。このDLLはvirtual address table(136, 138)内に書かれたメソッドのアドレスを、DLL内のログ取得コードであるMethod A'A, Method A'B, Method A'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, Method BC(157〜162)を呼び出す。
図8Aは、図7におけるVTable Patchの処理をあらわす図、図8Bはログ取得処理の流れを示すフローチャートである。説明を簡略化するために、この図ではEXEがCOMサーバ内のInterface AのMethod AAを呼び出す際に、VTable Patchによるログ取得コードがどのように動作するかの例をあらわしている。
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)。
図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)を元に動作する。
<実施例>
図10は、本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムにおいて、それぞれの関数及びメソッドのパラメータの型や、戻り値の型を指示する、関数定義ファイルの例を示す図である。DLL/インターフェース名及び関数/メソッド名を記述し(「関数/メソッド」とは、「関数またはメソッド」の意、以下同じ)、その関数/メソッドに対する、パラメータ及び戻り値の型が示されている。本実施形態にかかるログ取得方法を実現するソフトウェア評価システムは、この関数定義ファイルによって指示された内容を元に、それぞれの関数/メソッドがどのようなパラメータ/戻り値を有しているかを判断し、その内容をログとして取得する。
図11は、図10に示した関数定義ファイルを用いて、本発明の実施形態にかかるソフトウェア評価システムで取得した、ログの一例を示す図である。それぞれの呼び出しに対して、関数/メソッドが呼び出された時刻、及びその際のパラメータ/戻り値が、ログとして生成される。
以上の説明から明らかなように、本実施形態にかかるログ取得方法によれば、複数にモジュール分けされたソフトウエアの処理ログの取得において、モジュール自体に変更を加えることなく、モジュール内に用意された関数/メソッドの呼び出しをログとして記録することが可能となり、処理ログ取得のための作業負荷を低減することが可能となる。また、生成されるログは、時間順のログとして取得することができ、ログの解析が容易となるため、ソフトウェアの障害の原因の解析のための工数を削減することが可能となる。
[第2の実施形態]
以下、第2の実施形態として、クラスを持つ関数パラメータ、または構造データ型の関数パラメータを有する関数/メソッドについて説明する。該関数パラメータの元では、EXEによって呼び出される関数/メソッドについての処理ログの取得対象が、選択的に制限されることとなる。
図12は、本発明の第2の実施形態にかかるログ取得方法を実現するソフトウェア評価システムにおける関数定義ファイルを示す図である。当該関数定義ファイルで定義されている関数“FuncComplexStruct”は、2種類のパラメータ“index”と“lpClsL1”とを有し、後者は、クラスを持つパラメータとして定義されている。当該関数定義ファイルは、説明の便宜上、クラスを持つ関数パラメータとして7つのレベルがあるものとし、第1から第6のレベルの“struct”はデータメンバと、次のレベルの構造を示す構造ポインタとを備え、最後のレベルの“struct”はデータメンバのみを備えているものとする。
そして、7つのネストレベルの“struct”はそれぞれ関数定義ファイルに規定されており(typedef struct)、“struct”内には、それぞれポインタパラメータとして、LPCLS_L2、LPCLS_L3、LPCLS_L4、LPCLS_L5、LPCLS_L6ならびにLPCLS_L7が定義されている。
図13は、図12に示すような関数が定義されている場合における、ソフトウェア評価システムのログ取得処理の流れを示すフローチャートである。
ステップS1301において処理が開始されると、ステップS1302では、ログ取得処理が初期化され、モジュール名、インタフェース名、関数/メソッド名がHDD内に保存される。ステップS1303では、パラメータが構造ポインタとして指定されているか否かを判断し、該パラメータが構造ポインタとして指定されていなかった場合には、ステップS1309に進む。第1の実施形態では、レベル選択とは無関係に他の処理が実行されたが、この場合(ステップS1303でNoの場合)も同じように、呼び出し時の時刻、パラメータおよび、ポインタパラメータの指すメモリ内容がHDDに保存される(ステップS1309)。その後、元の関数が呼び出され(ステップS1310)、リターン時の時刻と、戻り値と、ポインタパラメータの指すメモリ内容をHDDに保存する(ステップS1311)。そして、ステップS1302に戻り、ユーザにより終了指示がなされるまで、関数/メソッドの処理を繰り返す(ステップS1312)。
ステップS1303において、パラメータが構造ポインタであると判定された場合には、関数定義ファイルにおいて指定された型に基づいて、構造ポインタの指すメモリ内容を検索し、あるいは記録する(ステップS1304)。そしてステップS1305では、structのデータメンバが構造ポインタであるか否かを判定する。structのデータメンバが構造ポインタでない場合には、ステップS1309にスキップし、ステップS1309からステップS1312の処理を繰り返す。
ステップS1305において、structのデータメンバが構造ポインタであると判定された場合には、所定のレベルが設定されているか否かを判定し(ステップS1306)、所定のレベルが設定されていない場合には、ステップS1309にスキップし、ステップS1309からステップS1312の処理を繰り返す。この場合、EXEによって呼び出された全ての関数/メソッドの処理ログがステップS1309においてHDDに保存される。なお、レベルが設定されていない場合には、ユーザに対して警告する処理を加えるようにしてもよいし、あるいはユーザに対して確認をとる処理を加えるようにしてもよい。ステップS1306において所定のレベルが設定されていなかった場合には、代わりに、宛先モジュールのみをオペレーティングシステムのモジュールリストに記録し、元の関数を呼び出した後、ステップS1312にスキップするようにしてもよい。あるいは、所定の処理を実行する関数を呼び出す際の所定の情報、実行結果を受け取る際の所定の情報は、受信したポインタパラメータによって生成されるメモリ内容を含んでいなくてもよい。そのような場合、構造ポインタの指すメモリ内容が保存されることはなく、あるいは出力されることもない。
ステップS1306において所定のレベルが設定されている場合には、ステップS1307において保存されるデータメンバのカンレトレベルが所定のレベルより小さい(浅い)か否かを判定する。データメンバのカレントレベルが所定のレベルと同等かそれより大きい(深い)場合には、ステップS1309に進み、ステップS1309からステップS1312の処理を繰り返す。ステップS1309では、上述のポインタパラメータにより指定されるデータメンバの上記所定のレベルまでのメモリ内容が保持されることとなる。
ステップS1307において、データメンバのカレントレベルが所定のレベルより小さい場合には、ステップS1308においてデータメンバのカレントレベルを1つインクリメントし、ステップS1304に戻り、関数/メソッドのリターン処理を実行する。ステップS1303からステップS1306の処理は戻り値を解析するのにも適している。
上述の処理を更に理解するために、ここでは、一例として図14に示す関数についてのステップS1303からステップS1309までの処理を詳細に説明する。なお、説明にあたっては以下のように仮定する。
ステップS1307においてカレントレベルが小さいか否かを判定する際に比較される所定レベルとしては2が設定されるものとする。
トレースされる関数は、例えば、図14に示すFunc(Struct_Ap*)のような、Pという名称の構造ポインタパラメータを有しているものとする。
Struct_Aは、AA(ここでは、AAは、ポインタ以外であればいかなる内容であってもよい)と構造ポインタAp*とを備え、図14に示すようにStruct_Bを指すものとする。
Struct_Bは、データメンバBBと構造ポインタBp*とを備え、図14に示すようにStruct_Cを指すものとする。
フローチャートのステップS1303からステップS1309が実行された場合、ステップS1303では、パラメータが構造ポインタ(図13に示すP)であるか否かの判定がなされる。その後、ステップS1304に進み、Struct_Aの内容AAをメモリに保存する。ステップS1305では、Struct_Aのデータメンバ(Ap*)が構造ポインタであることが確認され、ステップS1306に進み、所定のレベルが設定されていることを確認した後、ステップS1307に進む。ステップS1307では、カレントレベルが所定のレベルより小さいか否かが判定される。ここではカレントレベルは1で、所定のレベル2よりも小さいため、ステップS1308に進む。ステップS1308では、カレントレベルがインクリメントされ、これによりカレントレベルは2になる。その後、ステップS1304に戻り、第2のレベルの処理を開始するとともに、メモリにStruct_Bの内容BBを保存する。ステップS1305において、Struct_Bのデータメンバ(Bp*)が、構造ポインタであることを確認した後、ステップS1306に進み、所定レベルが設定されていることを確認した後、ステップS1307に進む。ステップS1307では、カレントレベルが所定レベルより小さいか否かを判定する。ここでは、カレントレベルは2で所定レベルの2と等しいことから、ステップS1308ではなくステップS1309に進む。ステップS1309では、ステップS1304においてハードディスクに保存されたパラメータの内容AAおよびBBを保存する。所定レベルが2であるため、この例では、内容CCはハードディスクに保存されない。
上記実施例において、ステップS1307における判定がNoであった場合には、ステップS1309に進み、既に取り出された内容を保存する。また、ステップS1307における判定がYesであった場合には、ステップS1308に進み、カレントレベルをインクリメントする。
図15は、本実施形態にかかるソフトウェア評価システムにおいて、メモリ内容の記録に際してデータメンバのレベルを利用しなかった場合に、図12に示す関数定義のもとで取得されたログデータを示す図である。結果は従来と同様になる。ログデータから、全てのパラメータ情報が保存/出力されているため、全てのパラメータを出力するのに時間がかかる上、該情報を保存するために高いメモリ容量が必要となる。また、ユーザがそこまで詳細なログデータを必要としない場合もある。
一方、図16は、本実施形態にかかるソフトウェア評価システムにおいて、メモリ内容の記録に際してデータメンバのレベルを利用した場合に、図12に示す関数定義のもとで取得されたログデータを示す図である。この場合、所定レベルは2である。
データメンバのレベルを利用した場合(図16)、利用しなかった場合(図15)と比べて、ユーザが求めるパラメータ情報のみを出力することができ、その結果、ログ取得性能を向上させることができる。
なお、本発明は、最良の実施例を考慮して説明したものであり、上述の処理、特にステップS1304〜1306は上述の順序に限定されるものではなく、例えば、ステップS1306の処理はステップS1304の前に行われるようにしてもよいし、ステップS1308からステップS1304に戻るようにし、設定レベルが設定されているか否かの判定は、1回のみ行われるようにしてもよい。
構造ポインタのようなパラメータを記述すること自体は、本処理の特徴ではないが、当業者であれば、構造パラメータを定義したり記述するための様々な方法を提案することができ、その中には、特開2002−1991128号公報や特開2002−191129号公報に記載の方法も含まれる。
更に、本処理は、ログ取得に際して所定の関数を選択するための工程として、日付単位でログを記録する記録工程と、ログのサイズが所定サイズを超えた場合に新しいファイルを生成する工程と、ログの個数が所定個数を超えた場合に新しいファイルを生成する工程と、前記メモリ内のログの数が所定数を超えた場合に、メモリ内のログをディスク装置に移動し保存する工程とを備える。これらの工程の詳細は、特願2002−191128特願2002−191129特願2002−191130、ならびに特願2003−099465に記載されている。
[他の実施形態]
なお、本発明は、複数の機器(例えばホストコンピュータ、インタフェイス機器、リーダ、プリンタなど)から構成されるシステムに適用しても、一つの機器からなる装置(例えば、複写機、ファクシミリ装置など)に適用してもよい。
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムあるいは装置に供給するよう構成することによっても達成されることはいうまでもない。この場合、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読出し実行することにより、上記機能が実現されることとなる。なお、この場合、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
プログラムコードを供給するための記憶媒体としては、例えば、フロッピ(登録商標)ディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、磁気テープ、不揮発性のメモリカード、ROMなどを用いることができる。
また、コンピュータが読出したプログラムコードを実行することにより、前述した実施形態の機能が実現される場合に限られない。例えば、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム)などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
さらに、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、前述した実施形態の機能が実現される場合も含まれる。つまり、プログラムコードがメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって実現される場合も含まれる。
本発明の第1の実施形態にかかるログ取得方法を実現するコンピュータ(ソフトウェア評価システム)の構成をあらわす図である。 本発明の第1の実施形態にかかるログ取得方法を説明するためにあらわした、関数ロード時の通常のメモリ構成をあらわす図である。 本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムのIAT Patch使用時のメモリ構成をあらわす図である。 本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムのIAT Patchを使用時の状態を示す図である。 本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムのログ取得処理の流れを示す図である。 本発明の第1の実施形態にかかるソフトウェア評価システムのIAT Patchを使用時の内部構成をあらわす図である。 本発明の第1の実施形態にかかるログ取得方法を説明するためにあらわした、COMサーバのインターフェースのインスタンス作成時の通常のメモリ構成をあらわす図である。 本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムのVTable Patch使用時のメモリ構成をあらわす図である。 本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムのVTable Patchを使用時の状態を示す図である。 本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムのログ取得処理の流れを示す図である。 本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムの、内部構成をあらわす図である。 本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムに対して、それぞれの関数及びメソッドのパラメータの型や、戻り値の型を指示する、関数定義ファイルの例を示す図である。 本発明の第1の実施形態にかかるログ取得方法を実現するソフトウェア評価システムで取得した、ログの一例を示す図である。 本発明の第2の実施形態にかかるログ取得方法を実現するソフトウェア評価システムの、関数定義ファイルを示す図である。 関数定義ファイルが図12に示すように規定されていた場合に、ソフトウェア評価システムを用いてログ取得するための処理の流れを示す図である。 図13にかかるフローチャートを説明する際に用いた、ポインタパラメータを備える関数の一例を示す図である。 本発明にかかるソフトウェア評価システムにおいて、メモリ内容の記録に際してデータメンバの所定レベルをしなかった場合に、図12に示す関数定義ファイルのもとで取得されるログデータを示す図である。 本発明にかかるソフトウェア評価システムにおいて、メモリ内容の記録に際してデータメンバの所定レベルを利用した場合に、図12に示す関数定義ファイルのもとで取得されるログデータを示す図である。

Claims (7)

  1. 所定の処理を行う関数を備えるプログラムの実行中のログを取得するログ取得方法であって、
    ロードされた前記所定の処理を行う関数のアドレスを、ログ取得のための関数のアドレスに書き換える工程を備え、
    前記ログ取得のための関数は、
    前記所定の処理を行う関数を呼び出し、該所定の処理を実行させ、受け取った実行結果を前記プログラムに渡す工程と、
    前記関数を呼び出す際のパラメータが構造を指すポインタを含む場合に、当該ポインタの指す構造に含まれる更に下位レベルの構造を指す更なるポインタの探索、現在のレベルが設定レベルに達するまで繰り返し実行し、当該設定レベルに達すると終了する工程と、
    前記関数を呼び出す際のパラメータと、該パラメータが構造を指すポインタを含む場合に探索された構造のデータとを含む、前記関数を呼び出す際の情報を記録する工程と
    前記実行結果を受け取った際の情報を記録する工程と
    を備えることを特徴とするログ取得方法。
  2. 前記関数を呼び出す際の情報は更に、少なくとも、呼び出された関数の関数名、呼び出す際の時刻のいずれかを備えることを特徴とする請求項1に記載のログ取得方法。
  3. 前記実行結果を受け取った際の情報は、少なくとも、受け取った際の時刻、受け取った際のパラメータ、受け取った際の戻り値、または受け取った際のポインタの指すメモリ内容のいずれかを備えることを特徴とする請求項1に記載のログ取得方法。
  4. 前記所定の処理を行う関数のアドレスは、該関数を提供するダイナミックリンクライブラリごとに、インポート関数アドレステーブルに記載されていることを特徴とする請求項1に記載のログ取得方法。
  5. 前記関数を呼び出す際の情報として、前記ポインタの指す構造を読み出す毎に記録することを特徴とする請求項1に記載のログ取得方法。
  6. 請求項1乃至5に記載のログ取得方法をコンピュータによって実行させるための制御プログラム。
  7. 請求項6に記載の制御プログラムを格納した記憶媒体。
JP2006024741A 2005-02-07 2006-02-01 ログ取得方法およびプログラム、記憶媒体 Expired - Fee Related JP4280749B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2005100082727A CN100472469C (zh) 2005-02-07 2005-02-07 运行日志获取方法

Publications (2)

Publication Number Publication Date
JP2006221630A JP2006221630A (ja) 2006-08-24
JP4280749B2 true JP4280749B2 (ja) 2009-06-17

Family

ID=36918905

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006024741A Expired - Fee Related JP4280749B2 (ja) 2005-02-07 2006-02-01 ログ取得方法およびプログラム、記憶媒体

Country Status (2)

Country Link
JP (1) JP4280749B2 (ja)
CN (1) CN100472469C (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101196848B (zh) * 2006-12-04 2011-10-12 佳能株式会社 运行日志获取方法
CN100465968C (zh) * 2007-08-20 2009-03-04 中兴通讯股份有限公司 自动化测试日志处理系统
CN101452402B (zh) * 2008-11-28 2012-05-30 珠海金山快快科技有限公司 软件运行系统和软件运行方法
CN103077111B (zh) * 2011-10-26 2016-02-10 阿里巴巴集团控股有限公司 一种持续集成失败用例的定位方法及系统
CN106681651A (zh) * 2016-05-05 2017-05-17 安徽南瑞继远电网技术有限公司 一种两级缓冲机制的日志管理系统设计方法
CN114002987A (zh) * 2021-11-03 2022-02-01 杭州和利时自动化有限公司 一种获取日志信息的方法、装置、电子设备及介质

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7086034B2 (en) * 2002-06-28 2006-08-01 Canon Kabushiki Kaisha Method, program, and storage medium for acquiring logs
US7188279B2 (en) * 2002-06-28 2007-03-06 Canon Kabushiki Kaisha Method, program, and storage medium for acquiring logs
JP4125169B2 (ja) * 2003-04-02 2008-07-30 キヤノン株式会社 ログ取得方法

Also Published As

Publication number Publication date
CN100472469C (zh) 2009-03-25
CN1818885A (zh) 2006-08-16
JP2006221630A (ja) 2006-08-24

Similar Documents

Publication Publication Date Title
US6678883B1 (en) Apparatus and method for creating a trace file for a trace of a computer program based on loaded module information
US7275241B2 (en) Dynamic instrumentation for a mixed mode virtual machine
JP4280749B2 (ja) ログ取得方法およびプログラム、記憶媒体
US7478282B2 (en) Log acquisition method and its control program and storage medium
US7251808B2 (en) Graphical debugger with loadmap display manager and custom record display manager displaying user selected customized records from bound program objects
CN111124550A (zh) 一种程序动态加载方法、装置及存储介质
US7086034B2 (en) Method, program, and storage medium for acquiring logs
JP4681868B2 (ja) 情報処理装置及びその制御方法、コンピュータプログラム及び記憶媒体
US7188279B2 (en) Method, program, and storage medium for acquiring logs
US7426660B2 (en) Method, program, and storage medium for acquiring logs
CN115407943A (zh) 一种内存转储文件生成方法、装置、设备及可读存储介质
CN101196848B (zh) 运行日志获取方法
US10198784B2 (en) Capturing commands in a multi-engine graphics processing unit
US20110219365A1 (en) High and low value application state
US7958490B2 (en) System for automating the definition of application objects supporting undoing, redoing compressing and logging operations
CN109344083B (zh) 一种程序调试方法、装置、设备及可读存储介质
EP3635561B1 (en) Asynchronous operation query
JP4125056B2 (ja) ログ取得方法
JP2004038313A (ja) ログ取得方法およびプログラム、記憶媒体
JP4125054B2 (ja) ログ取得方法
CN110515751B (zh) 一种加载运行VxWorks实时保护进程的方法及系统
JP4886188B2 (ja) 情報処理装置及びその制御方法、コンピュータプログラム及び記憶媒体
JP2004038311A (ja) ログ取得方法およびプログラム、記憶媒体
JP2006031248A (ja) 関数呼び出しをフックしてログを生成するソフトウェア評価システム
JP2006172204A (ja) 情報処理装置、情報処理方法、コンピュータプログラム及び記憶媒体

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080722

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080725

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080924

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: 20090302

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: 20090316

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120319

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130319

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140319

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees