(57)【要約】【課題】  デバッグ対象のプログラムと協働する他のプログラムを実際に動作させた結果に基づいてデバッグを行うことができなかった。【解決手段】  上位プログラムと下位プログラムと検査対象プログラムとが動作するシステムをトレースするにあたり、上記検査対象プログラムと同じインタフェースによって上記上位プログラムと下位プログラムとからの入力情報の取得および上記上位プログラムと下位プログラムとへの出力情報の受け渡しを実行し、上記取得した入力情報に基づいて上記検査対象プログラムを動作させ、当該検査対象プログラムの出力情報に基づいて上記インタフェースによる受け渡しを行い、これらの入出力に関するログを記録する。【選択図】  図３
2007080036.tif 000002
【特許請求の範囲】
【請求項１】
上位プログラムと下位プログラムと検査対象プログラムとが動作するシステムのトレース装置であって、
上記検査対象プログラムと同じインタフェースによって上記上位プログラムと下位プログラムとからの入力情報の取得および上記上位プログラムと下位プログラムとへの出力情報の受け渡しを実行するダミーインタフェース手段と、
上記ダミーインタフェース手段における入力情報を取得して当該入力情報に基づいて上記検査対象プログラムを動作させ、当該検査対象プログラムの出力情報を取得して上記ダミーインタフェース手段に受け渡すとともに、これらの入出力に関するログを記録するログ記録手段とを備えることを特徴とするトレース装置。
【請求項２】
上記入力情報は、上記上位プログラムおよび下位プログラムから上記検査対象プログラムの関数を呼び出したときの情報と、上記検査対象プログラムから上位プログラムおよび下位プログラムの関数を呼び出したときの戻り値に関する情報とを含み、
上記出力情報は、上記上位プログラムおよび下位プログラムから検査対象プログラムの関数を呼び出したときの戻り値に関する情報と、上記検査対象プログラムから上位プログラムおよび下位プログラムの関数を呼び出したときの情報を含むことを特徴とする上記請求項１に記載のトレース装置。
【請求項３】
上記ログ記録手段は、
上記検査対象プログラムを実行する検査対象プログラム実行部と、
上記下位プログラムと同じインタフェースをもつダミー下位インタフェース部とを備え、
上記入力情報に基づいて上記検査対象プログラム実行部によって上記検査対象プログラムを実行させ、上記入力情報と出力情報とともに、当該検査対象プログラムとダミー下位インタフェース部とにおける入出力のログを記録することを特徴とする上記請求項１または請求項２のいずれかに記載のトレース装置。
【請求項４】
上位プログラムと下位プログラムと検査対象プログラムとが動作するシステムのトレース方法であって、
上記検査対象プログラムと同じインタフェースによって上記上位プログラムと下位プログラムとからの入力情報の取得および上記上位プログラムと下位プログラムとへの出力情報の受け渡しを実行し、
上記取得した入力情報に基づいて上記検査対象プログラムを動作させ、当該検査対象プログラムの出力情報に基づいて上記インタフェースによる受け渡しを行い、これらの入出力に関するログを記録することを特徴とするトレース方法。
【請求項５】
上位プログラムと下位プログラムと検査対象プログラムとが動作するシステムのトレースプログラムであって、
上記検査対象プログラムと同じインタフェースによって上記上位プログラムと下位プログラムとからの入力情報の取得および上記上位プログラムと下位プログラムとへの出力情報の受け渡しを実行するダミーインタフェース機能と、
上記ダミーインタフェース機能における入力情報を取得して当該入力情報に基づいて上記検査対象プログラムを動作させ、当該検査対象プログラムの出力情報を取得して上記ダミーインタフェース機能に受け渡すとともに、これらの入出力に関するログを記録するログ記録機能とをコンピュータに実現させることを特徴とするトレースプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの動作をトレースするトレース装置、トレース方法およびトレースプログラムに関する。
【背景技術】
【０００２】
プログラムを作成する際には、ほとんどの場合デバッグが必要になる。デバッグにおいては、デバッグ対象のプログラムにて扱う関数の呼び出しに関する情報を取得し、また、メモリリークチェックを行うなどして問題の抽出を行っている（例えば、特許文献１参照）。
【特許文献１】特開平１０−２６９１０５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来の技術においては、デバッグ対象のプログラムと協働する他のプログラムを実際に動作させた結果に基づいてデバッグを行うことができなかった。
すなわち、従来の技術においてはデバッグ対象のＤＬＬとその上位のアプリケーション部との協働についてログをとるのみである。しかし、プリンタドライバなど、現在のプログラムの多くは複数のＤＬＬが協働して所定の機能を実現している。従って、あるＤＬＬをデバッグ対象としたとき、その上位プログラムと下位プログラムとデバッグ対象のＤＬＬとを協働させなければ、デバッグの原因となり得るあらゆる状況をシミュレートすることができない。
本発明は、上記課題にかんがみてなされたもので、複数のプログラムが協働する際に行われる実際の動作に即してデバッグを実行可能にする技術を提供することを目的とする。
【課題を解決するための手段】
【０００４】
上記目的を達成するため、本発明では、上位プログラムおよび下位プログラムと協働する検査対象プログラムをデバッグの対象とし、当該検査対象プログラムと同じインタフェースをもつダミーインタフェース手段にて検査対象プログラムに関する入力情報および出力情報を制御する。また、ログ記録手段において当該入力情報に基づいて検査対象プログラムを動作させ、ダミーインタフェース手段を介してその出力情報を上位プログラムおよび下位プログラムに受け渡す。このとき、入力情報と出力情報に関するログを記録する。
【０００５】
従って、上位プログラムおよび下位プログラムが検査対象プログラムと協働しながら動作している状態のログを記録することができ、このログを解析することで複数のプログラムが協働する際に行われる実際の動作に即してデバッグを実行することが可能になる。本発明においては、検査対象プログラムと協働するプログラムが２以上であり、これらのプログラムが協働して所定の機能を実現していることが重要である。
【０００６】
すなわち、あるプログラムから検査対象となっている他のプログラムを利用して何らかの機能を実現する際に、プログラムがこれらの２つのみであれば、検査対象プログラムにおける入出力のログを解析することによってデバッグを行うことが可能である。しかし、あるプログラムから検査対象プログラムを利用し、さらに他のプログラムを利用する場合には当該他のプログラムを含めてログを記録し解析しなければならない。
【０００７】
そこで、上位プログラムが検査対象プログラムを利用し、さらに検査対象プログラムが下位プログラムを利用する構成において、ダミーインタフェース手段を設けて上位プログラムと下位プログラムとに関する入力情報を取得し、出力情報を受け渡すこととした。この構成により、下位プログラムを含めた動作のログを記録することができ、検査対象プログラムの完全な動作をシミュレートすることができるので、確実にデバッグを行うことが可能になる。
【０００８】
例えば、スプーラとLanguageMonitorとPortMonitorとが協働して印刷を実行する構成において、LanguageMonitorを検査対象プログラムとするとき、LanguageMonitorの下位プログラムであるPortMonitorも含めてシミュレーションを行わないと、実際に印刷を実行する際の状況を再現することができない。しかし、本発明においては、下位プログラムも含めているので、実際に印刷を行う際の状況を再現しながらログを記録することができる。むろん、本発明は、上記上位プログラムや下位プログラムがさらに他のプログラムを利用したり利用されたりする場合に適用することも可能であるし、検査対象プログラムが複数の上位プログラムから利用され、また、複数の下位プログラムを利用する場合であっても同様である。
【０００９】
なお、上位プログラムおよび下位プログラムと検査対象プログラムとにおいては、予め決められたインタフェースを介して互いに情報を入出力するように構成されている。例えば、検査対象プログラムにおいて予め定義された関数を利用して処理を進める場合、上位プログラムから検査対象プログラムを利用する際には引数を指定して関数を呼び出し、検査対象プログラムが上位プログラムに対して戻り値を返すことになる。
【００１０】
このとき、検査対象プログラムにおいて予め関数が決められており、上位プログラムから当該予め決められた関数を呼び出しているので、プログラム同士のインタフェースは予め決められているといえる。なお、この例において、検査対象プログラムを呼び出す際に指定する関数や引数が入力情報に相当するし、呼び出した関数の戻り値が出力情報に相当する。従って、本発明において、上記入力情報の具体例として、上記上位プログラムおよび下位プログラムから上記検査対象プログラムの関数を呼び出したときの情報（関数の指定やその引数を示す情報）と、上記検査対象プログラムから上位プログラムおよび下位プログラムの関数を呼び出したときの戻り値に関する情報とを含む構成を採用可能である。
【００１１】
また、同様に、上記出力情報の具体例として、上記上位プログラムおよび下位プログラムから検査対象プログラムの関数を呼び出したときの戻り値に関する情報と、上記検査対象プログラムから上位プログラムおよび下位プログラムの関数を呼び出したときの情報を含む構成を採用可能である。すなわち、検査対象プログラムが上記上位プログラムと下位プログラムとから取得する全ての情報は入力情報となり得るし、検査対象プログラムから上記上位プログラムと下位プログラムとへ出力する全ての情報は出力情報となり得る。むろん、本発明において、関数を利用する処理が必須というわけではなく、予め決められた規則（インタフェース）によってプログラム同士が互いに情報を授受するすべての場合について本発明を適用することが可能である。
【００１２】
ダミーインタフェース手段においては、検査対象プログラムと同じインタフェースによって上記上位プログラムおよび下位プログラムを対象に情報の入出力をすることができればよい。すなわち、ダミーインタフェース手段においては、入力情報と出力情報との制御を行っており、上位プログラムと下位プログラムとが直接的に検査対象プログラムと協働するのではない。この意味で、ダミーインタフェース手段は検査対象プログラムの実態を備えているのではなく、入力情報の取得と出力情報の受け渡しのみを実施しているといえる。
【００１３】
一方、ログ記録手段においては、上記ダミーインタフェース手段における入力情報を取得して当該入力情報に基づいて上記検査対象プログラムを動作させる。従って、ログ記録手段の管理下において上記検査対象プログラムが実際に動作することによってログの記録および実際の動作のシミュレートを実現している。また、ログ記録手段において扱う入力情報は上位プログラムと下位プログラムとの双方からの入力情報であり、ログ記録手段において扱う出力情報は上位プログラムと下位プログラムとの双方への出力情報である。
【００１４】
従って、ログ記録手段においては、上位プログラムおよび下位プログラムと協働する検査対象プログラムの動作のすべてを把握することができ、その動作に伴う入出力のすべてに関してログを記録することができる。なお、入出力に関するログには、上記入力情報と出力情報とに加えて、検査対象プログラムが入出力を行うことによって使用するメモリ領域等に関する情報を含めることにより、メモリリークチェックを行うことが可能である。
【００１５】
ログ記録手段においては、検査対象プログラムを動作させてそのログを記録することができればよいが、その構成例として、検査対象プログラムを実行する実行部とダミー下位インタフェース部とを備える構成を採用してもよい。ここで、ダミー下位インタフェース部は上記下位プログラムと同じインタフェースをもつ。従って、当該ダミー下位インタフェース部を構成することによって、検査対象プログラムが実際に動作するときと全く同じ条件で検査対象プログラムの動作をシミュレートすることができる。
【００１６】
この構成において、上記入力情報に基づいて上記検査対象プログラム実行部によって上記検査対象プログラムを実行させると、検査対象プログラムは、予め決められたインタフェースによって上位プログラムおよび下位プログラムと協働する。このとき、上位プログラムから検査対象プログラムを呼び出し、さらに検査対象プログラムから下位プログラムを呼び出すことを考えると、実際の動作をシミュレートするために検査対象プログラムの変更をすることはできない。
【００１７】
従って、検査対象プログラムから下位プログラムを呼び出す処理とその戻り値に関する処理を下位プログラムで予め決められたインタフェースによって行う必要がある。そこで、ダミー下位インタフェース部において下位プログラムと同じインタフェースを構成し、検査対象プログラムと下位プログラムとでの情報の授受を実際の動作通りの形式で取得し、上記入力情報および出力情報とし、また、この入出力のログを記録する。この結果、デバッグ前の検査対象プログラムを全く変更することなく、かつ、実際の動作と同じ条件で検査対象プログラムを動作させることができ、確実にデバッグを実施することが可能になる。
【００１８】
ところで、上述したトレースは、所定の手順に従って処理を進めていくうえで、その手順に発明が存在すると考えることもできる。従って、本発明は方法としても適用可能である。また、本発明を実施しようとする際に、トレース装置にて所定のプログラムを実行させる場合もある。そこで、そのプログラムとしても本発明を実施可能である。また、いかなる記憶媒体もプログラムを提供するために使用可能である。例えば、磁気記録媒体や光磁気記録媒体であってもよいし、今後開発されるいかなる記録媒体においても全く同様に考えることができる。また、一部がソフトウェアであって、一部がハードウェアで実現される場合においても本発明の思想において全く異なるものではなく、一部を記録媒体上に記録しておいて必要に応じて適宜読み込む形態のものも含まれる。さらに、一次複製品、二次複製品などの複製段階については全く問う余地なく同等である。
【発明を実施するための最良の形態】
【００１９】
以下、下記の順序に従って本発明の実施形態を説明する。
（１）トレース装置の構成：
（２）トレース処理：
（２−１）シミュレーション処理：
（３）他の実施形態：
【００２０】
（１）トレース装置の構成：
図１は、本発明の実施形態にかかるトレース装置を示すブロック図である。本実施形態ではコンピュータ１０の機能の一部によってトレース装置が実現される。コンピュータ１０は演算処理の中枢をなすＣＰＵ１１を備えており、このＣＰＵ１１はシステムバス１０ａを介してコンピュータ１０全体の制御を行う。同システムバス１０ａには、ＲＯＭ１２、ＲＡＭ１３、ＵＳＢＩ／Ｆ１４やハードディスクドライブ（ＨＤＤ）１５，図示しないＣＲＴＩ／Ｆや入力機器Ｉ／Ｆ等が接続されている。
【００２１】
ハードディスクドライブ１５には、ソフトウェアとしてオペレーティングシステム（ＯＳ１１ａ）を機能させるための各種ソフトウェア、印刷制御を行うためのプリンタドライバ、デバッグプログラム等が格納されており、これらのソフトウェアは、実行時にＣＰＵ１１によって適宜ＲＡＭ１３に転送される。ＣＰＵ１１は、ＲＡＭ１３を一時的なワークエリアとして適宜アクセスしながらＯＳ１１ａの制御下で種々のプログラムを実行する。
【００２２】
入力機器Ｉ／Ｆには、キーボード１６やマウス１７が操作用入力機器として接続される。また、ＣＲＴＩ／Ｆには、表示用のディスプレイ１８が接続されている。従って、コンピュータ１０では、キーボード１６やマウス１７による操作内容を受け付け、また、ディスプレイ１８に各種情報を表示することが可能である。さらに、ＵＳＢＩ／Ｆ１４には、プリンタ２０が接続されており、コンピュータ１０が出力するデータに基づいて画像を印刷することが可能である。むろん、プリンタ２０との接続Ｉ／ＦはＵＳＢＩ／Ｆに限られる必要もなく、パラレルＩ／Ｆ，シリアルＩ／Ｆ，ＳＣＳＩ接続など種々の接続態様を採用可能であるし、今後開発されるいかなる接続態様であっても同様である。
【００２３】
本実施形態においては、ＯＳ１１ａの制御下において各種プログラムが実行されるようになっており、システムプロセスとしてプリンタドライバ３０、各種のサービスプログラムおよび各種のライブラリプログラムが実行される。図１においては、サービスプログラムの一例をサービスプログラム３１、ライブラリプログラムの例を第１ライブラリ３２，第２ライブラリ３３として示している。また、ユーザプロセスとして各種のプログラムが実行され、図１においては、その中で各種プログラムのデバッグを行うためのデバッグプログラム４０とデバッグプログラム４０に利用されるシミュレートモジュール４１とを示している。
【００２４】
本実施形態において、プリンタドライバ３０はサービスプログラム３１を利用して印刷を実行するようになっており、サービスプログラム３１は、さらに第１ライブラリ３２と第２ライブラリ３３とを利用して印刷に関する処理を行うようになっている。すなわち、プリンタドライバ３０がサービスプログラム３１を実行すると、当該サービスプログラム３１は、予め決められたインタフェースによって第１ライブラリ３２における関数を呼び出し、その戻り値に基づいて処理を行う。このとき、第１ライブラリ３２は、サービスプログラム３１からの関数の呼び出しに応じて、さらに第２ライブラリにおける関数を呼び出し、その戻り値に基づいてサービスプログラム３１からの呼び出しに対する戻り値を返すようになっている。
【００２５】
デバッグプログラム４０は、以上のようなシステムプロセスを構成する各種プログラムのいずれかをデバッグ対象（検査対象）として選択し、シミュレートモジュール４１を起動してデバッグ対象の動作をシミュレートする。図２は、デバッグ処理を示すフローチャートであり、デバッグプログラム４０が起動されるとデバッグ対象を受け付ける（ステップＳ１００）。すなわち、デバッグプログラム４０はデバッグ対象の選択肢を示す図示しないＵＩをディスプレイ１８に表示し、キーボード１６やマウス１７の操作入力を受け付けて利用者が指示したデバッグ対象を取得する。
【００２６】
デバッグ対象を受け付けると、シミュレートモジュール４１を起動する（ステップＳ１１０）。このとき、デバッグ対象を実際に動作させ、さらにログを記録するためのモジュール群を起動する。例えば、第１ライブラリ３２がデバッグ対象となるとき、当該第１ライブラリ３２と同じインタフェースを備えるダミーのモジュールがサービスプログラム３１および第２ライブラリ３３と協働するように設定する。また、当該ダミーのモジュールに対する入力情報およびダミーのモジュールに対する出力情報をシミュレートモジュール４１にて取得し、シミュレートモジュール４１の制御下において第１ライブラリ３２が実際に動作するように設定する。この詳細例は後述する。
【００２７】
以上のような設定後、シミュレートモジュール４１は、デバッグ対象および当該デバッグ対象と協働するプログラムを動作させてデバッグ対象の動作をシミュレートする（ステップＳ１２０）。上述の例のように第１ライブラリ３２がデバッグ対象である場合、プリンタドライバ３０に実際の処理（印刷処理等）を行わせ、サービスプログラム３１および第２ライブラリ３３と協働する第１ライブラリ３２の動作をシミュレートする。
【００２８】
なお、ステップＳ１２０のシミュレーション処理においては、各プログラムが協働する際に使用する関数とその引数および戻り値を全てログ（図１のログデータ１３ａ）に記録するようになっており、また、予めＲＡＭ１３に確保された共有領域１３ｂを利用して各プログラムを実行するようになっている。そこで、シミュレートモジュール４１は、各プログラムの終了後に上記ログデータ１３ａと共有領域１３ｂとを参照し、ログおよびメモリリークチェック結果をディスプレイ１８に表示する（ステップＳ１３０）。なお、メモリリークチェックにおいては、処理途中に確保された記憶領域がステップＳ１３０の時点で解放されているか否かをチェックする。
【００２９】
（２）トレース処理：
次に、図３〜図５に基づいて、以上の構成にて実行されるトレース処理の例を説明する。図３は、本発明の適用例をより具体的に示しており、サービスプログラム３１の例がスプーラ３１ａ、第１ライブラリ３２の例がランゲージモニタ４１ｂ、第２ライブラリ３３の例がポートモニタ３３ａである。また、シミュレートモジュール４１は、入出力制御部４１ａとダミーポートモニタ４１ｃとを備え、ランゲージモニタ４１ｂを実行する。
【００３０】
図３に示す例において、ダミーランゲージモニタ３２ａは、デバッグ対象のランゲージモニタ４１ｂと同じインタフェースを備えている。ただし、このインタフェースに基づいて関数による処理を行うことはせず、このインタフェースによって取得する入力情報を共有領域１３ｂに記録し、また、共有領域１３ｂからこのインタフェースによって出力する出力情報を取得する機能を備えている。すなわち、ランゲージモニタ４１ｂにおける関数の実体的な処理を行うことはせず、この意味でダミーである。
【００３１】
入出力制御部４１ａは、上記共有領域１３ｂにアクセスして、当該共有領域１３ｂに記憶されたスプーラ３１ａおよびポートモニタ３３ａからの入力情報を取得する。また、ランゲージモニタ４１ｂの処理の結果得られる出力情報を共有領域１３ｂに記録する。この出力情報はダミーランゲージモニタ３２ａによって取得されるので、入出力制御部４１ａは、共有領域１３ｂを介して出力情報を受け渡しているといえる。なお、本実施形態においては、スプーラ３１ａおよびポートモニタ３３ａから呼び出された関数に関する情報およびスプーラ３１ａおよびポートモニタ３３ａからの戻り値が入力情報であり、スプーラ３１ａおよびポートモニタ３３ａへの戻り値およびスプーラ３１ａおよびポートモニタ３３ａの関数を呼び出すときの情報が出力情報である。
【００３２】
ダミーポートモニタ４１ｃは、上記ポートモニタ３３ａと同じインタフェースを備えている。ただし、当該ダミーポートモニタ４１ｃにおいてもこのインタフェースに基づいて関数による処理を行うことはせず、このインタフェースによって扱う入出力の情報を上記入出力制御部４１ａから取得し、または受け渡すのみである。ランゲージモニタ４１ｂは、本来、スプーラ３１ａやポートモニタ３３ａからの関数の呼び出しに応じるなどして処理を進めるライブラリプログラムであるが、本実施形態においては、当該ランゲージモニタ４１ｂが入出力制御部４１ａの制御下で動作するように構成されている。
【００３３】
すなわち、入出力制御部４１ａにおいては、上記共有領域１３ｂを介してスプーラ３１ａからの入力情報をそのままランゲージモニタ４１ｂに受け渡し、また、ランゲージモニタ４１ｂからの出力情報をそのまま上記共有領域１３ｂに記録する。従って、ランゲージモニタ４１ｂにて予め決められたインタフェースで処理を進めることができる。さらに、上記ダミーポートモニタ４１ｃがポートモニタ３３ａと同じインタフェースを備えることにより、ランゲージモニタ４１ｂに対して何ら変更を行うことなく、その入出力をダミーポートモニタ４１ｃにて扱うことができる。この意味で、ランゲージモニタ４１ｂは、シミュレートモジュール４１の制御下で実際に動作することができる。
【００３４】
なお、以上のスプーラ３１ａとランゲージモニタ４１ｂとポートモニタ３３ａとの機能は、プリンタドライバ３０と協働するための通常の機能であり、例えば、スプーラ３１ａにおいては、プリンタドライバ３０から投入される印刷ジョブのキューを管理する処理等を行う。ランゲージモニタ４１ｂにおいては、プリンタ２０のステータス情報を取得する処理等を行う。ポートモニタ３３ａにおいては、プリンタ２０が接続されているポートの管理等を行う。むろん、これ以外の機能も含み、これらのプログラムが協働して印刷を実行する構成となっている。また、以上の入出力制御部４１ａとランゲージモニタ４１ｂとダミーポートモニタ４１ｃとは上記ステップＳ１１０にてシミュレートモジュール４１が起動されたときにロードされ、上記ダミーランゲージモニタ３２ａはシステムプロセスにおいてランゲージモニタ４１ｂの処理をラップするモジュールとしてロードされる。
【００３５】
（２−１）シミュレーション処理：
図４および図５は、以上の例において実施されるシミュレーション処理のフローチャートを示しており、このフローチャートでは、スプーラ３１ａからランゲージモニタ４１ｂの関数を呼び出し、この呼び出しに応じて戻り値を返すために、ランゲージモニタ４１ｂがさらにポートモニタ３３ａの関数を呼び出しその戻り値を取得する処理を示している。
【００３６】
シミュレーション処理が開始されると、シミュレートモジュール４１がプリンタドライバ３０に指示し、画像を印刷するための印刷処理を実施させる。このとき、プリンタドライバ３０は、印刷を実行するための処理を実行し、スプーラ３１ａにデータを送信する（ステップＳ２００）。この結果、スプーラ３１ａは印刷を実行するために所定の処理を実行するが、この処理の一環としてダミーランゲージモニタ３２ａの関数を呼び出す（ステップＳ２０５）。
【００３７】
ダミーランゲージモニタ３２ａは、この関数の呼び出しに応じてその呼び出し内容（当該呼び出された関数に関する情報）を共有領域１３ｂに記録する（ステップＳ２１０）。入出力制御部４１ａは、当該共有領域１３ｂに記録された呼び出し内容（ステップＳ２０５での呼び出し内容）を取得し、上記ログデータ１３ａに記録する（ステップＳ２１５）。以上の処理により、共有領域１３ｂを介したプロセス間通信が実現され、実質的に関数の呼び出し内容がスプーラ３１ａから入出力制御部４１ａに受け渡されたことになる。
【００３８】
そこで、入出力制御部４１ａは、上記取得した呼び出し内容の通りにランゲージモニタ４１ｂの関数を呼び出す（ステップＳ２２０）。この結果、スプーラ３１ａから呼び出された関数の処理がランゲージモニタ４１ｂで実行され、この内容はログデータ１３ａに記録されていることになる。ランゲージモニタ４１ｂは、呼び出された関数について戻り値を計算するための処理を行うが、本例においては、このとき、さらにポートモニタ３３ａの関数を呼び出す。
【００３９】
シミュレートモジュール４１においては、ダミーポートモニタ４１ｃがランゲージモニタ４１ｂからの呼び出しを受け付けるためのインタフェースを備えているので、本例では、ランゲージモニタ４１ｂからダミーポートモニタ４１ｃの関数を呼び出す（ステップＳ２２５）。このとき、入出力制御部４１ａは、この関数の呼び出し内容を取得し、共有領域１３ｂおよびログデータ１３ａにその内容を記録する（ステップＳ２３０）。
【００４０】
また、ダミーランゲージモニタ３２ａは、当該共有領域１３ｂに記録された呼び出し内容（ステップＳ２２５の呼び出し内容）を取得し、この呼び出し内容の通りにポートモニタ３３ａの関数の呼び出す（ステップＳ２３５）。以上の処理により、共有領域１３ｂを介したプロセス間通信が実現され、実質的に関数の呼び出し内容がランゲージモニタ４１ｂからポートモニタ３３ａに受け渡されたことになる。また、この処理の結果、ランゲージモニタ４１ｂからの呼び出し内容はログデータ１３ａに記録されていることになる。
【００４１】
ポートモニタ３３ａは、上記ステップＳ２３５の呼び出しに応じて所定の処理を行い、その戻り値をダミーランゲージモニタ３２ａに返す（ステップＳ２４０）。ダミーランゲージモニタ３２ａは、この戻り値を取得してその内容を共有領域１３ｂに記録する（ステップＳ２４５）。入出力制御部４１ａは、当該共有領域１３ｂに記録された戻り値（ステップＳ２４０での戻り値）を取得し、上記ログデータ１３ａに記録する（ステップＳ２５０）。以上の処理により、共有領域１３ｂを介したプロセス間通信が実現され、実質的に関数の戻り値がポートモニタ３３ａから入出力制御部４１ａに受け渡されたことになる。
【００４２】
そこで、入出力制御部４１ａは、上記取得した戻り値をさらにダミーポートモニタ４１ｃに受け渡し（ステップＳ２５５）、ダミーポートモニタ４１ｃは、この戻り値をランゲージモニタ４１ｂへ返す（ステップＳ２６０）。以上の処理により、上記ステップＳ２２５にて呼び出しを行った関数に対する戻り値がランゲージモニタ４１ｂに返されることになる。
【００４３】
この結果、ランゲージモニタ４１ｂは、この戻り値に基づいて上記ステップＳ２２０にて呼び出された関数の戻り値を算出する所定の処理を行い、算出した戻り値を上記ステップＳ２２０にて呼び出された関数の戻り値として、上記入出力制御部４１ａに返す（ステップＳ２６５）。入出力制御部４１ａは、この戻り値を取得して共有領域１３ｂおよびログデータ１３ａにその内容を記録する（ステップＳ２７０）。ダミーランゲージモニタ３２ａは、当該共有領域１３ｂに記録された戻り値（ステップＳ２０５にて呼び出した関数の戻り値）を取得し、この戻り値をスプーラ３１ａへ返す（ステップＳ２７５）。
【００４４】
以上の処理の結果、印刷データをプリンタ２０に転送する印刷処理が実施される（ステップＳ２８０）。むろん、デバッグ対象のランゲージモニタ４１ｂ等に重大なバグが存在するときには適正に印刷処理が終了しないことはあり得るが、ここでは、印刷処理に必要なスプーラ３１ａとランゲージモニタ４１ｂとポートモニタ３３ａとが実際に動作して印刷処理を試みることが重要である。この構成により、実際の動作と全く変わらない状態で動作をシミュレートすることができる。
【００４５】
印刷処理が実施されると、上記シミュレートモジュール４１とダミーランゲージモニタ３２ａとポートモニタ３３ａとスプーラ３１ａとの処理を終了し（ステップＳ２８５）、図２に示す処理に復帰する。以上の処理において、デバッグ対象とされたモジュールの動作を完全にシミュレートし、当該デバッグ対象のモジュールにおいて扱う関数とその戻り値を全てログに記録するので、デバッグ対象のモジュールにおいてどのように関数を呼び出し、また、どのように呼び出されたのかを的確にトレースすることができる。さらに、メモリの確保、解放に関するログを確認することでメモリリークチェックを行うことが可能である。
【００４６】
（３）他の実施形態：
上記実施形態は本発明にかかるトレース装置、トレース方法およびトレースプログラムを実現する一例であり、むろん他の構成を採用することも可能である。上述の例においては、入出力制御部４１ａがランゲージモニタ４１ｂに関する入出力およびダミーポートモニタ４１ｃに関する入出力を制御していたが、シミュレートモジュール４１においてはランゲージモニタ４１ｂに関する入力情報と出力情報とを制御することができればよい。
【００４７】
そこで、図６に示すように、ランゲージモニタ４１ｂの関数を呼び出し、その戻り値を取得する第１入出力制御部４１０ａとランゲージモニタ４１ｂから呼び出される関数の内容を取得し、その戻り値を返す第２入出力制御部４１０ｃを構成してもよい。すなわち、第１入出力制御部４１０ａと第２入出力制御部４１０ｃとがそれぞれ、共有領域１３ｂを介してダミーランゲージモニタ３２ａとプロセス間通信を行うように構成し、また、ランゲージモニタ４１ｂの修正を行うことなくその入出力を扱えるように構成する。
【００４８】
むろん、第２入出力制御部４１０ｃは、上記ポートモニタ３３ａと同じインタフェースによって情報の入出力を実施することになる。この構成において、第１入出力制御部４１０ａと第２入出力制御部４１０ｃとが関数および戻り値に関する情報のログを記録すれば、上述の実施形態と同様にランゲージモニタ４１ｂの動作をシミュレートし、その動作をトレースすることができる。
【００４９】
また、上記図４および図５においては、スプーラ３１ａからランゲージモニタ４１ｂの関数を呼び出し、この呼び出しに応じてランゲージモニタ４１ｂがポートモニタ３３ａの関数を呼び出す際の処理を説明したが、むろん、処理の流れがこの態様のみに限定されるわけではない。例えば、スプーラ３１ａからランゲージモニタ４１ｂの関数を呼び出したとき、ランゲージモニタ４１ｂがポートモニタ３３ａの関数を呼び出すことなく戻り値を返す場合であっても、上記図３に示す構成において、入出力制御部４１ａがこれらのログを記録することで動作をトレースすることができる。
【００５０】
さらに、ランゲージモニタ４１ｂからポートモニタ３３ａ以外の他のモジュールを呼び出すように構成してもよい。この場合、例えば、当該他のモジュールがシステムプロセスで動作し、このモジュールと同じインタフェースを備えるダミーインタフェースをシミュレートモジュール４１で動作させる。そして、ランゲージモニタ４１ｂとダミーインタフェースとにて実施される入出力に関する情報を入出力制御部４１ａで制御しながらそのログを記録する。この構成によれば、当該他のモジュールを含めたシミュレーションのトレースを行うことができる。むろん、ランゲージモニタ４１ｂの関数を呼び出すモジュールはスプーラ３１ａに限られず、他のモジュールから呼び出される場合であってもダミーランゲージモニタ３２ａがこの呼び出しに関する情報を共有領域１３ｂに記録すれば、入出力制御部４１ａの処理によってログを記録することが可能になる。
【図面の簡単な説明】
【００５１】
【図１】トレース装置を示すブロック図である。
【図２】デバッグ処理を示すフローチャートである。
【図３】本発明の適用例を示すブロック図である。
【図４】シミュレーション処理のフローチャートである。
【図５】シミュレーション処理のフローチャートである。
【図６】第２の実施例を示すブロック図である。
【符号の説明】
【００５２】
１０…コンピュータ、１１…ＣＰＵ、１２…ＲＯＭ、１３…ＲＡＭ、１３ａ…ログデータ、１３ｂ…共有領域、２０…プリンタ、３０…プリンタドライバ、３１…サービスプログラム、３１ａ…スプーラ、３２…第１ライブラリ、３２ａ…ダミーランゲージモニタ、３３…第２ライブラリ、３３ａ…ポートモニタ、４０…デバッグプログラム、４１…シミュレートモジュール、４１ａ…入出力制御部、４１ｂ…ランゲージモニタ、４１ｃ…ダミーポートモニタ
【図１】
2007080036.tif 000003
【図２】
2007080036.tif 000004
【図３】
2007080036.tif 000005
【図４】
2007080036.tif 000006
【図５】
2007080036.tif 000007
【図６】
2007080036.tif 000008