(57)【要約】【課題】トレース機能を備えていない画像形成装置に対しトレース機能を容易に付加することによりエラー解析時間を短縮させる。【解決手段】通信部３３は、画像形成装置１０に含まれるスキャナ１５やプリンタ１６などの周辺機器を制御するコントローラとの間で通信を行い受信した周辺機器状態をメモリバッファに格納する。置換部４１は、通信部３３を構成するサブルーチンからのリターン命令を、語長が該リターン命令以下の、通信ロギング部４６のプログラムへのジャンプ命令で置換し、このプログラムは、該メモリバッファに格納された内容を通信情報として、ライトポインタ４８１に基づきＤＲＡＭ１３Ｄに格納させ、ライトポインタ４８１の内容を、次に格納すべきアドレスに更新させ、リターン命令実行によりプロセッサ１１の命令ポインタを戻りアドレスに変更させる。【選択図】図１
2008021067.tif 000002
【特許請求の範囲】
【請求項１】
画像形成装置の記憶手段に格納された機械語プログラムにトレース機能を付加する画像形成装置用トレース機能付加プログラムであって、該記憶手段に格納される第１置換プログラムと第１ロギングプログラムとを有し、該機械語プログラムは、該画像形成装置に含まれる周辺機器を制御するコントローラとの間で通信を行い受信した周辺機器の状態をメモリバッファに格納させる通信サブルーチンを有し、
該第１置換プログラムは該画像形成装置のプロセッサ又は他のプロセッサに対し、該通信サブルーチンからのリターン命令を、語長が該リターン命令以下の、該第１ロギングプログラムへのジャンプ命令で置換させることを特徴とし、
該第１ロギングプログラムは該画像形成装置の該プロセッサに対し、
該メモリバッファに格納された内容を通信情報として、第１ライトポインタに基づき該記憶手段に格納させ、該第１ライトポインタの内容を、次に格納すべきアドレスに更新させ、
該プロセッサの命令ポインタを該戻りアドレスに変更させる、
ステップを有することを特徴とする画像形成装置用トレース機能付加プログラム。
【請求項２】
該記憶手段に格納される第２置換プログラムと第２ロギングプログラムとをさらに有し、
該第２置換プログラムは該画像形成装置のプロセッサ又は他のプロセッサに対し、該機械語プログラムに含まれる、該通信サブルーチン以外のサブルーチンからのリターン命令を、語長が該リターン命令以下の、該第２ロギングプログラムへのジャンプ命令で置換させることを特徴とし、
該第２ロギングプログラムは該画像形成装置の該プロセッサに対し、
該第２置換プログラムにより置換されたジャンプ命令を含むサブルーチンからの戻りアドレスを取得させ、
該戻りアドレスの直前に格納されているサブルーチンコール命令に関する情報を、第２ライトポインタに基づいて該記憶手段に格納させ、該第２ライトポインタの内容を、次に格納すべきアドレスに更新させ、
該プロセッサの命令ポインタを該戻りアドレスに変更させる、
ステップを有し、該機器通信情報と該サブルーチンコール命令に関する情報との組み合わせの時系列情報を得ることを特徴とする請求項１に記載の画像形成装置用トレース機能付加プログラム。
【請求項３】
該通信サブルーチンからのリターン命令のアドレス及び該通信サブルーチン以外のサブルーチンからのリターン命令が記述されたアドレスデータをさらに有し、
該第１及び第２置換プログラムはいずれも、該画像形成装置のプロセッサ又は該他のプロセッサに対し、該アドレスデータに含まれるアドレスのリターン命令を該ジャンプ命令で置換させる、
ことを特徴とする請求項２に記載の画像形成装置用トレース機能付加プログラム。
【請求項４】
該第１ロギングプログラムは該画像形成装置の該プロセッサに対しさらに、該通信情報に通信ＩＤを付加させて該記憶手段に格納させ、
該第２ロギングプログラムは該画像形成装置の該プロセッサに対しさらに、該通信ＩＤが該記憶手段に新たに追加されている場合には該通信ＩＤを該サブルーチンコール命令に関する情報に付加させて該記憶手段に格納させる、
ことを特徴とする請求項１乃至３のいずれか１つに記載の画像形成装置用トレース機能付加プログラム。
【請求項５】
該第２ライトポインタは該第１ライトポインタと同一であり、
該第２ロギングプログラムは該画像形成装置の該プロセッサに対しさらに、その実行中での該第１ロギングプログラムの割込を禁止させる、
ことを特徴とする請求項１乃至３のいずれか１つに記載の画像形成装置用トレース機能付加プログラム。
【請求項６】
該機械語プログラムは、高級言語のソースプログラムをコンパイルして生成されたものであり、
該機械語プログラム中のサブルーチンに対応する該ソースプログラム中の関数名と、該サブルーチンのアドレスと、が対応付けられた関数情報テーブルをさらに有し、
該第２ロギングプログラムは該画像形成装置の該プロセッサに対しさらに、該関数情報テーブルを参照させて、該サブルーチンコール命令のオペランドである分岐先アドレスに対応した関数名を、該サブルーチンコール命令に関する情報の一部又は全部として取得させる、
ことを特徴とする請求項１乃至５のいずれか１つに記載の画像形成装置用トレース機能付加プログラム。
【請求項７】
該画像形成装置の該記憶手段に格納される逆置換プログラムをさらに有し、
該逆置換プログラムは該画像形成装置の該プロセッサに対し、該第１ロギングプログラムへのジャンプ命令及び該第２ロギングプログラムへのジャンプ命令をそれぞれサブルーチンからのリターン命令に置換させる、
ことを特徴とする請求項１乃至６のいずれか１つに記載の画像形成装置用トレース機能付加プログラム。
【請求項８】
プロセッサと、
該プロセッサに結合され、請求項７に記載の第１及び第２置換プログラムと第１及び第２ロギングプログラムと逆置換プログラムとが格納される記憶手段と、
を有し、該第１及び第２置換プログラムと、該第１及び第２ロギングプログラムと、該逆置換プログラムとを、この順に実行させることによりエラー発生時のみトレース機能を付加できるようにしたことを特徴とする画像形成装置。
【請求項９】
画像形成装置の記憶手段に格納された機械語プログラムにトレース機能を付加する画像形成装置用トレース機能付加方法であって、該記憶手段に格納される第１置換プログラムと第１ロギングプログラムとを用い、該機械語プログラムは、該画像形成装置に含まれる周辺機器を制御するコントローラとの間で通信を行い受信した周辺機器の状態をメモリバッファに格納させる通信サブルーチンを有し、
該第１置換プログラムにより該画像形成装置のプロセッサ又は他のプロセッサに対し、該通信サブルーチンからのリターン命令を、語長が該リターン命令以下の、該第１ロギングプログラムへのジャンプ命令で置換させ、
該第１ロギングプログラムにより該画像形成装置の該プロセッサに対し、
該メモリバッファに格納された内容を通信情報として、第１ライトポインタに基づき該記憶手段に格納させ、該第１ライトポインタの内容を、次に格納すべきアドレスに更新させ、
該プロセッサの命令ポインタを該戻りアドレスに変更させる、
ステップを有することを特徴とする画像形成装置用トレース機能付加方法。
【請求項１０】
該記憶手段に格納される第２置換プログラムと第２ロギングプログラムとをさらに用い、
該第２置換プログラムにより該画像形成装置のプロセッサ又は他のプロセッサに対し、該機械語プログラムに含まれる、該通信サブルーチン以外のサブルーチンからのリターン命令を、語長が該リターン命令以下の、該第２ロギングプログラムへのジャンプ命令で置換させ、
該第２ロギングプログラムにより該画像形成装置の該プロセッサに対し、
該第２置換プログラムにより置換されたジャンプ命令を含むサブルーチンからの戻りアドレスを取得させ、
該戻りアドレスの直前に格納されているサブルーチンコール命令に関する情報を、第２ライトポインタに基づいて該記憶手段に格納させ、該第２ライトポインタの内容を、次に格納すべきアドレスに更新させ、
該プロセッサの命令ポインタを該戻りアドレスに変更させて、
該機器通信情報と該サブルーチンコール命令に関する情報との組み合わせの時系列情報を得ることを特徴とする請求項９に記載の画像形成装置用トレース機能付加方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コピー、プリント又はファクシミリ等の機能を備えた画像形成装置に係り、特に、必要時のみトレース機能を付加することが可能な画像形成装置用トレース機能付加方法及びプログラム並びにこのプログラムがインストールされた画像形成装置に関する。
【背景技術】
【０００２】
画像形成装置のプログラム開発段階では、デバッグオプションを有効にしてそのソースコードをコンパイルすることにより、デバッグ用コードを挿入し、その実行プログラムをデバッガと組み合わせて動作させることにより、エラー原因を究明してこれに対処することができる。
【０００３】
また、プログラム完成後のテスト段階では、さまざまなケースを想定してテストが行われる。
【０００４】
製品化段階では、デバッグオプションが無効にされてソースコードがコンパイルされ、これにより、プログラムサイズが小さくなるとともに、処理速度の遅延が防止される。
【０００５】
しかしながら、タイミングまで含めた全ての条件下でテストを行うのは不可能に近い。製品出荷後にエラーが発生した場合、画像形成装置にデバッグ機能が備えられていないので、エラー解析に長時間を要することになる。
【０００６】
下記特許文献１には、デコード回路により、ＣＰＵによってアクセスされたアドレスに基づいて、アクセス先がどこであるかを判定し、アクセス分析回路により、ＣＰＵがアクセスした内容を分析し、ログ受送信ＤＭＡにより、アクセス分析結果を出力する、トレース機能を備えた画像形成装置が開示されている。
【０００７】
しかし、画像形成装置にこのような回路が備えられていない場合には、エラーに至る動作をトレースすることができない。
【特許文献１】特開２００６−１１９６９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明の目的は、このような問題点に鑑み、トレース機能を備えていない画像形成装置に対しトレース機能を容易に付加することによりエラー解析時間を短縮化可能な画像形成装置用トレース機能付加方法及びプログラム並びにこのプログラムがインストールされた画像形成装置を提供することにある。
【０００９】
本発明の他の目的は、通常の動作を遅延させたりプログラムサイズを増大させたりすることなく、かつ、トレース用の特別な回路を備えることなく、エラーが発生したときにユーザの操作でデバッグ機能を追加することにより、エラー解析時間を短縮化可能な画像形成装置を提供することにある。
【課題を解決するための手段】
【００１０】
本発明の第１態様は、画像形成装置の記憶手段に格納された機械語プログラムにトレース機能を付加する画像形成装置用トレース機能付加プログラムであって、該記憶手段に格納される第１置換プログラムと第１ロギングプログラムとを有し、該機械語プログラムは、該画像形成装置に含まれる周辺機器を制御するコントローラとの間で通信を行い受信した周辺機器の状態をメモリバッファに格納させる通信サブルーチンを有し、
該第１置換プログラムは該画像形成装置のプロセッサ又は他のプロセッサに対し、該通信サブルーチンからのリターン命令を、語長が該リターン命令以下の、該第１ロギングプログラムへのジャンプ命令で置換させることを特徴とし、
該第１ロギングプログラムは該画像形成装置の該プロセッサに対し、
該メモリバッファに格納された内容を通信情報として、第１ライトポインタに基づき該記憶手段に格納させ、該第１ライトポインタの内容を、次に格納すべきアドレスに更新させ、
該プロセッサの命令ポインタを該戻りアドレスに変更させる、
ステップを有する。
【００１１】
本発明による画像形成装置用トレース機能付加プログラムの第２態様では、第１態様において、該記憶手段に格納される第２置換プログラムと第２ロギングプログラムとをさらに有し、
該第２置換プログラムは該画像形成装置のプロセッサ又は他のプロセッサに対し、該機械語プログラムに含まれる、該通信サブルーチン以外のサブルーチンからのリターン命令を、語長が該リターン命令以下の、該第２ロギングプログラムへのジャンプ命令で置換させることを特徴とし、
該第２ロギングプログラムは該画像形成装置の該プロセッサに対し、
該第２置換プログラムにより置換されたジャンプ命令を含むサブルーチンからの戻りアドレスを取得させ、
該戻りアドレスの直前に格納されているサブルーチンコール命令に関する情報を、第２ライトポインタに基づいて該記憶手段に格納させ、該第２ライトポインタの内容を、次に格納すべきアドレスに更新させ、
該プロセッサの命令ポインタを該戻りアドレスに変更させる、
ステップを有し、該機器通信情報と該サブルーチンコール命令に関する情報との組み合わせの時系列情報を得る。
【００１２】
本発明による画像形成装置用トレース機能付加プログラムの第３態様では、第２態様において、
該通信サブルーチンからのリターン命令のアドレス及び該通信サブルーチン以外のサブルーチンからのリターン命令が記述されたアドレスデータをさらに有し、
該第１及び第２置換プログラムはいずれも、該画像形成装置のプロセッサ又は該他のプロセッサに対し、該アドレスデータに含まれるアドレスのリターン命令を該ジャンプ命令で置換させる。
【００１３】
本発明による画像形成装置用トレース機能付加プログラムの第４態様では、第１乃至３態様のいずれか１つにおいて、
該第１ロギングプログラムは該画像形成装置の該プロセッサに対しさらに、該通信情報に通信ＩＤを付加させて該記憶手段に格納させ、
該第２ロギングプログラムは該画像形成装置の該プロセッサに対しさらに、該通信ＩＤが該記憶手段に新たに追加されている場合には該通信ＩＤを該サブルーチンコール命令に関する情報に付加させて該記憶手段に格納させる。
【００１４】
本発明による画像形成装置用トレース機能付加プログラムの第５態様では、第１乃至３態様のいずれか１つにおいて、
該第２ライトポインタは該第１ライトポインタと同一であり、
該第２ロギングプログラムは該画像形成装置の該プロセッサに対しさらに、その実行中での該第１ロギングプログラムの割込を禁止させる。
【００１５】
本発明による画像形成装置用トレース機能付加プログラムの第６態様では、第１乃至５態様のいずれか１つにおいて、
該機械語プログラムは、高級言語のソースプログラムをコンパイルして生成されたものであり、
該機械語プログラム中のサブルーチンに対応する該ソースプログラム中の関数名と、該サブルーチンのアドレスと、が対応付けられた関数情報テーブルをさらに有し、
該第２ロギングプログラムは該画像形成装置の該プロセッサに対しさらに、該関数情報テーブルを参照させて、該サブルーチンコール命令のオペランドである分岐先アドレスに対応した関数名を、該サブルーチンコール命令に関する情報の一部又は全部として取得させる。
【００１６】
本発明による画像形成装置用トレース機能付加プログラムの第７態様では、第１乃至６態様のいずれか１つにおいて、
該画像形成装置の該記憶手段に格納される逆置換プログラムをさらに有し、
該逆置換プログラムは該画像形成装置の該プロセッサに対し、該第１ロギングプログラムへのジャンプ命令及び該第２ロギングプログラムへのジャンプ命令をそれぞれサブルーチンからのリターン命令に置換させる。
【発明の効果】
【００１７】
上記第１態様の構成によれば、画像形成装置に含まれる周辺機器を制御するコントローラとの間で通信を行い受信した周辺機器の状態をメモリバッファに格納させる通信サブルーチンを該画像形成装置の機械語プログラムが備え、第１置換プログラムが該画像形成装置のプロセッサ又は他のプロセッサに対し、該通信サブルーチンからのリターン命令を、語長が該リターン命令以下の、該第１ロギングプログラムへのジャンプ命令で置換させ、該第１ロギングプログラムが該画像形成装置の該プロセッサに対し、該メモリバッファに格納された内容を通信情報として、第１ライトポインタに基づき該記憶手段に格納させ、該第１ライトポインタの内容を、次に格納すべきアドレスに更新させ、該プロセッサの命令ポインタを該戻りアドレスに変更させるので、トレース機能を備えていない画像形成装置に周辺機器動作のトレース機能を容易に付加することができ、これによりエラー解析時間を短縮することが可能となるという効果を奏する。
【００１８】
また、エラーが発生しなければ該トレース機能を付加する必要がないので、通常の動作が遅延せず且つそのプログラムサイズが大きくなるのを抑止することができるという効果を奏する。
【００１９】
さらに、トレース用の特別な回路を画像形成装置に備える必要がないという効果を奏する。
【００２０】
上記第２態様の構成によれば、第２置換プログラムが該画像形成装置のプロセッサ又は他のプロセッサに対し、該機械語プログラムに含まれる、該通信サブルーチン以外のサブルーチンからのリターン命令を、語長が該リターン命令以下の、該第２ロギングプログラムへのジャンプ命令で置換させ、第２ロギングプログラムが該画像形成装置の該プロセッサに対し、該第２置換プログラムにより置換されたジャンプ命令を含むサブルーチンからの戻りアドレスを取得させ、該戻りアドレスの直前に格納されているサブルーチンコール命令に関する情報を、第２ライトポインタに基づいて該記憶手段に格納させ、該第２ライトポインタの内容を、次に格納すべきアドレスに更新させ、該プロセッサの命令ポインタを該戻りアドレスに変更させるので、該画像形成装置にさらに、サブルーチン単位のトレース機能を、周辺機器動作のトレース機能と関連づけて付加することができ、これによりエラー解析時間をさらに短縮することが可能となるという効果を奏する。
【００２１】
上記第３態様の構成によれば、該通信サブルーチンからのリターン命令のアドレス及び該通信サブルーチン以外のサブルーチンからのリターン命令が記述されたアドレスデータをさらに有し、該第１及び第２置換プログラムがいずれも、該画像形成装置のプロセッサ又は該他のプロセッサに対し、該アドレスデータに含まれるアドレスのリターン命令を該ジャンプ命令で置換させるので、トレースが必要な関数のみをトレースすることが可能になるという効果を奏する。
【００２２】
上記第４態様の構成によれば、該第１ロギングプログラムが該画像形成装置の該プロセッサに対しさらに、該通信情報に通信ＩＤを付加させて該記憶手段に格納させ、該第２ロギングプログラムが該画像形成装置の該プロセッサに対しさらに、該通信ＩＤが該記憶手段に新たに追加されている場合には該通信ＩＤを該サブルーチンコール命令に関する情報に付加させて該記憶手段に格納させるので、複雑化を避けて両ログを関連付けるとともにまとめることができ、しかも、該通信サブルーチンを間接的に呼び出す割込を受け付けても関数ログ取得中に通信ログをとるということを避けることができるという効果を奏する。
【００２３】
上記第５態様の構成によれば、該第２ロギングプログラムの実行中での該第１ロギングプログラムの割込を禁止させるので、該第２ライトポインタを該第１ライトポインタと同一にすることができ、トレース機能の構成が簡単になるという効果を奏する。
【００２４】
上記第６態様の構成によれば、該機械語プログラムが、高級言語のソースプログラムをコンパイルして生成されたものであり、該機械語プログラム中のサブルーチンに対応する該ソースプログラム中の関数名と、該サブルーチンのアドレスと、が対応付けられた関数情報テーブルをさらに有し、該第２ロギングプログラムが該画像形成装置の該プロセッサに対しさらに、該関数情報テーブルを参照させて、該サブルーチンコール命令のオペランドである分岐先アドレスに対応した関数名を、該サブルーチンコール命令に関する情報の一部又は全部として取得させるので、エラー解析が容易になるという効果を奏する。
【００２５】
上記第７態様の構成によれば、逆置換プログラムが該画像形成装置の該プロセッサに対し、該第１ロギングプログラムへのジャンプ命令及び該第２ロギングプログラムへのジャンプ命令をそれぞれサブルーチンからのリターン命令に置換させるので、トレース後に該逆置換プログラムを実行させることにより、トレース後においても、通常の動作が遅延せず且つそのプログラムサイズが大きくなるのを抑止することができるという効果を奏する。
【００２６】
本発明の他の目的、構成及び効果は以下の説明から明らかになる。
【実施例１】
【００２７】
図８は、本発明の実施例１に係る画像形成装置１０のハードウェア構成を示す概略ブロック図である。
【００２８】
この画像形成装置１０では、ＭＰＵ１１がインタフェース１２を介して、ＲＯＭ１３Ｒ、ＮＶＲＡＭ１３Ｎ、ＤＲＡＭ１３Ｄ、ハードディスク１４、スキャナ１５、プリンタ１６、モデム１７、ＮＩＣ１８及び操作パネル１９に結合されている。図９では、簡単化のため、複数のインタフェースを１つのブロックで示している。
【００２９】
ＲＯＭ１３Ｒには、ブートストラップ及びＢＩＯＳが格納されている。ＮＶＲＡＭ１３Ｎは、例えばフラッシュメモリであり、これには、オペレーティングシステム（ＯＳ）、ＯＳの上層で動作するアプリケーション及びＯＳの下層で動作する各種デバイスドライバ並びに各種設定値が格納されている。該アプリケーションは、画像形成装置１０を複合機として機能させるためのものを含んでおり、この機能には、コピー、スキャン、プリント及びファクシミリがある。ＤＲＡＭ１３Ｄは主メモリ用である。ＤＲＡＭ１３Ｄは、原因不明のエラーが生じた場合に、後述のトレーサプログラム格納用としても用いられる。ハードディスク１４は、主にデータ格納用であり、後述のログファイルが格納される。
【００３０】
スキャナ１５は、コピー及びファックス送信での画像入力用である。プリンタ１６は、プリントエンジン、定着器並びに用紙の給紙部、搬送部及び排紙部を備えており、印刷データとして供給されるビットマップデータに基づいてプリントエンジンの感光ドラムに静電潜像を形成し、これをトナーで現像し、用紙に転写し定着させた後に排紙する。モデム１７は、ファックス送受信用である。ＮＩＣ１８は、ネットワーク上のホストコンピュータ２０に結合されて、プリントジョブ、ハードディスク１４に対するファイルアクセス及び上記トレーサプログラムのインストールの際に用いられる。操作パネル１９は、設定値又は指示を入力し、設定画面や状態などを表示させるためのものである。
【００３１】
ユーザ使用段階で原因不明のエラーが生じた場合、全アプリケーションプログラムを、デバッグオプションを有効にしてコンパイルしたプログラムに置き換え、さらにデバッガを追加すると、時間がかかるとともに、プログラムサイズが大きくなり過ぎてメモリを追加しなければならなくなり、実用的でない。
【００３２】
一方、エラーが生じた場合のプログラムの流れを機能単位で把握することができれば、エラー原因究明が容易になる。
【００３３】
そこで、本実施例１では、以下のようにして、既存の機械プログラムにトレース機能を付加する。
【００３４】
図３（Ａ）は、Ｃ言語で記述されたメインルーチンと、サブルーチン（関数）との関係を示す。
【００３５】
この例では、メインルーチンで関数ｆｎｃ１（ｘ０、ｙ０）が呼び出され、この関数のｒｅｔｕｒｎ命令が実行されると、メインルーチン内の関数呼び出し命令の次のステップへ戻る。
【００３６】
図３（Ｂ）は、図３（Ａ）のソースコードをコンパイルして機械語を生成し、これをニーモニックで記載したものである。コンパイラは、予め定められた規則に従ってコンパイルを行うので、関数呼び出しと関数からメインルーチンへの復帰について、Ｃ言語とアセンブリ言語のプログラム間で一定の対応関係がある。
【００３７】
すなわち、関数呼び出しの機械語においては、引数であるｘ０及びｙ０がそれぞれメモリからレジスタｅａｘへロードされた後、ｐｕｓｈ命令によりこのレジスタの内容がスタックエリアにプッシュされる。次いでサブルーチンコール命令ｃａｌｌ  ｆｎｃ１が実行されて、この命令の次の命令のアドレスが戻りアドレスとして、Ｐｅｎｔｉｕｍ（登録商標）の場合にはスタックエリアにプッシュされた後、ＰｏｗｅｒＰＣ（登録商標）の場合にはリンクレジスタｌｒに格納された後（以下同様）、アドレスｆｎｃ１へジャンプする。
【００３８】
この関数ｆｎｃ１では、スタックエリアから引数ｘ０及びｙ０がそれぞれスタックエリアからポップされて、これらが用いられる。関数ｆｎｃ１の最後のリターン命令ｒｅｔ（ＰｏｗｅｒＰＣの場合のリターン命令はブランチリンクレジスタ命令ｂｌｒ、以下単にリターン命令ｒｅｔと称す。）により、スタックエリアから戻りアドレスがポップされ又はリンクレジスタｌｒに格納された戻りアドレスに基づいて、メインルーチンへ戻る。
【００３９】
本実施例１では、図４に示す如く、既存の機械語プログラムに関数ロギングルーチンｆｎｃＬｏｇｇｉｎｇを追加するとともに、各関数の最後のリターン命令ｒｅｔをこの関数ロギングルーチンへの無条件ジャンプ命令ｊｍｐに置換する。これにより、関数ロギングルーチンの最後のリターン命令ｒｅｔが、置換前のリターン命令と同じ役割を果たすことになる。
【００４０】
本実施例１を実現させるためには、無条件ジャンプ命令ｊｍｐのバイト数が、リターン命令のそれ以下であることが要求される。この条件は、多くのプロセッサで満たされる。
【００４１】
関数ロギングルーチンでは、ｐｏｐ命令を実行して得られるレジスタの内容又はリンクレジスタの内容により、関数ｆｎｃ１からの本来の戻りアドレスを得る。このアドレスから、サブルーチンコール命令のバイト数を減算することにより、サブルーチンコール命令のアドレスを得る。なお、このｐｏｐ命令を実行した場合には、スタックポインタレジスタの内容をｐｏｐ命令実行前の値に戻しておく。
【００４２】
さらにこのアドレスを遡ってｐｕｓｈ命令の規則的使用回数ｎを検出し、又は、予めこのｎの値を求めておいて後述のようにテーブル化しておき、これを参照してｎの値を取得する。次いで、ｎ回ｐｏｐ命令を実行して、スタックエリアからこの関数の全引数を取り出す。
【００４３】
このようにして、関数ロギングルーチンは、これにジャンプする前の関数の呼び出し元での関数呼び出し情報を得ることができる。関数ロギングルーチンは、この関数呼び出し情報を取得してこれをメモリのログバッファ領域に格納し、さらに格納先アドレスを更新する。
【００４４】
このような処理により、呼出順の関数列のログをとることができる。この関数は、ネストされた関数であってもよい。
【００４５】
Ｃ言語のソースプログラムをコンパイルし、得られたオブジェクトプログラム間をリンクすると、Ｃ言語で定義した関数名とその関数のアドレスとを対応させた情報を含むシンボルテーブルが得られる。
【００４６】
図６は、このシンボルテーブルから抽出された関数名及びその入口アドレスと、その関数の全引数のワード数ｎと、この関数でのリターン命令のアドレス（出口アドレス）とを含む関数情報テーブルを示す。関数ロギングルーチンでは、このテーブルを参照して引数の値を取得し、関数名とその引数を含む関数呼出情報を、図７（Ａ）に示すように記述して、ログをとる。各引数のバイト数は同じとは限らないが、本実施例では説明の簡単化のため、同一とする。取得した引数列の区切りは、解析時に実際の区切りに直せばよい。
【００４７】
なお、上記シンボルテーブルを参照し又はソースコードから、各引数のタイプ及びバイト数を取得して関数情報テーブルに格納しておき、関数呼出情報を該ソースコードでの記述形式と同じにしてもよい。
【００４８】
また、リターン命令のアドレスは、図６中のサブルーチンのアドレスをインクリメントしながらリターン命令ｒｅｔを検出してそのアドレスを該サブルーチンのリターン命令のアドレスと決定する構成であってもよい。この場合、トレース対象のサブルーチンのアドレスが分かれば、画像形成装置１０の型式によらず同一プログラムで画像形成装置１０にトレース機能を付加することができる。
【００４９】
図１は、画像形成装置のデバック機能に関する機能ブロック図である。
【００５０】
図１中、ブロック３０〜３４及び１４は、画像形成装置１０に既存の構成であり、これに、トレーサ４０が付加される。
【００５１】
アプリケーションプログラム３０は、トレース対象の機械語プログラムであって、画像形成装置１０を複合機として機能させるプログラムの全部又はその一部である。周辺機器３１は、図８のスキャナ１５及びプリンタ１６のハードウェア構成であって、コントローラ３２により制御される。コントローラ３２は、スキャナ１５を制御するためのワンチップマイクロコンピュータと、プリンタ１６を制御するためのワンチップマイクロコンピュータとを備えている。アプリケーションプログラム３０の通信部３３は、これを構成するサブルーチンがＭＰＵ１１に対し、これらワンチップマイクロコンピュータと通信を行わせて、コントローラ３２へ制御用コマンド（要求）、例えばスキャン指令、給紙指令、ビットマップデータ送信開始指令及び後処理指令等を送信し、また、コントローラ３２から周辺機器３１の状態、例えば各給紙段の用紙の有無、スキャナの状態、紙詰まり等のエラー、トナー残量の程度、各カバーの開閉状態及びスイッチ操作状態等を取得する。これら要求及び状態は、ＯＳ及び通信バッファ３４を介して行われる。すなわち、通信部３３は、ＯＳに通信の要求をし、また、ＯＳを介し通信バッファ３４に受信した状態データを取得する。通信バッファ３４は、ＤＲＡＭ１３Ｄ内の共有領域の一部である。
【００５２】
コントローラ３２からのエラーやカバー開閉の変化などの状態通知は割込ルーチンで処理されるが、通信部３３での処理は他のルーチンからでも必要となるので、割込ルーチンから通信部３３のサブルーチンが呼び出される。
【００５３】
次に、トレーサ４０について説明する。
【００５４】
トレーサ４０は、ＭＰＵ１１用のソフトウェア構成（ログバッファを含む）であり、原因不明のエラーが発生した場合、その原因を究明するため、後述のようにユーザの操作により、一時的にＤＲＡＭ１３Ｄに格納される。
【００５５】
トレーサ４０は、ブロック４１〜５２を備え、これらのうちログバッファ４３、バッファポインタ４４、ログバッファ４７及びバッファポインタ４８は、ＤＲＡＭ１３Ｄ内の共有データ領域に構成される。
【００５６】
置換部４１は、正置換部と逆置換部とを備え、この正置換部は、図６の関数情報テーブルに含まれる、各リターン命令ｒｅｔのアドレスについて、このアドレスに格納されているリターン命令ｒｅｔを、上述のように、関数ロギングルーチンへの無条件ジャンプ命令ｊｍｐ  ｆｎｃＬｏｇｇｉｎｇで置換する。但し、通信部３３を構成する関数のリターン命令ｒｅｔのアドレスについては、このアドレスに格納されているリターン命令ｒｅｔを、後述の通信ロギングルーチンへの無条件ジャンプ命令ｊｍｐ  ｃｏｍＬｏｇｇｉｎｇで置換する。
【００５７】
図５は、図１の置換部４１による置換後のアセンブリ言語プログラムの概略説明図である。この図において、"ｉｎｔｅｒｒｕｐｔ"はコントローラ３２からの受信に応答して実行される割込ルーチンであり、この割込ルーチンで通信部３３のサブルーチン"ｃｏｍ"が呼び出される。サブルーチン"ｃｏｍ"は、"ｍａｉｎ"ルーチンからも呼び出される。
【００５８】
上記逆置換部は、正置換部と逆の置換を行って、アプリケーションプログラム３０を元の状態に戻す。
【００５９】
ロギング部４２は、上記関数ロギングルーチンで構成されている。置換部４１での正置換処理終了後にアプリケーションプログラム３０を起動させると、図６の関数情報テーブル内のシンボルで表されるロギング対象関数が呼び出される毎に、その関数からロギングルーチンへジャンプする。
【００６０】
ロギング部４２は、該関数の呼出元の関数呼出情報を上述のように取得して、これをログバッファ４３に格納させる。ログバッファ４３は、そのリードアドレスからライトアドレス−１まで有効データが格納されているループバッファ（範囲の上限アドレスから下限アドレスへ戻るエンドレスバッファ）であり、かつ、ＦＩＦＯバッファであって、リードポインタ４４０及びライトポインタ４４１を含むバッファポインタ４４を用いて管理される。すなわち、ロギング部４２は、ライトポインタ４４１で示されるアドレスから上記情報を書き込み開始するとともに、ライトポインタ４４１の内容を次の書込アドレスに更新する。
【００６１】
ログ収集部４５は、ログバッファ４３への書込完了毎に起動され、バッファポインタ４４の内容からログバッファ４３の使用率を求め、これが例えば９０％以上のときに、又は、画像形成装置１０がレディー状態のときに、バッファポインタ４４を参照して、ログバッファ４３の内容をハードディスク１４にログファイルとして退避させ、リードポインタ４４０の内容を更新する。
【００６２】
一方、通信ロギング部４６は、上述の置換による通信部３３からのジャンプ毎に、ロギング部４２と同様にして、通信バッファ３４に新たに書き込まれた通信データをログバッファ４７に格納させる。この通信データは、通信バッファ３４に書き込まれたものであればよく、受信データのみでもよい。受信データは、送信データ（要求）に対応したものと、エラー状態のようにコントローラ３２から一方的に供給されるものを含むからである。バッファポインタ４８は、バッファポインタ４４と同様に、通信ロギング部４６及びログ収集部４５で用いられるとともに更新される。ログ収集部４５は、ログバッファ４７に対しても、ログバッファ４３に対する処理と同様のことを行う。
【００６３】
通信ロギング部４６はまた、ログバッファ４７へ通信データを格納させる際、このデータを識別する通信ＩＤ（シリアル番号）を通信データと対応させて格納させ、次いでメモリの共有エリア内の通知フラグＦをセットすることにより、新たな通信データが格納されたことをロギング部４２へ通知する。図７（Ｂ）は通信ログ説明図であり、"ｃｏｍ０１"等は通信ＩＤである。ロギング部４２は、通知フラグＦが‘１’であれば未格納の通信ＩＤをログバッファ４３に格納し、次いで関数呼出情報をログバッファ４３に格納する。
【００６４】
データ圧縮部４９は、ハードディスク１４に格納されたログデータを圧縮する。この圧縮には、同一引数を用いた同一関数の繰り返しをその繰り返し回数で表現することによる圧縮と、通常の圧縮とがある。前者は例えば、ｆｎｃ１（１０、１８）が５０回繰り返された場合、これをｆｎｃ１（１０、１８）×５０と表記することにより圧縮する。関数列を単位とする繰り返しについても同様である。
【００６５】
暗号化部５０は、この圧縮されたデータを暗号化する。これは、ログデータを解析することにより、プログラムの構造及び動作に関する秘密情報が漏洩するのを防止するためである。
【００６６】
ログ送信部５１は、圧縮され且つ暗号化されたログデータを、予め設定されたアドレスに、電子メールで送信する。
【００６７】
ユーザインタフェース部５２は、ホストコンピュータ２０からのコマンドに応じて、置換部４１の正置換部を起動させ又はデータ圧縮部４９を起動させる。
【００６８】
図２は、ロギング部４２の動作を示す詳細フローチャートである。以下、括弧内は図２中のステップ識別符号である。
【００６９】
（Ｓ０〜Ｓ２）通知フラグＦがセットされていれば、ログバッファ４７内の新しい通信ＩＤを改行コードとともにログバッファ４３に格納し、通知フラグＦをリセットする。
【００７０】
（Ｓ３）ｐｏｐ命令を実行してそのレジスタｅａｘから又はリンクレジスタｌｒから、戻りアドレスを取得する。
【００７１】
（Ｓ４）サブルーチンコール命令ｃａｌｌが例えば４バイトである場合、この戻りアドレスから４を減算して、サブルーチン呼出元のアドレスを求める。
【００７２】
（Ｓ５）該アドレスのサブルーチンコール命令ｃａｌｌのオペランドである分岐先アドレスを求め、関数情報テーブルを参照して、このアドレスに対応する関数名及び引数取得用ポップ命令繰返し数ｎを取得する。
【００７３】
（Ｓ６）関数名に"（"を付加したものをログバッファ４３に格納し、ライトポインタ４４１を更新する。
【００７４】
（Ｓ７）スタックポインタに−４ｎを加算する。但し、プッシュ命令及びポップ命令のそれぞれで１ワード＝４バイトのデータが移動するとする。
【００７５】
以下、Ｓ８とＳ１１の間の処理をｎ回繰り返す。
【００７６】
（Ｓ９）スタック領域からレジスタｅａｘへポップする。
【００７７】
（Ｓ１０）実引数（ｅａｘ）を区切り記号"，"とともにログバッファ４３に格納し、ライトポインタ４４１を更新する。ここに、（ｅａｘ）はレジスタｅａｘの内容を意味する。
【００７８】
（Ｓ１２）ログバッファ４３に最後に格納した区切り記号"，"を閉じ括弧"）"＋改行コードで置換し、ライトポインタ４４１を更新する。
【００７９】
このような処理により、Ｃ言語で記述された、引数を含む関数名を、関数が実行される毎に、順次ログバッファに格納させることができる。
【００８０】
次に、上記の如く構成されたトレーサ４０の使用方法を説明する。
【００８１】
トレーサ４０のプログラムと、これを画像形成装置１０のＤＲＡＭ１３ＤにＮＩＣ１８を介しインストールするプログラムとは、まとめて圧縮され、画像形成装置メーカーのＷｅｂサーバの外部記憶装置に格納されており、Ｗｅｂページからこれをダウンロード可能になっている。トレーサ４０のプログラムには、ログ送信部４２で用いられる上述の送信先アドレスが含まれている。このアドレスは例えば、メーカーのエラー解析担当者の電子メールアドレスである。
【００８２】
画像形成装置に原因不明のエラーが生じた場合、ユーザは、画像形成装置１０をリセットさせて初期状態に戻し、ホストコンピュータ２０を操作してこのプログラムを該Ｗｅｂページからダウンロードし、これを解凍させ、インストールプログラムを起動させて、ＮＩＣ１８を介しＤＲＡＭ１３Ｄにトレーサ４０のプログラムを格納させる。
【００８３】
ユーザは、ホストコンピュータ２０を操作して、ユーザインタフェース部５２を介し置換部４１の正置換部を起動させる。この置換が終了した後に、ユーザは、該エラーが生じた場合と同じ条件になるように操作パネル１９を操作する。これにより、ハードディスク１４に関数ログが周辺機器ログとともに格納される。
【００８４】
エラーが再現されると、ユーザは、ホストコンピュータ２０を操作して、ユーザインタフェース部５２を介しデータ圧縮部４９を起動させる。これにより、ログデータが圧縮され、さらに後暗号化され、そのデータが上記アドレスに電子メールで送信される。
【００８５】
次いで置換部４１の逆置換部が起動されて、アプリケーションプログラム３０が元の状態に戻る。ユーザは、画像形成装置１０をリセットさせて初期状態に戻す。これにより、トレーサ４０がＤＲＡＭ１３Ｄから消去された状態、すなわち画像形成装置１０が元の状態になる。
【００８６】
エラー解析担当者は、受信したデータを復号し、解凍して、エラー発生原因を究明する。この際、例えば、デバッガでこのログデータを用いて、該エラーに至る動作を再現させる。
【００８７】
本実施例１によれば、画像形成装置１０に含まれるスキャナ１５やプリンタ１６などの周辺機器を制御するコントローラとの間で通信を行い受信した周辺機器状態をメモリバッファに格納させる、通信部３３を構成するサブルーチンを、画像形成装置１０の機械語プログラム（アプリケーションプログラム）３０が備え、置換部４１のプログラムが画像形成装置１０のプロセッサ１１に対し、通信部３３を構成するサブルーチンからのリターン命令を、語長が該リターン命令以下の、通信ロギング部４６のプログラムへのジャンプ命令で置換させ、このプログラムが画像形成装置１０のプロセッサ１１に対し、該メモリバッファに格納された内容を通信情報として、ライトポインタ４８１に基づきＤＲＡＭ１３Ｄに格納させ、ライトポインタ４８１の内容を、次に格納すべきアドレスに更新させ、リターン命令実行によりプロセッサ１１の命令ポインタを戻りアドレスに変更させるので、トレース機能を備えていない画像形成装置１０に周辺機器動作のトレース機能を容易に付加することができ、これによりエラー解析時間を短縮することが可能となるという効果を奏する。
【００８８】
また、エラーが発生しなければ、トレース機能を付加する必要がないので、通常の動作が遅延せず且つそのプログラムサイズが大きくなるのを抑止することができるという効果を奏する。
【００８９】
さらに、トレース用の特別な回路を画像形成装置１０に備える必要がないという効果を奏する。
【００９０】
また、置換部４１のプログラムが画像形成装置１０のプロセッサ１１に対し、機械語プログラム３０に含まれる、通信部３３を構成するサブルーチン以外のサブルーチンからのリターン命令を、語長が該リターン命令以下の、ロギング部４２のプログラムへのジャンプ命令で置換させ、ロギング部４２のプログラム１１が画像形成装置１０のプロセッサ１１に対し、置換部４１のプログラムにより置換されたジャンプ命令を含むサブルーチンからの戻りアドレスを取得させ、該戻りアドレスの直前に格納されているサブルーチンコール命令に関する情報を、ライトポインタ４４１に基づいてＤＲＡＭ１３Ｄに格納させ、ライトポインタ４４１の内容を、次に格納すべきアドレスに更新させ、リターン命令実行によりプロセッサ１１の命令ポインタを該戻りアドレスに変更させるので、画像形成装置１０にさらに、サブルーチン単位のトレース機能を、周辺機器動作のトレース機能と関連づけて付加することができ、これによりエラー解析時間をさらに短縮することが可能となるという効果を奏する。
【００９１】
さらに、置換部４１のプログラムが画像形成装置１０のプロセッサ１１に対し、図６の関数情報テーブルに含まれるアドレスのリターン命令をジャンプ命令で置換させるので、トレースが必要な関数のみをトレースすることが可能になるという効果を奏する。
【００９２】
また、通信ロギング部４２のプログラムが画像形成装置１０のプロセッサ１１に対し、通信情報に通信ＩＤを付加させてログバッファ４７に格納させ、ロギング部４２のプログラムが画像形成装置１０のプロセッサ１１に対し、通信ＩＤがログバッファ４７に新たに追加されていることを通信フラグＦの値で知得した場合には、関数ログ書き込み前にこの通信ＩＤをサブルーチンコール命令に関する情報に付加させてログバッファ４３に格納させるので、複雑化を避けて両ログを関連付けるとともにまとめることができ、しかも、通信部３３のサブルーチンを間接的に呼び出す割込を受け付けても、サブルーチンログ取得中に通信ログをとるということを避けることができるという効果を奏する。
【００９３】
さらにまた、機械語プログラム３０が、Ｃ言語等の高級言語のソースプログラムをコンパイルして生成されたものであり、機械語プログラム３０中のサブルーチンに対応するソースプログラム中の関数名とこれに対応した機械語サブルーチンのアドレスとをフィールドとして有する関数情報テーブルを備え、ロギング部４２のプログラムが画像形成装置１０のプロセッサ１１に対しさらに、該関数情報テーブルを参照させて、機械語サブルーチンコール命令のオペランドである分岐先アドレスに対応した関数名を、該サブルーチンコール命令に関する情報の一部として取得させるので、エラー解析が容易になるという効果を奏する。
【００９４】
また、置換部４１の逆置換プログラムが画像形成装置１０のプロセッサ１１に対し、ロギング部４２及び４６へのジャンプ命令をそれぞれサブルーチンからのリターン命令に置換させるので、トレース後に該逆置換プログラムを実行させることにより、トレース後においても、通常の動作が遅延せず且つそのプログラムサイズが大きくなるのを抑止することができるという効果を奏する。
【００９５】
なお、本発明には外にも種々の変形例が含まれる。
【００９６】
例えば、図６の関数名の替わりにそのアドレス又はオペランドにこれを含むサブルーチンコールのコードのログをとり、エラー解析者側のプログラムでこれを関数名に変換してもよい。また、１つのプロセッサ１１でログをとっているので、ロギング部４２での処理中に通信部３３での割込が生じないようにし（割込マスクをして）、ログバッファ４３とログバッファ４７とを１つにまとめた構成であってもよく、この場合、トレース機能の構成が簡単になるという効果を奏する。さらに、関数名列のログだけでもエラー解析に有効であるので、関数の引数までログをとらない構成であってもよい。
【００９７】
また、アプリケーションプログラム３０と同一のプログラムを、ホストコンピュータ２０にロードさせてホストコンピュータ２０側で上記置換を行わせ、又は、メーカー側で置換済のものを備えてユーザにこれをＷｅｂページからダウンロードさせ、次いでこれを画像形成装置１０に格納させる構成であってもよい。
【００９８】
さらに、メモリ１３Ｒ、１３Ｎ若しくはＨＤＤ１４又はＵＳＢメモリなどのリムーバブル記憶装置にトレーサ４０のプログラムを予め格納しておき、上記同様にして必要時のみトレース機能を付加する構成であってもよい。
【図面の簡単な説明】
【００９９】
【図１】画像形成装置のトレース機能に関する機能ブロック図である。
【図２】図１中のロギング部の動作を示す詳細フローチャートである。
【図３】（Ａ）はＣ言語で記述されたメインルーチンとサブルーチン（関数）との関係を示す説明図であり、（Ｂ）はさらに関数ロギングルーチンｆｎｃＬｏｇｇｉｎｇを追加したものの説明図である。
【図４】図３（Ｂ）に対応した機械語プログラムをニーモニックで記述したものの説明図である。
【図５】図１の置換部による置換後のアセンブリ言語プログラムの概略説明図である。
【図６】シンボルテーブルから抽出された関数名及びそのアドレスと、その関数の全引数のワード数ｎと、この関数でのリターン命令のアドレスとを含む関数情報テーブルを示す図である。
【図７】（Ａ）は、図１のトレーサで得られた関数ログの説明図であり、（Ｂ）は、このトレーサで得られた通信ログの説明図である。
【図８】画像形成装置のハードウェア構成を示す概略ブロック図である。
【符号の説明】
【０１００】
１０  画像形成装置
１１  ＭＰＵ
１２  インタフェース
１３Ｒ  ＲＯＭ
１３Ｎ  ＮＶＲＡＭ
１３Ｄ  ＤＲＡＭ
１４  ハードディスク
１５  スキャナ
１６  プリンタ
１７  モデム
１８  ＮＩＣ
１９  操作パネル
２０  ホストコンピュータ
３０  アプリケーションプログラム
３１  周辺機器
３２  コントローラ
３３  通信部
３４  通信バッファ
４０  トレーサ
４１  置換部
４２  ロギング部
４３、４７  ログバッファ
４４、４８  バッファポインタ
４４０、４８０  リードポインタ
４４１、４８１  ライトポインタ
４５  ログ収集部
４６  通信ロギング部
４９  データ圧縮部
５０  暗号化部
５１  ログ送信部
５２  ユーザインタフェース部
【図１】
2008021067.tif 000003
【図２】
2008021067.tif 000004
【図３】
2008021067.tif 000005
【図４】
2008021067.tif 000006
【図５】
2008021067.tif 000007
【図６】
2008021067.tif 000008
【図７】
2008021067.tif 000009
【図８】
2008021067.tif 000010