情報処理装置及びその制御方法、コンピュータプログラム、記憶媒体
【課題】 特にカラー・データを扱うソフトウェアの処理ログを容易に解析可能とする技術を提供する。
【解決手段】 本発明によれば、第1のモジュールにより呼び出し要求がなされた関数が、第2のモジュールに色情報を設定する色情報設定関数であるか否かを判定し、前記色情報設定関数である場合に、前記色情報を記憶する記憶制御手段と、前記第1のモジュールにより呼び出し要求がなされた関数が、前記第2のモジュールに前記色情報設定関数によって設定された色情報を利用して所定の画像の出力を指示する画像出力関数であるか否かを判定し、前記画像出力関数である場合に、前記記憶制御手段によって記憶された色情報を前記所定の画像に関する画像情報と対応づけて履歴情報として出力する出力手段とを備えることを特徴とする情報処理装置が提供される。
【解決手段】 本発明によれば、第1のモジュールにより呼び出し要求がなされた関数が、第2のモジュールに色情報を設定する色情報設定関数であるか否かを判定し、前記色情報設定関数である場合に、前記色情報を記憶する記憶制御手段と、前記第1のモジュールにより呼び出し要求がなされた関数が、前記第2のモジュールに前記色情報設定関数によって設定された色情報を利用して所定の画像の出力を指示する画像出力関数であるか否かを判定し、前記画像出力関数である場合に、前記記憶制御手段によって記憶された色情報を前記所定の画像に関する画像情報と対応づけて履歴情報として出力する出力手段とを備えることを特徴とする情報処理装置が提供される。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソフトウェアのデバッグを行う技術に関する。
【背景技術】
【0002】
従来より、再現率の低いソフトウェアの問題を解決するために、開発中のソフトウェアのソースコードに処理ログを出力するルーチンを追加し、ソフトウェアの実行時に出力される処理ログを解析して、ソフトウェアのデバッグを行う方法が知られている。
【0003】
このような方法によるデバッグは、プリンタ装置等の画像形成装置の動作を制御するソフトウェアの開発工程に対しても適用されている。例えば、特定のカラーを意図して出力したデータに基づいて印刷処理を行ったところ、開発したソフトウェアのバグが原因で、その出力結果が想定したものと異なっているという障害が発生した状況を考える。この場合、従来のデバッグは、カラー・データに関して処理や通信等を行う全てのソースコードに対して処理ログを出力するルーチンを追加し、カラー・データに関するログをモジュール毎に取得して、それらを解析するという形でなされていた。
【0004】
しかしながら、上記従来の技術は以下の問題がある。
【0005】
(1)開発中のソフトウェアを構成する各モジュールが個別にログを出力するため、ソフトウェア全体の処理について検証するためには、それぞれのログを統合して解析する必要がある。このため、ログの解析から問題の箇所を発見するまでに多大な工数を要する。
【0006】
(2)ログを解析して意味のある情報を迅速に得ることができるようにするためには、適切なログ取得用ルーチンをソースコードの適切な箇所に配置する必要があるが、このようなルーチンを構成することは一般に困難である。
【0007】
そこで、複数にモジュール分けされているソフトウェアにおいて、アプリケーションソフトウェアに相当するモジュールから別のモジュール内に存在する関数への呼び出しを仲介し、当該呼び出しに応じた別モジュールにおける処理のログを取得するログ取得用モジュールを提供することにより、各モジュールに処理ログを出力するルーチンを追加せずとも、処理ログを取得可能とする方法が提案されている(例えば特許文献1参照)。
【0008】
(3)しかしながら、この場合も、ソフトウェアが大量のデータを扱う場合や、ログ取得用ルーチンの構成により、取得できるログが膨大になり、その解析作業が困難になる。特に、画像形成装置のソフトウェアのデバッグ作業においては、カラー・データのすべてをログに保存すると、ログ取得に多大な時間がかかる上にログ・ファイルのサイズが膨大になる。このため、ログ・ファイルを解析して有用な情報を得ることが困難になり、解析作業に多大な工数を要してしまう。
【特許文献1】特開2004−38311号公報
【発明の開示】
【発明が解決しようとする課題】
【0009】
以上のように、従来の構成においてはカラー・データを扱うソフトウェアの処理ログを解析することに多大な工数を要していた。
【0010】
本発明は上記問題に鑑みなされたものであり、特にカラー・データを扱うソフトウェアの処理ログを容易に解析可能とする技術を提供することを目的とする。
【課題を解決するための手段】
【0011】
上記目的を達成するため、例えば本発明による情報処理装置は以下の構成を備える。即ち、
第1、第2のモジュールと、該第1のモジュールから該第2のモジュール内の関数への呼び出しを仲介し、当該呼び出しに応じた該第2のモジュールにおける処理ログを取得するための第3のモジュールとを実行する情報処理装置であって、
前記第1のモジュールにより呼び出し要求がなされた関数が、前記第2のモジュールに色情報を設定する色情報設定関数であるか否かを判定し、前記色情報設定関数である場合に、前記色情報を記憶する記憶制御手段と、
前記第1のモジュールにより呼び出し要求がなされた関数が、前記第2のモジュールに前記色情報設定関数によって設定された色情報を利用して所定の画像の出力を指示する画像出力関数であるか否かを判定し、前記画像出力関数である場合に、前記記憶制御手段によって記憶された色情報を前記所定の画像に関する画像情報と対応づけて履歴情報として出力する出力手段と
を備える。
【発明の効果】
【0012】
本発明によれば、特にカラー・データを扱うソフトウェアの処理ログを容易に解析可能とする技術を提供することができる。
【発明を実施するための最良の形態】
【0013】
以下、添付図面を参照して本発明に係る実施の形態を詳細に説明する。ただし、この実施の形態に記載されている構成要素はあくまでも例示であり、この発明の範囲をそれらのみに限定する趣旨のものではない。
【0014】
[第1実施形態]
<システム構成>
図1は、本実施形態に対応する情報処理装置の構成を例示的に示す図である。説明を簡略化するために、本実施形態では、情報処理システムが1台のPC内部に構築されるものとする。ただし、本発明の特徴は、複数の情報処理装置を用いた分散環境としても有効である。
【0015】
図1のように、本情報処理装置(PC)は、CPU1、チップセット2、RAM3、ハードディスクコントローラ4、ディスプレイコントローラ5、ハードディスクドライブ(以下、HDDと呼ぶ)6、CD−ROMドライブ7、ディスプレイ8が搭載されている。また、CPU1とチップセット2を繋ぐ信号線11、チップセット2とRAM3を繋ぐ信号線12、チップセット2と各種周辺機器とを繋ぐ周辺機器バス13、ハードディスクコントローラ4とHDD6を繋ぐ信号線14、ハードディスク4とCD−ROMドライブ7を繋ぐ信号線15、ディスプレイコントローラ5とディスプレイ8を繋ぐ信号線16が搭載されている。
【0016】
図1において、CPU1は、HDD6に格納されているアプリケーションプログラム、オペレーティングシステム(OS)や制御プログラム等を実行し、RAM3にプログラムの実行に必要な情報、ファイル等を一時的に格納する制御を行う。
【0017】
チップセット2は、情報処理装置内部のCPU1の周辺回路を搭載したLSI等のチップの集まりであり、メモリインタフェース等の制御回路が搭載されている。RAM3は、各種データを一時記憶するためのメモリであり、CPU1の主メモリ、ワークエリア等として機能する。
【0018】
HDD6は、所定の情報を記憶する大容量メモリである。HDD6には、アプリケーションプログラム、OS、制御プログラム、関連プログラム等が格納される。CD−ROMドライブ7は、記録媒体へのアクセスを実現する装置であり、CD−ROMメディア(記録媒体)に記憶されたプログラム等を本情報処理装置にロードすることができる。ハードディスクコントローラ4は、HDD6とCD−ROMドライブ7の動作を制御する装置である。
【0019】
ディスプレイ8は表示出力装置であり、入力されたコマンドや、それに対する情報処理装置の応答出力等を表示したりするものである。ディスプレイコントローラ5は周辺機器バス13とディスプレイ8とを仲介してディスプレイ8の動作を制御する。周辺機器バス8は、情報処理装置内のデータの流れを司るものである。
【0020】
尚、以上の各装置と同等の機能を実現するソフトウェアにより、ハードウェア装置の代替として構成することもできる。また、図1の構成は本発明を実施するための最低限の構成であり、他の装置が構成要素として付加されている構成でも構わない。
【0021】
本実施形態では、メディアから本実施形態に係るプログラム及び関連データを直接RAM3にロードして実行させる例を示すが、これ以外にも、本実施形態に係るプログラムを動作させる度に、既にプログラムがインストールされているHDD6からRAM3にロードするようにしてもよい。また、本実施形態に係るプログラムをROM(不図示)に記録しておき、これをメモリマップの一部をなすように構成し、直接CPU1で実行することも可能である。
【0022】
<IAT Patch>
次に、本実施形態に係る情報処理装置を説明するために、図2を参照して、複数のモジュールから構成される評価対象のソフトウェアが、通常の状態でどのようにメモリ(RAM3)にロードされるかを説明する。図2は、関数ロード時の通常のメモリ構成を模式的に示した図である。
【0023】
通常、複数のモジュールから構成されるソフトウェアは、実行ファイル(以下、EXEと呼ぶ)23とダイナミックリンクライブラリ(以下、DLLと呼ぶ)27とに分かれてRAM3にロードされる。ここで、EXE23はソフトウェア全体の実行制御を行なうファイルであり、DLL27はモジュールとして存在しEXE23の補完的な役割を担うファイルである。
【0024】
この図では、1つのEXE23がA.DLL25及びB.DLL26の2つのダイナミックリンクライブラリ内の関数を使用している例を示しており、実際に使用される関数はFunc AA,Func AB,Func AC,Func BA,Func BB,Func BCの6個である。DLL27の関数の実体は、DLL27毎(25,26)にロードされ、それぞれの関数は該当するDLLの一部としてロードされる(36〜41)。
【0025】
RAM3において、EXE3はコードセグメント28とデータセグメント29、そしてインポート関数アドレステーブル22の各セグメントから構成される。コードセグメント28は、ソフトウェアの演算命令のコード等が格納されている。データセグメント29は、演算対象の変数や定数等のデータが格納されている。
【0026】
インポート関数アドレステーブル22は、DLL27として定義されている関数のアドレスを格納したものであり、EXE23はインポート関数アドレステーブル22を参照して関数のアドレスを取得し、関数をロードする。インポート関数アドレステーブル22は、関数の所属するDLL毎に関数のアドレス値を格納している。図2の例では、A.DLL25に含まれる関数のアドレスを格納した領域21と、B.DLL26に含まれる関数のアドレスを格納した領域24とから構成され、それぞれの領域に関数がロードされたアドレスが格納されている(30〜35)。
【0027】
例えば、EXE23のコードセグメント内にあるコードが関数Func AA36を呼び出す場合には、まずインポート関数アドレステーブル22内に格納されたFunc AAのアドレス30を参照する。即ち、A.DLLの一部として読み込まれたFunc AAコード36のアドレスを参照し、そのアドレスをコールすることによって、EXE23のコードはA.DLL25のFunc AA36を呼び出すことができる。
【0028】
次に、ログを取得するための方法であるIAT Patch(Import Address Table Patch)という手法を用いて関数呼び出しを仲介した場合の、情報処理装置のメモリ構成の一例について、図3を参照して説明する。
【0029】
IAT Patchを用いたログの出力は、関数呼び出しを中継し必要な情報をログとして出力するモジュール(以下、APIトレーサーと呼ぶ)をRAM3に格納し、EXE53のインポート関数アドレステーブル52を書き換えることにより実現される。即ち、EXE53はDLL57を直接コールするのではなく、ログを出力するAPIトレーサーをコールして間接的にDLL57をコールすることで、ログの出力が実現される。以下、その詳細を説明する。
【0030】
ログを取得する前処理として、本実施形態に対応する情報処理装置は、後述する関数定義ファイルとトレースシナリオファイルを読み込み、APIトレーサーをC.DLLとして生成する。そして、情報処理装置は、図3のように、RAM3にIAT Patch用のDLLであるC.DLL58をロードするように制御する。ここで、C.DLL58内のFunc CAA73,Func CAB74,Func CAC75,Func CBA76,Func CBB77,Func CBC78の各コードは、ログを記録すると共に、元々関数呼び出しを受けるべくメモリ(RAM3)にロードされている、該当する関数であるFunc AA67,Func AB68,Func AC69,Func BA70,Func BB71,Func BC72を呼び出すものである。
【0031】
そして、本実施形態に対応する情報処理装置は、後述するトレースシナリオファイルに基づいて、EXE53のインポート関数アドレステーブル52内に書かれた関数のアドレスを、C.DLL58内のログ取得コードである、Func CAA73,Func CAB74,Func CAC75,Func CBA76,Func CBB77,Func CBC78の各アドレスに書き換える(61〜66)。
【0032】
次に、図3のように構成されたモジュールの構成において、IAT Patchがどのように実現されるかについて、図4を参照して説明する。図4は、図3におけるIAT Patchの処理をあらわすタイミングチャートである。ここでは、EXE23がA.DLL21内のFunc AA36を呼び出す際に、IAT Patchによるログ取得コード(C.DLL58)がどのように動作するかの例をあらわしている。他の関数の場合についても同様の処理が行われることは言うまでもない。
【0033】
EXE91がFunc AAをコールすると(94)、C.DLL92内にあるログ取得コードは、DLL名/関数名、呼び出し時刻、呼び出し時のパラメータ、呼び出し時のポインタ・パラメータの指すメモリ内容、及びその他の情報を、それぞれ所定の記憶装置(RAM3,HDD6等)に保存する(95)。その後、C.DLL92は、本来呼び出されるはずであった、A.DLL93内のFunc AAをコールする(96)。
【0034】
A.DLLのFunc AA処理(97)が終了し、C.DLL92に制御がリターンすると(98)、C.DLL92はリターン時の時刻、戻り値、リターン時にポインタ・パラメータが指すメモリ内容、及びその他の情報を、それぞれ所定の記憶装置に保存する(99)。その後、C.DLL92は保存したログ情報をファイルに書き込み(100)、あたかもA.DLL93のFunc AAが通常通りに終了したかのように、EXE91にリターンする(101)。
【0035】
図5は、本実施形態に対応する情報処理装置において実行ファイルEXEが実行される場合の動作を例示的に示した図である。通常は実行形式のEXE113が、DLL−1(116)やDLL−2(117)内の関数を呼び出すが、ここではAPIトレーサと呼ばれるログ取得コードを埋め込み(114)、処理ログを生成している(115)。APIトレーサ114は、DLL−1(116)やDLL−2(117)の関数定義を記述した関数定義ファイル111と、どのDLLのどの関数のインポート関数テーブルを書き換えてログを取得するかを記述した設定シナリオファイル112に基づいて動作する。
【0036】
<VTable Patch>
図6は、本実施形態に対応する情報処理装置において、実行ファイルEXE118がCOM(Component Object Model:コンポーネント・オブジェクト・モデル)サーバでエクスポートされているインターフェースのインスタンスを作成する場合の、メモリ構成の一例を示す図である。
【0037】
通常、インターフェースのインスタンス作成を行うと、COMサーバ内で、要求されたインターフェース(121,122)と、そのメソッド(130〜135)が作成され、それらは共にメモリ(RAM3)上にロードされる。ここで、virtual address tableは作成された各インターフェース毎に作られ(118,120)、作成要求を行ったEXE119に渡される。このvirtual address tableには各メソッドについて作成されたアドレスが書かれている(124〜129)。EXE119はこれら情報を利用し、各インターフェースに対して呼び出しを行う。図6では、1つのEXE119がInterface A121及びInterface B22の2つのインターフェースのインスタンスを作成しており、そのインターフェース内部のメソッドを使用している例を示しており、実際に使用されているメソッドは、Method AA130, Method AB131, Method AC132, Method BA133, Method BB134, Method BC135となっている。
【0038】
EXE119のコードが関数Method AA130を呼び出す場合には、まずvirtual address table内に書かれたMethod AA130のアドレス124が読み込まれる。このアドレス124にはCOMサーバのInterface A121の一部として作成されたMethod AAコード130のアドレスが書かれており、そのアドレスをコールすることによって、EXE119のコードはInterface A121のMethod AA130を呼び出すことができる。
【0039】
図7は、本実施形態に対応する情報処理装置のメモリ構成をあらわす図であり、図6とは、ログ取得用のコードとしてVTable Patch(virtual address table Patch)という手法を用いて、メソッド呼び出しを仲介しているという点で異なっている。
【0040】
ログ取得が開始されると、RAM3内にはVTable Patch用のDLL143がロードされる。このDLLはvirtual address table(136,138)内に書かれたメソッドのアドレスを、DLL内のログ取得コードであるMethod A’A145,Method A’B146,Method A’C147,Method B’A148,Method B’B149,Method B’C150のアドレスに書き換える。DLL内のMethod A’A157,Method A’B158,Method A’C159,Method B’A160,Method B’B161,Method B’C162のコードは、ログを記録すると共に、元々のメソッド呼び出しを受けるべくメモリ(RAM3)にロードされていたMethod AA157,Method AB158,Method AC159,Method BA160,Method BB161,Method BC162を呼び出す。
【0041】
図8は、図7におけるVTable Patchの処理をあらわすタイミングチャートである。説明を簡略化するために、この図ではEXE163がCOMサーバ内のInterface AのMethod AAを呼び出す際に、VTable Patchによるログ取得コードがどのように動作するかの例をあらわしている。他のメソッドの場合についても同様の処理が行われることはいうまでもない。
【0042】
EXE163がMethod AAをコールすると(166)、DLL164内にあるログ取得コードは、モジュール名/インターフェース名/メソッド名、呼び出し時刻、呼び出し時のパラメータ、呼び出し時のポインタパラメータの指すメモリ内容、及びその他の情報をメモリ(RAM3)に保存する(167)。その後DLL164は本来呼び出されるはずであった、COMサーバ165内のMethod AAをコールする(168)。COMサーバのMethod AA処理(169)が終了し、DLL164に制御がリターンすると(170)、DLL164はリターン時の時刻をメモリに保存し、戻り値をメモリ(RAM3)に保存し、リターン時にポインタパラメータが指すメモリ内容を、メモリ(RAM3)に保存する(171)。その後、DLL164は保存したログ情報をファイルに書き込み(172)、あたかもCOMサーバのMethod AAが通常通りに終了したかのように、EXE163にリターンする(173)。
【0043】
図9は、本実施形態に対応する情報処理装置において実行形式ファイルEXEが実行される場合の動作の一例を示す図である。通常は実行形式のEXE176が、COMサーバ−1(179)やCOMサーバ−2(180)内のメソッドを呼び出すが、ここではAPIトレーサと呼ばれるログ取得コードを埋め込み(177)、処理ログを生成している(178)。APIトレーサは、COMサーバ−1(179)やCOMサーバ−2の関数定義を記述したファイル(関数定義ファイル)174と、どのCOMサーバのどのインターフェースのどのメソッドのvirtual address tableを書き換えてログを取得するかを記述した設定シナリオファイル175に基づいて動作する。
【0044】
図10は、本実施形態に対応する情報処理装置において使用する、関数定義ファイルの一例を示したものである。この例では、一般的に広く用いられているIDL(Interface Definition Language:インタフェース定義言語)により、関数の定義が記述されている。本実施形態に対応する情報処理装置においては、このIDLをトークン化したタイプライブラリファイルを関数定義ファイルとして使用する。なお、関数定義ファイルは付加バイナリ情報(各ログ情報)を取得するための定義を提供することを特徴とするものであり、関数定義は必ずしもIDLによって記述されている必要はない。例えば、通常のテキストファイルを用いることも可能であり、XMLなどのマークアップ言語を用いることも可能である。
【0045】
<出力データのカラー判別>
次に、本実施形態に対応する情報処理装置において、プリンタ出力データのカラー判別を行う構成について説明する。ここでは、説明の簡略化のため、画像形成装置に対してテキスト描画コマンドを送出する場合について例示的に説明するが、以下の構成はいかなるグラフィック・オブジェクトについても適用可能である。また、以下ではプリンタ装置に対して出力される描画コマンドについてログを取得する構成について例示的に説明を行うが、出力対象はどのような装置でもよい。
【0046】
図11は、本実施形態に対応する情報処理装置において、プリンタ出力データのカラー判別を行なうための、関数定義ファイルの例である。本実施形態では、オペレーティングシステム(Operating System)にOSGraphicKernel.dllというダイナミックリンクライブラリファイルが用意されており、そのライブラリ内に、テキストの描画を行なう関数TextOut202、テキストの色を設定する関数SetTextColor204、設定されているテキストの色を取得する関数GetTextColor203が用意されているものとする。尚、関数名はこれらに限定されるものではない。また、テキスト以外のグラフィック・オブジェクトを出力する場合は、関数名は当然に異なったものになる。
【0047】
関数TextOut202は、デバイスコンテキストのハンドル、描画開始位置のx,y座標、描画する文字列、描画する文字列の数をパラメータ(引数)として入力し、入力値に基づいて所定の対象にテキストの描画コマンドを発行するように動作する。そして、動作が正しく終了したか否かを示す2値情報を戻り値として返す。
【0048】
ただし、デバイスコンテキストは、オペレーティングシステムによって仮想化された「面」に対するハンドルであり、描画対象装置を指定するものである。本実施形態において、デバイスコンテキストはディスプレイ8向けのものとプリンタ(不図示)向けのものが用意されている。例えば、プリンタ向けを示すデバイスコンテキスト(TextOut関数の第一パラメータ)のハンドルを選択して、その他の必要なパラメータを入力することにより、プリンタ装置に対してテキストの描画コマンドを発行することができる。なお、デバイスコンテキストは、typedefによって定義している(200)。
【0049】
関数SetTextColor204は、TextOut202をコールすることによってテキストを描画する際に、テキストの色を設定する関数であり、後述するようにSetTextColor204をコールする前にコールして用いる。SetTextColor204は、デバイスコンテキストのハンドルと、設定するテキストの色をパラメータとして入力し、パラメータに指定された色情報を設定し、SetTextColor204をコールする前に設定されていた色情報を戻り値として返す。
【0050】
関数GetTextColor203は、設定されているテキストの色情報を取得する関数である。GetTextColor203は、デバイスコンテキストのハンドルをパラメータとして入力し、入力されたハンドルに対応するデバイスコンテキストに設定されている色情報を取得し、その値を戻り値として返す。
【0051】
上記の関数をコールして特定の色の文字をプリンタに出力する際には、以下の処理を行う。即ち、
(1)SetTextColor関数204でテキスト色の設定を行ない、
(2)TextOut関数202でテキストの描画指示を行なう。
【0052】
このような処理手順に鑑み、プリンタ装置に対応するデバイスコンテキストに対してアプリケーション・ソフトウェアがテキスト描画コマンドを発行する際に、そのテキストの色に関するログを、IAT Patchを用いて取得する処理について、図12を参照して説明する。図12は、このような処理の流れを示すフローチャートである。尚、以下の処理は上述したVTable Patchを用いて構成してもよい。
【0053】
アプリケーション・ソフトウェアがOSGraphicKernel.dllの関数呼び出しを開始すると、本実施形態に対応する情報処理装置はログの取得を開始する。即ち、ログ書き込みファイルをHDD6に作成し、ステップS1において、モジュール名、インターフェース名、関数/メソッド名を取得し、これらの情報をログとしてログ書き込みファイルに追加する。そして、ステップS2において、関数呼び出し時の時刻、パラメータ及びポインタ・パラメータの指すメモリ(RAM3)の内容を取得し、ログとしてログ書き込みファイルに追加する。尚、先に述べたように、パラメータには文字列の内容等の画像の形状に関する情報や、描画位置等の画像の位置に関する情報が含まれている。このことは画像がテキストに関するものに限られず、他のグラフィック・オブジェクトに適用する場合も同様である。
【0054】
次に、呼び出された関数の種類に応じて別個の処理を行う。即ち、ステップS3において、呼び出された関数がテキストカラー設定関数(SetTextColor)であるか否かを判定し、テキストカラー設定関数であれば(ステップS3においてYES)ステップS4へ進む。ステップS4においては、関数呼び出しのパラメータ(引数)を解析し、設定する色のパラメータを取得する。そして、取得した色のパラメータをRed値、Green値、Blue値に変換する。ステップS5において、変換した各値をRAM3に一時的に記憶制御し、ステップS8へ進む。
【0055】
ステップS8においては、OSGraphicKernelにアクセスし、アプリケーション・ソフトウェアが呼び出し要求を行った関数を実際に呼び出す。この時、関数のパラメータをアプリケーション・ソフトウェアが送出した値に設定する。関数からリターンが発生すると、ステップS9において、リターン時の時刻、戻り値及びポインタ・パラメータの指すメモリの内容をログとしてログ書き込みファイルに追加する。そして、ステップS10へ進む。
【0056】
ステップS10においては、アプリケーション・ソフトウェア、或いは、ユーザから終了の命令がなされたか否かを判定する。終了の命令がなされた場合(ステップS10においてYES)は処理を終了し、なされていない場合(ステップS10でNO)はステップS1へ戻り処理を継続する。
【0057】
アプリケーション・ソフトウェアから呼び出された関数がテキストカラー設定関数でない場合は(ステップS3においてNO)ステップS6へ進み、呼び出された関数がテキスト出力関数(TextOut)であるか否かを判定する。テキスト出力関数であれば(ステップS6においてYES)ステップS7へ進み、テキスト出力関数でなければ(ステップS6においてNO)ステップS8へ進む。ステップ8以降の処理は先に述べたものと同様である。
【0058】
ステップS7においては、ステップS5で一時的に記憶制御した、Red値、Green値、Blue値から構成される色情報をRAM3から読み出し、ログとしてHDD6のログ書き込みファイルに他の画像情報(呼び出し時の時刻、パラメータ(画像の位置や形状に関する情報が含まれている)、ポインタ・パラメータの指すメモリの内容等)との対応が分かるように追加する。RAM3に色情報が格納されていない場合は、エラー情報をログとしてログ書き込みファイルに追加する。そしてステップS8へ進む。ステップS8以降の処理は先に述べたものと同様である。
【0059】
次に、上記の処理とIAT−Patch法の各構成要素との対応について、図22を参照して説明する。図22は対応するタイミングチャートである。
【0060】
図22において、301はアプリケーション・ソフトウェアの実行ファイルEXE、302はIAT Patchによるログ取得コード(IAT Patchコードと呼ぶ)、303はOSGraphicKernelをそれぞれ示している。
【0061】
EXE301が関数呼び出しを行う場合は、先に述べたように、OSGraphicKernel.dll303に対して行うのではなく、IAT Patchコード302に対して行う(304)。IAT Patchコード302は、関数呼び出しを受け取ると、関数名や呼び出し時刻等の情報を、ログとしてHDD6のログ書き込みファイルに追加する(305)。この処理は、図12のステップS1及びS2の処理に対応する。
【0062】
そして、IAT Patchコード302は、呼び出し要求がなされた関数の種類を判定し、関数がSetTextColorの場合と、TextOutの場合は、それぞれ所定の処理を行う。関数がSetTextColorの場合は図12のステップS4及びS5の処理を行い(306)、TextOutの場合は図12のステップS7の処理を行う(307)。
【0063】
次に、呼び出し要求がなされたOSGraphicKernel.dll303の関数にアクセスし(308)、関数に所定の処理を実行させる(309)。これらの処理は図12のステップS8に対応する。
【0064】
OSGraphicKernel.dll303の関数からリターンが発生すると(310)、戻り値や時刻等の情報をログとしてログ書き込みファイルに追加する(311、312)。これらの処理は図12のステップS9に対応する。そして、OSGraphicKernel.dll303の関数からリターンをEXE301へ返す。
【0065】
次に、以上のような処理の結果得られるログについて図13を参照して説明する。図13は、本実施形態に対応する情報処理装置において、図11の定義及び図12、22の処理により取得されるログデータを例示的に示す図である。図13において、205、206は、関数TextOutが呼び出されたときに、デバイスコンテキストに対して指定されていた色の情報を示しており、実際にどのような色情報に基づいて出力要求がなされたかを、時系列順に容易に把握することができる。また、色情報は他の画像情報と関連づけた形で表示されるため、例えば、プリンタの出力結果とログとの比較が容易である。
【0066】
以上のように、IAT Patchを用いてカラー出力を検出することにより、プリンタ装置等へのカラー出力において発生した障害に対して、アプリケーション・ソフトウェアがオペレーティングシステムに対してどのような指示を行なった結果その障害が発生したのかを、明示的に知ることができる。
【0067】
また、IAT Patchを用いたログ取得において、テキストカラー設定関数及びテキスト出力関数への呼び出しを判定しログを生成することで、カラー関連の処理に関するログの解析を容易にしている。更に、色情報のログを画像情報と対応づけて生成することで、例えば、プリンタの出力結果と、ログの中のグラフィック・オブジェクトの位置や色情報等とを比較してバグを検知することを可能にしており、ログを解析する際にバグの原因を容易に特定することができる。これにより、カラー関連の障害の原因を特定する作業を迅速に行うこと可能である。
【0068】
[第2実施形態]
第1実施形態においては、IAT Patchの手法に加えて、色情報の設定関数とグラフィック・オブジェクトの出力を指示する関数の呼び出しについて選択的にログを生成する構成について述べた。本実施形態においては、設定されている色情報を取得するテキストカラー取得関数(GetTextColor)を用いて色情報を取得する構成について説明する。尚、システム構成やOSGraphicKernel.dll等は第1実施形態と同様である。
【0069】
図14は、本実施形態に対応する情報処理装置に於いて、プリンタ出力データのカラー判別を行なう処理の流れを示すフローチャートである。アプリケーション・ソフトウェアがOSGraphicKernel.dllの関数呼び出しを開始すると、本実施形態に対応する情報処理装置はログの取得を開始する。即ち、ログ書き込みファイルをHDD6に作成し、ステップS21において、モジュール名、インターフェース名、関数/メソッド名を取得し、これらの情報をログとしてログ書き込みファイルに追加する。次に、ステップS22において、関数呼び出し時の時刻、パラメータ及びポインタ・パラメータの指すメモリ(RAM3)の内容を取得し、ログとしてログ書き込みファイルに追加する。そして、ステップS23へ進む。
【0070】
本実施形態においては、ステップS23〜ステップS26の処理が第1実施形態と異なっている。即ち、ステップS23において呼び出された関数がテキスト出力関数(TextOut)であるか否かを判定し、テキスト出力関数であれば(ステップS23においてYES)ステップS24へ進み、テキスト出力関数でなければ(ステップS23においてNO)ステップS27へ進む。ステップS24においては、IAT Patchコードから直接OSGraphicKernel.dllのテキストカラー取得関数(GetTextColor)を呼び出し、設定されている色情報を取得する。次に、ステップS25において、取得した色情報をRed値、Green値、Blue値に変換する。そして、ステップS26において、ステップS25で得られたRed値、Green値、Blue値をログとしてHDD6のログ書き込みファイルに他の画像情報(呼び出し時の時刻、パラメータ(画像の位置や形状に関する情報が含まれている)、ポインタ・パラメータの指すメモリの内容等)との対応が分かるように追加する。ステップS27以降の処理は図12のステップS8以降の処理と同様であるため、説明を省略する。
【0071】
次に、以上のような処理の結果得られるログについて図15を参照して説明する。図15は、本実施形態に対応する情報処理装置において、図14の処理により取得されるログデータを例示的に示す図である。図15において、207、208、209は、関数TextOutが呼び出されたときに、デバイスコンテキストに対して指定されていた色の情報を示しており、第1実施形態と同様に、実際にどのような色情報に基づいて出力要求がなされたかを、時系列順に容易に把握することができる。
【0072】
以上のように、本実施形態においては、IAT Patchコードからテキストカラー取得関数を呼び出す構成を採っていることにより、テキストカラー設定関数のログを取得せずに、テキスト出力関数時にテキストの出力に用いられた色データをログとして出力することができる。これにより、ログを生成する際にかかる時間やログを取得する際に必要なメモリを節約しつつ、第1実施形態と同様の効果を得ることができる。
【0073】
[第3実施形態]
第1、第2実施形態においては、カラー出力能力を持つ関数の全ての呼び出しについてログを出力する構成について述べたが、目的・用途によっては、そのような関数呼び出しについての全てのログは必要ない場合も考えられる。例えば、グレイスケール(無彩色)の画像出力とカラー(有彩色)の画像出力とを実行可能なシステムにおいて、有彩色の画像出力のみについてログを取得し、障害原因を特定したいという場合が考えられる。そこで、本実施形態においては、有彩色の画像出力のみについてログを取得する構成について例示的に説明する。尚、以下の構成は、例えば、無彩色の画像出力のみについてログを取得する場合にも適用可能である。尚、システム構成やOSGraphicKernel.dll等は第1実施形態と同様である。
【0074】
図16は、本実施形態に対応する情報処理装置に於いて、プリンタ出力データのカラー判別を行なう処理の流れを示すフローチャートである。アプリケーション・ソフトウェアがOSGraphicKernel.dllの関数呼び出しを開始すると、本実施形態に対応する情報処理装置はログの取得を開始する。即ち、ログ書き込みファイルをHDD6に作成し、ステップS41において、モジュール名、インターフェース名、関数/メソッド名を取得し、これらの情報をログとしてログ書き込みファイルに追加する。次に、ステップS42において、関数呼び出し時の時刻、パラメータ及びポインタ・パラメータの指すメモリ(RAM3)の内容を取得し、ログとしてログ書き込みファイルに追加する。そして、ステップS43へ進む。
【0075】
本実施形態においては、ステップS43〜ステップS47の処理が第1実施形態と異なる。即ち、ステップS43において呼び出された関数がテキスト出力関数(TextOut)であるか否かを判定し、テキスト出力関数であれば(ステップS43においてYES)ステップS44へ進み、テキスト出力関数でなければ(ステップS43においてNO)ステップS48へ進む。ステップS44においては、IAT Patchコードから直接OSGraphicKernel.dllのテキストカラー取得関数(GetTextColor)を呼び出し、設定されている色情報を取得する。次に、ステップS45において、取得した色情報をRed値、Green値、Blue値に変換し、ステップS46へ進む。
【0076】
本実施形態においては、ステップS46、S47の処理が第2実施形態と異なる。即ち、ステップS46において、ステップS44で取得した色情報が有彩色であるか否かを判定し、有彩色の場合(ステップS46でNO)ステップS47へ進み、ステップS45で得られたRed値、Green値、Blue値をログとしてHDD6のログ書き込みファイルに他の画像情報(呼び出し時の時刻、パラメータ(画像の位置や形状に関する情報が含まれている)、ポインタ・パラメータの指すメモリの内容等)との対応が分かるように追加する。有彩色でない場合(ステップS46でYES)は、ステップS48へ進む。尚、ステップS46における有彩色か否かの判定は、ステップS45で取得したRed値、Green値、Blue値について、Red値=Green値=Blue値が成立するか否か(成立する場合は無彩色、成立しない場合は有彩色)により行う。ステップS48以降の処理は図12のステップS8以降の処理と同様であるため、説明を省略する。
【0077】
次に、以上のような処理の結果得られるログについて図17を参照して説明する。図17は、本実施形態に対応する情報処理装置において、図16の処理により取得されるログデータを例示的に示す図である。図17において、210、211は、関数TextOutが呼び出されたときに、デバイスコンテキストに対して指定されていた色の情報を示しており、有彩色の場合のログのみが記録されている。実際にどのような色情報に基づいて出力要求がなされたかを時系列順に容易に把握することができる点は、第1、第2実施形態と同様である。
【0078】
以上のように、本実施形態においては、IAT Patchコードで有彩色か無彩色かの判定を実装する構成を採っていることにより、無彩色データのログを取得せずに、有彩色データのみをログとして出力することができる。これにより、ログを生成する際にかかる時間を削減しつつ、必要な情報のみが記載されたログを得ることができ、障害発見の作業能率を高めることができる。
【0079】
[第4実施形態]
第1〜3実施形態においては、説明を簡略するために、テキスト出力に関するログを取得する構成について例示的に説明したが、上記の構成はどのようなグラフィック・オブジェクトについても適用可能である。本実施形態では、テキストとは異なるグラフィック・オブジェクトの一例として、「ペン」オブジェクトの出力についてログを取得する構成について述べる。ペンオブジェクトとは、オペレーティングシステムに仮想的に備えられたグラフィック・オブジェクトであり、デバイスコンテキストに対して線の描画を指示する際に用いられる。
【0080】
図18は、本実施形態に対応する情報処理装置に於いて、プリンタ出力データのカラー判別を行なうための、関数定義ファイルの例である。本実施形態では、オペレーティングシステムにOSGraphicKernel.dllというダイナミックリンクライブラリファイルが用意されており、そのライブラリ内には、CreatePen223、SelectPen224、SetStartPoint225、LineTo226、GetCurrentPenAttribute227、DeletePen228を含む関数が用意されているものとする。
【0081】
関数CreatePen223はペンオブジェクトを生成する関数である。CreatePen223は、パラメータ(引数)としてペンオブジェクトの色情報を受け取り、指定された色のペンオブジェクトを生成してそのオブジェクトをハンドルを戻り値として返す。関数SelectPen224はデバイスコンテキストにペンオブジェクトを関連づける関数である。SelectPen224は、パラメータとしてデバイスコンテキストのハンドルとペンオブジェクトのハンドルを受け取り、指定されたデバイスコンテキストにペンオブジェクトを関連づけ、戻り値として関連づけが成功したか否かを示すブール値を返す。
【0082】
関数SetStartPoint225及びLineTo226はペンオブジェクトを用いた描画を行なうための関数である。SetStartPoint225は、パラメータとしてデバイスコンテキストのハンドル、描画開始位置の座標(x,y座標)を受け取り、線の始点の座標を設定する。LineTo226は、パラメータとしてデバイスコンテキストのハンドル、描画終了位置の座標(x,y座標)を受け取り、線の終点の座標を設定し、座標が設定された始点と終点を結ぶ線を出力するように指示する。なお、この時出力される線の色はCreatePen223のパラメータで設定された値である。
【0083】
関数GetCurrentPenAttribute227はペンオブジェクトに設定されている色情報を取得する関数である。GetCurrentPenAttribute227は、パラメータとしてデバイスコンテキストのハンドルとペンオブジェクトの色情報へのポインタを入力し、ペンオブジェクトの色を取得する。そして、取得した色情報にアクセスできるように色情報へのポインタを設定して、戻り値として色情報の取得が成功したか否かを示すブール値を返す。
【0084】
関数DeletePen228は、ペンオブジェクトを削除する関数である。DeletePen228は、パラメータとしてペンオブジェクトへのハンドルを入力し、ハンドルで指定されたペンオブジェクトをメモリから削除する。
【0085】
ある色の線をプリンタに出力する際には、以下の処理を行う。即ち、
(1)CreatePen関数で、特定の色を持つペン・オブジェクトを生成する
(2)プリンタ装置を仮想化したデバイスコンテキストに対して、SelectPen関数で、そのペン・オブジェクトを関連付ける
(3)SetStartPoint関数で、描画の開始座標を設定する
(4)LineTo関数で、描画の終了座標、すなわちデバイスコンテキストに関連付けられたペン・オブジェクトでどの座標まで線を書けばよいかを指示し、描画指令を行う
(5)DeletePen関数でペン・オブジェクトを削除する
このような処理手順に鑑み、プリンタ装置に対応するデバイスコンテキストに対してアプリケーション・ソフトウェアがペンオブジェクトの描画指令を発行する際に、そのペンオブジェクトの色に関するログを、IAT Patchを用いて取得する処理について、図19を参照して説明する。図19は、このような処理の流れを示すフローチャートである。尚、以下の処理は上述したVTable Patchを用いて構成してもよい。また、この例では第3実施形態と同様に有彩色の出力指令のログを取得する場合について述べるものとする。
【0086】
アプリケーション・ソフトウェアがOSGraphicKernel.dllの関数呼び出しを開始すると、本実施形態に対応する情報処理装置はログの取得を開始する。即ち、ログ書き込みファイルをHDD6に作成し、ステップS61において、モジュール名、インターフェース名、関数/メソッド名を取得し、これらの情報をログとしてログ書き込みファイルに追加する。そして、ステップS62において、関数呼び出し時の時刻、パラメータ及びポインタ・パラメータの指すメモリ(RAM3)の内容を取得し、ログとしてログ書き込みファイルに追加する。尚、先に述べたように、パラメータには文字列の内容等の画像の形状に関する情報や、描画位置等の画像の位置に関する情報が含まれている。このことは画像がペン・オブジェクトに関するものに限られず、他のグラフィック・オブジェクトに適用する場合も同様である。
【0087】
ステップS63においては、呼び出された関数がペン描画関数(LineTo)であるか否かを判定し、ペン描画関数の場合(ステップS63でYES)ステップS64へ進み、ペン描画関数ではない場合(ステップS63でNO)ステップS68へ進む。
【0088】
ステップS64においては、ペン状態取得関数(GetCurrentPenAttribute)をIAT Patchコードから内部的に呼び出し、ペンオブジェクトに設定された色情報を取得する。次に、ステップS65において、取得した色情報をRed値,Green値,Blue値に変換する。
【0089】
次に、ステップS66において、取得した色情報が有彩色であるか否かを判定し、有彩色の場合(ステップS66でNO)ステップS67へ進み、ステップS65で得られたRed値、Green値、Blue値をログとしてHDD6のログ書き込みファイルに他の画像情報(呼び出し時の時刻、パラメータ(画像の位置や形状に関する情報が含まれている)、ポインタ・パラメータの指すメモリの内容等)との対応が分かるように追加する。有彩色でない場合(ステップS66でYES)は、ステップS68へ進む。尚、ステップS66における有彩色か否かの判定は、ステップS65で取得したRed値、Green値、Blue値について、Red値=Green値=Blue値が成立するか否か(成立する場合は無彩色、成立しない場合は有彩色)により行う。ステップS68以降の処理は図12のステップS8以降の処理と同様であるため、説明を省略する。
【0090】
次に、以上のような処理の結果得られるログについて図20を参照して説明する。図20は、本実施形態に対応する情報処理装置において、図19の処理により取得されるログデータを例示的に示す図である。図20において、230、231は、関数LineToが呼び出されたときに、デバイスコンテキストに対して指定されていた色の情報を示しており、有彩色の場合のログのみが記録されている。実際にどのような色情報に基づいて出力要求がなされたかを時系列順に容易に把握することができる点は、第1〜3実施形態と同様である。
【0091】
以上のように、本実施形態においては、グラフィック・オブジェクトの出力指示のタイミングで色情報を取得してログに記録することにより、グラフィック・オブジェクトの一つであるペンオブジェクトについてもログを得ることができる。
【0092】
尚、本実施形態はペン・オブジェクトを例に説明したが、どのようなグラフィック・オブジェクトに対しても有効である。例えば、オペレーティングシステムが提供するグラフィック・オブジェクトとしてブラシ・オブジェクト、ビットマップ・オブジェクトが用意されている場合、すべてのグラフィック・オブジェクトに対して同様の処理を行なうことにより、アプリケーション・ソフトウェアがオペレーティングシステムに対して、プリンタ装置にどのような色の描画を行なうよう指示したかを、IAT Patch/VTable Patchの技術を用いて、すべてログ・ファイルに取得することができる。これによって、カラーに関係する障害に関して迅速な原因の特定が可能となる。
【0093】
[第5実施形態]
第1〜4実施形態においては、IAT Patch/VTable Patchを用いてログを出力する構成について述べたが、本実施形態では出力されたログを解析しやすいように、カラーフィールドを持つレコードを明示的に他のレコードと分けて表示するユーザインタフェース(UI)について述べる。
【0094】
図21は、本実施形態に対応する情報処理装置における、ログ表示ユーザ・インタフェースの一例である。このユーザインタフェースにおいては、カラー情報フィールドを持つレコードに関して強調表示する。図21の例では、230のように印を付して表示する。但し、レコードとは1回の関数呼び出しに伴って出力されるログ情報である。これにより、カラー情報フィールドを持つレコードを迅速に特定することが可能である。尚、印ではなく、例えば、カラー情報フィールドを持つレコードに対して、テキストやテキスト・バックグラウンドの色を、カラー情報フィールドを持たないレコードとは別の色に設定するようにしてもよい。また、カラー情報フィールドの有無だけではなく、例えば、ある特定の関数や、モジュール、或いは、ある条件を満たす時刻におけるレコードについて強調表示するようにしてもよい。
【0095】
また、表題欄230をボタンとして提供し、ボタンを押下した際に、印を有するフィールドと有しないフィールドとをソートする機能を提供する。更に、231,232,233,234のように、モジュール名や、関数/メソッド名、呼び出された時刻、Returnした時刻等を表示し、更に、231,232,233,234をボタンとして提供して、ボタンが押下されたときに項目の値に応じてソートする機能を提供する。
【0096】
また、不図示の検索メニューや検索ショートカットキーを提供し、所望のキーワードに合致するログ項目を検索する機能を提供する。
【0097】
以上のようなログを表示する構成を採ることで、障害発見の作業能率を高めることができる。
【0098】
尚、ログ書き込みファイルからレコードを生成する処理について図23のフローチャートを参照して説明する。
【0099】
まず、ステップS81において、ログ書き込みファイルを読み込みメモリ(RAM3等)に一時的に記憶制御する。次に、ステップS82において、メモリに記憶されたログ書き込みファイルの先頭から参照して、まだ参照していない関数呼び出しに対応するログが存在するか否かを判定する。存在する場合(ステップS82でYES)はステップS83へ進み、存在しない場合(ステップS82でNO)は処理を終了する。
【0100】
ステップS83においては、まだ参照していない関数呼び出しに対応するログで、先頭に近いものを参照する。そしてステップS84において参照したログ情報を取得し、ステップS85において取得したログ情報をレコードとして出力する。ステップS82からステップS85までの処理を繰り返し実行することで、ログ書き込みファイルから全てのレコードを生成することができる。
【0101】
尚、各レコードはそれぞれ別個のファイルとして出力されるようにしてもよいし、或いは、一つのファイルにまとめて出力されるようにしてもよい。本実施形態に対応する情報処理装置は、このようにして生成されるレコードに基づいて上述したようなユーザインタフェースを提供する。
【0102】
[他の実施形態]
以上、本発明の実施形態例について詳述したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様を取ることが可能であり、具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【0103】
尚、本発明は、前述した実施形態の機能を実現するプログラムを、システムあるいは装置に直接あるいは遠隔から供給し、そのシステムあるいは装置のコンピュータが該供給されたプログラムコードを読み出して実行することによっても達成される場合を含む。
【0104】
従って、本発明の機能処理をコンピュータで実現するために、該コンピュータにインストールされるプログラムコード自体も本発明の技術的範囲に含まれる。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含む。
【0105】
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等の形態であっても良い。
【0106】
プログラムを供給するための記録媒体としては、例えば、フロッピー(登録商標)ディスク、ハードディスク、光ディスク、光磁気ディスク、MO、CD−ROM、CD−R、CD−RW、磁気テープ、不揮発性のメモリカード、ROM、DVD(DVD−ROM,DVD−R)などがある。
【0107】
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続し、該ホームページから本発明のコンピュータプログラムそのもの、もしくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードすることによっても供給できる。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバも、本発明に含まれるものである。
【0108】
また、本発明のプログラムを暗号化してCD−ROM等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせ、その鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。 また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される他、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどが、実際の処理の一部または全部を行ない、その処理によっても前述した実施形態の機能が実現され得る。
【0109】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行ない、その処理によっても前述した実施形態の機能が実現される。
【図面の簡単な説明】
【0110】
【図1】本実施形態に対応する情報処理装置の構成の一例を示す図である。
【図2】本実施形態に対応する情報処理装置のメモリに、複数のモジュールに分割されたソフトウェアがロードされた様子を例示的に示す図である。
【図3】本実施形態に対応する情報処理装置において、IAT Patchを使用したときのメモリ構成を模式的に示した図である。
【図4】本実施形態に対応する情報処理装置において、IAT Patchを実行した場合のタイミングチャートである。
【図5】本実施形態に対応する情報処理装置において実行形式ファイルEXEが実行される場合の動作の一例を示す図である。
【図6】本実施形態に対応する情報処理装置において、実行ファイルEXEがCOMサーバでエクスポートされているインターフェースのインスタンスを作成する場合の、メモリ構成の一例を示す図である。
【図7】本実施形態に対応する情報処理装置のメモリ構成を例示的に示す図である。
【図8】本実施形態に対応する情報処理装置において、VTable Patchの処理を実行した場合のタイミングチャートの一例を示す図である。
【図9】本実施形態に対応する情報処理装置において実行形式ファイルEXEが実行される場合の動作の一例を示す図である。
【図10】本実施形態で用いる関数定義ファイルの内容を例示的に示した図である。
【図11】本実施形態で用いるテキスト描画コマンドを発行する関数の、関数定義ファイルの内容を例示的に示した図である。
【図12】第1実施形態において、テキストの色に関するログを取得する処理の流れを示すフローチャートである。
【図13】第1実施形態におけるログデータを例示的に示した図である。
【図14】第2実施形態において、テキストの色に関するログを取得する処理の流れを示すフローチャートである。
【図15】第2実施形態におけるログデータを例示的に示した図である。
【図16】第3実施形態において、テキストの色に関するログを取得する処理の流れを示すフローチャートである。
【図17】第3実施形態におけるログデータを例示的に示した図である。
【図18】第4実施形態において用いる関数定義ファイルの例をあらわす図である。
【図19】第4実施形態において、ペンオブジェクトの色に関するログを取得する処理の流れを示すフローチャートである。
【図20】第4実施形態におけるログデータを例示的に示した図である。
【図21】第5実施形態におけるログデータを表示するユーザインタフェースを例示的に示した図である。
【図22】本実施形態に対応する情報処理装置において、テキスト描画コマンドを発行する際にテキストの色に関するログを取得する場合のタイミングチャートである。
【図23】第5実施形態におけるログ書き込みファイルからレコードを生成する処理を示すフローチャートである。
【技術分野】
【0001】
本発明は、ソフトウェアのデバッグを行う技術に関する。
【背景技術】
【0002】
従来より、再現率の低いソフトウェアの問題を解決するために、開発中のソフトウェアのソースコードに処理ログを出力するルーチンを追加し、ソフトウェアの実行時に出力される処理ログを解析して、ソフトウェアのデバッグを行う方法が知られている。
【0003】
このような方法によるデバッグは、プリンタ装置等の画像形成装置の動作を制御するソフトウェアの開発工程に対しても適用されている。例えば、特定のカラーを意図して出力したデータに基づいて印刷処理を行ったところ、開発したソフトウェアのバグが原因で、その出力結果が想定したものと異なっているという障害が発生した状況を考える。この場合、従来のデバッグは、カラー・データに関して処理や通信等を行う全てのソースコードに対して処理ログを出力するルーチンを追加し、カラー・データに関するログをモジュール毎に取得して、それらを解析するという形でなされていた。
【0004】
しかしながら、上記従来の技術は以下の問題がある。
【0005】
(1)開発中のソフトウェアを構成する各モジュールが個別にログを出力するため、ソフトウェア全体の処理について検証するためには、それぞれのログを統合して解析する必要がある。このため、ログの解析から問題の箇所を発見するまでに多大な工数を要する。
【0006】
(2)ログを解析して意味のある情報を迅速に得ることができるようにするためには、適切なログ取得用ルーチンをソースコードの適切な箇所に配置する必要があるが、このようなルーチンを構成することは一般に困難である。
【0007】
そこで、複数にモジュール分けされているソフトウェアにおいて、アプリケーションソフトウェアに相当するモジュールから別のモジュール内に存在する関数への呼び出しを仲介し、当該呼び出しに応じた別モジュールにおける処理のログを取得するログ取得用モジュールを提供することにより、各モジュールに処理ログを出力するルーチンを追加せずとも、処理ログを取得可能とする方法が提案されている(例えば特許文献1参照)。
【0008】
(3)しかしながら、この場合も、ソフトウェアが大量のデータを扱う場合や、ログ取得用ルーチンの構成により、取得できるログが膨大になり、その解析作業が困難になる。特に、画像形成装置のソフトウェアのデバッグ作業においては、カラー・データのすべてをログに保存すると、ログ取得に多大な時間がかかる上にログ・ファイルのサイズが膨大になる。このため、ログ・ファイルを解析して有用な情報を得ることが困難になり、解析作業に多大な工数を要してしまう。
【特許文献1】特開2004−38311号公報
【発明の開示】
【発明が解決しようとする課題】
【0009】
以上のように、従来の構成においてはカラー・データを扱うソフトウェアの処理ログを解析することに多大な工数を要していた。
【0010】
本発明は上記問題に鑑みなされたものであり、特にカラー・データを扱うソフトウェアの処理ログを容易に解析可能とする技術を提供することを目的とする。
【課題を解決するための手段】
【0011】
上記目的を達成するため、例えば本発明による情報処理装置は以下の構成を備える。即ち、
第1、第2のモジュールと、該第1のモジュールから該第2のモジュール内の関数への呼び出しを仲介し、当該呼び出しに応じた該第2のモジュールにおける処理ログを取得するための第3のモジュールとを実行する情報処理装置であって、
前記第1のモジュールにより呼び出し要求がなされた関数が、前記第2のモジュールに色情報を設定する色情報設定関数であるか否かを判定し、前記色情報設定関数である場合に、前記色情報を記憶する記憶制御手段と、
前記第1のモジュールにより呼び出し要求がなされた関数が、前記第2のモジュールに前記色情報設定関数によって設定された色情報を利用して所定の画像の出力を指示する画像出力関数であるか否かを判定し、前記画像出力関数である場合に、前記記憶制御手段によって記憶された色情報を前記所定の画像に関する画像情報と対応づけて履歴情報として出力する出力手段と
を備える。
【発明の効果】
【0012】
本発明によれば、特にカラー・データを扱うソフトウェアの処理ログを容易に解析可能とする技術を提供することができる。
【発明を実施するための最良の形態】
【0013】
以下、添付図面を参照して本発明に係る実施の形態を詳細に説明する。ただし、この実施の形態に記載されている構成要素はあくまでも例示であり、この発明の範囲をそれらのみに限定する趣旨のものではない。
【0014】
[第1実施形態]
<システム構成>
図1は、本実施形態に対応する情報処理装置の構成を例示的に示す図である。説明を簡略化するために、本実施形態では、情報処理システムが1台のPC内部に構築されるものとする。ただし、本発明の特徴は、複数の情報処理装置を用いた分散環境としても有効である。
【0015】
図1のように、本情報処理装置(PC)は、CPU1、チップセット2、RAM3、ハードディスクコントローラ4、ディスプレイコントローラ5、ハードディスクドライブ(以下、HDDと呼ぶ)6、CD−ROMドライブ7、ディスプレイ8が搭載されている。また、CPU1とチップセット2を繋ぐ信号線11、チップセット2とRAM3を繋ぐ信号線12、チップセット2と各種周辺機器とを繋ぐ周辺機器バス13、ハードディスクコントローラ4とHDD6を繋ぐ信号線14、ハードディスク4とCD−ROMドライブ7を繋ぐ信号線15、ディスプレイコントローラ5とディスプレイ8を繋ぐ信号線16が搭載されている。
【0016】
図1において、CPU1は、HDD6に格納されているアプリケーションプログラム、オペレーティングシステム(OS)や制御プログラム等を実行し、RAM3にプログラムの実行に必要な情報、ファイル等を一時的に格納する制御を行う。
【0017】
チップセット2は、情報処理装置内部のCPU1の周辺回路を搭載したLSI等のチップの集まりであり、メモリインタフェース等の制御回路が搭載されている。RAM3は、各種データを一時記憶するためのメモリであり、CPU1の主メモリ、ワークエリア等として機能する。
【0018】
HDD6は、所定の情報を記憶する大容量メモリである。HDD6には、アプリケーションプログラム、OS、制御プログラム、関連プログラム等が格納される。CD−ROMドライブ7は、記録媒体へのアクセスを実現する装置であり、CD−ROMメディア(記録媒体)に記憶されたプログラム等を本情報処理装置にロードすることができる。ハードディスクコントローラ4は、HDD6とCD−ROMドライブ7の動作を制御する装置である。
【0019】
ディスプレイ8は表示出力装置であり、入力されたコマンドや、それに対する情報処理装置の応答出力等を表示したりするものである。ディスプレイコントローラ5は周辺機器バス13とディスプレイ8とを仲介してディスプレイ8の動作を制御する。周辺機器バス8は、情報処理装置内のデータの流れを司るものである。
【0020】
尚、以上の各装置と同等の機能を実現するソフトウェアにより、ハードウェア装置の代替として構成することもできる。また、図1の構成は本発明を実施するための最低限の構成であり、他の装置が構成要素として付加されている構成でも構わない。
【0021】
本実施形態では、メディアから本実施形態に係るプログラム及び関連データを直接RAM3にロードして実行させる例を示すが、これ以外にも、本実施形態に係るプログラムを動作させる度に、既にプログラムがインストールされているHDD6からRAM3にロードするようにしてもよい。また、本実施形態に係るプログラムをROM(不図示)に記録しておき、これをメモリマップの一部をなすように構成し、直接CPU1で実行することも可能である。
【0022】
<IAT Patch>
次に、本実施形態に係る情報処理装置を説明するために、図2を参照して、複数のモジュールから構成される評価対象のソフトウェアが、通常の状態でどのようにメモリ(RAM3)にロードされるかを説明する。図2は、関数ロード時の通常のメモリ構成を模式的に示した図である。
【0023】
通常、複数のモジュールから構成されるソフトウェアは、実行ファイル(以下、EXEと呼ぶ)23とダイナミックリンクライブラリ(以下、DLLと呼ぶ)27とに分かれてRAM3にロードされる。ここで、EXE23はソフトウェア全体の実行制御を行なうファイルであり、DLL27はモジュールとして存在しEXE23の補完的な役割を担うファイルである。
【0024】
この図では、1つのEXE23がA.DLL25及びB.DLL26の2つのダイナミックリンクライブラリ内の関数を使用している例を示しており、実際に使用される関数はFunc AA,Func AB,Func AC,Func BA,Func BB,Func BCの6個である。DLL27の関数の実体は、DLL27毎(25,26)にロードされ、それぞれの関数は該当するDLLの一部としてロードされる(36〜41)。
【0025】
RAM3において、EXE3はコードセグメント28とデータセグメント29、そしてインポート関数アドレステーブル22の各セグメントから構成される。コードセグメント28は、ソフトウェアの演算命令のコード等が格納されている。データセグメント29は、演算対象の変数や定数等のデータが格納されている。
【0026】
インポート関数アドレステーブル22は、DLL27として定義されている関数のアドレスを格納したものであり、EXE23はインポート関数アドレステーブル22を参照して関数のアドレスを取得し、関数をロードする。インポート関数アドレステーブル22は、関数の所属するDLL毎に関数のアドレス値を格納している。図2の例では、A.DLL25に含まれる関数のアドレスを格納した領域21と、B.DLL26に含まれる関数のアドレスを格納した領域24とから構成され、それぞれの領域に関数がロードされたアドレスが格納されている(30〜35)。
【0027】
例えば、EXE23のコードセグメント内にあるコードが関数Func AA36を呼び出す場合には、まずインポート関数アドレステーブル22内に格納されたFunc AAのアドレス30を参照する。即ち、A.DLLの一部として読み込まれたFunc AAコード36のアドレスを参照し、そのアドレスをコールすることによって、EXE23のコードはA.DLL25のFunc AA36を呼び出すことができる。
【0028】
次に、ログを取得するための方法であるIAT Patch(Import Address Table Patch)という手法を用いて関数呼び出しを仲介した場合の、情報処理装置のメモリ構成の一例について、図3を参照して説明する。
【0029】
IAT Patchを用いたログの出力は、関数呼び出しを中継し必要な情報をログとして出力するモジュール(以下、APIトレーサーと呼ぶ)をRAM3に格納し、EXE53のインポート関数アドレステーブル52を書き換えることにより実現される。即ち、EXE53はDLL57を直接コールするのではなく、ログを出力するAPIトレーサーをコールして間接的にDLL57をコールすることで、ログの出力が実現される。以下、その詳細を説明する。
【0030】
ログを取得する前処理として、本実施形態に対応する情報処理装置は、後述する関数定義ファイルとトレースシナリオファイルを読み込み、APIトレーサーをC.DLLとして生成する。そして、情報処理装置は、図3のように、RAM3にIAT Patch用のDLLであるC.DLL58をロードするように制御する。ここで、C.DLL58内のFunc CAA73,Func CAB74,Func CAC75,Func CBA76,Func CBB77,Func CBC78の各コードは、ログを記録すると共に、元々関数呼び出しを受けるべくメモリ(RAM3)にロードされている、該当する関数であるFunc AA67,Func AB68,Func AC69,Func BA70,Func BB71,Func BC72を呼び出すものである。
【0031】
そして、本実施形態に対応する情報処理装置は、後述するトレースシナリオファイルに基づいて、EXE53のインポート関数アドレステーブル52内に書かれた関数のアドレスを、C.DLL58内のログ取得コードである、Func CAA73,Func CAB74,Func CAC75,Func CBA76,Func CBB77,Func CBC78の各アドレスに書き換える(61〜66)。
【0032】
次に、図3のように構成されたモジュールの構成において、IAT Patchがどのように実現されるかについて、図4を参照して説明する。図4は、図3におけるIAT Patchの処理をあらわすタイミングチャートである。ここでは、EXE23がA.DLL21内のFunc AA36を呼び出す際に、IAT Patchによるログ取得コード(C.DLL58)がどのように動作するかの例をあらわしている。他の関数の場合についても同様の処理が行われることは言うまでもない。
【0033】
EXE91がFunc AAをコールすると(94)、C.DLL92内にあるログ取得コードは、DLL名/関数名、呼び出し時刻、呼び出し時のパラメータ、呼び出し時のポインタ・パラメータの指すメモリ内容、及びその他の情報を、それぞれ所定の記憶装置(RAM3,HDD6等)に保存する(95)。その後、C.DLL92は、本来呼び出されるはずであった、A.DLL93内のFunc AAをコールする(96)。
【0034】
A.DLLのFunc AA処理(97)が終了し、C.DLL92に制御がリターンすると(98)、C.DLL92はリターン時の時刻、戻り値、リターン時にポインタ・パラメータが指すメモリ内容、及びその他の情報を、それぞれ所定の記憶装置に保存する(99)。その後、C.DLL92は保存したログ情報をファイルに書き込み(100)、あたかもA.DLL93のFunc AAが通常通りに終了したかのように、EXE91にリターンする(101)。
【0035】
図5は、本実施形態に対応する情報処理装置において実行ファイルEXEが実行される場合の動作を例示的に示した図である。通常は実行形式のEXE113が、DLL−1(116)やDLL−2(117)内の関数を呼び出すが、ここではAPIトレーサと呼ばれるログ取得コードを埋め込み(114)、処理ログを生成している(115)。APIトレーサ114は、DLL−1(116)やDLL−2(117)の関数定義を記述した関数定義ファイル111と、どのDLLのどの関数のインポート関数テーブルを書き換えてログを取得するかを記述した設定シナリオファイル112に基づいて動作する。
【0036】
<VTable Patch>
図6は、本実施形態に対応する情報処理装置において、実行ファイルEXE118がCOM(Component Object Model:コンポーネント・オブジェクト・モデル)サーバでエクスポートされているインターフェースのインスタンスを作成する場合の、メモリ構成の一例を示す図である。
【0037】
通常、インターフェースのインスタンス作成を行うと、COMサーバ内で、要求されたインターフェース(121,122)と、そのメソッド(130〜135)が作成され、それらは共にメモリ(RAM3)上にロードされる。ここで、virtual address tableは作成された各インターフェース毎に作られ(118,120)、作成要求を行ったEXE119に渡される。このvirtual address tableには各メソッドについて作成されたアドレスが書かれている(124〜129)。EXE119はこれら情報を利用し、各インターフェースに対して呼び出しを行う。図6では、1つのEXE119がInterface A121及びInterface B22の2つのインターフェースのインスタンスを作成しており、そのインターフェース内部のメソッドを使用している例を示しており、実際に使用されているメソッドは、Method AA130, Method AB131, Method AC132, Method BA133, Method BB134, Method BC135となっている。
【0038】
EXE119のコードが関数Method AA130を呼び出す場合には、まずvirtual address table内に書かれたMethod AA130のアドレス124が読み込まれる。このアドレス124にはCOMサーバのInterface A121の一部として作成されたMethod AAコード130のアドレスが書かれており、そのアドレスをコールすることによって、EXE119のコードはInterface A121のMethod AA130を呼び出すことができる。
【0039】
図7は、本実施形態に対応する情報処理装置のメモリ構成をあらわす図であり、図6とは、ログ取得用のコードとしてVTable Patch(virtual address table Patch)という手法を用いて、メソッド呼び出しを仲介しているという点で異なっている。
【0040】
ログ取得が開始されると、RAM3内にはVTable Patch用のDLL143がロードされる。このDLLはvirtual address table(136,138)内に書かれたメソッドのアドレスを、DLL内のログ取得コードであるMethod A’A145,Method A’B146,Method A’C147,Method B’A148,Method B’B149,Method B’C150のアドレスに書き換える。DLL内のMethod A’A157,Method A’B158,Method A’C159,Method B’A160,Method B’B161,Method B’C162のコードは、ログを記録すると共に、元々のメソッド呼び出しを受けるべくメモリ(RAM3)にロードされていたMethod AA157,Method AB158,Method AC159,Method BA160,Method BB161,Method BC162を呼び出す。
【0041】
図8は、図7におけるVTable Patchの処理をあらわすタイミングチャートである。説明を簡略化するために、この図ではEXE163がCOMサーバ内のInterface AのMethod AAを呼び出す際に、VTable Patchによるログ取得コードがどのように動作するかの例をあらわしている。他のメソッドの場合についても同様の処理が行われることはいうまでもない。
【0042】
EXE163がMethod AAをコールすると(166)、DLL164内にあるログ取得コードは、モジュール名/インターフェース名/メソッド名、呼び出し時刻、呼び出し時のパラメータ、呼び出し時のポインタパラメータの指すメモリ内容、及びその他の情報をメモリ(RAM3)に保存する(167)。その後DLL164は本来呼び出されるはずであった、COMサーバ165内のMethod AAをコールする(168)。COMサーバのMethod AA処理(169)が終了し、DLL164に制御がリターンすると(170)、DLL164はリターン時の時刻をメモリに保存し、戻り値をメモリ(RAM3)に保存し、リターン時にポインタパラメータが指すメモリ内容を、メモリ(RAM3)に保存する(171)。その後、DLL164は保存したログ情報をファイルに書き込み(172)、あたかもCOMサーバのMethod AAが通常通りに終了したかのように、EXE163にリターンする(173)。
【0043】
図9は、本実施形態に対応する情報処理装置において実行形式ファイルEXEが実行される場合の動作の一例を示す図である。通常は実行形式のEXE176が、COMサーバ−1(179)やCOMサーバ−2(180)内のメソッドを呼び出すが、ここではAPIトレーサと呼ばれるログ取得コードを埋め込み(177)、処理ログを生成している(178)。APIトレーサは、COMサーバ−1(179)やCOMサーバ−2の関数定義を記述したファイル(関数定義ファイル)174と、どのCOMサーバのどのインターフェースのどのメソッドのvirtual address tableを書き換えてログを取得するかを記述した設定シナリオファイル175に基づいて動作する。
【0044】
図10は、本実施形態に対応する情報処理装置において使用する、関数定義ファイルの一例を示したものである。この例では、一般的に広く用いられているIDL(Interface Definition Language:インタフェース定義言語)により、関数の定義が記述されている。本実施形態に対応する情報処理装置においては、このIDLをトークン化したタイプライブラリファイルを関数定義ファイルとして使用する。なお、関数定義ファイルは付加バイナリ情報(各ログ情報)を取得するための定義を提供することを特徴とするものであり、関数定義は必ずしもIDLによって記述されている必要はない。例えば、通常のテキストファイルを用いることも可能であり、XMLなどのマークアップ言語を用いることも可能である。
【0045】
<出力データのカラー判別>
次に、本実施形態に対応する情報処理装置において、プリンタ出力データのカラー判別を行う構成について説明する。ここでは、説明の簡略化のため、画像形成装置に対してテキスト描画コマンドを送出する場合について例示的に説明するが、以下の構成はいかなるグラフィック・オブジェクトについても適用可能である。また、以下ではプリンタ装置に対して出力される描画コマンドについてログを取得する構成について例示的に説明を行うが、出力対象はどのような装置でもよい。
【0046】
図11は、本実施形態に対応する情報処理装置において、プリンタ出力データのカラー判別を行なうための、関数定義ファイルの例である。本実施形態では、オペレーティングシステム(Operating System)にOSGraphicKernel.dllというダイナミックリンクライブラリファイルが用意されており、そのライブラリ内に、テキストの描画を行なう関数TextOut202、テキストの色を設定する関数SetTextColor204、設定されているテキストの色を取得する関数GetTextColor203が用意されているものとする。尚、関数名はこれらに限定されるものではない。また、テキスト以外のグラフィック・オブジェクトを出力する場合は、関数名は当然に異なったものになる。
【0047】
関数TextOut202は、デバイスコンテキストのハンドル、描画開始位置のx,y座標、描画する文字列、描画する文字列の数をパラメータ(引数)として入力し、入力値に基づいて所定の対象にテキストの描画コマンドを発行するように動作する。そして、動作が正しく終了したか否かを示す2値情報を戻り値として返す。
【0048】
ただし、デバイスコンテキストは、オペレーティングシステムによって仮想化された「面」に対するハンドルであり、描画対象装置を指定するものである。本実施形態において、デバイスコンテキストはディスプレイ8向けのものとプリンタ(不図示)向けのものが用意されている。例えば、プリンタ向けを示すデバイスコンテキスト(TextOut関数の第一パラメータ)のハンドルを選択して、その他の必要なパラメータを入力することにより、プリンタ装置に対してテキストの描画コマンドを発行することができる。なお、デバイスコンテキストは、typedefによって定義している(200)。
【0049】
関数SetTextColor204は、TextOut202をコールすることによってテキストを描画する際に、テキストの色を設定する関数であり、後述するようにSetTextColor204をコールする前にコールして用いる。SetTextColor204は、デバイスコンテキストのハンドルと、設定するテキストの色をパラメータとして入力し、パラメータに指定された色情報を設定し、SetTextColor204をコールする前に設定されていた色情報を戻り値として返す。
【0050】
関数GetTextColor203は、設定されているテキストの色情報を取得する関数である。GetTextColor203は、デバイスコンテキストのハンドルをパラメータとして入力し、入力されたハンドルに対応するデバイスコンテキストに設定されている色情報を取得し、その値を戻り値として返す。
【0051】
上記の関数をコールして特定の色の文字をプリンタに出力する際には、以下の処理を行う。即ち、
(1)SetTextColor関数204でテキスト色の設定を行ない、
(2)TextOut関数202でテキストの描画指示を行なう。
【0052】
このような処理手順に鑑み、プリンタ装置に対応するデバイスコンテキストに対してアプリケーション・ソフトウェアがテキスト描画コマンドを発行する際に、そのテキストの色に関するログを、IAT Patchを用いて取得する処理について、図12を参照して説明する。図12は、このような処理の流れを示すフローチャートである。尚、以下の処理は上述したVTable Patchを用いて構成してもよい。
【0053】
アプリケーション・ソフトウェアがOSGraphicKernel.dllの関数呼び出しを開始すると、本実施形態に対応する情報処理装置はログの取得を開始する。即ち、ログ書き込みファイルをHDD6に作成し、ステップS1において、モジュール名、インターフェース名、関数/メソッド名を取得し、これらの情報をログとしてログ書き込みファイルに追加する。そして、ステップS2において、関数呼び出し時の時刻、パラメータ及びポインタ・パラメータの指すメモリ(RAM3)の内容を取得し、ログとしてログ書き込みファイルに追加する。尚、先に述べたように、パラメータには文字列の内容等の画像の形状に関する情報や、描画位置等の画像の位置に関する情報が含まれている。このことは画像がテキストに関するものに限られず、他のグラフィック・オブジェクトに適用する場合も同様である。
【0054】
次に、呼び出された関数の種類に応じて別個の処理を行う。即ち、ステップS3において、呼び出された関数がテキストカラー設定関数(SetTextColor)であるか否かを判定し、テキストカラー設定関数であれば(ステップS3においてYES)ステップS4へ進む。ステップS4においては、関数呼び出しのパラメータ(引数)を解析し、設定する色のパラメータを取得する。そして、取得した色のパラメータをRed値、Green値、Blue値に変換する。ステップS5において、変換した各値をRAM3に一時的に記憶制御し、ステップS8へ進む。
【0055】
ステップS8においては、OSGraphicKernelにアクセスし、アプリケーション・ソフトウェアが呼び出し要求を行った関数を実際に呼び出す。この時、関数のパラメータをアプリケーション・ソフトウェアが送出した値に設定する。関数からリターンが発生すると、ステップS9において、リターン時の時刻、戻り値及びポインタ・パラメータの指すメモリの内容をログとしてログ書き込みファイルに追加する。そして、ステップS10へ進む。
【0056】
ステップS10においては、アプリケーション・ソフトウェア、或いは、ユーザから終了の命令がなされたか否かを判定する。終了の命令がなされた場合(ステップS10においてYES)は処理を終了し、なされていない場合(ステップS10でNO)はステップS1へ戻り処理を継続する。
【0057】
アプリケーション・ソフトウェアから呼び出された関数がテキストカラー設定関数でない場合は(ステップS3においてNO)ステップS6へ進み、呼び出された関数がテキスト出力関数(TextOut)であるか否かを判定する。テキスト出力関数であれば(ステップS6においてYES)ステップS7へ進み、テキスト出力関数でなければ(ステップS6においてNO)ステップS8へ進む。ステップ8以降の処理は先に述べたものと同様である。
【0058】
ステップS7においては、ステップS5で一時的に記憶制御した、Red値、Green値、Blue値から構成される色情報をRAM3から読み出し、ログとしてHDD6のログ書き込みファイルに他の画像情報(呼び出し時の時刻、パラメータ(画像の位置や形状に関する情報が含まれている)、ポインタ・パラメータの指すメモリの内容等)との対応が分かるように追加する。RAM3に色情報が格納されていない場合は、エラー情報をログとしてログ書き込みファイルに追加する。そしてステップS8へ進む。ステップS8以降の処理は先に述べたものと同様である。
【0059】
次に、上記の処理とIAT−Patch法の各構成要素との対応について、図22を参照して説明する。図22は対応するタイミングチャートである。
【0060】
図22において、301はアプリケーション・ソフトウェアの実行ファイルEXE、302はIAT Patchによるログ取得コード(IAT Patchコードと呼ぶ)、303はOSGraphicKernelをそれぞれ示している。
【0061】
EXE301が関数呼び出しを行う場合は、先に述べたように、OSGraphicKernel.dll303に対して行うのではなく、IAT Patchコード302に対して行う(304)。IAT Patchコード302は、関数呼び出しを受け取ると、関数名や呼び出し時刻等の情報を、ログとしてHDD6のログ書き込みファイルに追加する(305)。この処理は、図12のステップS1及びS2の処理に対応する。
【0062】
そして、IAT Patchコード302は、呼び出し要求がなされた関数の種類を判定し、関数がSetTextColorの場合と、TextOutの場合は、それぞれ所定の処理を行う。関数がSetTextColorの場合は図12のステップS4及びS5の処理を行い(306)、TextOutの場合は図12のステップS7の処理を行う(307)。
【0063】
次に、呼び出し要求がなされたOSGraphicKernel.dll303の関数にアクセスし(308)、関数に所定の処理を実行させる(309)。これらの処理は図12のステップS8に対応する。
【0064】
OSGraphicKernel.dll303の関数からリターンが発生すると(310)、戻り値や時刻等の情報をログとしてログ書き込みファイルに追加する(311、312)。これらの処理は図12のステップS9に対応する。そして、OSGraphicKernel.dll303の関数からリターンをEXE301へ返す。
【0065】
次に、以上のような処理の結果得られるログについて図13を参照して説明する。図13は、本実施形態に対応する情報処理装置において、図11の定義及び図12、22の処理により取得されるログデータを例示的に示す図である。図13において、205、206は、関数TextOutが呼び出されたときに、デバイスコンテキストに対して指定されていた色の情報を示しており、実際にどのような色情報に基づいて出力要求がなされたかを、時系列順に容易に把握することができる。また、色情報は他の画像情報と関連づけた形で表示されるため、例えば、プリンタの出力結果とログとの比較が容易である。
【0066】
以上のように、IAT Patchを用いてカラー出力を検出することにより、プリンタ装置等へのカラー出力において発生した障害に対して、アプリケーション・ソフトウェアがオペレーティングシステムに対してどのような指示を行なった結果その障害が発生したのかを、明示的に知ることができる。
【0067】
また、IAT Patchを用いたログ取得において、テキストカラー設定関数及びテキスト出力関数への呼び出しを判定しログを生成することで、カラー関連の処理に関するログの解析を容易にしている。更に、色情報のログを画像情報と対応づけて生成することで、例えば、プリンタの出力結果と、ログの中のグラフィック・オブジェクトの位置や色情報等とを比較してバグを検知することを可能にしており、ログを解析する際にバグの原因を容易に特定することができる。これにより、カラー関連の障害の原因を特定する作業を迅速に行うこと可能である。
【0068】
[第2実施形態]
第1実施形態においては、IAT Patchの手法に加えて、色情報の設定関数とグラフィック・オブジェクトの出力を指示する関数の呼び出しについて選択的にログを生成する構成について述べた。本実施形態においては、設定されている色情報を取得するテキストカラー取得関数(GetTextColor)を用いて色情報を取得する構成について説明する。尚、システム構成やOSGraphicKernel.dll等は第1実施形態と同様である。
【0069】
図14は、本実施形態に対応する情報処理装置に於いて、プリンタ出力データのカラー判別を行なう処理の流れを示すフローチャートである。アプリケーション・ソフトウェアがOSGraphicKernel.dllの関数呼び出しを開始すると、本実施形態に対応する情報処理装置はログの取得を開始する。即ち、ログ書き込みファイルをHDD6に作成し、ステップS21において、モジュール名、インターフェース名、関数/メソッド名を取得し、これらの情報をログとしてログ書き込みファイルに追加する。次に、ステップS22において、関数呼び出し時の時刻、パラメータ及びポインタ・パラメータの指すメモリ(RAM3)の内容を取得し、ログとしてログ書き込みファイルに追加する。そして、ステップS23へ進む。
【0070】
本実施形態においては、ステップS23〜ステップS26の処理が第1実施形態と異なっている。即ち、ステップS23において呼び出された関数がテキスト出力関数(TextOut)であるか否かを判定し、テキスト出力関数であれば(ステップS23においてYES)ステップS24へ進み、テキスト出力関数でなければ(ステップS23においてNO)ステップS27へ進む。ステップS24においては、IAT Patchコードから直接OSGraphicKernel.dllのテキストカラー取得関数(GetTextColor)を呼び出し、設定されている色情報を取得する。次に、ステップS25において、取得した色情報をRed値、Green値、Blue値に変換する。そして、ステップS26において、ステップS25で得られたRed値、Green値、Blue値をログとしてHDD6のログ書き込みファイルに他の画像情報(呼び出し時の時刻、パラメータ(画像の位置や形状に関する情報が含まれている)、ポインタ・パラメータの指すメモリの内容等)との対応が分かるように追加する。ステップS27以降の処理は図12のステップS8以降の処理と同様であるため、説明を省略する。
【0071】
次に、以上のような処理の結果得られるログについて図15を参照して説明する。図15は、本実施形態に対応する情報処理装置において、図14の処理により取得されるログデータを例示的に示す図である。図15において、207、208、209は、関数TextOutが呼び出されたときに、デバイスコンテキストに対して指定されていた色の情報を示しており、第1実施形態と同様に、実際にどのような色情報に基づいて出力要求がなされたかを、時系列順に容易に把握することができる。
【0072】
以上のように、本実施形態においては、IAT Patchコードからテキストカラー取得関数を呼び出す構成を採っていることにより、テキストカラー設定関数のログを取得せずに、テキスト出力関数時にテキストの出力に用いられた色データをログとして出力することができる。これにより、ログを生成する際にかかる時間やログを取得する際に必要なメモリを節約しつつ、第1実施形態と同様の効果を得ることができる。
【0073】
[第3実施形態]
第1、第2実施形態においては、カラー出力能力を持つ関数の全ての呼び出しについてログを出力する構成について述べたが、目的・用途によっては、そのような関数呼び出しについての全てのログは必要ない場合も考えられる。例えば、グレイスケール(無彩色)の画像出力とカラー(有彩色)の画像出力とを実行可能なシステムにおいて、有彩色の画像出力のみについてログを取得し、障害原因を特定したいという場合が考えられる。そこで、本実施形態においては、有彩色の画像出力のみについてログを取得する構成について例示的に説明する。尚、以下の構成は、例えば、無彩色の画像出力のみについてログを取得する場合にも適用可能である。尚、システム構成やOSGraphicKernel.dll等は第1実施形態と同様である。
【0074】
図16は、本実施形態に対応する情報処理装置に於いて、プリンタ出力データのカラー判別を行なう処理の流れを示すフローチャートである。アプリケーション・ソフトウェアがOSGraphicKernel.dllの関数呼び出しを開始すると、本実施形態に対応する情報処理装置はログの取得を開始する。即ち、ログ書き込みファイルをHDD6に作成し、ステップS41において、モジュール名、インターフェース名、関数/メソッド名を取得し、これらの情報をログとしてログ書き込みファイルに追加する。次に、ステップS42において、関数呼び出し時の時刻、パラメータ及びポインタ・パラメータの指すメモリ(RAM3)の内容を取得し、ログとしてログ書き込みファイルに追加する。そして、ステップS43へ進む。
【0075】
本実施形態においては、ステップS43〜ステップS47の処理が第1実施形態と異なる。即ち、ステップS43において呼び出された関数がテキスト出力関数(TextOut)であるか否かを判定し、テキスト出力関数であれば(ステップS43においてYES)ステップS44へ進み、テキスト出力関数でなければ(ステップS43においてNO)ステップS48へ進む。ステップS44においては、IAT Patchコードから直接OSGraphicKernel.dllのテキストカラー取得関数(GetTextColor)を呼び出し、設定されている色情報を取得する。次に、ステップS45において、取得した色情報をRed値、Green値、Blue値に変換し、ステップS46へ進む。
【0076】
本実施形態においては、ステップS46、S47の処理が第2実施形態と異なる。即ち、ステップS46において、ステップS44で取得した色情報が有彩色であるか否かを判定し、有彩色の場合(ステップS46でNO)ステップS47へ進み、ステップS45で得られたRed値、Green値、Blue値をログとしてHDD6のログ書き込みファイルに他の画像情報(呼び出し時の時刻、パラメータ(画像の位置や形状に関する情報が含まれている)、ポインタ・パラメータの指すメモリの内容等)との対応が分かるように追加する。有彩色でない場合(ステップS46でYES)は、ステップS48へ進む。尚、ステップS46における有彩色か否かの判定は、ステップS45で取得したRed値、Green値、Blue値について、Red値=Green値=Blue値が成立するか否か(成立する場合は無彩色、成立しない場合は有彩色)により行う。ステップS48以降の処理は図12のステップS8以降の処理と同様であるため、説明を省略する。
【0077】
次に、以上のような処理の結果得られるログについて図17を参照して説明する。図17は、本実施形態に対応する情報処理装置において、図16の処理により取得されるログデータを例示的に示す図である。図17において、210、211は、関数TextOutが呼び出されたときに、デバイスコンテキストに対して指定されていた色の情報を示しており、有彩色の場合のログのみが記録されている。実際にどのような色情報に基づいて出力要求がなされたかを時系列順に容易に把握することができる点は、第1、第2実施形態と同様である。
【0078】
以上のように、本実施形態においては、IAT Patchコードで有彩色か無彩色かの判定を実装する構成を採っていることにより、無彩色データのログを取得せずに、有彩色データのみをログとして出力することができる。これにより、ログを生成する際にかかる時間を削減しつつ、必要な情報のみが記載されたログを得ることができ、障害発見の作業能率を高めることができる。
【0079】
[第4実施形態]
第1〜3実施形態においては、説明を簡略するために、テキスト出力に関するログを取得する構成について例示的に説明したが、上記の構成はどのようなグラフィック・オブジェクトについても適用可能である。本実施形態では、テキストとは異なるグラフィック・オブジェクトの一例として、「ペン」オブジェクトの出力についてログを取得する構成について述べる。ペンオブジェクトとは、オペレーティングシステムに仮想的に備えられたグラフィック・オブジェクトであり、デバイスコンテキストに対して線の描画を指示する際に用いられる。
【0080】
図18は、本実施形態に対応する情報処理装置に於いて、プリンタ出力データのカラー判別を行なうための、関数定義ファイルの例である。本実施形態では、オペレーティングシステムにOSGraphicKernel.dllというダイナミックリンクライブラリファイルが用意されており、そのライブラリ内には、CreatePen223、SelectPen224、SetStartPoint225、LineTo226、GetCurrentPenAttribute227、DeletePen228を含む関数が用意されているものとする。
【0081】
関数CreatePen223はペンオブジェクトを生成する関数である。CreatePen223は、パラメータ(引数)としてペンオブジェクトの色情報を受け取り、指定された色のペンオブジェクトを生成してそのオブジェクトをハンドルを戻り値として返す。関数SelectPen224はデバイスコンテキストにペンオブジェクトを関連づける関数である。SelectPen224は、パラメータとしてデバイスコンテキストのハンドルとペンオブジェクトのハンドルを受け取り、指定されたデバイスコンテキストにペンオブジェクトを関連づけ、戻り値として関連づけが成功したか否かを示すブール値を返す。
【0082】
関数SetStartPoint225及びLineTo226はペンオブジェクトを用いた描画を行なうための関数である。SetStartPoint225は、パラメータとしてデバイスコンテキストのハンドル、描画開始位置の座標(x,y座標)を受け取り、線の始点の座標を設定する。LineTo226は、パラメータとしてデバイスコンテキストのハンドル、描画終了位置の座標(x,y座標)を受け取り、線の終点の座標を設定し、座標が設定された始点と終点を結ぶ線を出力するように指示する。なお、この時出力される線の色はCreatePen223のパラメータで設定された値である。
【0083】
関数GetCurrentPenAttribute227はペンオブジェクトに設定されている色情報を取得する関数である。GetCurrentPenAttribute227は、パラメータとしてデバイスコンテキストのハンドルとペンオブジェクトの色情報へのポインタを入力し、ペンオブジェクトの色を取得する。そして、取得した色情報にアクセスできるように色情報へのポインタを設定して、戻り値として色情報の取得が成功したか否かを示すブール値を返す。
【0084】
関数DeletePen228は、ペンオブジェクトを削除する関数である。DeletePen228は、パラメータとしてペンオブジェクトへのハンドルを入力し、ハンドルで指定されたペンオブジェクトをメモリから削除する。
【0085】
ある色の線をプリンタに出力する際には、以下の処理を行う。即ち、
(1)CreatePen関数で、特定の色を持つペン・オブジェクトを生成する
(2)プリンタ装置を仮想化したデバイスコンテキストに対して、SelectPen関数で、そのペン・オブジェクトを関連付ける
(3)SetStartPoint関数で、描画の開始座標を設定する
(4)LineTo関数で、描画の終了座標、すなわちデバイスコンテキストに関連付けられたペン・オブジェクトでどの座標まで線を書けばよいかを指示し、描画指令を行う
(5)DeletePen関数でペン・オブジェクトを削除する
このような処理手順に鑑み、プリンタ装置に対応するデバイスコンテキストに対してアプリケーション・ソフトウェアがペンオブジェクトの描画指令を発行する際に、そのペンオブジェクトの色に関するログを、IAT Patchを用いて取得する処理について、図19を参照して説明する。図19は、このような処理の流れを示すフローチャートである。尚、以下の処理は上述したVTable Patchを用いて構成してもよい。また、この例では第3実施形態と同様に有彩色の出力指令のログを取得する場合について述べるものとする。
【0086】
アプリケーション・ソフトウェアがOSGraphicKernel.dllの関数呼び出しを開始すると、本実施形態に対応する情報処理装置はログの取得を開始する。即ち、ログ書き込みファイルをHDD6に作成し、ステップS61において、モジュール名、インターフェース名、関数/メソッド名を取得し、これらの情報をログとしてログ書き込みファイルに追加する。そして、ステップS62において、関数呼び出し時の時刻、パラメータ及びポインタ・パラメータの指すメモリ(RAM3)の内容を取得し、ログとしてログ書き込みファイルに追加する。尚、先に述べたように、パラメータには文字列の内容等の画像の形状に関する情報や、描画位置等の画像の位置に関する情報が含まれている。このことは画像がペン・オブジェクトに関するものに限られず、他のグラフィック・オブジェクトに適用する場合も同様である。
【0087】
ステップS63においては、呼び出された関数がペン描画関数(LineTo)であるか否かを判定し、ペン描画関数の場合(ステップS63でYES)ステップS64へ進み、ペン描画関数ではない場合(ステップS63でNO)ステップS68へ進む。
【0088】
ステップS64においては、ペン状態取得関数(GetCurrentPenAttribute)をIAT Patchコードから内部的に呼び出し、ペンオブジェクトに設定された色情報を取得する。次に、ステップS65において、取得した色情報をRed値,Green値,Blue値に変換する。
【0089】
次に、ステップS66において、取得した色情報が有彩色であるか否かを判定し、有彩色の場合(ステップS66でNO)ステップS67へ進み、ステップS65で得られたRed値、Green値、Blue値をログとしてHDD6のログ書き込みファイルに他の画像情報(呼び出し時の時刻、パラメータ(画像の位置や形状に関する情報が含まれている)、ポインタ・パラメータの指すメモリの内容等)との対応が分かるように追加する。有彩色でない場合(ステップS66でYES)は、ステップS68へ進む。尚、ステップS66における有彩色か否かの判定は、ステップS65で取得したRed値、Green値、Blue値について、Red値=Green値=Blue値が成立するか否か(成立する場合は無彩色、成立しない場合は有彩色)により行う。ステップS68以降の処理は図12のステップS8以降の処理と同様であるため、説明を省略する。
【0090】
次に、以上のような処理の結果得られるログについて図20を参照して説明する。図20は、本実施形態に対応する情報処理装置において、図19の処理により取得されるログデータを例示的に示す図である。図20において、230、231は、関数LineToが呼び出されたときに、デバイスコンテキストに対して指定されていた色の情報を示しており、有彩色の場合のログのみが記録されている。実際にどのような色情報に基づいて出力要求がなされたかを時系列順に容易に把握することができる点は、第1〜3実施形態と同様である。
【0091】
以上のように、本実施形態においては、グラフィック・オブジェクトの出力指示のタイミングで色情報を取得してログに記録することにより、グラフィック・オブジェクトの一つであるペンオブジェクトについてもログを得ることができる。
【0092】
尚、本実施形態はペン・オブジェクトを例に説明したが、どのようなグラフィック・オブジェクトに対しても有効である。例えば、オペレーティングシステムが提供するグラフィック・オブジェクトとしてブラシ・オブジェクト、ビットマップ・オブジェクトが用意されている場合、すべてのグラフィック・オブジェクトに対して同様の処理を行なうことにより、アプリケーション・ソフトウェアがオペレーティングシステムに対して、プリンタ装置にどのような色の描画を行なうよう指示したかを、IAT Patch/VTable Patchの技術を用いて、すべてログ・ファイルに取得することができる。これによって、カラーに関係する障害に関して迅速な原因の特定が可能となる。
【0093】
[第5実施形態]
第1〜4実施形態においては、IAT Patch/VTable Patchを用いてログを出力する構成について述べたが、本実施形態では出力されたログを解析しやすいように、カラーフィールドを持つレコードを明示的に他のレコードと分けて表示するユーザインタフェース(UI)について述べる。
【0094】
図21は、本実施形態に対応する情報処理装置における、ログ表示ユーザ・インタフェースの一例である。このユーザインタフェースにおいては、カラー情報フィールドを持つレコードに関して強調表示する。図21の例では、230のように印を付して表示する。但し、レコードとは1回の関数呼び出しに伴って出力されるログ情報である。これにより、カラー情報フィールドを持つレコードを迅速に特定することが可能である。尚、印ではなく、例えば、カラー情報フィールドを持つレコードに対して、テキストやテキスト・バックグラウンドの色を、カラー情報フィールドを持たないレコードとは別の色に設定するようにしてもよい。また、カラー情報フィールドの有無だけではなく、例えば、ある特定の関数や、モジュール、或いは、ある条件を満たす時刻におけるレコードについて強調表示するようにしてもよい。
【0095】
また、表題欄230をボタンとして提供し、ボタンを押下した際に、印を有するフィールドと有しないフィールドとをソートする機能を提供する。更に、231,232,233,234のように、モジュール名や、関数/メソッド名、呼び出された時刻、Returnした時刻等を表示し、更に、231,232,233,234をボタンとして提供して、ボタンが押下されたときに項目の値に応じてソートする機能を提供する。
【0096】
また、不図示の検索メニューや検索ショートカットキーを提供し、所望のキーワードに合致するログ項目を検索する機能を提供する。
【0097】
以上のようなログを表示する構成を採ることで、障害発見の作業能率を高めることができる。
【0098】
尚、ログ書き込みファイルからレコードを生成する処理について図23のフローチャートを参照して説明する。
【0099】
まず、ステップS81において、ログ書き込みファイルを読み込みメモリ(RAM3等)に一時的に記憶制御する。次に、ステップS82において、メモリに記憶されたログ書き込みファイルの先頭から参照して、まだ参照していない関数呼び出しに対応するログが存在するか否かを判定する。存在する場合(ステップS82でYES)はステップS83へ進み、存在しない場合(ステップS82でNO)は処理を終了する。
【0100】
ステップS83においては、まだ参照していない関数呼び出しに対応するログで、先頭に近いものを参照する。そしてステップS84において参照したログ情報を取得し、ステップS85において取得したログ情報をレコードとして出力する。ステップS82からステップS85までの処理を繰り返し実行することで、ログ書き込みファイルから全てのレコードを生成することができる。
【0101】
尚、各レコードはそれぞれ別個のファイルとして出力されるようにしてもよいし、或いは、一つのファイルにまとめて出力されるようにしてもよい。本実施形態に対応する情報処理装置は、このようにして生成されるレコードに基づいて上述したようなユーザインタフェースを提供する。
【0102】
[他の実施形態]
以上、本発明の実施形態例について詳述したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様を取ることが可能であり、具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【0103】
尚、本発明は、前述した実施形態の機能を実現するプログラムを、システムあるいは装置に直接あるいは遠隔から供給し、そのシステムあるいは装置のコンピュータが該供給されたプログラムコードを読み出して実行することによっても達成される場合を含む。
【0104】
従って、本発明の機能処理をコンピュータで実現するために、該コンピュータにインストールされるプログラムコード自体も本発明の技術的範囲に含まれる。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含む。
【0105】
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等の形態であっても良い。
【0106】
プログラムを供給するための記録媒体としては、例えば、フロッピー(登録商標)ディスク、ハードディスク、光ディスク、光磁気ディスク、MO、CD−ROM、CD−R、CD−RW、磁気テープ、不揮発性のメモリカード、ROM、DVD(DVD−ROM,DVD−R)などがある。
【0107】
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続し、該ホームページから本発明のコンピュータプログラムそのもの、もしくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードすることによっても供給できる。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバも、本発明に含まれるものである。
【0108】
また、本発明のプログラムを暗号化してCD−ROM等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせ、その鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。 また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される他、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどが、実際の処理の一部または全部を行ない、その処理によっても前述した実施形態の機能が実現され得る。
【0109】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行ない、その処理によっても前述した実施形態の機能が実現される。
【図面の簡単な説明】
【0110】
【図1】本実施形態に対応する情報処理装置の構成の一例を示す図である。
【図2】本実施形態に対応する情報処理装置のメモリに、複数のモジュールに分割されたソフトウェアがロードされた様子を例示的に示す図である。
【図3】本実施形態に対応する情報処理装置において、IAT Patchを使用したときのメモリ構成を模式的に示した図である。
【図4】本実施形態に対応する情報処理装置において、IAT Patchを実行した場合のタイミングチャートである。
【図5】本実施形態に対応する情報処理装置において実行形式ファイルEXEが実行される場合の動作の一例を示す図である。
【図6】本実施形態に対応する情報処理装置において、実行ファイルEXEがCOMサーバでエクスポートされているインターフェースのインスタンスを作成する場合の、メモリ構成の一例を示す図である。
【図7】本実施形態に対応する情報処理装置のメモリ構成を例示的に示す図である。
【図8】本実施形態に対応する情報処理装置において、VTable Patchの処理を実行した場合のタイミングチャートの一例を示す図である。
【図9】本実施形態に対応する情報処理装置において実行形式ファイルEXEが実行される場合の動作の一例を示す図である。
【図10】本実施形態で用いる関数定義ファイルの内容を例示的に示した図である。
【図11】本実施形態で用いるテキスト描画コマンドを発行する関数の、関数定義ファイルの内容を例示的に示した図である。
【図12】第1実施形態において、テキストの色に関するログを取得する処理の流れを示すフローチャートである。
【図13】第1実施形態におけるログデータを例示的に示した図である。
【図14】第2実施形態において、テキストの色に関するログを取得する処理の流れを示すフローチャートである。
【図15】第2実施形態におけるログデータを例示的に示した図である。
【図16】第3実施形態において、テキストの色に関するログを取得する処理の流れを示すフローチャートである。
【図17】第3実施形態におけるログデータを例示的に示した図である。
【図18】第4実施形態において用いる関数定義ファイルの例をあらわす図である。
【図19】第4実施形態において、ペンオブジェクトの色に関するログを取得する処理の流れを示すフローチャートである。
【図20】第4実施形態におけるログデータを例示的に示した図である。
【図21】第5実施形態におけるログデータを表示するユーザインタフェースを例示的に示した図である。
【図22】本実施形態に対応する情報処理装置において、テキスト描画コマンドを発行する際にテキストの色に関するログを取得する場合のタイミングチャートである。
【図23】第5実施形態におけるログ書き込みファイルからレコードを生成する処理を示すフローチャートである。
【特許請求の範囲】
【請求項1】
第1、第2のモジュールと、該第1のモジュールから該第2のモジュール内の関数への呼び出しを仲介し、当該呼び出しに応じた該第2のモジュールにおける処理ログを取得するための第3のモジュールとを実行する情報処理装置であって、
前記第1のモジュールにより呼び出し要求がなされた関数が、前記第2のモジュールに色情報を設定する色情報設定関数であるか否かを判定し、前記色情報設定関数である場合に、前記色情報を記憶する記憶制御手段と、
前記第1のモジュールにより呼び出し要求がなされた関数が、前記第2のモジュールに前記色情報設定関数によって設定された色情報を利用して所定の画像の出力を指示する画像出力関数であるか否かを判定し、前記画像出力関数である場合に、前記記憶制御手段によって記憶された色情報を前記所定の画像に関する画像情報と対応づけて履歴情報として出力する出力手段と
を備えることを特徴とする情報処理装置。
【請求項2】
第1、第2のモジュールと、該第1のモジュールから該第2のモジュール内の関数への呼び出しを仲介し、当該呼び出しに応じた該第2のモジュールにおける処理ログを取得するための第3のモジュールとを実行する情報処理装置であって、
前記第1のモジュールにより呼び出し要求がなされた関数が、前記第2のモジュールに前記色情報設定関数によって予め設定された色情報を利用して所定の画像の出力を指示する画像出力関数であるか否かを判定し、前記画像出力関数である場合に、予め設定された前記色情報を取得する色情報取得関数を呼び出して前記第2のモジュールから色情報を取得し、当該色情報を前記所定の画像に関する画像情報と対応づけて履歴情報として出力する出力手段とを備えることを特徴とする情報処理装置。
【請求項3】
前記色情報は有彩色であるか否かを判定する判定手段を更に備え、
前記出力手段は、前記判定手段により有彩色と判定された前記色情報を前記画像情報と対応づけて履歴情報として出力することを特徴とする請求項1又は2に記載の情報処理装置。
【請求項4】
前記画像情報は、前記画像出力関数が呼び出された時刻、前記所定の画像の形状に関する情報、前記所定の画像の位置に関する情報、前記第2のモジュールが前記画像出力関数呼び出しの戻り値を返した時刻、該戻り値、色情報の有無の少なくともいずれかを含むことを特徴とする請求項1乃至3のいずれか1項に記載の情報処理装置。
【請求項5】
前記出力手段により出力された履歴情報を分割し、1回の前記画像出力関数の呼び出しに伴って出力される前記履歴情報をレコードとして生成するレコード生成手段と、
前記レコード生成手段によって生成された前記レコードを前記画像情報の種類毎に一覧表示する表示手段と、
前記レコードをソートする基準となる前記画像情報の種類の指定を受け付ける指定受付手段と
を備え、
前記表示手段は、前記指定受付手段により指定された前記画像情報の種類毎に、前記レコード出力手段より出力されたレコードの内容をソートして再表示することを特徴とする請求項4に記載の情報処理装置。
【請求項6】
前記表示手段は所定の条件を満たす前記レコードの内容を強調表示することを特徴とする請求項5に記載の情報処理装置。
【請求項7】
第1、第2のモジュールと、該第1のモジュールから該第2のモジュール内の関数への呼び出しを仲介し、当該呼び出しに応じた該第2のモジュールにおける処理ログを取得するための第3のモジュールとを実行する情報処理装置の制御方法であって、
前記第1のモジュールにより呼び出し要求がなされた関数が、前記第2のモジュールに色情報を設定する色情報設定関数であるか否かを判定し、前記色情報設定関数である場合に、前記色情報を記憶手段に記憶する記憶制御工程と、
前記第1のモジュールにより呼び出し要求がなされた関数が、前記第2のモジュールに前記色情報設定関数によって設定された色情報を利用して所定の画像の出力を指示する画像出力関数であるか否かを判定し、前記画像出力関数である場合に、前記記憶制御工程によって前記記憶手段に記憶された色情報を前記所定の画像に関する画像情報と対応づけて履歴情報として出力する出力工程と
を備えることを特徴とする情報処理装置の制御方法。
【請求項8】
第1、第2のモジュールと、該第1のモジュールから該第2のモジュール内の関数への呼び出しを仲介し、当該呼び出しに応じた該第2のモジュールにおける処理ログを取得するための第3のモジュールとを実行する情報処理装置の制御方法であって、
前記第1のモジュールにより呼び出し要求がなされた関数が、前記第2のモジュールに前記色情報設定関数によって予め設定された色情報を利用して所定の画像の出力を指示する画像出力関数であるか否かを判定し、前記画像出力関数である場合に、予め設定された前記色情報を取得する色情報取得関数を呼び出して前記第2のモジュールから色情報を取得し、当該色情報を前記所定の画像に関する画像情報と対応づけて履歴情報として出力する出力工程とを備えることを特徴とする情報処理装置の制御方法。
【請求項9】
前記色情報は有彩色であるか否かを判定する判定工程を更に備え、
前記出力工程は、前記判定工程により有彩色と判定された前記色情報を前記画像情報と対応づけて履歴情報として出力することを特徴とする請求項7又は8に記載の情報処理装置の制御方法。
【請求項10】
前記画像情報は、前記画像出力関数が呼び出された時刻、前記所定の画像の形状に関する情報、前記所定の画像の位置に関する情報、前記第2のモジュールが前記画像出力関数呼び出しの戻り値を返した時刻、該戻り値、色情報の有無の少なくともいずれかを含むことを特徴とする請求項7乃至9のいずれか1項に記載の情報処理装置の制御方法。
【請求項11】
前記出力工程により出力された履歴情報を分割し、1回の前記画像出力関数の呼び出しに伴って出力される前記履歴情報をレコードとして生成するレコード生成工程と、
前記レコード生成工程によって生成された前記レコードを前記画像情報の種類毎に一覧表示する表示工程と、
前記レコードをソートする基準となる前記画像情報の種類の指定を受け付ける指定受付工程と
を備え、
前記表示工程は、前記指定受付工程により指定された前記画像情報の種類毎に、前記レコード出力工程より出力されたレコードの内容をソートして再表示することを特徴とする請求項10に記載の情報処理装置の制御方法。
【請求項12】
前記表示工程は所定の条件を満たす前記レコードの内容を強調表示することを特徴とする請求項11に記載の情報処理装置の制御方法。
【請求項13】
請求項7乃至12のいずれか1項に記載の情報処理装置の制御方法をコンピュータに実行させるためのコンピュータプログラム。
【請求項14】
請求項13に記載のコンピュータプログラムを格納したコンピュータ読み取り可能な記憶媒体。
【請求項1】
第1、第2のモジュールと、該第1のモジュールから該第2のモジュール内の関数への呼び出しを仲介し、当該呼び出しに応じた該第2のモジュールにおける処理ログを取得するための第3のモジュールとを実行する情報処理装置であって、
前記第1のモジュールにより呼び出し要求がなされた関数が、前記第2のモジュールに色情報を設定する色情報設定関数であるか否かを判定し、前記色情報設定関数である場合に、前記色情報を記憶する記憶制御手段と、
前記第1のモジュールにより呼び出し要求がなされた関数が、前記第2のモジュールに前記色情報設定関数によって設定された色情報を利用して所定の画像の出力を指示する画像出力関数であるか否かを判定し、前記画像出力関数である場合に、前記記憶制御手段によって記憶された色情報を前記所定の画像に関する画像情報と対応づけて履歴情報として出力する出力手段と
を備えることを特徴とする情報処理装置。
【請求項2】
第1、第2のモジュールと、該第1のモジュールから該第2のモジュール内の関数への呼び出しを仲介し、当該呼び出しに応じた該第2のモジュールにおける処理ログを取得するための第3のモジュールとを実行する情報処理装置であって、
前記第1のモジュールにより呼び出し要求がなされた関数が、前記第2のモジュールに前記色情報設定関数によって予め設定された色情報を利用して所定の画像の出力を指示する画像出力関数であるか否かを判定し、前記画像出力関数である場合に、予め設定された前記色情報を取得する色情報取得関数を呼び出して前記第2のモジュールから色情報を取得し、当該色情報を前記所定の画像に関する画像情報と対応づけて履歴情報として出力する出力手段とを備えることを特徴とする情報処理装置。
【請求項3】
前記色情報は有彩色であるか否かを判定する判定手段を更に備え、
前記出力手段は、前記判定手段により有彩色と判定された前記色情報を前記画像情報と対応づけて履歴情報として出力することを特徴とする請求項1又は2に記載の情報処理装置。
【請求項4】
前記画像情報は、前記画像出力関数が呼び出された時刻、前記所定の画像の形状に関する情報、前記所定の画像の位置に関する情報、前記第2のモジュールが前記画像出力関数呼び出しの戻り値を返した時刻、該戻り値、色情報の有無の少なくともいずれかを含むことを特徴とする請求項1乃至3のいずれか1項に記載の情報処理装置。
【請求項5】
前記出力手段により出力された履歴情報を分割し、1回の前記画像出力関数の呼び出しに伴って出力される前記履歴情報をレコードとして生成するレコード生成手段と、
前記レコード生成手段によって生成された前記レコードを前記画像情報の種類毎に一覧表示する表示手段と、
前記レコードをソートする基準となる前記画像情報の種類の指定を受け付ける指定受付手段と
を備え、
前記表示手段は、前記指定受付手段により指定された前記画像情報の種類毎に、前記レコード出力手段より出力されたレコードの内容をソートして再表示することを特徴とする請求項4に記載の情報処理装置。
【請求項6】
前記表示手段は所定の条件を満たす前記レコードの内容を強調表示することを特徴とする請求項5に記載の情報処理装置。
【請求項7】
第1、第2のモジュールと、該第1のモジュールから該第2のモジュール内の関数への呼び出しを仲介し、当該呼び出しに応じた該第2のモジュールにおける処理ログを取得するための第3のモジュールとを実行する情報処理装置の制御方法であって、
前記第1のモジュールにより呼び出し要求がなされた関数が、前記第2のモジュールに色情報を設定する色情報設定関数であるか否かを判定し、前記色情報設定関数である場合に、前記色情報を記憶手段に記憶する記憶制御工程と、
前記第1のモジュールにより呼び出し要求がなされた関数が、前記第2のモジュールに前記色情報設定関数によって設定された色情報を利用して所定の画像の出力を指示する画像出力関数であるか否かを判定し、前記画像出力関数である場合に、前記記憶制御工程によって前記記憶手段に記憶された色情報を前記所定の画像に関する画像情報と対応づけて履歴情報として出力する出力工程と
を備えることを特徴とする情報処理装置の制御方法。
【請求項8】
第1、第2のモジュールと、該第1のモジュールから該第2のモジュール内の関数への呼び出しを仲介し、当該呼び出しに応じた該第2のモジュールにおける処理ログを取得するための第3のモジュールとを実行する情報処理装置の制御方法であって、
前記第1のモジュールにより呼び出し要求がなされた関数が、前記第2のモジュールに前記色情報設定関数によって予め設定された色情報を利用して所定の画像の出力を指示する画像出力関数であるか否かを判定し、前記画像出力関数である場合に、予め設定された前記色情報を取得する色情報取得関数を呼び出して前記第2のモジュールから色情報を取得し、当該色情報を前記所定の画像に関する画像情報と対応づけて履歴情報として出力する出力工程とを備えることを特徴とする情報処理装置の制御方法。
【請求項9】
前記色情報は有彩色であるか否かを判定する判定工程を更に備え、
前記出力工程は、前記判定工程により有彩色と判定された前記色情報を前記画像情報と対応づけて履歴情報として出力することを特徴とする請求項7又は8に記載の情報処理装置の制御方法。
【請求項10】
前記画像情報は、前記画像出力関数が呼び出された時刻、前記所定の画像の形状に関する情報、前記所定の画像の位置に関する情報、前記第2のモジュールが前記画像出力関数呼び出しの戻り値を返した時刻、該戻り値、色情報の有無の少なくともいずれかを含むことを特徴とする請求項7乃至9のいずれか1項に記載の情報処理装置の制御方法。
【請求項11】
前記出力工程により出力された履歴情報を分割し、1回の前記画像出力関数の呼び出しに伴って出力される前記履歴情報をレコードとして生成するレコード生成工程と、
前記レコード生成工程によって生成された前記レコードを前記画像情報の種類毎に一覧表示する表示工程と、
前記レコードをソートする基準となる前記画像情報の種類の指定を受け付ける指定受付工程と
を備え、
前記表示工程は、前記指定受付工程により指定された前記画像情報の種類毎に、前記レコード出力工程より出力されたレコードの内容をソートして再表示することを特徴とする請求項10に記載の情報処理装置の制御方法。
【請求項12】
前記表示工程は所定の条件を満たす前記レコードの内容を強調表示することを特徴とする請求項11に記載の情報処理装置の制御方法。
【請求項13】
請求項7乃至12のいずれか1項に記載の情報処理装置の制御方法をコンピュータに実行させるためのコンピュータプログラム。
【請求項14】
請求項13に記載のコンピュータプログラムを格納したコンピュータ読み取り可能な記憶媒体。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【公開番号】特開2006−285793(P2006−285793A)
【公開日】平成18年10月19日(2006.10.19)
【国際特許分類】
【出願番号】特願2005−106800(P2005−106800)
【出願日】平成17年4月1日(2005.4.1)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成18年10月19日(2006.10.19)
【国際特許分類】
【出願日】平成17年4月1日(2005.4.1)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]