(57)【要約】      （修正有）【課題】複数の機能プログラムモジュールを組み合わせて目的の処理を実行するアプリケーションプログラムで、ウォッチドッグタイマによる強制的な初期化が発生した原因を容易に特定できる技術を提供する。【解決手段】アプリケーションプログラムは、複数の機能プログラムモジュールを所定の順序で起動することによって目的の処理を実行する。起動された機能プログラムモジュールは、起動したことを示す起動情報Ａｓｔ、Ｂｓｔ、Ｃｓｔ、Ｄｓｔや引数Ａｖ、Ｂｖ１、Ｂｖ２、Ｄｖと、動作を終了したことを示す終了情報Ａｅｎ、Ｂｅｎ、Ｃｅｎ、Ｄｅｎとを、時系列でバックアップメモリの動作履歴保存領域２１ａに記憶する。ウォッチドッグタイマで初期化された場合でも、前回に起動していた機能プログラムモジュールについての情報がバックアップメモリに記憶されていた場合には、その情報に続けて、起動情報や終了情報を記憶する。【選択図】図７
2019185276.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ上で所定の目的処理を実行するアプリケーションプログラム（１）であって、
前記目的処理で用いられる個々の機能を実現するプログラムである複数の機能プログラムモジュール（１０）と、
前記複数の機能プログラムモジュールを所定の順序で起動させることによって、前記目的処理を実現するプログラムであるメインプログラムモジュール（１０ｍ）と、
前記機能プログラムモジュールの実行時間を監視して、該実行時間が所定の上限時間を超えた場合には、実行中の前記機能プログラムモジュールを特定可能な情報を所定のバックアップメモリ（２１）に保持した状態で、前記メインプログラムモジュールを初期化するプログラムである監視プログラムモジュール（１０ｗ）と
を備え、
前記機能プログラムモジュールは、起動したことを示す起動情報と、前記機能を実現する動作を終了したことを示す終了情報とを、時系列で前記バックアップメモリに記憶すると共に、前記バックアップメモリに前回に起動した前記機能プログラムモジュールの情報が記憶されていた場合には、該情報に続けて、前記起動情報および前記終了情報を記憶する
ことを特徴とするアプリケーションプログラム。
【請求項２】
請求項１に記載のアプリケーションプログラムであって、
前記監視プログラムモジュールは、前記メインプログラムモジュールを初期化するに際して、実行中の前記機能プログラムモジュールを特定可能な情報を前記バックアップメモリに保存する
ことを特徴とするアプリケーションプログラム。
【請求項３】
請求項１または請求項２に記載のアプリケーションプログラムであって、
前記機能プログラムモジュールは、前記起動情報に加えて、前記起動に際して受け取った引数も、前記バックアップメモリに保存する
ことを特徴とするアプリケーションプログラム。
【請求項４】
請求項１ないし請求項３の何れか一項に記載のアプリケーションプログラムであって、
前記機能プログラムモジュールは、前記バックアップメモリに保存されたデータ量が所定の上限量を超えた場合には、古いデータから順番に、新しいデータを上書き保存する
ことを特徴とするアプリケーションプログラム。
【請求項５】
コンピュータ上で所定の目的処理を実行するアプリケーションプログラム（１）によって起動され、前記目的処理で用いられる機能を実現する機能プログラムモジュール（１０）であって、
前記起動されたことを示す起動情報を、前記アプリケーションプログラムが初期化されても記憶内容が消去されないバックアップメモリ（２１）に向けて出力する起動情報出力部（１２）と、
前記機能を実現する動作が終了したことを示す終了情報を、前記バックアップメモリに向けて出力する終了情報出力部（１４）と
を備え、
前記起動情報出力部は、前記起動情報を、前回に起動された前記機能モジュールが保存した情報に対して、前記バックアップメモリ上で時系列となる位置に出力しており、
前記終了情報出力部は、前記終了情報を、前記起動情報に対して、前記バックアップメモリ上で時系列となる位置に出力する
ことを特徴とする機能プログラムモジュール。
【請求項６】
請求項５に記載の機能プログラムモジュールであって、
前記起動情報保存部は、前記起動情報に加えて、前記起動に際して受け取った引数も、前記バックアップメモリに保存する
ことを特徴とする機能プログラムモジュール。
【請求項７】
請求項５または請求項６に記載の機能プログラムモジュールであって、
前記起動情報保存部および前記終了情報保存部は、前記バックアップメモリに保存されたデータ量が所定の上限量を超えた場合には、古いデータから順番に、新しいデータを上書き保存する
ことを特徴とする機能プログラムモジュール。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ上で動作するアプリケーションプログラム、およびアプリケーションプログラムによって起動されて、アプリケーションプログラムが動作するために必要な機能を提供する機能プログラムモジュールに関する。
【背景技術】
【０００２】
コンピュータを用いて目的とする処理を行うためには、アプリケーションプログラムが必要となる。このアプリケーションプログラムの開発は、従来は個々の会社が単独で行っていたが、近年の高機能化や複雑化に伴って、複数の会社で分担して行われるようになっている。例えば、開発しようとするアプリケーションプログラムを、主に機能の観点から複数の小さなプログラム単位（本明細書中では「機能プログラムモジュール」と称する）に分割して、それら複数の機能プログラムモジュールを複数の会社が分担して開発する。そして、できあがった複数の機能プログラムモジュールが提供する機能を組み合わせることによって、１つのアプリケーションプログラムを開発するようになっている。
【０００３】
このようにして開発されたアプリケーションプログラムでは、複数の機能プログラムモジュールが、予め定められた順序で次々と起動して機能を実現することによって、目的とする処理が実現される。また、このようにして動作する関係上、複数の機能プログラムモジュールの中で、プログラム上のミス（いわゆるバグ）を含んだ機能プログラムモジュールが１つでも存在すると、アプリケーションプログラムの処理が正常に終了しなくなる。
【０００４】
そこで、いわゆるウォッチドッグタイマと呼ばれる監視用のプログラムモジュールを用いて、機能プログラムモジュールによる動作の実行時間を監視しておき、実行時間が異常に長くなった場合には、不具合が発生したものと判断して、アプリケーションプログラムをソフトウェアで強制的に初期化することが行われている。また、不具合の原因を容易に特定可能とするために、不具合が発生する時点で動作していた機能プログラムモジュール（すなわち、バグのあると思われる機能プログラムモジュール）、および機能プログラムモジュールの動作内容を記憶しておく技術が提案されている（特許文献１）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−０１１９９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、ウォッチドッグタイマによって強制的な初期化が発生した時に、その時の動作していた機能プログラムモジュールおよび動作内容を幾ら調べてみても不具合の原因を見つけることができない場合があり、その結果、アプリの開発が進まなくなってしまうことがあるという問題があった。
【０００７】
この発明は、従来技術における上述した課題を解決するためになされたものであり、複数の機能プログラムモジュールを組み合わせて目的の処理を実行するアプリで、ウォッチドッグタイマによる強制的な初期化が発生した原因を容易に特定することが可能な技術の提供を目的とする。
【課題を解決するための手段】
【０００８】
上述した問題を解決するために本発明のアプリケーションプログラム、および機能プログラムモジュールでは、機能プログラムモジュールが起動したことを示す起動情報と、機能プログラムモジュールが動作を終了したことを示す終了情報とを、時系列でバックアップメモリに記憶する。また、前回に起動していた機能プログラムモジュールについての情報がバックアップメモリに記憶されていた場合には、その情報に続けて、起動情報や終了情報を記憶する。
こうすれば、機能プログラムモジュールの実行時間が所定の上限時間に達したために、監視プログラムモジュールによって初期化された場合でも、バックアップメモリを調べれば、その機能プログラムモジュールが正常に起動されたか否かを知ることができる。そして、正常に起動されていなかった場合は、初期化の発生時に動作していた機能プログラムモジュールに原因があるわけではないと判断することができるので、初期化が発生した原因を容易に特定することが可能となる。
【図面の簡単な説明】
【０００９】
【図１】本実施例のアプリケーションプログラム１の大まかな内部構造を示したブロック図である。
【図２】メインプログラムモジュール１０ｍが複数の機能プログラムモジュール１０を所定の順序で起動することによって、目的の処理を実行する様子を概念的に示した説明図である。
【図３】監視プログラムモジュール１０ｗが機能プログラムモジュール１０の実行時間を監視して、メインプログラムモジュール１０ｍを初期化する様子を示す説明図である。
【図４】本実施例の機能プログラムモジュール１０の大まかな内部構造を示すブロック図である。
【図５】本実施例の機能プログラムモジュール１０がデータを書き込むバックアップメモリ２１の内部構造を示した説明図である。
【図６】本実施例の機能プログラムモジュール１０が実行する機能提供処理のフローチャートである。
【図７】本実施例の機能プログラムモジュール１０がバックアップメモリ２１の動作履歴保存領域２１ａにデータを書き込む様子を概念的に示した説明図である。
【図８】本実施例のアプリケーションプログラム１では、監視プログラムモジュール１０ｗによって強制的に初期化された場合でも、その原因を容易に特定可能な理由を示した説明図である。
【発明を実施するための形態】
【００１０】
以下では、上述した本発明の内容を明確にするために、本発明の実施例について説明する。
Ａ．装置構成  ：
Ａ−１．アプリケーションプログラム１の動作概要  ：
図１には、本実施例のアプリケーションプログラム１の大まかな内部構造が示されている。図示されるように、アプリケーションプログラム１は、メインプログラムモジュール１０ｍと、複数の機能プログラムモジュール１０ａ〜１０ｄと、監視プログラムモジュール１０ｗとを備えている。
機能プログラムモジュール１０ａ〜１０ｄはコンピュータ上で動作する小さなプログラムであり、それぞれ所定の基本的な機能を実現する。メインプログラムモジュール１０ｍは、複数の機能プログラムモジュール１０ａ〜１０ｄを所定の順序で起動させることによって、アプリケーションプログラム１が目的とする処理（以下、目的処理と称することがある）を実行する。また、メインプログラムモジュール１０ｍや機能プログラムモジュール１０ａ〜１０ｄは、メモリ２０から必要なデータを読み込んだり、あるいはメモリ２０にデータを書き込んだりすることによって動作する。
尚、以下では、個々の機能プログラムモジュール１０ａ〜１０ｄを区別する必要がない場合は、単に機能プログラムモジュール１０と称することがあるものとする。また、本実施例のアプリケーションプログラム１は、４つの機能プログラムモジュール１０を備えるものとしているが、もっと多数の機能プログラムモジュール１０を備えていても良い。
【００１１】
監視プログラムモジュール１０ｗは、いわゆるウォッチドッグタイマであり、メインプログラムモジュール１０ｍによって起動されると計時を開始して、所定の上限時間が経過すると、メインプログラムモジュール１０ｍを強制的に初期化する。メインプログラムモジュール１０ｍおよび機能プログラムモジュール１０が正常に動作している場合は、監視プログラムモジュール１０ｗの計時時間が上限時間に達する前に、メインプログラムモジュール１０ｍが監視プログラムモジュール１０ｗの計時時間を初期化する。このため、動作中のメインプログラムモジュール１０ｍが、監視プログラムモジュール１０ｗによって初期化されてしまうことはない。
【００１２】
図２には、メインプログラムモジュール１０ｍが、複数の機能プログラムモジュール１０ａ〜１０ｄを所定の順序で起動することによって、目的の処理を実行する様子が示されている。図示した例では、メインプログラムモジュール１０ｍは、先ず初めに機能プログラムモジュール１０ａを起動させる。また、初めの機能プログラムモジュール１０（ここでは機能プログラムモジュール１０ａ）を起動させる際には、監視プログラムモジュール１０ｗも起動させる。図２中に示した実線の矢印は、メインプログラムモジュール１０ｍが機能プログラムモジュール１０や監視プログラムモジュール１０ｗを起動させていることを概念的に表している。また、監視プログラムモジュール１０ｗは起動されると計時を開始する。
【００１３】
機能プログラムモジュール１０ａは、メインプログラムモジュール１０ｍによって起動されると、予め定められた処理を実行することによって、機能プログラムモジュール１０ａに固有の基本的な機能をメインプログラムモジュール１０ｍに提供する。図２中に破線で示した矢印は、機能プログラムモジュール１０が基本的な機能をメインプログラムモジュール１０ｍに提供していることを表している。また、機能プログラムモジュール１０が処理を実行するために、変数値や、処理内容を指定する数値などの引数が必要な場合は、起動時にメインプログラムモジュール１０ｍから取得する。
【００１４】
機能プログラムモジュール１０ａが所定の処理を実行して、機能を提供する動作を終了すると、メインプログラムモジュール１０ｍは自らのプログラムに従って、今度は機能プログラムモジュール１０ｂを起動すると共に、監視プログラムモジュール１０ｗの計時時間を初期化する。図中に示した一点鎖線の矢印は、メインプログラムモジュール１０ｍが監視プログラムモジュール１０ｗの計時時間を初期化していることを示している。
また、監視プログラムモジュール１０ｗが計時する上限時間は、機能プログラムモジュール１０ａが機能を提供するために要する時間と、その結果を受けてメインプログラムモジュール１０ｍが監視プログラムモジュール１０ｗの計時時間を初期化するまでに要する時間との合計時間よりも、十分に長い時間に設定されている。このため、メインプログラムモジュール１０ｍは、監視プログラムモジュール１０ｗの計時時間が上限時間になる前に、監視プログラムモジュール１０ｗの計時時間を初期化することができる。
【００１５】
機能プログラムモジュール１０ｂも起動されると、予め定められた処理を実行することによって、機能プログラムモジュール１０ｂに固有の基本的な機能をメインプログラムモジュール１０ｍに提供する。すると、メインプログラムモジュール１０ｍは、今度は機能プログラムモジュール１０ｃを起動すると共に、監視プログラムモジュール１０ｗの計時時間を初期化する。
ここで、機能プログラムモジュール１０ｂが機能を提供するために要する時間と、機能プログラムモジュール１０ａが機能を提供するために要する時間とは必ずしも同じではない。同様に、機能プログラムモジュール１０ｂから機能を提供されたメインプログラムモジュール１０ｍが機能プログラムモジュール１０ｃを起動するまでに要する時間と、機能プログラムモジュール１０ａから機能を提供されたメインプログラムモジュール１０ｍが機能プログラムモジュール１０ｂを起動するまでに要する時間とも、必ずしも同じではない。
【００１６】
しかしそれでも、機能プログラムモジュール１０ｂが機能を提供するために要する時間と、その結果を受けてメインプログラムモジュール１０ｍが機能プログラムモジュール１０ｃを起動するまでに要する時間（従って、監視プログラムモジュール１０ｗの計時時間を初期化するまでに要する時間）とを合計した時間は、監視プログラムモジュール１０ｗが計時する上限時間よりも十分に短い時間となっている。このため、メインプログラムモジュール１０ｍは、監視プログラムモジュール１０ｗの計時時間が上限時間になる前に、監視プログラムモジュール１０ｗの計時時間を初期化することができる。
【００１７】
以下、同様に、メインプログラムモジュール１０ｍは、自らのプログラムに従って、機能プログラムモジュール１０ａ、機能プログラムモジュール１０ｄ、機能プログラムモジュール１０ｃと順番に機能プログラムモジュール１０を起動すると共に、監視プログラムモジュール１０ｗの計時時間を初期化する。メインプログラムモジュール１０ｍは、こうして、予め定められた順序で複数の機能プログラムモジュール１０を起動することによって、目的とする処理を実行する。また、メインプログラムモジュール１０ｍや、機能プログラムモジュール１０が正常に動作していれば、監視プログラムモジュール１０ｗの計時時間が上限時間に達する前に、計時時間が初期化されるので、監視プログラムモジュール１０ｗによってメインプログラムモジュール１０ｍが初期化されることはない。
ところが、メインプログラムモジュール１０ｍあるいは機能プログラムモジュール１０が、何らかの理由で正常に動作しなくなると、監視プログラムモジュール１０ｗの計時時間を初期化することができなくなって、メインプログラムモジュール１０ｍが初期化されてしまう。
【００１８】
図３には、監視プログラムモジュール１０ｗがメインプログラムモジュール１０ｍを初期化する様子が概念的に示されている。図３に示した例でも、図２の場合と同様に、メインプログラムモジュール１０ｍは、先ず初めに機能プログラムモジュール１０ａおよび監視プログラムモジュール１０ｗを起動させ、その後は、監視プログラムモジュール１０ｗの計時時間を初期化しながら、予め定められた順序に従って、複数の機能プログラムモジュール１０を起動させていく。
ところが、図３に示した例では、機能プログラムモジュール１０ｄで異常が発生して動作が終了しなくなっている。その結果、メインプログラムモジュール１０ｍが監視プログラムモジュール１０ｗの計時時間を初期化できないまま、計時時間が上限時間に達して、監視プログラムモジュール１０ｗによって初期化され、機能プログラムモジュール１０ｄの動作も強制的に中止される。
このように、メインプログラムモジュール１０ｍあるいは機能プログラムモジュール１０の動作で異常が生じた場合には、メインプログラムモジュール１０ｍが監視プログラムモジュール１０ｗによって初期化される。このため、メインプログラムモジュール１０ｍあるいは機能プログラムモジュール１０が暴走する事態を回避することができる。
【００１９】
また、監視プログラムモジュール１０ｗは、メインプログラムモジュール１０ｍを初期化するに先立って、その時点で動作していた機能プログラムモジュール１０と、その機能プログラムモジュール１０の動作内容とを、バックアップメモリ２１（図１参照）に保存する。バックアップメモリ２１は、メモリ２０とは異なって、メインプログラムモジュール１０ｍが初期化されても記憶されている内容が消去されることはない。このため、監視プログラムモジュール１０ｗによる初期化が発生した場合には、バックアップメモリ２１に記憶されている内容を読み出すことによって、初期化の原因になった機能プログラムモジュール１０を特定したり、あるいは動作内容からバグの位置を特定したりすることができる。
【００２０】
ところが、監視プログラムモジュール１０ｗによる初期化が発生した後に、バックアップメモリ２１に記憶されている内容を読み出して、その時に動作していた機能プログラムモジュール１０を詳しく調べて見ても、バグを見つけることが出来ない場合があった。このような事態が生じると、初期化が発生した理由を特定できないので、アプリケーションプログラム１の開発が遅延してしまう。
そこで、本実施例の機能プログラムモジュール１０は、次のような内部構造を採用することとした。
【００２１】
Ａ−２．機能プログラムモジュール１０の内部構造  ：
図４には、本実施例のアプリケーションプログラム１に組み込まれた機能プログラムモジュール１０の内部構造が示されている。図示されるように、本実施例の機能プログラムモジュール１０は、起動要求検知部１１と、機能提供部１２と、起動情報出力部１３と、終了情報出力部１４とを備えている。
尚、これらの「部」は、監視プログラムモジュール１０ｗによってメインプログラムモジュール１０ｍが初期化された原因を容易に特定可能とするために、機能プログラムモジュール１０が備える機能に着目して、機能プログラムモジュール１０のプログラムコードを便宜的に分類した抽象的な概念である。従って、１つのプログラムコードが複数の「部」に分類されている場合もあるし、何れの「部」にも分類されないプログラムコードが存在していても構わない。
【００２２】
起動要求検知部１１は、メインプログラムモジュール１０ｍから起動を要求されたことを検知すると、機能提供部１２を起動する。
機能提供部１２は、起動するとコンピュータ上で所定の動作を実行することによって、メインプログラムモジュール１０ｍに対して所定の機能を提供する。また、機能提供部１２が動作するに際して、変数値が必要であったり、動作条件の指定が必要であったりする場合は、それら変数値あるいは条件を指定する値などを示す引数を、起動要求検知部１１がメインプログラムモジュール１０ｍから取得して機能提供部１２に供給する。
【００２３】
機能提供部１２は、起動すると、起動したことを示す起動情報を、起動情報出力部１３に出力する。また、起動に際して起動要求検知部１１から引数が供給されている場合には、引数も起動情報出力部１３に出力する。
起動情報出力部１３は、起動に際して機能提供部１２から受け取った起動情報（および存在する場合には引数）を、バックアップメモリ２１に出力する。
【００２４】
また、機能提供部１２は、起動するとメモリ２０からデータを読み出したり、読み出したデータに対して所定の処理を実行したり、得られたデータをメモリ２０に記憶したりする動作を繰り返すことによって、所定の基本的な機能をメインプログラムモジュール１０ｍに提供する。そして、機能を提供するための所定の動作が終了すると、その旨を終了情報出力部１４に出力する。
終了情報出力部１４は、動作を終了した旨を機能提供部１２から受け取ると、動作を終了したことを示す終了情報をバックアップメモリ２１に出力する。
【００２５】
図５には、本実施例の機能プログラムモジュール１０が起動情報や終了情報などを書き込むバックアップメモリ２１のデータ構造が、概念的に示されている。図示されるように、本実施例のバックアップメモリ２１は、動作履歴保存領域２１ａと、初期化時状況保存領域２１ｂとを備えている。
このうちの動作履歴保存領域２１ａは、機能プログラムモジュール１０が起動時や終了時に、上述した起動情報や終了情報などを書き込む領域である。また、初期化時状況保存領域２１ｂは、図１を用いて前述した監視プログラムモジュール１０ｗがメインプログラムモジュール１０ｍを初期化する際に、動作していた機能プログラムモジュール１０を特定するための情報や、動作状況などを書き込む領域である。前述したように、これら動作履歴保存領域２１ａおよび初期化時状況保存領域２１ｂに書き込まれたデータは、メインプログラムモジュール１０ｍが初期化されても消去されることはない。
また、図示されるように動作履歴保存領域２１ａは、複数の小領域に区分されており、それらには固有のアドレス番号が付されている。尚、本実施例の動作履歴保存領域２１ａは、アドレス番号ａｄ１〜ａｄ８が付された８つの小領域に区分されている。
【００２６】
本実施例のアプリケーションプログラム１は、以上のような機能プログラムモジュール１０が組み込まれているので、監視プログラムモジュール１０ｗによってメインプログラムモジュール１０ｍが初期化された場合でも、バグを有する機能プログラムモジュール１０を容易に特定することが可能となる。
【００２７】
Ｂ．機能プログラムモジュール１０の動作  ：
図６には、機能プログラムモジュール１０が実行する機能提供処理のフローチャートが示されている。機能プログラムモジュール１０は、メインプログラムモジュール１０ｍによって起動されると、この機能提供処理を実行することによって、所定の機能をメインプログラムモジュール１０ｍに提供する。
【００２８】
図６に示されるように、機能プログラムモジュール１０は、先ず初めに、メインプログラムモジュール１０ｍによって起動されたか否かを判断する（Ｓ１００）。その結果、起動されていない場合は（Ｓ１００：ｎｏ）、同じ判断を繰り返すことによって、起動されるまで待機状態となる。
そして、メインプログラムモジュール１０ｍによって起動されると、Ｓ１００では「ｙｅｓ」と判断して、続いて、起動されたことを示す起動情報を、バックアップメモリ２１の動作履歴保存領域２１ａに記憶する（Ｓ１０１）。
【００２９】
ここで、図５を用いて前述したように、動作履歴保存領域２１ａには複数（ここでは８つ）の小領域に区分されており、それぞれの小領域にはアドレス番号ａｄ１〜ａｄ８が付されている。本実施例の機能プログラムモジュール１０は、動作履歴保存領域２１ａにデータを書き込む際には、アドレス番号ａｄ１〜ａｄ８の順番に従って小領域に順番に書き込むようになっている。
例えば、動作履歴保存領域２１ａに未だデータが書き込まれていない場合は、動作履歴保存領域２１ａのアドレス番号ａｄ１にデータを書き込む。また、アドレス番号ａｄ１にはデータが書き込まれているが、アドレス番号ａｄ２には未だデータが書き込まれていない場合は、アドレス番号ａｄ２にデータを書き込む。
更に、動作履歴保存領域２１ａの全てのアドレス番号ａｄ１〜ａｄ８にデータが書き込まれている場合は、最も古いデータが書き込まれたアドレス番号にデータを書き込む。例えば、アドレス番号ａｄ８にデータが書き込まれた場合には、次にデータを書き込むのはアドレス番号ａｄ１となり、その次はアドレス番号ａｄ２、更にその次はアドレス番号ａｄ３と、順番にデータを書き込んでいく。
【００３０】
また、図２を用いて前述したように、複数の機能プログラムモジュール１０が順番に起動され、それぞれの機能プログラムモジュール１０がバックアップメモリ２１の動作履歴保存領域２１ａにデータを書き込むことになる。従って、前に起動された機能プログラムモジュール１０が、例えば動作履歴保存領域２１ａのアドレス番号ａｄ３に書き込んでいた場合は、Ｓ１０１では、アドレス番号ａｄ４に起動情報を書き込むことになる。
【００３１】
以上のようにして起動情報を動作履歴保存領域２１ａに書き込んだら（Ｓ１０１）、メインプログラムモジュール１０ｍから供給された引数が存在するか否かを判断する（Ｓ１０２）。前述したように引数とは、機能プログラムモジュール１０が所定の機能を提供するために必要となる変数値や、機能の内容を指定する値などの数値、変数値や数値を格納したアドレス値、アドレス値を示すポインタ値などの数値である。機能プログラムモジュール１０によって引数を指定する必要があるものや、必要ではないが引数を指定可能なものや、引数は指定できないものが存在しており、メインプログラムモジュール１０ｍは機能プログラムモジュール１０を起動すると、必要に応じて引数を供給する。
そこで、Ｓ１０２では、メインプログラムモジュール１０ｍから供給された引数が存在するか否かを判断する。
【００３２】
その結果、引数が供給されていない場合は（Ｓ１０２：ｎｏ）、機能プログラムモジュール１０に固有の基本的な機能を提供するための処理を開始する（Ｓ１０４）。
これに対して、引数が供給されていた場合は（Ｓ１０２：ｙｅｓ）、前述した起動情報と同様に、バックアップメモリ２１の動作履歴保存領域２１ａに引数を記憶する（Ｓ１０３）。尚、供給される引数は必ずしも１つではないので、ｎ個の引数が供給されていた場合は、それらの引数を、動作履歴保存領域２１ａのｎ個のアドレス番号に記憶する。
こうして、引数をバックアップメモリ２１の動作履歴保存領域２１ａに書き込んだら（Ｓ１０３）、機能プログラムモジュール１０に固有の基本的な機能を提供するための処理を開始する（Ｓ１０４）。
【００３３】
固有の機能を提供するための処理中は、メモリ２０（図４参照）からデータを読み出したり、データを書き込んだりしながら、予め定められた処理を実行する。
続いて、固有の機能を提供するための処理が終了したか否かを判断して（Ｓ１０５）、処理が終了していない場合は（Ｓ１０５：ｎｏ）、そのまま処理を継続する。
これに対して処理が終了した場合は（Ｓ１０５：ｙｅｓ）、機能の提供が完了した旨をメインプログラムモジュール１０ｍに対して出力する（Ｓ１０６）。
【００３４】
続いて、機能を提供するための処理が終了したことを示す終了情報を、バックアップメモリ２１の動作履歴保存領域２１ａに記憶する（Ｓ１０７）。終了情報を記憶する際にも、前述した起動情報や引数を記憶する場合と同様に、動作履歴保存領域２１ａの中で、最も古いデータが記憶されているアドレス番号に終了情報を記憶する。例えば、Ｓ１０３で引数を記憶した場合は、その引数を記憶したアドレス番号の次のアドレス番号（アドレス番号ａｄ８の場合はアドレス番号ａｄ１）に終了情報を記憶する。また、Ｓ１０３で引数を記憶していない場合は、Ｓ１０１で起動情報を記憶したアドレス番号に続けて終了情報を記憶する。
こうして終了情報をバックアップメモリ２１の動作履歴保存領域２１ａに書き込んだら、図６の機能提供処理を終了する。
【００３５】
上述したように、本実施例の機能プログラムモジュール１０は、起動時には起動情報を、引数が供給された場合には引数を、そして終了時には終了情報を、バックアップメモリ２１の動作履歴保存領域２１ａに時系列で書き込んでいる。このため、アプリケーションプログラム１の実行中に、監視プログラムモジュール１０ｗがメインプログラムモジュール１０ｍを初期化した場合でも、バックアップメモリ２１を調べることによって、初期化された原因を容易に特定することができる。
特に、本実施例のアプリケーションプログラム１では、機能プログラムモジュール１０がバックアップメモリ２１の動作履歴保存領域２１ａに、起動情報や終了情報などを時系列で書き込んでいる。このため、詳細には後述するが、動作履歴保存領域２１ａを調べることで、それぞれの機能プログラムモジュール１０が起動した時の状況を知ることができるので、監視プログラムモジュール１０ｗによる初期化が発生した原因を、より一層容易に特定することが可能となる。
【００３６】
図７には、メインプログラムモジュール１０ｍが順番に機能プログラムモジュール１０を起動するに伴って、動作履歴保存領域２１ａにデータが書き込まれる様子が例示されている。尚、ここでは、メインプログラムモジュール１０ｍは、図２に示した順序で機能プログラムモジュール１０を起動しているものとして説明する。
図２を用いて前述したように、メインプログラムモジュール１０ｍは初めに機能プログラムモジュール１０ａを起動しており、これに伴って、動作履歴保存領域２１ａのアドレス番号ａｄ１には、機能プログラムモジュール１０ａの起動情報Ａｓｔが書き込まれる。また、機能プログラムモジュール１０ａは引数を１つ使用しており、これに伴って、動作履歴保存領域２１ａのアドレス番号ａｄ２には、機能プログラムモジュール１０ａの引数Ａｖが書き込まれる。更に、機能プログラムモジュール１０ａが動作を終了する際には、機能プログラムモジュール１０ａの終了情報Ａｅｎがアドレス番号ａｄ３に書き込まれる。
【００３７】
また、メインプログラムモジュール１０ｍは、機能プログラムモジュール１０ａに続いて機能プログラムモジュール１０ｂを起動する（図２参照）。これに伴って、動作履歴保存領域２１ａのアドレス番号ａｄ４には、機能プログラムモジュール１０ｂの起動情報Ｂｓｔが書き込まれる。また、機能プログラムモジュール１０ｂは２つの引数を使用していることに伴って、動作履歴保存領域２１ａのアドレス番号ａｄ５およびアドレス番号ａｄ６には、２つの引数Ｂｖ１，Ｂｖ２が書き込まれ、更に、動作履歴保存領域２１ａのアドレス番号ａｄ７には、機能プログラムモジュール１０ｂの終了情報Ｂｅｎが書き込まれる。
【００３８】
続いて、メインプログラムモジュール１０ｍは、機能プログラムモジュール１０ｃを起動する。これに伴って、動作履歴保存領域２１ａのアドレス番号ａｄ８には、機能プログラムモジュール１０ｃの起動情報Ｃｓｔが書き込まれる。また、機能プログラムモジュール１０ｃは引数を使用しないので、機能プログラムモジュール１０ｃの終了情報Ｃｅｎは、動作履歴保存領域２１ａのアドレス番号ａｄ１に書き込まれる。
以下、同様に、機能プログラムモジュール１０が起動される度に、その機能プログラムモジュール１０の起動情報が動作履歴保存領域２１ａに書き込まれ、引数が存在する場合には引数も書き込まれる。そして、機能プログラムモジュール１０が終了する際には、その機能プログラムモジュール１０の終了情報が動作履歴保存領域２１ａに書き込まれていく。
【００３９】
ここで、図３を用いて前述したように、機能プログラムモジュール１０ｄの動作中に、監視プログラムモジュール１０ｗによってメインプログラムモジュール１０ｍが初期化された場合について考える。
前述したようにバックアップメモリ２１に記憶されている内容は、初期化されても消去されないから、バックアップメモリ２１の初期化時状況保存領域２１ｂには、従来のアプリケーションプログラム１と同様に、初期化された時点で動作していた機能プログラムモジュール１０の動作状況が記録されている。また、動作履歴保存領域２１ａには、初期化される前に機能プログラムモジュール１０が書き込んだ情報が記録されている。
【００４０】
図８（ａ）には、初期化されたときに動作履歴保存領域２１ａに記憶されていたデータが示されている。図中で斜線を付した部分は、初期化されていたときに動作していた機能プログラムモジュール１０ｄが書き込んだデータ（この場合は、起動情報Ｄｓｔおよび引数Ｄｖ）である。前述したように、機能プログラムモジュール１０は、アドレス番号の順番でデータを書き込んでいく。従って、図８（ａ）に示したデータを、データが書き込まれた順番で並べ替えると、図８（ｂ）に示す順番となる。
【００４１】
図８（ｂ）に示すように、初期化した時点で動作していた機能プログラムモジュール１０ｄは、起動する際に、アドレス番号ａｄ５に保存されている引数Ｄｖを受け取っている。また、機能プログラムモジュール１０ｄが起動する前には、機能プログラムモジュール１０ａが動作しているが、この機能プログラムモジュール１０ａの終了情報Ａｅｎは動作履歴保存領域２１ａには記憶されていない。すなわち、機能プログラムモジュール１０ａは、割り込みが発生したなどの何らかの理由で正常に終了しておらず、そのような状況で機能プログラムモジュール１０ｄが起動されたために、機能プログラムモジュール１０ｄが正常に動作できなくなって、監視プログラムモジュール１０ｗによる初期化が発生したものと考えられる。
【００４２】
また、機能プログラムモジュール１０ｄで初期化が発生した原因となった機能プログラムモジュール１０ａの前に動作していた機能プログラムモジュール１０ｃについては、機能プログラムモジュール１０ｃの終了情報Ｃｅｎが記憶されている。従って、機能プログラムモジュール１０ｃは、一応、正常に終了していると考えられる。このことから、機能プログラムモジュール１０ａは、正常な状態で起動されたにも拘わらず、何らかの理由で正常に終了せず、その状態で機能プログラムモジュール１０ｄが起動されたために、機能プログラムモジュール１０ｄの動作中に監視プログラムモジュール１０ｗによる初期化が発生したものと推定される。従って、初期化が発生したのは機能プログラムモジュール１０ｄの動作中であるが、プログラム上のバグの存在を調査する必要があるのは、機能プログラムモジュール１０ａであると考えられる。
【００４３】
あるいは、初期化の発生時に動作していた機能プログラムモジュール１０ｄは、起動時に引数Ｄｖを受け取っているが、この引数Ｄｖが正常な値でなかった場合もある。
このような場合は、機能プログラムモジュール１０ｄにプログラム上のバグが存在するのではなく、機能プログラムモジュール１０ｄに異常な引数Ｄｖを供給したメインプログラムモジュール１０ｍ、あるいは、その原因となった機能プログラムモジュール１０ａにバグが存在するか否かを調査するべきと考えられる。
【００４４】
このように、動作履歴保存領域２１ａには、機能プログラムモジュール１０が動作した履歴が時系列で記憶されている。このため、監視プログラムモジュール１０ｗによる初期化が発生した場合に、その機能プログラムモジュール１０が起動されたときの状況を知ることができる。例えば、その機能プログラムモジュール１０の前に動作していた機能プログラムモジュール１０が正常に終了していたか否か、あるいは、起動時に正常な引数が供給されていたか否かなどを知ることができる。
仮に、初期化された時に動作していた機能プログラムモジュール１０が、正常な状態で起動されていなかった場合は、初期化された時の機能プログラムモジュール１０ではなく、その機能プログラムモジュール１０の前に起動していた機能プログラムモジュール１０に、バグが存在するものと考えられる。
【００４５】
また、本実施例の動作履歴保存領域２１ａのように、複数の機能プログラムモジュール１０についての動作の履歴が記憶されていれば、初期化が発生した機能プログラムモジュール１０の前に動作していた機能プログラムモジュール１０が、どのような状況で起動したかについても知ることができる。その結果、その機能プログラムモジュール１０が正常な状態で起動していなかった場合は、その前に動作していた機能プログラムモジュール１０について、バグの存在を調査する必要があると考えられる。
【００４６】
このように、本実施例のアプリケーションプログラム１では、機能プログラムモジュール１０が起動したときの状況が、メインプログラムモジュール１０ｍが初期化されても消去されないバックアップメモリ２１に記憶されている。このため、監視プログラムモジュール１０ｗによってメインプログラムモジュール１０ｍが初期化された場合でも、初期化が発生した原因を容易に特定することが可能となる。
【００４７】
以上、本発明の実施例について説明したが、本発明は上記の実施例に限られるものではなく、その要旨を逸脱しない範囲において種々の態様で実施することができる。
【符号の説明】
【００４８】
１…アプリケーションプログラム、  １０ａ〜１０ｄ…機能プログラムモジュール、
１０ｍ…メインプログラムモジュール、    １０ｗ…監視プログラムモジュール、
１１…起動要求検知部、        １２…機能提供部、    １３…起動情報出力部、
１４…終了情報出力部、        ２０…メモリ、      ２１…バックアップメモリ、
２１ａ…動作履歴保存領域、    ２１ｂ…初期化時状況保存領域。
【図１】
2019185276.tif 000003
【図２】
2019185276.tif 000004
【図３】
2019185276.tif 000005
【図４】
2019185276.tif 000006
【図５】
2019185276.tif 000007
【図６】
2019185276.tif 000008
【図７】
2019185276.tif 000009
【図８】
2019185276.tif 000010