説明

組み込み機器、プログラム作成装置、プログラム

【課題】エラー発生時に表示されるコードから、ソフトウェアのエラー発生箇所を特定することが可能な組み込み装置を提供すること。
【解決手段】プログラム20の実行時に不具合を検出するとエラーメッセージを表示する組み込み機器200,300であって、プログラムを実行する中央処理装置201,101と、プログラムとして複数のファイルが結合された実行可能な圧縮ファイルを記憶するプログラム記憶手段205,104と、命令の実行結果を格納するアドレスの記憶内容に基づき不具合を検出する不具合検出手段18と、不具合検出手段が不具合を検出した場合、命令に記述されている、プログラムのバージョン情報、前記ファイルのファイル識別情報、及び、実行中の命令の前記ファイルにおける行番号、を含むエラーメッセージを表示装置に出力するエラーメッセージ表示手段19と、を有する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラムの実行時に不具合を検出するとエラーメッセージを表示する組み込み機器で関する。
【背景技術】
【0002】
コンピュータが搭載された機器がプログラムを実行した際に、なんらかのエラーが生じるとエラーメッセージを表示することがある。エラーメッセージの表示は、ユーザにエラーの発生を通知するという意義があるが、さらに進んでエラーの原因をユーザに通知するという意義を含む場合がある。
【0003】
図1は、従来のエラーメッセージの一例を示す図である。記述1はエラーの発生をユーザに通知するメッセージであり、記述2は代表的な対応方法を通知するメッセージであり、記述3はエラーの原因をユーザに通知するという意義を含むメッセージである。記述3がどのように表示されるかはソフトウェアによるが、表示可能な情報量に制限がある場合が多い。このため、記述3はコード化されており、ユーザはマニュアルなどでコードに対応したエラー内容を参照することでエラーの原因を把握する。また、ユーザはサポートセンターにコードを通知することで、サポートセンターがエラーの原因をユーザに知らせることも可能になる。
【0004】
このようなエラーの原因の解析はユーザによっては面倒な作業となる場合がある。このため、コードとエラー内容を、プログラムを実行する機器内に保持する技術が知られている(例えば、特許文献1参照。)。特許文献1には、事象と故障部位を対応付けるテーブルを有するデバイス診断装置について開示されている。機器内にテーブルを有することで、ユーザがエラーの原因を特定したい場合に、解析マニュアルを参照したり、サポートセンターに問い合わせる必要性を低減できる。
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来、エラーの発生時に表示されるコードは、大雑把なエラー原因やエラー発生箇所を特定することは可能でも、ソースファイル上でエラーの発生箇所をピンポイントに特定することができないという問題があった。すなわち、従来のコードはエラー原因が異なっていても同じようなエラーであれば同じコードになってしまい、どのようなエラーが発生したかを一意に特定するための情報までは有していない。これは、特許文献1のように装置内にテーブルを有していても同じであり、コードが有する情報量が少ないと、故障部位を正確に特定することは困難である。
【0006】
例えば、プログラムの開発時にはIDE(統合開発環境)を用いることで、プログラムにエラーがあるとIDEが行番号を表示してくれる場合がある。また、コンパイル時にも文法上のエラーがあれば行番号を表示してくれる。しかしながら、IDEをそのまま機器に組み込むことは実行速度やリソースの制約上、困難である。また、コンパイル後のプログラムには行番号が付されていないので、機器がプログラムを実行する段階ではエラー発生時に実行しているプログラムの行番号の特定が困難であった。これは、インタプリタ言語でも同様であり、編集時のソースコードにIDEが行番号を付していても、実行時のインタプリタ言語は行番号を有していないことが一般的である。
【0007】
また、エラーの発生箇所をピンポイントに特定するため、例えばエラーログを利用してユーザやサポートセンターがエラーの原因を解析することも考えられる。エラーログには障害の発生状況、表示されたエラーメッセージ等が含まれる。多くのプログラムは、エラーログを生成しているので、エラーログがあれば少なくともエラーメッセージよりエラー原因の特定は容易である。
【0008】
しかしながら、エラーログはユーザが解析するには複雑なため、ユーザがエラーログからエラー原因を特定することは困難な場合が多い。また、汎用型のコンピュータでなく、組み込み装置の場合、そもそもユーザがエラーログにアクセスすることが困難である。
【0009】
また、機器がエラーログをサポートセンターに送信することでサポートセンターがエラーログを解析することは技術的には可能である。しかし、詳細な情報が含まれているエラーログを外部に送信することに抵抗を感じるユーザは少なくない。また、ユーザがエラーログの解析が可能な場合でもユーザにエラーログを見せることは、機器の詳細な解析を可能にする場合があり、必ずしも好ましい方策ではない。
【0010】
本発明は、上記課題に鑑み、エラー発生時に表示されるコードから、ソフトウェアのエラー発生箇所を特定することが可能な組み込み装置を提供することを目的とする。
【課題を解決するための手段】
【0011】
本発明は、プログラムの実行時に不具合を検出するとエラーメッセージを表示する組み込み機器であって、前記プログラムを実行する中央処理装置と、前記プログラムとして複数のファイルが結合された実行可能な圧縮ファイルを記憶するプログラム記憶手段と、命令の実行結果を格納するアドレスの記憶内容に基づき不具合を検出する不具合検出手段と、前記不具合検出手段が不具合を検出した場合、命令に記述されている、前記プログラムのバージョン情報、前記ファイルのファイル識別情報、及び、実行中の命令の前記ファイルにおける行番号、を含むエラーメッセージを表示装置に出力するエラーメッセージ表示手段と、を有する。
【発明の効果】
【0012】
エラー発生時に表示されるコードから、ソフトウェアのエラー発生箇所を特定することが可能な組み込み装置を提供することができる。
【図面の簡単な説明】
【0013】
【図1】従来のエラーメッセージの一例を示す図である。
【図2】本実施形態のエラーメッセージの一例を示す図である。
【図3】プログラムを実行する装置にエラーが発生した場合にエラー原因が解析されるまでの流れを示す図の一例である。
【図4】装置の一例を示す図である。
【図5】情報処理装置又はMFPのハードウェア構成図の一例である。
【図6】コミュニケーション端末のハードウェア構成図の一例である。
【図7】プログラム作成装置の概略斜視図の一例を示す図である。
【図8】プログラム作成装置及びプログラム実行機器の機能ブロック図の一例である。
【図9】ファイルコードテーブルの一例である。
【図10】プログラムのバージョンについて説明する図の一例である。
【図11】ビルドツールが生成するバージョン管理テーブルの一例を示す。
【図12】エラーコードの一例を示す図である。
【図13】ソースファイルの記述例を説明する図の一例である。
【図14】エラーコードに置き換えられた後のソースファイルの一例を示す図である。
【図15】プログラム作成装置がエラーコードを生成する手順を示すフローチャート図の一例である。
【図16】装置又はコミュニケーション端末がプログラムを実行した際にエラーメッセージを表示する手順を示すフローチャート図の一例である。
【図17】エラーコードの一例を示す図である(実施例2)。
【図18】ソースファイルの記述例を説明する図の一例である(実施例2)。
【図19】1番目の引数とエラー番号が対応づけられたエラー番号テーブルの一例を示す図である。
【図20】エラーコードに置き換えられた後のソースファイルの一例を示す図である(実施例2)。
【図21】プログラム作成装置がエラーコードを生成する手順を示すフローチャート図の一例である(実施例2)。
【図22】プログラム実行機器がプログラムを実行した際にエラーメッセージを表示する手順を示すフローチャート図の一例である(実施例2)。
【図23】エラー通知システムの構成図の一例である。
【図24】プログラム実行機器とサポートセンターの保守用の端末の動作手順を示すフローチャート図の一例である。
【発明を実施するための形態】
【0014】
以下、本発明を実施するための形態について説明する。
【実施例1】
【0015】
〔概略〕
まず、本実施形態のプログラム実行機器が表示するエラーメッセージについて説明する。
図2は、本実施形態のエラーメッセージの一例を示す図である。エラーメッセージには、以下の3つの記述とOKボタンが表示されている。
記述1:「エラーが発生しました」
記述2:「サポートセンターにご連絡ください。」
記述3:0511−01C−0
本実施形態のエラーメッセージは、記述3にソースファイルの行番号が含まれる点に特徴の一つがある。記述3の"01C"はソースファイルの行番号を16進数で表示したものである。"05"はプログラムのバージョンであり、"11"はエラーが発生したファイルの名前である。以下では、記述3全体をエラーコードと称することとする。
【0016】
エラー発生時にコンピュータが実行した命令には行番号が含まれていない場合がほとんどであるが、その命令がソースファイルにおいて何行目に相当するかが記述3に含まれることになる。したがって、ユーザが記述3をサポートセンター等に通知すれば、サポートセンター等はエラーが発生した命令をピンポイントで特定でき、エラー原因を早期に解析することが可能になる。
【0017】
なお、図2では、エラーコードがエラーメッセージ内に含まれているが、エラーコードは、エラーメッセージが表示される前後にエラーメッセージとは独立に表示されてもよい。また、エラーコードのプログラムのバージョン、ファイルの名前、及び、行番号を別々に表示してもよい。
【0018】
また、本実施形態のエラーとは、プログラムが検出しうる不具合、換言すると想定内の不具合をいう。これに対し、そもそもエラーメッセージの表示が困難となる想定外の不具合(例えばプログラムがハングアップするようなバグ、ハード的にプログラムの実行そのものが困難になるような不具合)は含まれない。
【0019】
〔エラー発生時の対応例〕
図3は、プログラム実行機器にエラーが発生した場合にエラー原因が解析されるまでの流れを示す図の一例である。
1.エラーが発生し、プログラム実行機器がエラーメッセージを表示する。これにより、ユーザはエラーの発生に気付く。
2.ユーザがエラーメッセージによりエラー原因を特定でき、復旧した場合は、ユーザは継続してプログラム実行機器を使用する。
【0020】
一方、ユーザがエラーメッセージを目視したりマニュアルなどで調べても、エラー原因が分からず復旧できない場合、障害情報(エラーメッセージ、プログラムのバージョン、エラーの発生状況、エラーログ等)をプログラム実行機器メーカのサポートセンターに通知する。通知には電話や電子メールを用いる方法がある。なお、復旧できない場合に限らず、ユーザは障害情報をサポートセンターに通知することが可能である。多くのプログラム実行機器は再起動することで復旧自体は可能なためである。
3.サポートセンターは、障害情報からエラー原因を解析する。サポートセンターだけではユーザにプログラム実行機器を復旧させることができない場合、又は、エラー原因を特定できない場合、プログラム実行機器メーカの開発区に障害情報を通知する。
4.開発区では、障害情報を元にエラー原因の解析・対策を行う。
5.開発区は、サポートセンターに解析結果を報告する。
6.サポートセンターはユーザに解析結果と、必要であれば対策を通知する。
【0021】
ここで、「4.」の解析では、開発区にとって、障害情報に多くの情報が含まれているほどエラー原因の解析が容易である。しかし、例えば、上記の障害情報は全てが入手可能とは限らず、入手の困難性には差異がある。
【0022】
(i)障害の発生状況(なんの操作で起きたか、その前後に行っていた操作は、ハードウェア環境は、等)
(ii)ユーザに表示されたエラーメッセージ
(iii)障害の発生したプログラムのバージョン
(iv)エラーログ
例えば、(i)はユーザがプログラム実行機器の動作状態を観察していれば取得可能だが、観察していないと最小限の情報しか得られない。また、障害の発生状況は、詳細であればあるほど好ましいが、詳細になればなるほど情報を得るのが難しくなる。
【0023】
(ii)のエラーメッセージは、プログラム実行機器がハングアップなどしなければ、多くの場合は表示されるので、ユーザやサポートセンターが取得することは容易である。しかしながら、上記のとおり、ユーザやサポートセンターがエラー原因を解析する上で十分な情報が含まれてはいなかった。
【0024】
(iii) 開発区にとってはプログラムのバージョンが分かることで、バージョンに特有のエラー原因を比較的容易に推定できる場合がある。バージョンに特有のエラー原因は他のプログラム実行機器やユーザからも報告済みの可能性が高いためである。ユーザがバージョンを取得するには、起動時や起動後常にバージョンが表示されるプログラムを除くと、ユーザの意識的な操作が必要である。
【0025】
また、バージョンが判明することで、プログラムを構成する各種のファイルのバージョンも判明するので、特定のファイルに起因するエラー原因を解析しやすくなる。
【0026】
(iv)のエラーログは、(i)〜(iii)すべての情報を含みうる。エラーログは、エラーの詳細な原因と発生箇所を特定するための情報、特に詳細な解析を行うには必須の情報であるエラーが発生したファイルの名前、プログラムのバージョンを含んでいる。したがって、開発区としては、これを取得することが一番望ましいが、一番取得が難しい情報でもある。理由は上述したとおり、ユーザは外部に提供することを好まず、また機器メーカとしてもユーザに容易にアクセスさせたくないためである。
【0027】
本実施形態では、開発区がエラーログを入手することが困難な状況下でも、エラーメッセージに含まれるエラーコードから、エラーログと同等の情報をサポートセンターが入手することを可能にする。すなわち、エラーコードには、プログラムのバージョン、エラーが発生したファイルの名前、及び、ソースファイルの行番号とが含まれているため、開発区では、エラーの発生箇所(どのファイルのどの箇所を実行中か)をピンポイントで特定することができる。
【0028】
〔構成例〕
<プログラム実行機器>
後述するように、ソースファイルの行番号を表示するため、プログラム実行機器が実行するプログラムにはすでに行番号が含まれている。このため、本実施形態のプログラム実行機器は、スタンドアロン型、ネットワークを介して接続されたクライアント端末、又は、サーバ等、どのような形態でプログラムを実行するものでもよい。
【0029】
図4(a)はスタンドアロン型のプログラム実行機器として情報処理装置100の概略斜視図の一例を、図4(b)はMFP200の概略斜視図の一例をそれぞれ示す。いずれも内部にCPUとプログラムを有し、CPUがプログラムを実行することでプログラムに特有の処理を実行する。そして、何らかのエラーが生じた場合、情報処理装置100又はMFP(Multifunction Peripheral)200はエラーコードを表示する。
【0030】
図4(c)は、コミュニケーションシステム301の概略構成図の一例である。ネットワークを介して複数のコミュニケーション端末(以下、区別する場合、コミュニケーション端末A、Bという)300及びサーバ400が接続されている。コミュニケーション端末Aは、ある地域(例えばアメリカ合衆国)に、コミュニケーション端末Bは別の地域(例えば日本)にあり、サーバ400を介してネットワーク経由で通信可能に接続されている。
【0031】
コミュニケーション端末A,Bは、それぞれ、カメラ、マイク及びスピーカを有し、さらに表示装置とローカルに接続されている。コミュニケーション端末Aの近くのユーザが発した音声はコミュニケーション端末Aのマイクが集音して電気信号に変換した後、コミュニケーション端末Bに送信する。コミュニケーション端末Bのスピーカは、電気信号を音声に変換してスピーカから出力する。カメラが撮影した映像についても同様であり、コミュニケーション端末Aは、コミュニケーション端末Aのカメラが撮影した映像を電気信号に変換してコミュニケーション端末Bに送信する。コミュニケーション端末Bは電気信号を映像に変換して、表示装置に表示する。したがって、異なる地域のユーザ同士が、音声及び映像を使用して互いにコミュニケーションすることが可能になる。なお、表示装置としては、例えば、プロジェクタや液晶ディスプレイがある。このようなコミュニケーションシステム301の具体例としてはテレビ会議システムが知られている。
【0032】
図4のプログラム実行機器のうち、MFP200やコミュニケーション端末300は組み込み機器と呼ばれる。本実施形態のエラーメッセージは、ユーザがプログラム実行機器に対し行える操作が少ない組み込み機器において特に有効である。なお、組み込み機器の明確な定義は一般に規定されていないが、例えば、一般的な情報処理装置(PC:Personal Computer)を含まないことが挙げられる。
【0033】
図5は、情報処理装置100又はMFP200のハードウェア構成図の一例を示す。なお、MFP200のハードウェア構成図はプログラム20を実行する部分のみを取り出して説明するのであり、図示する以外にスキャナ、プロッタ又はファクシミリなどの機能を有している。
【0034】
情報処理装置100又はMFP200は、装置全体の動作を制御するCPU201、IPL(Initial Program Loader)や静的なデータを記憶したROM202、CPU201のワークエリアとして使用されるRAM203、CPU201が実行するプログラム20や各種データを記憶するHD204、CPU201の制御にしたがってHD204に対する各種データの読み出し又は書き込みを制御するHDD(Hard Disk Drive)205、フラッシュメモリ等の記録メディア206に対するデータの読み出し又は書き込み(記憶)を制御するメディアドライブ207、カーソル、メニュー、ウィンドウ、文字、又は画像などの各種情報を表示するディスプレイ208、通信ネットワーク2を利用してデータ伝送をするためのネットワークI/F209、文字、数値、各種指示などの入力のための複数のキーを備えたキーボード211、各種指示の選択や実行、処理対象の選択、カーソルの移動などを行うマウス212、着脱可能な記録媒体の一例としてのCD−ROM(Compact Disc Read Only Memory)213等に対する各種データの読み出し又は書き込みを制御するCD−ROMドライブ214、及び、上記各構成要素を図5に示されているように電気的に接続するためのアドレスバスやデータバス等のバスライン210を備えている。
【0035】
なお、プログラム20は、インストール可能な形式又は実行可能な形式のファイルで、上記記録メディア206やCD−ROM213等のコンピュータで読み取り可能な記録媒体に記録して流通させるようにしてもよい。また、プログラム20は、不図示のサーバからインストール可能な形式又は実行可能な形式のファイルで情報処理装置100又はMFP200に配布されてもよい。
【0036】
図6は、コミュニケーション端末300のハードウェア構成図の一例である。図6に示されているように、本実施形態のコミュニケーション端末300は、コミュニケーション端末全体の動作を制御するCPU101、IPLや静的なデータ等を記憶したROM102、CPU101のワークエリアとして使用されるRAM103、プログラム20、画像データ、及び、音声データ等の各種データを記憶するフラッシュメモリ104、CPU101の制御にしたがってフラッシュメモリ104に対する各種データの読み出し又は書き込みを制御するSSD(Solid State Drive)105、フラッシュメモリ等の記録メディア106に対するデータの読み出し又は書き込み(記憶)を制御するメディアドライブ107、端末10の宛先を選択する場合などに操作される操作ボタン108、端末10の電源のON/OFFを切り換えるための電源スイッチ109、通信ネットワーク2を利用してデータ伝送をするためのネットワークI/F(Interface)111を備えている。なお、記録メディア106は、コミュニケーション端末300に対して着脱自在な構成となっている。
【0037】
また、コミュニケーション端末300は、CPU101の制御に従って被写体を撮像して画像データを得る内蔵型のカメラ112、このカメラ112の駆動を制御する撮像素子I/F113、音声を入力する内蔵型のマイク114、音声を出力する内蔵型のスピーカ115、CPU101の制御に従ってマイク114及びスピーカ115との間で音声信号の入出力を処理する音声入出力I/F116、CPU101の制御に従って外付けの表示装置120に画像データを伝送するディスプレイI/F117、各種の外部機器を接続するための外部機器接続I/F118、及び、上記各構成要素を図6に示されているように電気的に接続するためのアドレスバスやデータバス等のバスライン110を備えている。
【0038】
図の表示装置120は、被写体の画像や操作用アイコン等を表示する液晶や有機ELによって構成された液晶ディスプレイであるが、プロジェクタでもよい。表示装置120は、ケーブル120cによってディスプレイI/F117に接続される。
【0039】
なお、カメラやマイク、スピーカは、コミュニケーション端末300に内蔵されている必要はなく、USB(Universal Serial Bus)ケーブル等によって外部機器接続I/F118に接続される外付けタイプのものでもよい。
【0040】
また、上記フラッシュメモリ104には、常時、プログラム20が記憶されているわけではない。これは、コミュニケーションシステム301の場合、サーバ400からコミュニケーション端末300の型に最適なプログラム20がダウンロードされるためである。しかしながら、エラーメッセージを出力するプログラム20の実行時はフラッシュメモリ104に記憶されているので、プログラム20はコミュニケーション端末300と一体とみなすこともできる。
【0041】
プログラム20は、インストール可能な形式又は実行可能な形式のファイルで、上記記録メディア106等のコンピュータで読み取り可能な記録媒体に記録した状態にて流通させることもできる。
【0042】
<プログラム作成装置>
本実施形態では、プログラム実行機器(情報処理装置100、MFP200、コミュニケーション端末300)が実行するプログラム20に、ソースファイルの行番号が含まれている。したがって、この特別なプログラム20を作成する装置が存在する(以下、プログラム作成装置という)。プログラム作成装置は汎用的なOS(例えば、Windows(登録商標)、UNIX(登録商標)、Linux(登録商標))が動作する情報処理装置であればよく、図5の情報処理装置100と機能的には大きな違いがない場合もある。しかし、一般にプログラム作成装置はメーカ内にあるため、プログラム20を実行するプログラム実行機器とは区別される。
【0043】
図7(a)はプログラム作成装置500の概略斜視図の一例を、図7(b)はプログラム作成装置500のハードウェア構成図の一例をそれぞれ示す。プログラム作成装置500はそれぞれバスで相互に接続されているCPU501、RAM502、ROM503、記憶媒体装着部504、通信装置505、入力装置506、描画制御部507、及び、HDD508を有する。CPU501は、OS(Operating System)やビルドツール511をHDD508から読み出して実行することで種々の機能を提供すると共に、補正済み原稿画像データの生成処理を行う。
【0044】
RAM502はCPU501がビルドツール511を実行する際に必要なデータを一時保管する作業メモリ(主記憶メモリ)になり、ROM503はBIOS(Basic Input Output System)やOSを起動するためのIPL、静的なデータが記憶されている。
【0045】
記憶媒体装着部504には記憶媒体510が着脱可能であり、記憶媒体510に記録されたデータを読み込み、HDD508に記憶させる。また、記憶媒体装着部504は、HDD508に記憶されたデータを記憶媒体510に書き込むこともできる。記憶媒体510は例えば、USDメモリ、SDカード等である。
【0046】
入力装置506は、キーボードやマウス、トラックボールなどであり、プログラム作成装置500へのユーザの様々な操作指示を受け付ける。HDD508は、SSD等の不揮発メモリでもよく、OS、ビルドツール511などの各種のデータが記憶されている。
【0047】
通信装置505は、インターネットなどのネットワークに接続するためのNIC(Network Interface Card)であり、例えば、イーサネット(登録商標)カードである。
【0048】
描画制御部507は、CPU501がビルドツール511を実行してグラフィックメモリに書き込んだ描画コマンドを解釈して、画面を生成しディスプレイ509に描画する。
【0049】
ビルドツール511は、インストール可能な形式又は実行可能な形式のファイルで、上記記憶媒体510に記録した状態又は不図示のサーバから配布されることができる。
【0050】
〔機能ブロック〕
図8は、プログラム作成装置500及びプログラム実行機器の機能ブロック図の一例を示す。プログラム作成装置500はビルドツール511を用いてソースファイルをビルドし、プログラム20を作成する。ビルドツール511は、コンパイル部12、リンケージ部15、圧縮部16、ファイルコード生成部11、バージョン受付部13、及び、コード置き換え部14を有する。このうちコード置き換え部14は、独立に存在してもよいし、コンパイル部12が機能の一部として有していてもよい。
【0051】
コンパイル部12、リンケージ部15、及び、圧縮部16は、いずれもビルドツール511が提供する公知の機能である。すなわち、コンパイル部12は、C、C++、JAVA(登録商標、以下省略)などで記述されたソースファイルをコンパイルし、ソースファイル単位で、オブジェクトモジュールファイルを作成する。そして、リンケージ部15は、複数のオブジェクトモジュールファイルをリンクすることでオブジェクトファイルを作成する。
【0052】
また、圧縮部16は、指定されたディレクトリ構造を含め、ディレクトリ内のファイルを結合して圧縮する。圧縮されたファイルには例えば「*.jar」「*.war」「*.exe」という拡張子が付される。圧縮されたファイルがプログラム20である。プログラム実行機器は圧縮されたプログラム20を解凍して実行することもできるが、そのまま実行ファイルとして実行することができる。
【0053】
ビルドツール511は、ビルドファイル22により動作内容が規定される。ビルドファイル22はXMLで記述され、ソースファイルをどのようにビルドしてプロジェクト(本実施形態のプログラム20)を生成するかのビルド方法を定義している。
・記述B1は、"programA"というプロジェクト名を定義している。
・記述B2は変数名を定義しており、files、home、bin、jsというディレクトリ名を変数に格納している。なお、filesとhomeはすでにある。
・記述B3は、binとjsというディレクトリを作ることを定義している。
・記述B4は、files内のソースファイルをコンパイルしてbinというファイルにコピーすることを定義している。
・記述B5は、files内のcalk.jsというファイルをjsというディレクトリにコピーすることを定義している。
・記述B6は、home以下のディレクトリとファイルを圧縮して「programA.war」という圧縮ファイルを生成することを定義している。
【0054】
ビルドツール511は、開発者がビルドの開始を指示すると、このようなビルドファイル22を読み込んでビルドを開始する。ビルドファイル22は開発者が記述することもできるし、ビルドツール511が開発中の各ソースファイルのファイル内容などを解析して自動的に作成することも可能である。
【0055】
ファイルコード生成部11は、ビルド対象の全てのファイルを特定し、ファイルに重複しないファイルコード(識別情報)を対応づけて、ファイルコードテーブル21を生成する。図8のビルドファイル22では、コンパイル対象のfilesディレクトリのファイル、コピー元のファイルcalk.js、がビルド対象の全てのファイルとなる。したがって、filesディレクトリのファイルに重複しないファイルコードを付与すればよい。
【0056】
図9は、ファイルコードテーブル21の一例を示す。ファイルコードテーブル21は、プログラム20を構成する元となった全てのソースファイルに重複しないファイルコードが対応づけられている。ファイルコード生成部11は、例えば、ビルドファイル22を参照して、記述B4によりコンパイルされるfilesの全てのソースファイル、記述B5のコピー元のソースファイルを抽出する。そして、各ファイル名にファイルコードを付与する。
【0057】
なお、ファイルコードテーブル21は開発者が作成してもよく、この場合、ファイルコード生成部11は不要である。
【0058】
バージョン受付部13は、開発者からプログラム20のバージョンの入力を受け付ける。プログラム20のバージョンについては後述する。
【0059】
また、コード置き換え部14は、各ファイルに記述されている特定の関数を、プログラム20のバージョン、ファイルコード、及び、ソースファイルの行番号(16進数に変換後)、にて置き換える。すなわち、エラーコードを生成する。この置き換えにより、プログラム20はエラー発生時にソースファイルの行番号の表示が可能になる。
【0060】
コード置き換え部14が、コンパイル部12にあるか、コンパイル部12の外部にあるかは、ビルド対象のファイルがコンパイルを必要とするか否かの違いに対応するためであり処理内容は同じである。例えば、JavaScript(登録商標、以下省略)で記述されたファイルはコンパイルされないので、コンパイル部12の外部にあるコード置き換え部14がエラーコードを生成する。C++やJAVAで記述されたファイルはコンパイルされるので、コンパイル部12のコード置き換え部14がエラーコードを生成する。コード置き換え部14がコンパイル前にエラーコードを生成するのであれば、コンパイル部12の外部にあるコード置き換え部14のみを搭載してもよい。
【0061】
ビルドツール511がこのようにして生成したプログラム20は、プログラム20に特有の様々な機能の他に、エラー検出部18及びエラーメッセージ表示部19を有する。エラー検出部18は、if文などにより変数の内容を判定してエラーの発生を検出する。エラーメッセージ表示部19は、エラー発生を検出して、エラーメッセージをディスプレイ208,120に描画する。
【0062】
また、プログラムDL部17は、主にコミュニケーション端末300に搭載される。例えば、コミュニケーション端末300の電源がオンになると、IPLが起動してプログラムDL部17をCPU101に実行させる。プログラムDL部17は、例えばFTPコマンドで予め既知のサーバ400のIPアドレスを指定してサーバ400と接続し、getコマンドでプログラム20のファイル名を指定してサーバ400からプログラム20をダウンロードする。
【0063】
なお、コミュニケーション端末300の電源がオフにされる際、コミュニケーション端末300はプログラム20をフラッシュメモリ104から消去する。これにより、電源オフ中に、コミュニケーション端末300からプログラム20が盗難されることを防止できる。
【0064】
〔プログラムのバージョン〕
図10は、プログラム20のバージョンについて説明する図の一例である。ある程度の規模のプログラム20は、複数のソースファイルからビルドという処理を経て生成される。図では、main.cppというC++言語のソースファイル、base.hというmain.cppが使用するヘッダファイル、calk.jsというJavaScriptのソースファイル(JavaScriptはコンパイルされないがビルドの対象なのでソースファイルという)等から1つのプログラム20が構成されることが図示されている。
【0065】
ビルドとは、これらのファイルを組み合わせて「実行可能ファイル」を作成することをいう。ビルドを行うのは、開発者が使用するプログラム作成装置500である。一般には、MakeやANT等のビルドツール511が市販されており、プログラム作成装置500がビルドツール511を実行することでプログラム20である実行可能ファイルが作成される(例えば、*.war、*.jar、*.exe等のファイル)。
【0066】
そして、この複数のファイルの各バージョンの組み合わせによって、プログラム20のバージョンが管理される。例えば、calk.jsのバージョンだけが変わった場合(calk.jsだけが更新され、他のファイルに変更がない場合)、calk.jsのバージョンによってプログラム20のバージョンが更新されていく。図では以下のようになっている。
calk.js Ver1:プログラムのバージョン 0.1.0.0
calk.js Ver2:プログラムのバージョン 0.1.0.1
calk.js VerX:プログラムのバージョン 0.2.0.5
プログラム20のバージョンは、例えばビルド時に開発者がビルドツール511に対し設定するようになっている。プログラム20のバージョンは、開発者が各ソースファイルのバージョンと共に記録するなどして管理することもできるが、専用のバージョン管理システムが利用されることが多い。バージョン管理システムとしては、例えば、フリーウェアのCVS(Concurrent Versions System)、SVN(Subversion)、Git等や、商用のVisualSourceSafe(登録商標)等が知られている。SVNの場合、プログラム20のバージョンは、例えば以下のようにして付与される。
【0067】
s1)開発者は、バージョン管理システムのコマンド(import)を使用して、ソースファイルがツリー状に登録されているディレクトリ構造をリポジトリに登録する。リポジトリは、各資源(ソースファイル等)の格納場所である。この時、バージョン管理システムはプロジェクトに初期のバージョンとしてリビジョン1を与える。
【0068】
s2)開発者が、ソースファイルの1つ以上を編集する場合がある。開発者が、編集後のソースファイルの組み合わせを記録しておきたいと考えると、開発者は、バージョン管理システムのコマンド(commit)を使用して、編集結果をリポジトリに反映させる。バージョン管理システムはプロジェクトのリビジョンを増やして2にする。また、ソースファイルに新しいバージョンを付与する。
【0069】
s3)開発者が、各ソースファイルをビルドすることでプロジェクトからプログラム20を作成する場合、バージョン管理システムのコマンド(copy)を使用して、タグ名を与える。タグ名を与えることで、各ソースファイルのその時のバージョン又はバージョン違いのソースファイルそのものがタグ名に関連付けてバージョン管理システムにより記憶される。一般には、「タグ名=プログラム20のバージョン」のように付与される。
【0070】
タグ名を付与することで、プログラム20のバージョンが分かれば、バージョン管理システムはビルドに用いられた各ソースファイルを一意に特定できる。
【0071】
以降は、タグ名を付与した時からディレクトリ構造とソースファイルの内容を変えないようにして(新規の変更を加えないようにして)、開発者の操作により、ビルドツール511がビルドを行う。ビルドの実行時、開発者は、タグ名をプログラム20のバージョンとして指定する。
【0072】
後に、プログラム20のバージョンに対応したソースファイルを取り出すには、バージョン管理システムに対し、開発者がタグ名を指定して、ソースファイルを特定させる。
【0073】
なお、ビルドとバージョン管理が行えるIDEもあるので、必ずしもビルドツール511とバージョン管理システムを別に用意する必要はない。
【0074】
図11は、ビルドツール511が生成するバージョン管理テーブルの一例を示す。ビルドツール511は、各ソースファイルのバージョン又はタイムスタンプ等を取得し、開発者が設定したプログラム20のバージョンに対応づけて登録する。したがって、プログラム20のバージョンが検出されれば、バージョン管理テーブルを参照することで、そのバージョンのプログラム20を構成する各ファイルのバージョンが特定される。バージョン管理テーブルは開発区で管理される。
【0075】
なお、図10のソースファイルは、各ソースファイルの種類(例えば記述言語)が同じではないが、ビルドツール511が、単一の種類(例えば、C++言語で記述されたファイルのみ)のファイルだけをビルドする場合もある。この場合、ビルドツール511はコンパイルとリンクのみを行う。このような一部のみの処理をビルドと呼ぶか、例えばコンパイルと呼ぶかは呼称だけの相違に過ぎず、ソースファイルが単一の種類しかなくても、プログラム実行機器は同様に行番号を表示することができる。
【0076】
〔エラーコード〕
図12はエラーコードの一例を示す図である。図12ではエラーコード全体で10桁としている。左から桁番号を付して説明する。エラーコードの上位2桁は、プログラム20のバージョンの下2桁が入っている。例えば、プログラム20のバージョンが0.2.0.5 であれば"05" となる。下2桁だけとしているのは、エラーコードが長くなりすぎてユーザがサポートセンターに通知する際に間違えることを抑制するためである。ちなみに、エラーコードに"−"(ハイフン)が入っているのも、エラーコードを見やすくするためであり、ハイフン自体に意味はない。
【0077】
バージョンの付け方のルールにもよるが、開発者が10進数で1つずつバージョンをインクリメントする場合、下2桁だけで100通りのバージョンを識別できる。したがって、バージョンの下2桁だけで、エラーコードを解析する上では十分な容量である。
【0078】
エラーコードの第3−4桁の2文字は、エラーメッセージを出力したソースファイルのファイルコードである。ファイルコードは、図9にて説明したようにソースファイルのファイル名を識別する重複しない16進数である。16進で2桁あれば、255個のファイルを識別することができる。大規模なプログラム20ではファイルコードが不足するが、一般的な規模のプログラム20では十分である。また、ファイルコードが不足する場合は、5桁目のハイフンを利用するなどして、桁数を増やすことで対応する。なお、ファイル名をファイルコード化して表示するのは、エラーコードの長さをできるだけ短くするためだけでなく、ファイル名からプログラム20の機能などの情報がユーザ等に把握されることを防ぐためである。
【0079】
第6−8桁の3文字は、エラーメッセージを出力したソースファイルの行番号を16進で示す。16進数で3桁の場合、最大で4096行を表現することができる。1つのソースファイルのコード量が大きい場合には不足するが、一般的には不足することは多くない。また4096行では不足する場合、9桁目のハイフンを利用するなどして桁数を増やすことで対応する。行番号を16進数で表示するのはエラーコードの長さを短くするためである。
【0080】
第10桁の1文字は、任意の1文字である。ソースファイルの開発者が、例えば、エラー原因の解析に有効な情報をソースファイルの作成時に記述しておくために利用する。開発者にとっては、任意の1文字によりさらにエラー原因を解析しやすくなる。
【0081】
〔ソースファイル例〕
図13は、ソースファイルの記述例を説明する図の一例である。図のソースファイルには1つずつ大きくなる整数の行番号が付されている。実際のソースファイル自体には行番号が含まれないが、IDEやエディターは開発者を支援するため一行目から連番を付して表示する。
【0082】
図13では、エラーメッセージの表示に「printErrorDialog」という関数が使用されている(11,28,105行目)。この関数がプログラム実行機器により実行されると、プログラム実行機器は図2のようなフォーマット(記述1〜3を有し、OKボタンが1つある)のエラーメッセージを表示する。
【0083】
この関数は引数を3つ取る。
printErrorDialog(errorTitle1,errorMessage1,createCode(_reason);
1番目の引数のerrorTitle1は図2の記述1を指定し、2番目の引数のerrorMessage1は記述2を指定する。errorTitle1、errorMessage1には不図示の行で文字列が設定されており、文字列はRAM203,103、HD204、フラッシュメモリ104の所定のアドレスに記憶されている。プログラム実行機器は、この関数を実行すると、errorTitle1にて紐付けられたアドレスの文字列、及び、errorMessage1にて紐付けられたアドレスの文字列をRAM203,103、HD204、フラッシュメモリ104から読み出す。
【0084】
「printErrorDialog」関数の3つ目の引数createCode()が、記述3に対応し、エラーコードとの置き換え対象となる。createCode()は、エラーコードを作るための関数であり引数を1つ取る。printErrorDialogの実行時には、文字列になっているのでcreateCode()は関数として機能しない。したがって、関数でなく変数とエラーコードを置き換えてもよい。createCode()関数は、従来のエラーメッセージにおけるエラーコードを表示する関数なので、この関数とエラーコードを置き換えれば、開発者は元のソースファイルを活用して本実施例のエラーコードを表示するようにソースコードを変更できる。
【0085】
コード置き換え部14はcreateCode()をプログラム20のバージョン、ファイルコード及び行番号に置き換え、createCode()の引数をエラーコードの任意の一文字に置き換える。任意の一文字は、11行目と28行目のcreateCode()では変数として与えられ、105行目では文字定数"2"として与えられている。3行目に記述があるように「_reason='0'」と記述されているので、11行目と28行目のcreateCode()を置き換えると、任意の1文字は"0"となる。これに対し、105行目のcreateCode()を置き換えると、任意の1文字は"2"となる。任意の一文字が何を意味するかはソースファイルの開発者が一文字とその内容を対応づけたテーブルなどで管理している。
【0086】
図13では、11,28,105行目に合計3つの「printErrorDialog」関数が記述されている。エラーの発生場所や発生状況によって(すなわち、直前の処理に応じて)、開発者は引数を変えるので、記述1や記述2の内容も変わる。当然ながら、11行目と28行目のように、複数の「printErrorDialog」関数が同じ引数を有することもある。
【0087】
このように記述1と2だけでは、同じメッセージを使っている箇所が複数あると、開発者でもどこから出力されたエラーメッセージか区別が難しいか、又は、まったく区別できない。しかしながら、本実施形態のようにエラーコードをソースコードに埋め込んでおくことで、エラーメッセージの記述1,2は同じでも、どのソースファイルのどの箇所(行)から出力されたエラーメッセージかを一意に判別することができる。
【0088】
例えば、エラーコードに28行という行番号が含まれていれば、開発者は、出力されたエラーメッセージは、ソースファイルの28行目の「printErrorDialog」関数により表示されたことを特定できる。したがって、開発者はソースファイルの28行目の近くにエラー発生の原因となった処理があったことを特定できる。図13の例ではエラーが発生した処理はエラーコードに含まれる行番号の数行前にある。
【0089】
「printErrorDialog」関数の直前には例えばif文によるエラー発生の判定処理が記述されている。エラー発生の判定処理は、開発者が判定処理の直前の処理において発生しうるエラーを想定し、そのようなエラーが生じたか否かを検出するために最適な判定条件が記述されている。例えば、11行目のエラーメッセージが表示されるのは、変数operationにfailedという値が設定された場合であり、28行目のエラーメッセージが表示されるのは、変数errorOccurredに"0"以外の値が設定されていた場合であり、105行目のエラーメッセージが表示されるのは、変数getValueにnull(何も設定されていない)という値が設定された場合である。したがって、処理に特有のエラーを確実に検出することができる。変数operation、変数errorOccurred、変数getValueは実際にはRAM203,103、HD204、フラッシュメモリ104の所定のアドレスに記憶されている。プログラム実行機器が変数名によりこのアドレスにアクセスすればエラーの発生を判定できる。
【0090】
なお、if文によるエラー発生の判定は一例であり、例えばSwitch文によりエラー発生を判定してもよい。
【0091】
図14は、エラーコードに置き換えられた後のソースファイルの一例を示す図である。図13と比較すると分かるように、
11 行目のCreateCode(_Reason)が0511−00B−0
28 行目のCreateCode(_Reason)が0511−01C−0
105行目のCreateCode('2')が 0511−069−2
にそれぞれ置き換えられている。
【0092】
〔動作手順〕
図15は、プログラム作成装置500がエラーコードを生成する手順を示すフローチャート図の一例である。なお、この処理手順はコード置き換え部14がコンパイル部12の外にある場合を例示するが、コンパイル部12のコード置き換え部14が処理する場合も実行のタイミングが異なるだけで処理内容は同じである。
【0093】
開発者は、各ファイルをビルドするに当たり、ビルド後のプログラム20のバージョンをプログラム作成装置500に設定する(S10)。プログラム作成装置500のバージョン受付部13はバージョンの入力を受け付ける。
【0094】
次に、ファイルコード生成部11は、ファイルコードテーブル21を作成する(S20)。ビルド対象のソースファイルはビルドファイル22から特定することができる。上図の例では、filesディレクトリの下位のファイルが相当する。
【0095】
次に、コード置き換え部14は、ファイルコードテーブル21の作成対象となったソースファイルを順番に読み出す(S30)。これにより、現在着目しているソースファイルのファイルコードが特定される。
【0096】
コード置き換え部14は、新たなソースファイルを読み出すと、1行目から順番に命令を読み出す(S40)。1つの命令が2行以上にわたって記述されていても、1行ずつ読み出す。すなわち、命令の書式や文法には影響されずに読み出せばよいが、1〜2行のずれはエラー原因の特定の大きな障害とはならないので、行を跨いた1つの命令の全体を読み出してもよい。
【0097】
次に、コード置き換え部14は、読み出した行にcreateCode()関数が含まれているか否かを判定する(S50)。createCode()関数の引数はどのような値でもよいし、なくてもよい。
【0098】
createCode()関数が含まれていない場合(S50のNo)、処理はステップS40に戻る。
【0099】
createCode()関数が含まれている場合(S50のYes)、コード置き換え部14は、エラーコードを作成する(S60)。エラーコードの作成には、プログラム20のバージョン、ファイルコード及び行番号を用いる。上述した任意の一文字は置き換えても置き換えなくてもよい。コード置き換え部14は、開発者がプログラム作成装置500に入力しているプログラム20のバージョンを取得し、下位の2桁を抽出する。次に、現在着目しているファイルのファイル名に対応づけられたファイルコードをファイルコードテーブル21から読み出す。次に、現在読み出している行をそのまま行番号として、16進数に変換する。また、createCode()関数の引数があれば任意の一文字を特定する。なお、エラーが生じた処理は数行前であるので、現在読み出している行から数行を引いた値を行番号として16進数に変換してもよい。そしてこれらの文字列とハイフンを予め定められた桁に配置することで、エラーコードを作成する。
【0100】
コード置き換え部14は、作成したエラーコードでcreateCode()関数を置き換える(S70)。
【0101】
そして、コード置き換え部14は、1つのソースファイルの最終行まで到達したか否かを判定する(S80)。最終行まで到達していない場合(S80のNo)、処理はステップS40に戻る。最終行まで到達した場合(S80のYes)、処理はステップS90に進む。
【0102】
最終行まで到達すると、コード置き換え部14は、ビルド対象の全てのファイル(ファイルコードテーブル21の全てのソースファイル)について処理したか否かを判定する(S90)。
【0103】
ビルド対象の全てのソースファイルを処理するまでは(S90のNo)、ステップS30からの処理を繰り返す。ビルド対象の全てのファイルを処理した場合(S90のYes)、ビルド部はファイルを結合して圧縮する(S100)。より具体的には、コンパイルするソースファイルに対してはコンパイル部12がコンパイルし、リンケージ部15がリンクし特定のディレクトリに保存する。また、ビルドツール511はコピーするだけでよいソースファイルを特定のディレクトリにコピーする。最終的に圧縮部16がビルドファイルで指定されるディレクトリ以下の複数のファイルを結合して圧縮する。こうすることで、実行ファイルであるプログラム20が作成される。
【0104】
作成されたプログラム20は、記憶媒体又はネットワークを経由してプログラム実行機器にインストールされる。コミュニケーション端末300の場合は、電源オンによりサーバ400からダウンロードされる。
【0105】
図16は、プログラム実行機器がプログラム20を実行した際にエラーメッセージを表示する手順を示すフローチャート図の一例である。
【0106】
プログラム実行機器は、分岐やサブルーチンなどの呼び出しがなければプログラム20をアドレス順に実行する(S110)。
【0107】
そして、if文などのエラー検出部18はエラーが検出されたか否かを判定する(S120)。エラー検出部18がエラーを検出した場合(S120のYes)、エラーメッセージ表示部19がエラーメッセージを作成する(S130)。具体的には、PrintErrorDialog関数の1つめの引数であるerrorTitle1に対応づけて記憶されている文字列をRAM203,103、HD204、フラッシュメモリ104から読み出し、2つめの引数であるerrorMessage1に対応づけて記憶されている文字列をRAM203,103、HD204、フラッシュメモリ104から読み出す。また、3つの引数である例えば「0511−00B−0」という文字列をRAM203,103、HD204、フラッシュメモリ104から読み出す。各記述1〜3の配置位置は、開発者がPrintErrorDialog関数の属性としてソースファイルの作成時に指定している。
【0108】
エラーメッセージ表示部19はエラーメッセージをディスプレイ208,120等に表示する(S140)。これにより図2に示したようにエラーコードにおいてエラーが発生した行番号が表示されるので、ユーザはエラーコードをサポートセンターに通知することができる。ユーザがOKボタンを押下すると、プログラム実行機器はPrintErrorDialog関数の次の命令から処理を再開する。
【0109】
サポートセンターや開発区はバージョン管理テーブルを参照して、エラーコードに含まれるプログラム20のバージョンに対応づけられた各ファイルのバージョンを特定する。次に、サポートセンターや開発区はファイルコードテーブル21を参照して、エラーコードに含まれるファイルコードに対応づけられたファイル名を特定する。これにより、エラーが発生したソースファイルとそのバージョンを特定できる。サポートセンターや開発区は、エラーコードに含まれる行番号によりソースファイルにおけるエラーの発生箇所を特定する。したがって、エラーの発生した命令をピンポイントに特定できたことになる。
【実施例2】
【0110】
本実施例では、実施例1とは別のエラーコードを表示するプログラム実行機器及びプログラム作成装置について説明する。
【0111】
〔エラーコード〕
図17は、本実施例のエラーコードの一例を示す図である。図17のエラーコードは、全体で12桁としている。左から桁番号を付して説明する。本実施例では、エラーコードの1−4桁の4文字にエラー番号が付されていることに特徴がある。
【0112】
エラー番号は、エラー内容を一意に(又はいくつかのエラーをまとめて)識別する識別情報である。実施例1のエラーコードは、開発者がソースコードを参照してエラーコードを解析することが前提であった。ユーザは、サポートセンターにメッセージとエラーコードを通知するが、メッセージやエラーコードが長い場合や似たようなメッセージ又はエラーコードが多数ある場合、正しく通知できないおそれがある。
【0113】
エラーコードの上位4桁はこの課題を解決するためのものである。また、プログラム実行機器のメーカがエラー番号に対応したエラー内容及び解決策が記述されたマニュアルをユーザサイドに配布したり、エラー番号からエラー内容及び解決策を表示するWebページを用意しておくことが可能になる。ユーザがエラーコードの上位4桁に基づきマニュアル等を参照することで、サポートセンターに連絡することなくプログラムの不具合の要因を解消する機会を得られる可能性を増やすことができる。
【0114】
エラーコードの5桁目のハイフンは、エラー番号とその他を区分するための記号である。必ずしもハイフンである必要はなく"_"" "(スペース)、":""/"等でもよい。また、ハイフン等がなければエラー番号を記述できないわけではない。
【0115】
6,7桁の2文字は、図12のエラーコードの1,2桁と同じもの(プログラム20のバージョンの下2桁)であり、8,9桁の2文字は、図12のエラーコードの3,4桁と同じもの(エラーメッセージを出力したソースファイルのファイルコード)である。
【0116】
図12のエラーコードの5桁目のハイフンは、図17のエラーコードでは省略されている。これは、図17のエラーコードではハイフンを5桁目のハイフンの1つとすることで、エラー番号とそれ以外のコードを明確化するためである。エラーコード以外のコード(6−12桁)は実施例1と同様に開発区が使用する。また、ハイフンを省くことでエラーコードが長くなりすぎることを抑制できる。
【0117】
10−12桁の3文字は、図12のエラーコードの6−8桁と同じもの(ソースファイルの行番号)である。
【0118】
なお、図12のエラーコードの9,10桁は削除されている。これは、エラーコードが長くなることを防ぐためである。ただし、削除せずに図17のエラーコードの13,14桁に追加してもよい。
【0119】
また、エラー番号は上位1−4桁に記述されているが、エラー番号の位置は上位1−4桁に限られない。エラー番号以外の、プログラム20のバージョン及びソースファイルの行番号の記述位置も図17の例に限定されない。また、エラー番号の桁数は4桁に限らず、3桁以下、又は、5桁以上としてもよい。
【0120】
〔ソースファイル例〕
図18は、ソースファイルの記述例を説明する図の一例である。図18において図13との共通部はその主要部を説明する。実施例1と同様に「printErrorDialog」という関数がエラーメッセージを表示する関数である。しかし、本実施例のprintErrorDialog関数は2つの引数を取る。
【0121】
1番目の引数のerror1(又はerror2)には、エラー番号テーブルにより、予めエラー番号と紐づけられている。また、1番目の引数がエラー番号に対応づけられたため、実施例1で1番目の引数が対応づけられていた記述1及び2番目の引数が対応づけられていた記述2は1番目の引数に紐付く形でエラー番号テーブルに登録されている。このため、実施例1の2番目の引数が省略される。
【0122】
3番目の引数createCode()は、エラーコードとの置き換え対象となる。なお、本実施例では、エラーコードに任意の1文字が含まれないので、createCode()の引数は使用されない。
【0123】
図19は、1番目の引数とエラー番号、記述1及び記述2が対応づけられたエラー番号テーブル31の一例を示す図である。エラー番号テーブル31は、プログラム作成装置500の例えばHDD508、及び、プログラム実行機器のHD204、SSD105などに記憶されている。エラー番号テーブル31は「errorName」「errorNumber」「errorTitle」「errorMessage」の各フィールドを有する。
「errorName」:「printErrorDialog」関数の1番目の引数となりうる値が登録されている
「errorNumber」:エラーコードにおけるエラー番号が登録されている
「errorTitle」:エラー名(エラーの簡単な内容)が登録されている
「errorMessage」:エラーメッセージ(エラーの具体的な内容)が登録されている
このようにソースファイルのprintErrorDialog関数の1番目の引数が「errorName」として登録されている。なお、エラーメッセージの記述1には「errorTitle」が、記述2には「errorMessage」がそれぞれ表示される。
【0124】
コード置き換え部14は、1番目の引数に基づきエラー番号テーブル31を参照し、エラー番号と記述1、2を読み出す。また、createCode()を、エラー番号、プログラム20のバージョン、ファイルコード及び行番号に置き換える。これにより、createCode()はエラーコードに置き換えられる。
【0125】
図20は、エラーコードに置き換えられた後のソースファイルの一例を示す図である。図18と比較すると分かるように、
11 行目のCreateCode()が"0001−051100B"
28 行目のCreateCode()が"0001−051101C"
105行目のCreateCode()が"0002−0511069"
にそれぞれ置き換えられている。
【0126】
上述したように、エラーコードの1−4桁がエラー番号に置き換えられている。
【0127】
〔動作手順〕
図21は、プログラム作成装置500がエラーコードを生成する手順を示すフローチャート図の一例である。図21の手順は、ステップS55が追加されている点で図15と異なっている。
【0128】
すなわち、ソースファイルから読み出した行にcreateCode()関数が含まれている場合(S50のYes)、コード置き換え部14は、エラー番号テーブル31を参照してエラー番号を特定する(S55)。すなわち、コード置き換え部14はcreateCode()関数を第2引数とするprintErrorDialog関数の1番目の引数(図18ではerror1又はerror2)を読み出す。
【0129】
そして、エラー番号テーブル31において1番目の引数が「errorName」に登録されているレコードの「errorNumber」を読み出す。これがエラー番号になる。また、コード置き換え部14は、図15の手順と同様に、プログラム20のバージョン、ファイルコード及び行番号を特定する。これにより、図17のエラーコードを生成できる。
【0130】
コード置き換え部14は、作成したエラーコードでcreateCode()関数を置き換える(S70)。以降の処理は実施例1と同様である。
【0131】
図22は、プログラム実行機器がプログラム20を実行した際にエラーメッセージを表示する手順を示すフローチャート図の一例である。
【0132】
プログラム実行機器は、分岐やサブルーチンなどの呼び出しがなければプログラム20をアドレス順に実行する(S110)。
【0133】
そして、if文などのエラー検出部18はエラーが検出されたか否かを判定する(S120)。エラー検出部18がエラーを検出した場合(S120のYes)、エラーメッセージ表示部19が、エラー番号テーブル31において、PrintErrorDialog関数の1番目の引数が「errorName」に登録されているレコードの「errorTitle」「errorMessage」を読み出す(S125)。
【0134】
次いで、エラーメッセージ表示部19がエラーメッセージを作成する(S130)。具体的には、2番目の引数である例えば「0001−051100B」という文字列をRAM203,103、HD204、フラッシュメモリ104から読み出す。これが記述3であり、「errorTitle」を記述1、「errorMessage」を記述2として、エラーメッセージを作成する。各記述1〜3の配置位置は、開発者がPrintErrorDialog関数の属性としてソースファイルの作成時に指定している。
【0135】
エラーメッセージ表示部19はエラーメッセージをディスプレイ208,120等に表示する(S140)。これにより、エラー番号が含まれるエラーコードがエラーメッセージの一部として表示される。
【0136】
したがって、ユーザはエラーコードをサポートセンターに通知することができる。また、マニュアルやWebページからエラー番号に基づきエラー内容や解決策を調べることが可能になる。ユーザがOKボタンを押下すると、プログラム実行機器はPrintErrorDialog関数の次の命令から処理を再開する。
【0137】
このように、本実施例のプログラム実行機器及びプログラム作成装置によれば、実施例1の効果に加えて、ユーザがエラー内容や解決策を調べることを可能にできる。
【実施例3】
【0138】
本実施例では、エラーメッセージをサポートセンターに通知するプログラム実行機器について説明する。
【0139】
図23は、エラー通知システム700の構成図の一例を示す。ネットワークを介して複数のプログラム実行機器が、サポートセンターの保守用の端末600と通信可能に接続されている。サポートセンターの保守用の端末600のハードウェア構成は情報処理装置100と同じであるため図示は省略する。
【0140】
プログラム実行機器にはサポートセンターの保守用の端末600のIPアドレスが予め登録されている。IPアドレスでなくURLにてサポートセンターの保守用の端末600を特定してもよい。また、プログラム実行機器には、識別情報が予め登録されている。この識別情報は、プログラム実行機器を一意に特定するための情報であり、数値、アルファベット若しくは記号をそれぞれ単独で組み合わせたもの、又は、これらの任意の1つ以上を組み合わせたものである。
【0141】
プログラム実行機器は、エラーメッセージをサポートセンターに通知する際、識別情報をサポートセンターに送信する。
【0142】
サポートセンターの保守用の端末600は、識別情報に対応づけられたユーザ情報を有している。ユーザ情報は、企業名、部署名、住所及び連絡先などの情報である。サポートセンターは識別情報によりプログラム実行機器のユーザを特定し、アフターサービスなどを提供することができる。
【0143】
なお、ユーザによっては、識別情報からユーザ情報が特定されることを好まないユーザも存在する。よって、ユーザは、プログラム実行機器による識別情報の自動送信の禁止を、プログラム実行機器に設定可能になっている。または、識別情報を自動的に送信することは許可しても、ユーザがユーザ情報の登録を禁止するようにサポートセンターに依頼することが可能になっている。
【0144】
また、サポートセンターの保守用の端末600は、エラー番号テーブル31とエラー詳細情報を記憶している。エラー番号テーブル31は、実施例2と同じものである。エラー詳細情報は、エラー番号に対応づけてエラーの詳細な内容を有している。すなわち、エラー詳細情報は、エラー番号テーブル31の「errorTitle」「errorMessage」よりもさらに詳細な情報である。
【0145】
サポートセンターの保守用の端末600がエラー番号テーブル31を有することで、保守用の端末600は、プログラム実行機器から受信したエラー番号によりエラーメッセージを端末600のディスプレイに表示することができる。また、保守用の端末600は、プログラム実行機器から受信したエラー番号によりエラー詳細情報を端末600のディスプレイに表示することができる。また、サポートセンターの保守用の端末600はプログラム実行機器の識別情報又はプログラム実行機器のユーザ情報を表示することもできる。
【0146】
したがって、プログラム実行機器のユーザが、エラーコードをサポートセンターに通知しなくてもサポートセンターにおいて、エラーメッセージだけでなく、エラーが発生したプログラム実行機器(又はユーザ)を特定でき、さらに、エラーが発生したプログラムコードの命令をピンポイントで特定できる。
【0147】
図24は、プログラム実行機器とサポートセンターの保守用の端末600の動作手順を示すフローチャート図の一例である。
【0148】
プログラム実行機器がプログラムを実行した際、エラーが発生する(S210)。実施例2で説明したように、プログラム実行機器はエラーメッセージを作成する。本実施例のプログラム実行機器は、エラーメッセージの全体又はエラーメッセージのうち少なくともエラーコード、及び、識別情報をサポートセンターの保守用の端末600に送信する(S220)。
【0149】
サポートセンターの保守用の端末600は、識別情報とエラーコードを受信する(S230)。
【0150】
サポートセンターの保守用の端末600は、エラーコードから1−4桁のエラー番号を取り出す(S240)。
【0151】
サポートセンターの保守用の端末600は、エラー番号に基づきエラー番号テーブル31を参照しエラーメッセージを作成し、また、エラー番号に基づきエラー詳細情報を読み出す(S250)。
【0152】
サポートセンターの保守用の端末600は、識別情報・エラーメッセージ・エラー詳細情報をディスプレイに表示する(S260)。
【0153】
以上のように、本実施例のエラー通知システム700は、プログラム実行機器が識別情報とエラーコードを送信し、サポートセンターの保守用の端末600が識別情報を表示することでエラーが発生したプログラム実行機器を特定できる。また、エラーメッセージを表示するので、エラーが発生したプログラムコードの命令をピンポイントで特定できる。また、エラー詳細情報を表示するので、サポートセンターがエラー内容を特定し解決策を把握することができる。
【符号の説明】
【0154】
11 ファイルコード生成部
12 コンパイル部
13 バージョン受付部
14 コード置き換え部
15 リンケージ部
16 圧縮部
17 プログラムDL部
18 エラー検出部
19 エラーメッセージ表示部
20 プログラム
31 エラー番号テーブル
100 情報処理装置
200 MFP
300 コミュニケーション端末
301 コミュニケーションシステム
400 サーバ
500 プログラム作成装置
600 サポートセンターの保守用の端末
700 エラー通知システム
【先行技術文献】
【特許文献】
【0155】
【特許文献1】特開2006−201927号公報

【特許請求の範囲】
【請求項1】
プログラムの実行時に不具合を検出するとエラーメッセージを表示する組み込み機器であって、
前記プログラムを実行する中央処理装置と、
前記プログラムとして複数のファイルが結合された実行可能な圧縮ファイルを記憶するプログラム記憶手段と、
命令の実行結果を格納するアドレスの記憶内容に基づき不具合を検出する不具合検出手段と、
前記不具合検出手段が不具合を検出した場合、命令に記述されている、前記プログラムのバージョン情報、前記ファイルのファイル識別情報、及び、実行中の命令の前記ファイルにおける行番号、を含むエラーメッセージを表示装置に出力するエラーメッセージ表示手段と、を有する組み込み機器。
【請求項2】
前記エラーメッセージには、さらに、エラー内容を識別するためのエラー番号が含まれる、ことを特徴とする請求項1記載の組み込み機器。
【請求項3】
前記エラーメッセージ表示手段は、前記プログラムに記述されている前記バージョン情報、前記ファイル識別情報及び前記行番号を、当該組み込み機器が有するメモリの所定のアドレスから読み出し、前記エラーメッセージの予め定められた位置に配置する、
ことを特徴とする請求項1又は2記載の組み込み機器。
【請求項4】
前記エラーメッセージ表示手段は、前記プログラムに記述されている命令の第一の引数に対応づけられた第一の文字列、及び、前記プログラムに記述されている命令の第二の引数に対応づけられた第二の文字列を、当該組み込み機器が有するメモリの所定のアドレスから読み出し、前記エラーメッセージの予め定められた位置に配置する、
ことを特徴とする請求項3記載の組み込み機器。
【請求項5】
前記第一の文字列は不具合が発生したことを意味する文字列であり、前記第二の文字列は対応方法を意味する文字列である、
ことを特徴とする請求項4記載の組み込み機器。
【請求項6】
前記プログラムに記述されている命令の第一の引数に対応づけて、第一の文字列、及び、第二の文字列が登録されているエラーテーブルを有しており、
前記エラーメッセージ表示手段は、前記プログラムに記述されている命令の第一の引数に前記エラーテーブルで対応づけられている前記第一の文字列、及び、前記第二の文字列を読み出し、前記エラーメッセージの予め定められた位置に配置する、
ことを特徴とする請求項3記載の組み込み機器。
【請求項7】
前記第一の文字列はエラー名を意味する文字列であり、前記第二の文字列はエラー内容を意味する文字列である、
ことを特徴とする請求項6記載の組み込み機器。
【請求項8】
前記プログラムをネットワークを介して接続されたサーバからダウンロードするプログラムダウンロード手段を有する、請求項1〜7いずれか1項記載の組み込み機器。
【請求項9】
少なくとも前記エラー番号を含む前記エラーメッセージ及び当該組み込み機器の識別情報を、ネットワークを介して接続された情報処理装置に送信する送信手段、を有することを特徴とする請求項2記載の組み込み機器。
【請求項10】
複数のファイルを結合して実行可能な1つの圧縮ファイルを作成するプログラム作成装置であって、
前記複数のファイル、及び、結合対象の前記ファイルを指定するファイル指定情報を記憶するファイル記憶手段と、
前記プログラムのバージョン情報の入力を受け付けるバージョン情報受付手段と、
前記ファイル指定情報が指定する前記複数のファイルのそれぞれにファイル識別情報を付与してファイル識別テーブルを作成する識別テーブル作成手段と、
前記ファイルに記述された所定の記号を、前記バージョン情報受付手段が受け付けた前記バージョン情報、前記ファイル識別テーブルに登録されている前記ファイルのファイル識別情報、及び、該記号が記述されている行又は付近の行の行番号、で置き換える記号置き換え手段と、
を有するプログラム作成装置。
【請求項11】
プログラムを実行する中央処理装置と、
前記プログラムとして複数のファイルが結合された実行可能な圧縮ファイルを記憶するプログラム記憶手段と、を有し、
プログラムの実行時に不具合を検出するとエラーメッセージを表示する組み込み機器に、
命令の実行結果を格納するアドレスの記憶内容に基づき不具合を検出する不具合検出ステップと、
前記不具合検出手段が不具合を検出した場合、命令に記述されている、前記プログラムのバージョン情報、前記ファイルのファイル識別情報、及び、実行中の命令の前記ファイルにおける行番号、を含むエラーメッセージを表示装置に出力するエラーメッセージ表示ステップと、
を実行させるプログラム。
【請求項12】
複数のファイル及び結合対象のファイルを指定するファイル指定情報を記憶するファイル記憶手段、を有し、複数のファイルを結合して1つの圧縮ファイルを作成するプログラム作成装置に、
前記プログラムのバージョン情報の入力を受け付けるバージョン情報受付ステップと、
前記ファイル指定情報が指定する前記複数のファイルのそれぞれにファイル識別情報を付与してファイル識別テーブルを作成する識別テーブル作成ステップと、
前記ファイルに記述された所定の記号を、前記バージョン情報受付手段が受け付けた前記バージョン情報、前記ファイル識別テーブルに登録されている前記ファイルのファイル識別情報、及び、該記号が記述されている行又は付近の行の行番号、で置き換える記号置き換えステップと、
を実行させるプログラム。
【請求項13】
請求項10記載のプログラム作成装置が作成したプログラムであって、
複数のファイルが結合された圧縮ファイルに、当該プログラムのバージョン情報、前記ファイルのファイル識別情報、及び、実行中の命令の前記ファイルにおける行番号、が記述されている、ことを特徴とするプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate


【公開番号】特開2013−41571(P2013−41571A)
【公開日】平成25年2月28日(2013.2.28)
【国際特許分類】
【出願番号】特願2012−111680(P2012−111680)
【出願日】平成24年5月15日(2012.5.15)
【出願人】(000006747)株式会社リコー (37,907)
【Fターム(参考)】