JP2008021067A - 画像形成装置用トレース機能付加方法及びプログラム並びにこのプログラムがインストールされた画像形成装置 - Google Patents

画像形成装置用トレース機能付加方法及びプログラム並びにこのプログラムがインストールされた画像形成装置 Download PDF

Info

Publication number
JP2008021067A
JP2008021067A JP2006191317A JP2006191317A JP2008021067A JP 2008021067 A JP2008021067 A JP 2008021067A JP 2006191317 A JP2006191317 A JP 2006191317A JP 2006191317 A JP2006191317 A JP 2006191317A JP 2008021067 A JP2008021067 A JP 2008021067A
Authority
JP
Japan
Prior art keywords
program
image forming
forming apparatus
instruction
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2006191317A
Other languages
English (en)
Inventor
Naoaki Fukuoka
直明 福岡
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kyocera Document Solutions Inc
Original Assignee
Kyocera Mita Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Kyocera Mita Corp filed Critical Kyocera Mita Corp
Priority to JP2006191317A priority Critical patent/JP2008021067A/ja
Publication of JP2008021067A publication Critical patent/JP2008021067A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】トレース機能を備えていない画像形成装置に対しトレース機能を容易に付加することによりエラー解析時間を短縮させる。
【解決手段】通信部33は、画像形成装置10に含まれるスキャナ15やプリンタ16などの周辺機器を制御するコントローラとの間で通信を行い受信した周辺機器状態をメモリバッファに格納する。置換部41は、通信部33を構成するサブルーチンからのリターン命令を、語長が該リターン命令以下の、通信ロギング部46のプログラムへのジャンプ命令で置換し、このプログラムは、該メモリバッファに格納された内容を通信情報として、ライトポインタ481に基づきDRAM13Dに格納させ、ライトポインタ481の内容を、次に格納すべきアドレスに更新させ、リターン命令実行によりプロセッサ11の命令ポインタを戻りアドレスに変更させる。
【選択図】図1

Description

本発明は、コピー、プリント又はファクシミリ等の機能を備えた画像形成装置に係り、特に、必要時のみトレース機能を付加することが可能な画像形成装置用トレース機能付加方法及びプログラム並びにこのプログラムがインストールされた画像形成装置に関する。
画像形成装置のプログラム開発段階では、デバッグオプションを有効にしてそのソースコードをコンパイルすることにより、デバッグ用コードを挿入し、その実行プログラムをデバッガと組み合わせて動作させることにより、エラー原因を究明してこれに対処することができる。
また、プログラム完成後のテスト段階では、さまざまなケースを想定してテストが行われる。
製品化段階では、デバッグオプションが無効にされてソースコードがコンパイルされ、これにより、プログラムサイズが小さくなるとともに、処理速度の遅延が防止される。
しかしながら、タイミングまで含めた全ての条件下でテストを行うのは不可能に近い。製品出荷後にエラーが発生した場合、画像形成装置にデバッグ機能が備えられていないので、エラー解析に長時間を要することになる。
下記特許文献1には、デコード回路により、CPUによってアクセスされたアドレスに基づいて、アクセス先がどこであるかを判定し、アクセス分析回路により、CPUがアクセスした内容を分析し、ログ受送信DMAにより、アクセス分析結果を出力する、トレース機能を備えた画像形成装置が開示されている。
しかし、画像形成装置にこのような回路が備えられていない場合には、エラーに至る動作をトレースすることができない。
特開2006−11969号公報
本発明の目的は、このような問題点に鑑み、トレース機能を備えていない画像形成装置に対しトレース機能を容易に付加することによりエラー解析時間を短縮化可能な画像形成装置用トレース機能付加方法及びプログラム並びにこのプログラムがインストールされた画像形成装置を提供することにある。
本発明の他の目的は、通常の動作を遅延させたりプログラムサイズを増大させたりすることなく、かつ、トレース用の特別な回路を備えることなく、エラーが発生したときにユーザの操作でデバッグ機能を追加することにより、エラー解析時間を短縮化可能な画像形成装置を提供することにある。
本発明の第1態様は、画像形成装置の記憶手段に格納された機械語プログラムにトレース機能を付加する画像形成装置用トレース機能付加プログラムであって、該記憶手段に格納される第1置換プログラムと第1ロギングプログラムとを有し、該機械語プログラムは、該画像形成装置に含まれる周辺機器を制御するコントローラとの間で通信を行い受信した周辺機器の状態をメモリバッファに格納させる通信サブルーチンを有し、
該第1置換プログラムは該画像形成装置のプロセッサ又は他のプロセッサに対し、該通信サブルーチンからのリターン命令を、語長が該リターン命令以下の、該第1ロギングプログラムへのジャンプ命令で置換させることを特徴とし、
該第1ロギングプログラムは該画像形成装置の該プロセッサに対し、
該メモリバッファに格納された内容を通信情報として、第1ライトポインタに基づき該記憶手段に格納させ、該第1ライトポインタの内容を、次に格納すべきアドレスに更新させ、
該プロセッサの命令ポインタを該戻りアドレスに変更させる、
ステップを有する。
本発明による画像形成装置用トレース機能付加プログラムの第2態様では、第1態様において、該記憶手段に格納される第2置換プログラムと第2ロギングプログラムとをさらに有し、
該第2置換プログラムは該画像形成装置のプロセッサ又は他のプロセッサに対し、該機械語プログラムに含まれる、該通信サブルーチン以外のサブルーチンからのリターン命令を、語長が該リターン命令以下の、該第2ロギングプログラムへのジャンプ命令で置換させることを特徴とし、
該第2ロギングプログラムは該画像形成装置の該プロセッサに対し、
該第2置換プログラムにより置換されたジャンプ命令を含むサブルーチンからの戻りアドレスを取得させ、
該戻りアドレスの直前に格納されているサブルーチンコール命令に関する情報を、第2ライトポインタに基づいて該記憶手段に格納させ、該第2ライトポインタの内容を、次に格納すべきアドレスに更新させ、
該プロセッサの命令ポインタを該戻りアドレスに変更させる、
ステップを有し、該機器通信情報と該サブルーチンコール命令に関する情報との組み合わせの時系列情報を得る。
本発明による画像形成装置用トレース機能付加プログラムの第3態様では、第2態様において、
該通信サブルーチンからのリターン命令のアドレス及び該通信サブルーチン以外のサブルーチンからのリターン命令が記述されたアドレスデータをさらに有し、
該第1及び第2置換プログラムはいずれも、該画像形成装置のプロセッサ又は該他のプロセッサに対し、該アドレスデータに含まれるアドレスのリターン命令を該ジャンプ命令で置換させる。
本発明による画像形成装置用トレース機能付加プログラムの第4態様では、第1乃至3態様のいずれか1つにおいて、
該第1ロギングプログラムは該画像形成装置の該プロセッサに対しさらに、該通信情報に通信IDを付加させて該記憶手段に格納させ、
該第2ロギングプログラムは該画像形成装置の該プロセッサに対しさらに、該通信IDが該記憶手段に新たに追加されている場合には該通信IDを該サブルーチンコール命令に関する情報に付加させて該記憶手段に格納させる。
本発明による画像形成装置用トレース機能付加プログラムの第5態様では、第1乃至3態様のいずれか1つにおいて、
該第2ライトポインタは該第1ライトポインタと同一であり、
該第2ロギングプログラムは該画像形成装置の該プロセッサに対しさらに、その実行中での該第1ロギングプログラムの割込を禁止させる。
本発明による画像形成装置用トレース機能付加プログラムの第6態様では、第1乃至5態様のいずれか1つにおいて、
該機械語プログラムは、高級言語のソースプログラムをコンパイルして生成されたものであり、
該機械語プログラム中のサブルーチンに対応する該ソースプログラム中の関数名と、該サブルーチンのアドレスと、が対応付けられた関数情報テーブルをさらに有し、
該第2ロギングプログラムは該画像形成装置の該プロセッサに対しさらに、該関数情報テーブルを参照させて、該サブルーチンコール命令のオペランドである分岐先アドレスに対応した関数名を、該サブルーチンコール命令に関する情報の一部又は全部として取得させる。
本発明による画像形成装置用トレース機能付加プログラムの第7態様では、第1乃至6態様のいずれか1つにおいて、
該画像形成装置の該記憶手段に格納される逆置換プログラムをさらに有し、
該逆置換プログラムは該画像形成装置の該プロセッサに対し、該第1ロギングプログラムへのジャンプ命令及び該第2ロギングプログラムへのジャンプ命令をそれぞれサブルーチンからのリターン命令に置換させる。
上記第1態様の構成によれば、画像形成装置に含まれる周辺機器を制御するコントローラとの間で通信を行い受信した周辺機器の状態をメモリバッファに格納させる通信サブルーチンを該画像形成装置の機械語プログラムが備え、第1置換プログラムが該画像形成装置のプロセッサ又は他のプロセッサに対し、該通信サブルーチンからのリターン命令を、語長が該リターン命令以下の、該第1ロギングプログラムへのジャンプ命令で置換させ、該第1ロギングプログラムが該画像形成装置の該プロセッサに対し、該メモリバッファに格納された内容を通信情報として、第1ライトポインタに基づき該記憶手段に格納させ、該第1ライトポインタの内容を、次に格納すべきアドレスに更新させ、該プロセッサの命令ポインタを該戻りアドレスに変更させるので、トレース機能を備えていない画像形成装置に周辺機器動作のトレース機能を容易に付加することができ、これによりエラー解析時間を短縮することが可能となるという効果を奏する。
また、エラーが発生しなければ該トレース機能を付加する必要がないので、通常の動作が遅延せず且つそのプログラムサイズが大きくなるのを抑止することができるという効果を奏する。
さらに、トレース用の特別な回路を画像形成装置に備える必要がないという効果を奏する。
上記第2態様の構成によれば、第2置換プログラムが該画像形成装置のプロセッサ又は他のプロセッサに対し、該機械語プログラムに含まれる、該通信サブルーチン以外のサブルーチンからのリターン命令を、語長が該リターン命令以下の、該第2ロギングプログラムへのジャンプ命令で置換させ、第2ロギングプログラムが該画像形成装置の該プロセッサに対し、該第2置換プログラムにより置換されたジャンプ命令を含むサブルーチンからの戻りアドレスを取得させ、該戻りアドレスの直前に格納されているサブルーチンコール命令に関する情報を、第2ライトポインタに基づいて該記憶手段に格納させ、該第2ライトポインタの内容を、次に格納すべきアドレスに更新させ、該プロセッサの命令ポインタを該戻りアドレスに変更させるので、該画像形成装置にさらに、サブルーチン単位のトレース機能を、周辺機器動作のトレース機能と関連づけて付加することができ、これによりエラー解析時間をさらに短縮することが可能となるという効果を奏する。
上記第3態様の構成によれば、該通信サブルーチンからのリターン命令のアドレス及び該通信サブルーチン以外のサブルーチンからのリターン命令が記述されたアドレスデータをさらに有し、該第1及び第2置換プログラムがいずれも、該画像形成装置のプロセッサ又は該他のプロセッサに対し、該アドレスデータに含まれるアドレスのリターン命令を該ジャンプ命令で置換させるので、トレースが必要な関数のみをトレースすることが可能になるという効果を奏する。
上記第4態様の構成によれば、該第1ロギングプログラムが該画像形成装置の該プロセッサに対しさらに、該通信情報に通信IDを付加させて該記憶手段に格納させ、該第2ロギングプログラムが該画像形成装置の該プロセッサに対しさらに、該通信IDが該記憶手段に新たに追加されている場合には該通信IDを該サブルーチンコール命令に関する情報に付加させて該記憶手段に格納させるので、複雑化を避けて両ログを関連付けるとともにまとめることができ、しかも、該通信サブルーチンを間接的に呼び出す割込を受け付けても関数ログ取得中に通信ログをとるということを避けることができるという効果を奏する。
上記第5態様の構成によれば、該第2ロギングプログラムの実行中での該第1ロギングプログラムの割込を禁止させるので、該第2ライトポインタを該第1ライトポインタと同一にすることができ、トレース機能の構成が簡単になるという効果を奏する。
上記第6態様の構成によれば、該機械語プログラムが、高級言語のソースプログラムをコンパイルして生成されたものであり、該機械語プログラム中のサブルーチンに対応する該ソースプログラム中の関数名と、該サブルーチンのアドレスと、が対応付けられた関数情報テーブルをさらに有し、該第2ロギングプログラムが該画像形成装置の該プロセッサに対しさらに、該関数情報テーブルを参照させて、該サブルーチンコール命令のオペランドである分岐先アドレスに対応した関数名を、該サブルーチンコール命令に関する情報の一部又は全部として取得させるので、エラー解析が容易になるという効果を奏する。
上記第7態様の構成によれば、逆置換プログラムが該画像形成装置の該プロセッサに対し、該第1ロギングプログラムへのジャンプ命令及び該第2ロギングプログラムへのジャンプ命令をそれぞれサブルーチンからのリターン命令に置換させるので、トレース後に該逆置換プログラムを実行させることにより、トレース後においても、通常の動作が遅延せず且つそのプログラムサイズが大きくなるのを抑止することができるという効果を奏する。
本発明の他の目的、構成及び効果は以下の説明から明らかになる。
図8は、本発明の実施例1に係る画像形成装置10のハードウェア構成を示す概略ブロック図である。
この画像形成装置10では、MPU11がインタフェース12を介して、ROM13R、NVRAM13N、DRAM13D、ハードディスク14、スキャナ15、プリンタ16、モデム17、NIC18及び操作パネル19に結合されている。図9では、簡単化のため、複数のインタフェースを1つのブロックで示している。
ROM13Rには、ブートストラップ及びBIOSが格納されている。NVRAM13Nは、例えばフラッシュメモリであり、これには、オペレーティングシステム(OS)、OSの上層で動作するアプリケーション及びOSの下層で動作する各種デバイスドライバ並びに各種設定値が格納されている。該アプリケーションは、画像形成装置10を複合機として機能させるためのものを含んでおり、この機能には、コピー、スキャン、プリント及びファクシミリがある。DRAM13Dは主メモリ用である。DRAM13Dは、原因不明のエラーが生じた場合に、後述のトレーサプログラム格納用としても用いられる。ハードディスク14は、主にデータ格納用であり、後述のログファイルが格納される。
スキャナ15は、コピー及びファックス送信での画像入力用である。プリンタ16は、プリントエンジン、定着器並びに用紙の給紙部、搬送部及び排紙部を備えており、印刷データとして供給されるビットマップデータに基づいてプリントエンジンの感光ドラムに静電潜像を形成し、これをトナーで現像し、用紙に転写し定着させた後に排紙する。モデム17は、ファックス送受信用である。NIC18は、ネットワーク上のホストコンピュータ20に結合されて、プリントジョブ、ハードディスク14に対するファイルアクセス及び上記トレーサプログラムのインストールの際に用いられる。操作パネル19は、設定値又は指示を入力し、設定画面や状態などを表示させるためのものである。
ユーザ使用段階で原因不明のエラーが生じた場合、全アプリケーションプログラムを、デバッグオプションを有効にしてコンパイルしたプログラムに置き換え、さらにデバッガを追加すると、時間がかかるとともに、プログラムサイズが大きくなり過ぎてメモリを追加しなければならなくなり、実用的でない。
一方、エラーが生じた場合のプログラムの流れを機能単位で把握することができれば、エラー原因究明が容易になる。
そこで、本実施例1では、以下のようにして、既存の機械プログラムにトレース機能を付加する。
図3(A)は、C言語で記述されたメインルーチンと、サブルーチン(関数)との関係を示す。
この例では、メインルーチンで関数fnc1(x0、y0)が呼び出され、この関数のreturn命令が実行されると、メインルーチン内の関数呼び出し命令の次のステップへ戻る。
図3(B)は、図3(A)のソースコードをコンパイルして機械語を生成し、これをニーモニックで記載したものである。コンパイラは、予め定められた規則に従ってコンパイルを行うので、関数呼び出しと関数からメインルーチンへの復帰について、C言語とアセンブリ言語のプログラム間で一定の対応関係がある。
すなわち、関数呼び出しの機械語においては、引数であるx0及びy0がそれぞれメモリからレジスタeaxへロードされた後、push命令によりこのレジスタの内容がスタックエリアにプッシュされる。次いでサブルーチンコール命令call fnc1が実行されて、この命令の次の命令のアドレスが戻りアドレスとして、Pentium(登録商標)の場合にはスタックエリアにプッシュされた後、PowerPC(登録商標)の場合にはリンクレジスタlrに格納された後(以下同様)、アドレスfnc1へジャンプする。
この関数fnc1では、スタックエリアから引数x0及びy0がそれぞれスタックエリアからポップされて、これらが用いられる。関数fnc1の最後のリターン命令ret(PowerPCの場合のリターン命令はブランチリンクレジスタ命令blr、以下単にリターン命令retと称す。)により、スタックエリアから戻りアドレスがポップされ又はリンクレジスタlrに格納された戻りアドレスに基づいて、メインルーチンへ戻る。
本実施例1では、図4に示す如く、既存の機械語プログラムに関数ロギングルーチンfncLoggingを追加するとともに、各関数の最後のリターン命令retをこの関数ロギングルーチンへの無条件ジャンプ命令jmpに置換する。これにより、関数ロギングルーチンの最後のリターン命令retが、置換前のリターン命令と同じ役割を果たすことになる。
本実施例1を実現させるためには、無条件ジャンプ命令jmpのバイト数が、リターン命令のそれ以下であることが要求される。この条件は、多くのプロセッサで満たされる。
関数ロギングルーチンでは、pop命令を実行して得られるレジスタの内容又はリンクレジスタの内容により、関数fnc1からの本来の戻りアドレスを得る。このアドレスから、サブルーチンコール命令のバイト数を減算することにより、サブルーチンコール命令のアドレスを得る。なお、このpop命令を実行した場合には、スタックポインタレジスタの内容をpop命令実行前の値に戻しておく。
さらにこのアドレスを遡ってpush命令の規則的使用回数nを検出し、又は、予めこのnの値を求めておいて後述のようにテーブル化しておき、これを参照してnの値を取得する。次いで、n回pop命令を実行して、スタックエリアからこの関数の全引数を取り出す。
このようにして、関数ロギングルーチンは、これにジャンプする前の関数の呼び出し元での関数呼び出し情報を得ることができる。関数ロギングルーチンは、この関数呼び出し情報を取得してこれをメモリのログバッファ領域に格納し、さらに格納先アドレスを更新する。
このような処理により、呼出順の関数列のログをとることができる。この関数は、ネストされた関数であってもよい。
C言語のソースプログラムをコンパイルし、得られたオブジェクトプログラム間をリンクすると、C言語で定義した関数名とその関数のアドレスとを対応させた情報を含むシンボルテーブルが得られる。
図6は、このシンボルテーブルから抽出された関数名及びその入口アドレスと、その関数の全引数のワード数nと、この関数でのリターン命令のアドレス(出口アドレス)とを含む関数情報テーブルを示す。関数ロギングルーチンでは、このテーブルを参照して引数の値を取得し、関数名とその引数を含む関数呼出情報を、図7(A)に示すように記述して、ログをとる。各引数のバイト数は同じとは限らないが、本実施例では説明の簡単化のため、同一とする。取得した引数列の区切りは、解析時に実際の区切りに直せばよい。
なお、上記シンボルテーブルを参照し又はソースコードから、各引数のタイプ及びバイト数を取得して関数情報テーブルに格納しておき、関数呼出情報を該ソースコードでの記述形式と同じにしてもよい。
また、リターン命令のアドレスは、図6中のサブルーチンのアドレスをインクリメントしながらリターン命令retを検出してそのアドレスを該サブルーチンのリターン命令のアドレスと決定する構成であってもよい。この場合、トレース対象のサブルーチンのアドレスが分かれば、画像形成装置10の型式によらず同一プログラムで画像形成装置10にトレース機能を付加することができる。
図1は、画像形成装置のデバック機能に関する機能ブロック図である。
図1中、ブロック30〜34及び14は、画像形成装置10に既存の構成であり、これに、トレーサ40が付加される。
アプリケーションプログラム30は、トレース対象の機械語プログラムであって、画像形成装置10を複合機として機能させるプログラムの全部又はその一部である。周辺機器31は、図8のスキャナ15及びプリンタ16のハードウェア構成であって、コントローラ32により制御される。コントローラ32は、スキャナ15を制御するためのワンチップマイクロコンピュータと、プリンタ16を制御するためのワンチップマイクロコンピュータとを備えている。アプリケーションプログラム30の通信部33は、これを構成するサブルーチンがMPU11に対し、これらワンチップマイクロコンピュータと通信を行わせて、コントローラ32へ制御用コマンド(要求)、例えばスキャン指令、給紙指令、ビットマップデータ送信開始指令及び後処理指令等を送信し、また、コントローラ32から周辺機器31の状態、例えば各給紙段の用紙の有無、スキャナの状態、紙詰まり等のエラー、トナー残量の程度、各カバーの開閉状態及びスイッチ操作状態等を取得する。これら要求及び状態は、OS及び通信バッファ34を介して行われる。すなわち、通信部33は、OSに通信の要求をし、また、OSを介し通信バッファ34に受信した状態データを取得する。通信バッファ34は、DRAM13D内の共有領域の一部である。
コントローラ32からのエラーやカバー開閉の変化などの状態通知は割込ルーチンで処理されるが、通信部33での処理は他のルーチンからでも必要となるので、割込ルーチンから通信部33のサブルーチンが呼び出される。
次に、トレーサ40について説明する。
トレーサ40は、MPU11用のソフトウェア構成(ログバッファを含む)であり、原因不明のエラーが発生した場合、その原因を究明するため、後述のようにユーザの操作により、一時的にDRAM13Dに格納される。
トレーサ40は、ブロック41〜52を備え、これらのうちログバッファ43、バッファポインタ44、ログバッファ47及びバッファポインタ48は、DRAM13D内の共有データ領域に構成される。
置換部41は、正置換部と逆置換部とを備え、この正置換部は、図6の関数情報テーブルに含まれる、各リターン命令retのアドレスについて、このアドレスに格納されているリターン命令retを、上述のように、関数ロギングルーチンへの無条件ジャンプ命令jmp fncLoggingで置換する。但し、通信部33を構成する関数のリターン命令retのアドレスについては、このアドレスに格納されているリターン命令retを、後述の通信ロギングルーチンへの無条件ジャンプ命令jmp comLoggingで置換する。
図5は、図1の置換部41による置換後のアセンブリ言語プログラムの概略説明図である。この図において、"interrupt"はコントローラ32からの受信に応答して実行される割込ルーチンであり、この割込ルーチンで通信部33のサブルーチン"com"が呼び出される。サブルーチン"com"は、"main"ルーチンからも呼び出される。
上記逆置換部は、正置換部と逆の置換を行って、アプリケーションプログラム30を元の状態に戻す。
ロギング部42は、上記関数ロギングルーチンで構成されている。置換部41での正置換処理終了後にアプリケーションプログラム30を起動させると、図6の関数情報テーブル内のシンボルで表されるロギング対象関数が呼び出される毎に、その関数からロギングルーチンへジャンプする。
ロギング部42は、該関数の呼出元の関数呼出情報を上述のように取得して、これをログバッファ43に格納させる。ログバッファ43は、そのリードアドレスからライトアドレス−1まで有効データが格納されているループバッファ(範囲の上限アドレスから下限アドレスへ戻るエンドレスバッファ)であり、かつ、FIFOバッファであって、リードポインタ440及びライトポインタ441を含むバッファポインタ44を用いて管理される。すなわち、ロギング部42は、ライトポインタ441で示されるアドレスから上記情報を書き込み開始するとともに、ライトポインタ441の内容を次の書込アドレスに更新する。
ログ収集部45は、ログバッファ43への書込完了毎に起動され、バッファポインタ44の内容からログバッファ43の使用率を求め、これが例えば90%以上のときに、又は、画像形成装置10がレディー状態のときに、バッファポインタ44を参照して、ログバッファ43の内容をハードディスク14にログファイルとして退避させ、リードポインタ440の内容を更新する。
一方、通信ロギング部46は、上述の置換による通信部33からのジャンプ毎に、ロギング部42と同様にして、通信バッファ34に新たに書き込まれた通信データをログバッファ47に格納させる。この通信データは、通信バッファ34に書き込まれたものであればよく、受信データのみでもよい。受信データは、送信データ(要求)に対応したものと、エラー状態のようにコントローラ32から一方的に供給されるものを含むからである。バッファポインタ48は、バッファポインタ44と同様に、通信ロギング部46及びログ収集部45で用いられるとともに更新される。ログ収集部45は、ログバッファ47に対しても、ログバッファ43に対する処理と同様のことを行う。
通信ロギング部46はまた、ログバッファ47へ通信データを格納させる際、このデータを識別する通信ID(シリアル番号)を通信データと対応させて格納させ、次いでメモリの共有エリア内の通知フラグFをセットすることにより、新たな通信データが格納されたことをロギング部42へ通知する。図7(B)は通信ログ説明図であり、"com01"等は通信IDである。ロギング部42は、通知フラグFが‘1’であれば未格納の通信IDをログバッファ43に格納し、次いで関数呼出情報をログバッファ43に格納する。
データ圧縮部49は、ハードディスク14に格納されたログデータを圧縮する。この圧縮には、同一引数を用いた同一関数の繰り返しをその繰り返し回数で表現することによる圧縮と、通常の圧縮とがある。前者は例えば、fnc1(10、18)が50回繰り返された場合、これをfnc1(10、18)×50と表記することにより圧縮する。関数列を単位とする繰り返しについても同様である。
暗号化部50は、この圧縮されたデータを暗号化する。これは、ログデータを解析することにより、プログラムの構造及び動作に関する秘密情報が漏洩するのを防止するためである。
ログ送信部51は、圧縮され且つ暗号化されたログデータを、予め設定されたアドレスに、電子メールで送信する。
ユーザインタフェース部52は、ホストコンピュータ20からのコマンドに応じて、置換部41の正置換部を起動させ又はデータ圧縮部49を起動させる。
図2は、ロギング部42の動作を示す詳細フローチャートである。以下、括弧内は図2中のステップ識別符号である。
(S0〜S2)通知フラグFがセットされていれば、ログバッファ47内の新しい通信IDを改行コードとともにログバッファ43に格納し、通知フラグFをリセットする。
(S3)pop命令を実行してそのレジスタeaxから又はリンクレジスタlrから、戻りアドレスを取得する。
(S4)サブルーチンコール命令callが例えば4バイトである場合、この戻りアドレスから4を減算して、サブルーチン呼出元のアドレスを求める。
(S5)該アドレスのサブルーチンコール命令callのオペランドである分岐先アドレスを求め、関数情報テーブルを参照して、このアドレスに対応する関数名及び引数取得用ポップ命令繰返し数nを取得する。
(S6)関数名に"("を付加したものをログバッファ43に格納し、ライトポインタ441を更新する。
(S7)スタックポインタに−4nを加算する。但し、プッシュ命令及びポップ命令のそれぞれで1ワード=4バイトのデータが移動するとする。
以下、S8とS11の間の処理をn回繰り返す。
(S9)スタック領域からレジスタeaxへポップする。
(S10)実引数(eax)を区切り記号","とともにログバッファ43に格納し、ライトポインタ441を更新する。ここに、(eax)はレジスタeaxの内容を意味する。
(S12)ログバッファ43に最後に格納した区切り記号","を閉じ括弧")"+改行コードで置換し、ライトポインタ441を更新する。
このような処理により、C言語で記述された、引数を含む関数名を、関数が実行される毎に、順次ログバッファに格納させることができる。
次に、上記の如く構成されたトレーサ40の使用方法を説明する。
トレーサ40のプログラムと、これを画像形成装置10のDRAM13DにNIC18を介しインストールするプログラムとは、まとめて圧縮され、画像形成装置メーカーのWebサーバの外部記憶装置に格納されており、Webページからこれをダウンロード可能になっている。トレーサ40のプログラムには、ログ送信部42で用いられる上述の送信先アドレスが含まれている。このアドレスは例えば、メーカーのエラー解析担当者の電子メールアドレスである。
画像形成装置に原因不明のエラーが生じた場合、ユーザは、画像形成装置10をリセットさせて初期状態に戻し、ホストコンピュータ20を操作してこのプログラムを該Webページからダウンロードし、これを解凍させ、インストールプログラムを起動させて、NIC18を介しDRAM13Dにトレーサ40のプログラムを格納させる。
ユーザは、ホストコンピュータ20を操作して、ユーザインタフェース部52を介し置換部41の正置換部を起動させる。この置換が終了した後に、ユーザは、該エラーが生じた場合と同じ条件になるように操作パネル19を操作する。これにより、ハードディスク14に関数ログが周辺機器ログとともに格納される。
エラーが再現されると、ユーザは、ホストコンピュータ20を操作して、ユーザインタフェース部52を介しデータ圧縮部49を起動させる。これにより、ログデータが圧縮され、さらに後暗号化され、そのデータが上記アドレスに電子メールで送信される。
次いで置換部41の逆置換部が起動されて、アプリケーションプログラム30が元の状態に戻る。ユーザは、画像形成装置10をリセットさせて初期状態に戻す。これにより、トレーサ40がDRAM13Dから消去された状態、すなわち画像形成装置10が元の状態になる。
エラー解析担当者は、受信したデータを復号し、解凍して、エラー発生原因を究明する。この際、例えば、デバッガでこのログデータを用いて、該エラーに至る動作を再現させる。
本実施例1によれば、画像形成装置10に含まれるスキャナ15やプリンタ16などの周辺機器を制御するコントローラとの間で通信を行い受信した周辺機器状態をメモリバッファに格納させる、通信部33を構成するサブルーチンを、画像形成装置10の機械語プログラム(アプリケーションプログラム)30が備え、置換部41のプログラムが画像形成装置10のプロセッサ11に対し、通信部33を構成するサブルーチンからのリターン命令を、語長が該リターン命令以下の、通信ロギング部46のプログラムへのジャンプ命令で置換させ、このプログラムが画像形成装置10のプロセッサ11に対し、該メモリバッファに格納された内容を通信情報として、ライトポインタ481に基づきDRAM13Dに格納させ、ライトポインタ481の内容を、次に格納すべきアドレスに更新させ、リターン命令実行によりプロセッサ11の命令ポインタを戻りアドレスに変更させるので、トレース機能を備えていない画像形成装置10に周辺機器動作のトレース機能を容易に付加することができ、これによりエラー解析時間を短縮することが可能となるという効果を奏する。
また、エラーが発生しなければ、トレース機能を付加する必要がないので、通常の動作が遅延せず且つそのプログラムサイズが大きくなるのを抑止することができるという効果を奏する。
さらに、トレース用の特別な回路を画像形成装置10に備える必要がないという効果を奏する。
また、置換部41のプログラムが画像形成装置10のプロセッサ11に対し、機械語プログラム30に含まれる、通信部33を構成するサブルーチン以外のサブルーチンからのリターン命令を、語長が該リターン命令以下の、ロギング部42のプログラムへのジャンプ命令で置換させ、ロギング部42のプログラム11が画像形成装置10のプロセッサ11に対し、置換部41のプログラムにより置換されたジャンプ命令を含むサブルーチンからの戻りアドレスを取得させ、該戻りアドレスの直前に格納されているサブルーチンコール命令に関する情報を、ライトポインタ441に基づいてDRAM13Dに格納させ、ライトポインタ441の内容を、次に格納すべきアドレスに更新させ、リターン命令実行によりプロセッサ11の命令ポインタを該戻りアドレスに変更させるので、画像形成装置10にさらに、サブルーチン単位のトレース機能を、周辺機器動作のトレース機能と関連づけて付加することができ、これによりエラー解析時間をさらに短縮することが可能となるという効果を奏する。
さらに、置換部41のプログラムが画像形成装置10のプロセッサ11に対し、図6の関数情報テーブルに含まれるアドレスのリターン命令をジャンプ命令で置換させるので、トレースが必要な関数のみをトレースすることが可能になるという効果を奏する。
また、通信ロギング部42のプログラムが画像形成装置10のプロセッサ11に対し、通信情報に通信IDを付加させてログバッファ47に格納させ、ロギング部42のプログラムが画像形成装置10のプロセッサ11に対し、通信IDがログバッファ47に新たに追加されていることを通信フラグFの値で知得した場合には、関数ログ書き込み前にこの通信IDをサブルーチンコール命令に関する情報に付加させてログバッファ43に格納させるので、複雑化を避けて両ログを関連付けるとともにまとめることができ、しかも、通信部33のサブルーチンを間接的に呼び出す割込を受け付けても、サブルーチンログ取得中に通信ログをとるということを避けることができるという効果を奏する。
さらにまた、機械語プログラム30が、C言語等の高級言語のソースプログラムをコンパイルして生成されたものであり、機械語プログラム30中のサブルーチンに対応するソースプログラム中の関数名とこれに対応した機械語サブルーチンのアドレスとをフィールドとして有する関数情報テーブルを備え、ロギング部42のプログラムが画像形成装置10のプロセッサ11に対しさらに、該関数情報テーブルを参照させて、機械語サブルーチンコール命令のオペランドである分岐先アドレスに対応した関数名を、該サブルーチンコール命令に関する情報の一部として取得させるので、エラー解析が容易になるという効果を奏する。
また、置換部41の逆置換プログラムが画像形成装置10のプロセッサ11に対し、ロギング部42及び46へのジャンプ命令をそれぞれサブルーチンからのリターン命令に置換させるので、トレース後に該逆置換プログラムを実行させることにより、トレース後においても、通常の動作が遅延せず且つそのプログラムサイズが大きくなるのを抑止することができるという効果を奏する。
なお、本発明には外にも種々の変形例が含まれる。
例えば、図6の関数名の替わりにそのアドレス又はオペランドにこれを含むサブルーチンコールのコードのログをとり、エラー解析者側のプログラムでこれを関数名に変換してもよい。また、1つのプロセッサ11でログをとっているので、ロギング部42での処理中に通信部33での割込が生じないようにし(割込マスクをして)、ログバッファ43とログバッファ47とを1つにまとめた構成であってもよく、この場合、トレース機能の構成が簡単になるという効果を奏する。さらに、関数名列のログだけでもエラー解析に有効であるので、関数の引数までログをとらない構成であってもよい。
また、アプリケーションプログラム30と同一のプログラムを、ホストコンピュータ20にロードさせてホストコンピュータ20側で上記置換を行わせ、又は、メーカー側で置換済のものを備えてユーザにこれをWebページからダウンロードさせ、次いでこれを画像形成装置10に格納させる構成であってもよい。
さらに、メモリ13R、13N若しくはHDD14又はUSBメモリなどのリムーバブル記憶装置にトレーサ40のプログラムを予め格納しておき、上記同様にして必要時のみトレース機能を付加する構成であってもよい。
画像形成装置のトレース機能に関する機能ブロック図である。 図1中のロギング部の動作を示す詳細フローチャートである。 (A)はC言語で記述されたメインルーチンとサブルーチン(関数)との関係を示す説明図であり、(B)はさらに関数ロギングルーチンfncLoggingを追加したものの説明図である。 図3(B)に対応した機械語プログラムをニーモニックで記述したものの説明図である。 図1の置換部による置換後のアセンブリ言語プログラムの概略説明図である。 シンボルテーブルから抽出された関数名及びそのアドレスと、その関数の全引数のワード数nと、この関数でのリターン命令のアドレスとを含む関数情報テーブルを示す図である。 (A)は、図1のトレーサで得られた関数ログの説明図であり、(B)は、このトレーサで得られた通信ログの説明図である。 画像形成装置のハードウェア構成を示す概略ブロック図である。
符号の説明
10 画像形成装置
11 MPU
12 インタフェース
13R ROM
13N NVRAM
13D DRAM
14 ハードディスク
15 スキャナ
16 プリンタ
17 モデム
18 NIC
19 操作パネル
20 ホストコンピュータ
30 アプリケーションプログラム
31 周辺機器
32 コントローラ
33 通信部
34 通信バッファ
40 トレーサ
41 置換部
42 ロギング部
43、47 ログバッファ
44、48 バッファポインタ
440、480 リードポインタ
441、481 ライトポインタ
45 ログ収集部
46 通信ロギング部
49 データ圧縮部
50 暗号化部
51 ログ送信部
52 ユーザインタフェース部

Claims (10)

  1. 画像形成装置の記憶手段に格納された機械語プログラムにトレース機能を付加する画像形成装置用トレース機能付加プログラムであって、該記憶手段に格納される第1置換プログラムと第1ロギングプログラムとを有し、該機械語プログラムは、該画像形成装置に含まれる周辺機器を制御するコントローラとの間で通信を行い受信した周辺機器の状態をメモリバッファに格納させる通信サブルーチンを有し、
    該第1置換プログラムは該画像形成装置のプロセッサ又は他のプロセッサに対し、該通信サブルーチンからのリターン命令を、語長が該リターン命令以下の、該第1ロギングプログラムへのジャンプ命令で置換させることを特徴とし、
    該第1ロギングプログラムは該画像形成装置の該プロセッサに対し、
    該メモリバッファに格納された内容を通信情報として、第1ライトポインタに基づき該記憶手段に格納させ、該第1ライトポインタの内容を、次に格納すべきアドレスに更新させ、
    該プロセッサの命令ポインタを該戻りアドレスに変更させる、
    ステップを有することを特徴とする画像形成装置用トレース機能付加プログラム。
  2. 該記憶手段に格納される第2置換プログラムと第2ロギングプログラムとをさらに有し、
    該第2置換プログラムは該画像形成装置のプロセッサ又は他のプロセッサに対し、該機械語プログラムに含まれる、該通信サブルーチン以外のサブルーチンからのリターン命令を、語長が該リターン命令以下の、該第2ロギングプログラムへのジャンプ命令で置換させることを特徴とし、
    該第2ロギングプログラムは該画像形成装置の該プロセッサに対し、
    該第2置換プログラムにより置換されたジャンプ命令を含むサブルーチンからの戻りアドレスを取得させ、
    該戻りアドレスの直前に格納されているサブルーチンコール命令に関する情報を、第2ライトポインタに基づいて該記憶手段に格納させ、該第2ライトポインタの内容を、次に格納すべきアドレスに更新させ、
    該プロセッサの命令ポインタを該戻りアドレスに変更させる、
    ステップを有し、該機器通信情報と該サブルーチンコール命令に関する情報との組み合わせの時系列情報を得ることを特徴とする請求項1に記載の画像形成装置用トレース機能付加プログラム。
  3. 該通信サブルーチンからのリターン命令のアドレス及び該通信サブルーチン以外のサブルーチンからのリターン命令が記述されたアドレスデータをさらに有し、
    該第1及び第2置換プログラムはいずれも、該画像形成装置のプロセッサ又は該他のプロセッサに対し、該アドレスデータに含まれるアドレスのリターン命令を該ジャンプ命令で置換させる、
    ことを特徴とする請求項2に記載の画像形成装置用トレース機能付加プログラム。
  4. 該第1ロギングプログラムは該画像形成装置の該プロセッサに対しさらに、該通信情報に通信IDを付加させて該記憶手段に格納させ、
    該第2ロギングプログラムは該画像形成装置の該プロセッサに対しさらに、該通信IDが該記憶手段に新たに追加されている場合には該通信IDを該サブルーチンコール命令に関する情報に付加させて該記憶手段に格納させる、
    ことを特徴とする請求項1乃至3のいずれか1つに記載の画像形成装置用トレース機能付加プログラム。
  5. 該第2ライトポインタは該第1ライトポインタと同一であり、
    該第2ロギングプログラムは該画像形成装置の該プロセッサに対しさらに、その実行中での該第1ロギングプログラムの割込を禁止させる、
    ことを特徴とする請求項1乃至3のいずれか1つに記載の画像形成装置用トレース機能付加プログラム。
  6. 該機械語プログラムは、高級言語のソースプログラムをコンパイルして生成されたものであり、
    該機械語プログラム中のサブルーチンに対応する該ソースプログラム中の関数名と、該サブルーチンのアドレスと、が対応付けられた関数情報テーブルをさらに有し、
    該第2ロギングプログラムは該画像形成装置の該プロセッサに対しさらに、該関数情報テーブルを参照させて、該サブルーチンコール命令のオペランドである分岐先アドレスに対応した関数名を、該サブルーチンコール命令に関する情報の一部又は全部として取得させる、
    ことを特徴とする請求項1乃至5のいずれか1つに記載の画像形成装置用トレース機能付加プログラム。
  7. 該画像形成装置の該記憶手段に格納される逆置換プログラムをさらに有し、
    該逆置換プログラムは該画像形成装置の該プロセッサに対し、該第1ロギングプログラムへのジャンプ命令及び該第2ロギングプログラムへのジャンプ命令をそれぞれサブルーチンからのリターン命令に置換させる、
    ことを特徴とする請求項1乃至6のいずれか1つに記載の画像形成装置用トレース機能付加プログラム。
  8. プロセッサと、
    該プロセッサに結合され、請求項7に記載の第1及び第2置換プログラムと第1及び第2ロギングプログラムと逆置換プログラムとが格納される記憶手段と、
    を有し、該第1及び第2置換プログラムと、該第1及び第2ロギングプログラムと、該逆置換プログラムとを、この順に実行させることによりエラー発生時のみトレース機能を付加できるようにしたことを特徴とする画像形成装置。
  9. 画像形成装置の記憶手段に格納された機械語プログラムにトレース機能を付加する画像形成装置用トレース機能付加方法であって、該記憶手段に格納される第1置換プログラムと第1ロギングプログラムとを用い、該機械語プログラムは、該画像形成装置に含まれる周辺機器を制御するコントローラとの間で通信を行い受信した周辺機器の状態をメモリバッファに格納させる通信サブルーチンを有し、
    該第1置換プログラムにより該画像形成装置のプロセッサ又は他のプロセッサに対し、該通信サブルーチンからのリターン命令を、語長が該リターン命令以下の、該第1ロギングプログラムへのジャンプ命令で置換させ、
    該第1ロギングプログラムにより該画像形成装置の該プロセッサに対し、
    該メモリバッファに格納された内容を通信情報として、第1ライトポインタに基づき該記憶手段に格納させ、該第1ライトポインタの内容を、次に格納すべきアドレスに更新させ、
    該プロセッサの命令ポインタを該戻りアドレスに変更させる、
    ステップを有することを特徴とする画像形成装置用トレース機能付加方法。
  10. 該記憶手段に格納される第2置換プログラムと第2ロギングプログラムとをさらに用い、
    該第2置換プログラムにより該画像形成装置のプロセッサ又は他のプロセッサに対し、該機械語プログラムに含まれる、該通信サブルーチン以外のサブルーチンからのリターン命令を、語長が該リターン命令以下の、該第2ロギングプログラムへのジャンプ命令で置換させ、
    該第2ロギングプログラムにより該画像形成装置の該プロセッサに対し、
    該第2置換プログラムにより置換されたジャンプ命令を含むサブルーチンからの戻りアドレスを取得させ、
    該戻りアドレスの直前に格納されているサブルーチンコール命令に関する情報を、第2ライトポインタに基づいて該記憶手段に格納させ、該第2ライトポインタの内容を、次に格納すべきアドレスに更新させ、
    該プロセッサの命令ポインタを該戻りアドレスに変更させて、
    該機器通信情報と該サブルーチンコール命令に関する情報との組み合わせの時系列情報を得ることを特徴とする請求項9に記載の画像形成装置用トレース機能付加方法。
JP2006191317A 2006-07-12 2006-07-12 画像形成装置用トレース機能付加方法及びプログラム並びにこのプログラムがインストールされた画像形成装置 Pending JP2008021067A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006191317A JP2008021067A (ja) 2006-07-12 2006-07-12 画像形成装置用トレース機能付加方法及びプログラム並びにこのプログラムがインストールされた画像形成装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006191317A JP2008021067A (ja) 2006-07-12 2006-07-12 画像形成装置用トレース機能付加方法及びプログラム並びにこのプログラムがインストールされた画像形成装置

Publications (1)

Publication Number Publication Date
JP2008021067A true JP2008021067A (ja) 2008-01-31

Family

ID=39076956

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006191317A Pending JP2008021067A (ja) 2006-07-12 2006-07-12 画像形成装置用トレース機能付加方法及びプログラム並びにこのプログラムがインストールされた画像形成装置

Country Status (1)

Country Link
JP (1) JP2008021067A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011018135A (ja) * 2009-07-07 2011-01-27 Ricoh Co Ltd 電子機器、情報処理方法、及びプログラム

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011018135A (ja) * 2009-07-07 2011-01-27 Ricoh Co Ltd 電子機器、情報処理方法、及びプログラム
US8713570B2 (en) 2009-07-07 2014-04-29 Ricoh Company, Ltd. Electronic device, information processing method, and storage medium

Similar Documents

Publication Publication Date Title
US8635633B2 (en) Image forming apparatus, function adding method, and computer-readable recording medium
JP4398538B2 (ja) 命令セット内の命令に応答してプロセスを実行するデータ処理システムおよびその命令処理方法
JP5268694B2 (ja) ライセンス管理システム、画像形成装置およびライセンス管理方法
JP2014170515A (ja) 機器、情報記録プログラム、及び情報記録方法
US20060036800A1 (en) Process management method and image forming apparatus
JP6179200B2 (ja) 情報処理装置、機器、情報処理システム、情報処理方法、及び情報処理プログラム
JP2008021067A (ja) 画像形成装置用トレース機能付加方法及びプログラム並びにこのプログラムがインストールされた画像形成装置
JP2008021066A (ja) 画像形成装置用トレース機能付加方法及びプログラム並びにこのプログラムがインストールされた画像形成装置
JP2007122348A (ja) 画像形成装置、セキュリティ管理方法、セキュリティ管理プログラム及び記録媒体
CN101841620B (zh) 信息处理设备和信息处理方法
JP2009098872A (ja) ソースプログラム解析装置、ソースプログラム解析方法及びコンピュータプログラム
US9892216B2 (en) Information processing apparatus, method, and program product for simulating processes with parent-child and sibling relationships
JP2006260404A (ja) 画像処理装置及び情報設定方法
JPH11110256A (ja) プログラムデバッグ装置、プログラムデバッグ方法及びその方法を記録したコンピュータ読取り可能な記録媒体
Lawall et al. Tarantula: Killing driver bugs before they hatch
JP2008140124A (ja) データ処理装置
JP2010218469A (ja) 情報処理装置、情報処理方法、プログラムおよび記録媒体
JP2011170576A (ja) インストールパッケージ作成方法、インストールパッケージ作成プログラム、インストールパッケージ作成装置およびインストールシステム
JP6222058B2 (ja) 画像形成装置
JP2013080386A (ja) 情報処理装置、アドレス管理方法
JP4080739B2 (ja) 画像形成装置用アプリケーション生成方法およびその方法をコンピュータに実行させるプログラム
JP2011060236A (ja) 情報処理装置、開発支援プログラム、及びソフトウェア統合開発環境
JP5144624B2 (ja) 画像形成装置
US6834357B2 (en) Establishing a pointer at a valid address location that is representative of a valid entry point of a communication routine
JP4334213B2 (ja) 情報処理装置、アプリケーションプログラム及び記録媒体