JP2006031248A - 関数呼び出しをフックしてログを生成するソフトウェア評価システム - Google Patents
関数呼び出しをフックしてログを生成するソフトウェア評価システム Download PDFInfo
- Publication number
- JP2006031248A JP2006031248A JP2004207214A JP2004207214A JP2006031248A JP 2006031248 A JP2006031248 A JP 2006031248A JP 2004207214 A JP2004207214 A JP 2004207214A JP 2004207214 A JP2004207214 A JP 2004207214A JP 2006031248 A JP2006031248 A JP 2006031248A
- Authority
- JP
- Japan
- Prior art keywords
- evaluation system
- function
- software evaluation
- log
- log acquisition
- 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.)
- Withdrawn
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【課題】 ソフトウェアにおける再現率の低い障害の原因を特定し、開発の工数を削減する効果を与える。
【解決手段】 複数にモジュール分けされたソフトウェアの動作確認において、インポート関数アドレス及び仮想関数アドレステーブルを利用して、モジュール間の関数呼び出しをフックしてログに記録する。また、それぞれの関数呼出においては、すべてのパラメータ、及び戻り値を、時刻と共に記録する。また、パラメータの一部に可変長配列が存在する場合には、ユーザが一定量の要素数以下のみログに取得する手段を設けたソフトウェア評価システムである。
【選択図】 図11
【解決手段】 複数にモジュール分けされたソフトウェアの動作確認において、インポート関数アドレス及び仮想関数アドレステーブルを利用して、モジュール間の関数呼び出しをフックしてログに記録する。また、それぞれの関数呼出においては、すべてのパラメータ、及び戻り値を、時刻と共に記録する。また、パラメータの一部に可変長配列が存在する場合には、ユーザが一定量の要素数以下のみログに取得する手段を設けたソフトウェア評価システムである。
【選択図】 図11
Description
本発明は、複数にモジュール分けされたソフトウェアの動作確認、デバッグ及び評価に関する。
再現率の低いソフトウェアの障害に対しては、ソフトウェアの処理ログを取得することによって対処している場合が多いが、従来、処理ログの取得はソフトウェアのモジュール自体に手を加えて、処理ログ取得ルーチンを追加することによって行なわれている。また、配列要素の次元数、配列の要素値をもつ可変長配列を含むソフトウェアにおいて、可変長配列の要素次元数と要素数が一致していないことがある。
特開2004−38312号公報
上記従来の技術には4点の問題点がある。
(1)ユーザの動作環境でもログを取得しつづけるためには、モジュール本体にログ取得用の変更が入ったものを使用する必要がある。
(2)モジュール毎にログ取得を行うため、生成されたログはモジュール単位の物となってしまい、ソフトウェア全体の処理を、完全に時間順のログとして取得するのが困難である。
(3)全体の処理ログとしての見通しが悪いため、ログを解析して問題点を発見するまでのプロセスに工数がかかる。
(4)可変長配列の存在するモジュールのログを取得する場合で可変長配列内の要素次元数が実際の要素数よりも大幅に大きい場合、ログ取得のパフォーマンスに大きな影響がでてしまう。
上記課題を解決するために、本発明においては、あるモジュールから別のモジュール内に存在する関数の呼び出しが行なわれる際の仕組みである、メモリに保持されたインポート関数アドレス、乃至仮想関数アドレステーブル(Virtual Address Table)を利用して、モジュール間の関数呼び出しをフックしてログに記録する、という手段を用いる。また、それぞれの関数呼び出しにおいては、すべてのパラメータ及び戻り値を、時刻と共に記録する。また、パラメータの一部に可変長配列が存在する場合に、ユーザが一定量の要素数以下のみログに取得するという手段を設けることで、可変長配列の要素次元数と実際の要素数が大幅に異なる場合(要素次元数>実際の要素数)において、ソフトウェア評価システムのパフォーマンスを向上させる手段を提供する。
本発明を施したソフトウェア評価システムを用いることで、ソフトウェアの問題点を解析する工数が削減される。
<実施形態1>
図1は、本発明を施したソフトウェア評価システムの構成をあらわす図である。説明を簡略化するために、本実施例では、本ソフトウェア評価システムが1台のPC内部に構築されるものとするが、本発明の特徴は1台のPC内部に構築されるか、あるいは複数のPCにネットワークシステムとして構築されるかによらず有効である。
図1は、本発明を施したソフトウェア評価システムの構成をあらわす図である。説明を簡略化するために、本実施例では、本ソフトウェア評価システムが1台のPC内部に構築されるものとするが、本発明の特徴は1台のPC内部に構築されるか、あるいは複数のPCにネットワークシステムとして構築されるかによらず有効である。
本ソフトウェア評価システムを搭載するコンピュータには、CPU1、チップセット2、RAM3、ハードディスクコントローラ4、ディスプレイコントローラ5、ハードディスクドライブ6、CD−ROMドライブ7、ディスプレイ8が搭載されている。また、CPUとチップセットを繋ぐ信号線11、チップセットとRAMを繋ぐ信号線12、チップセットと各種周辺機器とを繋ぐ周辺機器バス13、ハードディスクコントローラとハードディスクドライブを繋ぐ信号線14、ハードディスクコントローラとCD−ROMドライブを繋ぐ信号線15、ディスプレイコントローラとディスプレイを繋ぐ信号線16が搭載されている。
本発明を施したソフトウェア評価システムを説明するために、まず図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は、本発明を施したソフトウェア評価システムのメモリ構成をあらわす図であり、図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)を呼び出す。
図4は、図3におけるIAT Patchの処理をあらわすタイミングチャートである。説明を簡略化するために、この図ではEXEがA.DLL内のFunc AAを呼び出す際に、IAT Patchによるログ取得コードがどのように動作するかの例をあらわしている。
EXE(91)がFunc AAをコールすると(94)、C.DLL内にあるログ取得コードがDLL名/関数名をメモリに保存し、呼び出し時刻をメモリに保存し、呼び出し時のパラメータをメモリに保存し、呼び出し時のポインタパラメータの指すメモリ内容を、別メモリに保存する(95)。その後C.DLLは本来呼び出されるはずであった、A.DLL(93)内のFunc AAをコールする(96)。A.DLLのFunc AA処理(97)が終了し、C.DLLに制御がリターンすると(98)、C.DLLはリターン時の時刻をメモリに保存し、戻り値をメモリに保存し、リターン時にポインタパラメータが指すメモリ内容を、別メモリに保存する(99)。その後、C.DLLは保存したログ情報をファイルに書き込み(100)、あたかもA.DLLのFunc AAが通常通りに終了したかのように、EXEにリターンする(101)。
図5は、本発明を施したソフトウェア評価システムの内部構成をあらわす図である。通常は実行形式のEXE(113)が、DLL−1(116)やDLL−2(117)内の関数を呼び出すが、ここではAPIトレーサと呼ばれるログ取得コードを埋め込み(114)、処理ログを生成している(115)。APIトレーサは、DLL−1やDLL−2の関数定義を記述したファイル(111)と、どのDLLのどの関数のインポート関数テーブルを書き換えてログを取得するかの設定シナリオ(112)を元に動作する。
図6は、本発明を施したソフトウェア評価システムにおいて、通常、実行ファイルEXE(118)がCOMサーバでエクスポートされているインターフェースのインスタンス作成時に、通常の状態でどのようにメモリにロードされるかを説明する。
通常、インターフェースのインスタンス作成を行うと、COMサーバ内で、要求されたインターフェース(121,122)と、そのメソッド(130〜135)が作成され、それらは、メモリ上に両方がロードされる。ここで、virtual address tableは作成された各インターフェース毎に作られ(118,120)、作成要求を行ったEXEに渡される。このvirtual address 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は、本発明を施したソフトウェア評価システムのメモリ構成をあらわす図であり、図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(151〜156)を呼び出す。
図8は、図7におけるVTable Patchの処理をあらわすタイミングチャートである。説明を簡略化するために、この図ではEXEがCOMサーバ内のInterface AのMethod AAを呼び出す際に、VTable Patchによるログ取得コードがどのように動作するかの例をあらわしている。
EXE(163)がMethod AAをコールすると(166)、DLL内にあるログ取得コードがモジュール名/インターフェース名/メソッド名をメモリに保存し、呼び出し時刻をメモリに保存し、呼び出し時のパラメータをメモリに保存し、呼び出し時のポインタパラメータの指すメモリ内容を、別メモリに保存する(167)。その後DLLは本来呼び出されるはずであった、COMサーバ(165)内のMethod AAをコールする(168)。COMサーバのMethod AA処理(169)が終了し、DLLに制御がリターンすると(170)、DLLはリターン時の時刻をメモリに保存し、戻り値をメモリに保存し、リターン時にポインタパラメータが指すメモリ内容を、別メモリに保存する(171)。その後、DLLは保存したログ情報をファイルに書き込み(172)、あたかもCOMサーバのMethod AAが通常通りに終了したかのように、EXEにリターンする(173)。
図9は、本発明を施したソフトウェア評価システムの内部構成をあらわす図である。通常は実行形式のEXE(176)が、COMサーバ−1(179)やCOMサーバ−2(180)内のメソッドを呼び出すが、ここではAPIトレーサと呼ばれるログ取得コードを埋め込み(177)、処理ログを生成している(178)。APIトレーサは、COMサーバ−1(179)やCOMサーバ−2の関数定義を記述したファイル(174)と、どのCOMサーバのどのインターフェースのどのメソッドのvirtual address tableを書き換えてログを取得するかの設定シナリオ(175)を元に動作する。
図10及び図11は、SAFEARRAY等の可変長配列の概念図である。通常は図10に示されるように要素次元数(180)と要素(181〜185)の数は一致している。しかしSAFEARRAYの使用方法を誤ると図11に示すように、要素次元数(186)と要素(187〜191)の数が異なった構造となる場合がある。このような可変長配列を含むソフトウェアの評価を行う場合、要素次元数をもとに要素を読み込むと要素の存在しない部分(192〜196)まで読み込むことになり、ログ取得のパフォーマンスが低下する。本発明を施したソフトウェア評価システムでは、評価対象のソフトウェアに図11のような可変長配列を含む場合のログ取得処理のパフォーマンスを向上させる。
図12は、本発明を施したソフトウェア評価システムに対して、それぞれの関数及びメソッドのパラメータの形式や、戻り値の形式を指示する、関数定義ファイルの例である。DLL名/Interface名及び関数/メソッド名を記述し、その関数/メソッドに対する、パラメータ及び戻り値の型が示されている。本発明を施したソフトウェア評価システムは、この関数定義ファイルによって指示された内容を元に、それぞれの関数/メソッドがどのようなパラメータ/戻り値を有しているかを判断し、その内容をログとして取得する。なお、本実施例では、Interface AのMethod ABが、出力パラメータとして、SAFEARRAYへのポインタが定義されている。また、Interface AのMethod ACが、戻り値として、SAFEARRAYが定義されている。
図13は、図12に示した関数定義ファイルを用いて、本発明を施したソフトウェア評価システムで取得した、ログの一例である。それぞれの呼び出しに対して、関数/メソッドが呼び出された時刻、及びその際のパラメータ/戻り値が、ログとして生成される。
図12〜図13に示された関数定義ファイル、ログに示された実施例は、指示するデータが入力データか出力データか、あるいは戻り値かに依存せずに有効である。例えば、関数からの出力パラメータとしてデータアドレスが戻され、更に関数からの戻り値としてデータサイズが出力された場合にも、同様にデータ本体のログを取得することが可能である。
図14は、本発明を施したソフトウェア評価システムにおける、一例をあらわす処理の流れ図である。
設定された関数/メソッドが呼び出されることによって、処理が開始されると(S1)、本ソフトウェアはDLL名/Interface名/Method名/呼び出し時の時刻をHDDに保存し(S2)、その呼び出しに対してのパラメータをHDDに保存する(S3)。次に本ソフトウェアは、パラメータが可変長配列として定義されているかどうかを、図12に示した関数定義ファイルに基づいて判断し(S4)、定義されている場合は、可変長配列の中から要素次元数を取得する(S5)。さらに、要素次元数分の要素をその可変長配列から読み込み(S9)、ログをHDDに保存する(S10)。パラメータが可変長配列として定義されていない場合、S5からS7の処理は行われない。
関数内部の処理が終了すると(S8)、本ソフトウェアはDLL名/Interface名/Method名/終了時の時刻をHDDに保存し(S9)、その呼び出しに対してのパラメータ及び戻り値をHDDに保存する(S10)。次に本ソフトウェアは、パラメータが可変長配列として定義されているかどうかを、図12に示した関数定義ファイルに基づいて判断し(S11)、定義されている場合は、可変長配列の中から要素次元数を取得する(S12)。さらに、要素次元数分の要素をその可変長配列から読み込み(S13)、ログをHDDに保存する(S14)。パラメータが可変長配列として定義されていない場合、S12からS14の処理は行われない。
この処理は、評価対象となるプログラムが終了するまで(S15)続行される。
<実施形態2>
図15及び図16は、本発明を施したソフトウェア評価システムにおける、別な一例をあらわす処理の流れ図である。
図15及び図16は、本発明を施したソフトウェア評価システムにおける、別な一例をあらわす処理の流れ図である。
設定された関数/メソッドが呼び出されることによって、処理が開始されると(S11)、本ソフトウェアはDLL名/Interface名/Method名/呼び出し時の時刻をHDDに保存し(S12)、その呼び出しに対してのパラメータをHDDに保存する(S13)。次に本ソフトウェアは、パラメータが可変長配列として定義されているかどうかを、図12に示した関数定義ファイルに基づいて判断し(S14)、定義されている場合は、可変長配列の中から要素次元数を取得する(S15)。さらに、可変長配列の要素数制限値が設定されているかどうかを判断し(S16)、設定されている場合は要素次元数と制限値を比較する(S17)。要素次元数よりも制限値の方が小さい場合には、制限数分の要素をその可変長配列から読み込む(S18)。また、要素次元数の方が小さい場合及び制限値が設定されていない場合には、要素次元数分の要素をその可変長配列から読み込む(S19)。可変長配列から要素を読み込んだ後、ログをHDDに保存する(S20)。パラメータが可変長配列として定義されていない場合、S15からS20の処理は行われない。
関数内部の処理が終了すると(S21)、本ソフトウェアはDLL名/Interface名/Method名/終了時の時刻をHDDに保存し(S22)、その呼び出しに対してのパラメータ及び戻り値をHDDに保存する(S23)。次に本ソフトウェアは、パラメータが可変長配列として定義されているかどうかを、図12に示した関数定義ファイルに基づいて判断し(S24)、定義されている場合は、可変長配列の中から要素次元数を取得する(S25)。さらに、可変長配列の要素数制限値が設定されているかどうかを判断し(S26)、設定されている場合は要素次元数と制限値を比較する(S27)。要素次元数よりも制限値の方が小さい場合には、制限数分の要素をその可変長配列から読み込む(S28)。また、要素次元数の方が小さい場合及び制限値が設定されていない場合には、要素次元数分の要素をその可変長配列から読み込む(S29)。可変長配列から要素を読み込んだ後、ログをHDDに保存する(S30)。パラメータが可変長配列として定義されていない場合、S25からS30の処理は行われない。
この処理は、評価対象となるプログラムが終了するまで(S31)続行される。
<実施形態3>
図17は、実施例1及び実施例2で示された機能を設定するための、ユーザーインターフェイスの例である。SAFEARRAYの取得要素数を制限するかどうかの設定が存在し、取得要素数を制限しないという設定が行われた場合、実施例1に示した処理が行われる。また、取得要素数を制限するという設定が行われた場合、実施例2に示した処理が行われる。
図17は、実施例1及び実施例2で示された機能を設定するための、ユーザーインターフェイスの例である。SAFEARRAYの取得要素数を制限するかどうかの設定が存在し、取得要素数を制限しないという設定が行われた場合、実施例1に示した処理が行われる。また、取得要素数を制限するという設定が行われた場合、実施例2に示した処理が行われる。
1 CPU
2 チップセット
3 RAM
4 ハードディスクコントローラ
5 ディスプレイコントローラ
6 ハードディスクドライブ
7 CD−ROMドライブ
8 ディスプレイ
11 CPUとチップセットを繋ぐ信号線
12 チップセットとRAMを繋ぐ信号線
13 チップセットと各種周辺機器とを繋ぐ周辺機器バス
14 ハードディスクコントローラとハードディスクドライブを繋ぐ信号線
15 ハードディスクコントローラとCD−ROMドライブを繋ぐ信号線
16 ディスプレイコントローラとディスプレイを繋ぐ信号線
2 チップセット
3 RAM
4 ハードディスクコントローラ
5 ディスプレイコントローラ
6 ハードディスクドライブ
7 CD−ROMドライブ
8 ディスプレイ
11 CPUとチップセットを繋ぐ信号線
12 チップセットとRAMを繋ぐ信号線
13 チップセットと各種周辺機器とを繋ぐ周辺機器バス
14 ハードディスクコントローラとハードディスクドライブを繋ぐ信号線
15 ハードディスクコントローラとCD−ROMドライブを繋ぐ信号線
16 ディスプレイコントローラとディスプレイを繋ぐ信号線
Claims (14)
- 複数にモジュール分けされているソフトウェアにおいて、あるモジュールから別のモジュール内に存在する関数への呼び出しを、ログ取得のためのルーチンにリダイレクトする手段を有し、リダイレクトしたログ取得ルーチン内部に計時手段を有し、リダイレクトしたログ取得ルーチン内部に呼び出し時のパラメータを判別する手段を有し、リダイレクトしたログ取得ルーチン内部で元の関数を呼び出す手段を有し、元の関数を呼び出す際に、その関数からの戻りをログ取得ルーチンにリダイレクトさせる手段を有し、リダイレクトしたログ取得ルーチン内部で関数からの戻り値を判別する手段を有する、ソフトウェア評価システム。
- 上記ソフトウェア評価システムにおいて、あるモジュールから別のモジュール内に存在するCOMサーバのメソッドへの呼び出しを、ログ取得のためのルーチンにリダイレクトする手段を有し、リダイレクトしたログ取得ルーチン内部に計時手段を有し、リダイレクトしたログ取得ルーチン内部に呼び出し時のパラメータを判別する手段を有し、リダイレクトしたログ取得ルーチン内部で元のメソッドを呼び出す手段を有し、元のメソッドを呼び出す際に、そのメソッドからの戻りをログ取得ルーチンにリダイレクトさせる手段を有し、リダイレクトしたログ取得ルーチン内部でメソッドからの戻り値を判別する手段を有する、ソフトウェア評価システム。
- 上記ソフトウェア評価システムにおいて、ログ取得のためのルーチンにリダイレクトする手段として、呼び出し元がメモリにロードするインポート関数アドレステーブルを、ログ取得のためのルーチンがロードされたメモリアドレスに書き換える手段を有する、ソフトウェア評価システム。
- 上記ソフトウェア評価システムにおいて、ログ取得のためのルーチンにリダイレクトする手段として、呼び出し元がメモリにロードするVirtual Address Tableを、ログ取得のためのルーチンがロードされたメモリアドレスに書き換える手段を有する、ソフトウェア評価システム。
- 上記ソフトウェア評価システムにおいて、ログ取得のためのルーチンが、呼び出された関数の情報を記録する手段を有し、書き換える前のインポート関数アドレステーブルに記載された元の関数を呼び出す手段を有する、ソフトウェア評価システム。
- 上記ソフトウェア評価システムにおいて、ログ取得のためのルーチンが、呼び出されたメソッドの情報を記録する手段を有し、書き換える前のVirtual Address Tableに記載された元のメソッドを呼び出す手段を有する、ソフトウェア評価システム。
- 上記ソフトウェア評価システムにおいて、ログ取得ルーチン内部で、関数/メソッドの呼び出された時刻、及び関数/メソッド呼び出し時のパラメータ、関数/メソッドから処理が戻った時刻、及び関数/メソッドからの戻り値をログとして記録する手段を有する、ソフトウェア評価システム。
- 上記ソフトウェア評価システムにおいて、ログ取得ルーチン内部で、関数/メソッド呼び出し時のパラメータをメモリアドレスと判別する手段を有し、関数/メソッド呼び出し時の該当メモリアドレスの内容を保持する手段を有し、関数/メソッドから処理が戻った時点での該当メモリアドレスの内容を保持する手段を有し、関数/メソッド呼び出し時及び関数/メソッドから処理が戻った時点での該当メモリアドレスの内容を、ログとして記録する手段を有する、ソフトウェア評価システム。
- 上記ソフトウェア評価システムにおいて、各モジュールのエクスポートする関数一覧を取得する手段を有し、メモリに配置されたインポート関数アドレステーブルのうち、何れの関数をログ取得ルーチンにリダイレクトするかの設定を、エクスポートする関数一覧から選択する手段を有する、ソフトウェア評価システム。
- 上記ソフトウェア評価システムにおいて、各COMサーバのエクスポートするインターフェース及びメソッド一覧を取得する手段を有し、メモリに配置されたVirtual Address Tableのうち、何れのメソッドをログ取得ルーチンにリダイレクトするかの設定を、エクスポートするインターフェース及びメソッド一覧から選択する手段を有する、ソフトウェア評価システム。
- 上記ソフトウェア評価システムにおいて、各モジュールのエクスポートする関数一覧、もしくは各COMサーバのエクスポートするインターフェース及びメソッド一覧をファイル形式で供給する手段を有し、そのファイル内に、エクスポートされたそれぞれの関数/メソッドにおけるパラメータ及び戻り値の定義を記述する手段を有し、その定義ファイルから、何れのモジュールの、何れの関数/メソッドの、何れのパラメータ、あるいは何れの戻り値をログ取得ルーチンにより記録するかの設定を、選択する手段を有する、ソフトウェア評価システム。
- 上記ソフトウェア評価システムにおいて、何れのモジュールの、何れの関数/メソッドの、何れのパラメータ、あるいは何れの戻り値をログ取得ルーチンにより記録するかの設定を、ファイルとして保存する手段を有し、そのファイルを読み込む手段を有し、エクスポートする関数一覧、もしくは各COMサーバのエクスポートするインターフェース及びメソッド一覧として供給されたファイルを読み込む手段を有し、その2つのファイルに示された情報を以って、インポート関数アドレステーブル、もしくはVirtual Address Tableの何れのアドレスを、ログ取得のためのルーチンがロードされたメモリアドレスに書き換えるか選択する手段を有する、ソフトウェア評価システム。
- 上記ソフトウェア評価システムにおいて、あるモジュールから別のモジュール内に存在するモジュールへの関数呼び出しを行い、且つパラメータに可変長配列が存在する場合において、その配列要素内でログとして取得する要素数をユーザが制限する手段を有し、要素数をあらわすパラメータ/戻り値に示された数と、ユーザにより指示されたログに保存すべき制限要素数とを比較する手段を有し、比較した結果小さい方の要素数をもって、配列要素の内容をその数分、ログとして取得する手段を有する、ソフトウェア評価システム。
- 上記ソフトウェア評価システムにおいて、あるモジュールから別のモジュール内に存在するCOMサーバへのメソッド呼び出しを行い、且つパラメータに可変長配列が存在する場合において、その配列要素内でログとして取得する要素数をユーザが制限する手段を有し、要素数をあらわすパラメータ/戻り値に示された数と、ユーザにより指示されたログに保存すべき制限要素数とを比較する手段を有し、比較した結果小さい方の要素数をもって、配列要素の内容をその数分、ログとして取得する手段を有する、ソフトウェア評価システム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004207214A JP2006031248A (ja) | 2004-07-14 | 2004-07-14 | 関数呼び出しをフックしてログを生成するソフトウェア評価システム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004207214A JP2006031248A (ja) | 2004-07-14 | 2004-07-14 | 関数呼び出しをフックしてログを生成するソフトウェア評価システム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2006031248A true JP2006031248A (ja) | 2006-02-02 |
Family
ID=35897539
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004207214A Withdrawn JP2006031248A (ja) | 2004-07-14 | 2004-07-14 | 関数呼び出しをフックしてログを生成するソフトウェア評価システム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2006031248A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007241432A (ja) * | 2006-03-06 | 2007-09-20 | Mitsubishi Electric Corp | ソフトウェア試験装置、ソフトウェア試験方法及びソフトウェア試験用プログラム |
KR101763804B1 (ko) * | 2011-01-12 | 2017-08-14 | 에스케이플래닛 주식회사 | 모바일 어플리케이션 검증 방법 및 이를 적용한 단말 |
KR101781527B1 (ko) * | 2016-09-30 | 2017-10-23 | 에스케이플래닛 주식회사 | 모바일 어플리케이션 검증 방법 및 이를 적용한 단말 |
-
2004
- 2004-07-14 JP JP2004207214A patent/JP2006031248A/ja not_active Withdrawn
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007241432A (ja) * | 2006-03-06 | 2007-09-20 | Mitsubishi Electric Corp | ソフトウェア試験装置、ソフトウェア試験方法及びソフトウェア試験用プログラム |
KR101763804B1 (ko) * | 2011-01-12 | 2017-08-14 | 에스케이플래닛 주식회사 | 모바일 어플리케이션 검증 방법 및 이를 적용한 단말 |
KR101781527B1 (ko) * | 2016-09-30 | 2017-10-23 | 에스케이플래닛 주식회사 | 모바일 어플리케이션 검증 방법 및 이를 적용한 단말 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9514029B2 (en) | Partial recording of a computer program execution for replay | |
US7478282B2 (en) | Log acquisition method and its control program and storage medium | |
US20130125096A1 (en) | Systems and Methods for Dynamic Collection of Probe Call Sites | |
US20220214882A1 (en) | Stack traces using shadow stack | |
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 | |
CN112667246A (zh) | 应用功能扩展的方法、装置及电子设备 | |
JP4280749B2 (ja) | ログ取得方法およびプログラム、記憶媒体 | |
JP4125055B2 (ja) | ログ取得方法 | |
JP2006031248A (ja) | 関数呼び出しをフックしてログを生成するソフトウェア評価システム | |
JP4125053B2 (ja) | ログ取得方法 | |
JP4125056B2 (ja) | ログ取得方法 | |
JP2009064125A (ja) | サーバ装置、そのプログラム | |
JP4125054B2 (ja) | ログ取得方法 | |
US7305660B2 (en) | Method to generate a formatted trace for an embedded device | |
US7519868B2 (en) | Information processing apparatus, information processing method, computer program, and storage medium | |
US20100205598A1 (en) | Method for installing operating system in computer | |
JP2005301415A (ja) | コンパイル方式、シミュレータ、エミュレータおよびプログラム開発支援システム | |
JP2003228492A (ja) | 計算機シミュレーションプログラム、プロセッサのモデルの検証方法、及び計算機シミュレーション方法 | |
JP2003140921A (ja) | データ処理システム及びデータ処理方法、並びに記憶媒体 | |
JP2001134464A (ja) | 情報処理方法および装置 | |
JP5447841B2 (ja) | 情報処理装置、デバッグ情報取得方法、およびデバッグ情報取得プログラム | |
JP2006040020A (ja) | 関数ログを取得しハンドルパラメータからカラー出力データを検出するソフトウェア評価システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20071002 |