(57)【要約】【課題】エラー発生時に表示されるコードから、ソフトウェアのエラー発生箇所を特定することが可能な組み込み装置を提供すること。【解決手段】プログラム２０の実行時に不具合を検出するとエラーメッセージを表示する組み込み機器２００，３００であって、プログラムを実行する中央処理装置２０１，１０１と、プログラムとして複数のファイルが結合された実行可能な圧縮ファイルを記憶するプログラム記憶手段２０５，１０４と、命令の実行結果を格納するアドレスの記憶内容に基づき不具合を検出する不具合検出手段１８と、不具合検出手段が不具合を検出した場合、命令に記述されている、プログラムのバージョン情報、前記ファイルのファイル識別情報、及び、実行中の命令の前記ファイルにおける行番号、を含むエラーメッセージを表示装置に出力するエラーメッセージ表示手段１９と、を有する。【選択図】図２
2013041571.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの実行時に不具合を検出するとエラーメッセージを表示する組み込み機器であって、
前記プログラムを実行する中央処理装置と、
前記プログラムとして複数のファイルが結合された実行可能な圧縮ファイルを記憶するプログラム記憶手段と、
命令の実行結果を格納するアドレスの記憶内容に基づき不具合を検出する不具合検出手段と、
前記不具合検出手段が不具合を検出した場合、命令に記述されている、前記プログラムのバージョン情報、前記ファイルのファイル識別情報、及び、実行中の命令の前記ファイルにおける行番号、を含むエラーメッセージを表示装置に出力するエラーメッセージ表示手段と、を有する組み込み機器。
【請求項２】
前記エラーメッセージには、さらに、エラー内容を識別するためのエラー番号が含まれる、ことを特徴とする請求項１記載の組み込み機器。
【請求項３】
前記エラーメッセージ表示手段は、前記プログラムに記述されている前記バージョン情報、前記ファイル識別情報及び前記行番号を、当該組み込み機器が有するメモリの所定のアドレスから読み出し、前記エラーメッセージの予め定められた位置に配置する、
ことを特徴とする請求項１又は２記載の組み込み機器。
【請求項４】
前記エラーメッセージ表示手段は、前記プログラムに記述されている命令の第一の引数に対応づけられた第一の文字列、及び、前記プログラムに記述されている命令の第二の引数に対応づけられた第二の文字列を、当該組み込み機器が有するメモリの所定のアドレスから読み出し、前記エラーメッセージの予め定められた位置に配置する、
ことを特徴とする請求項３記載の組み込み機器。
【請求項５】
前記第一の文字列は不具合が発生したことを意味する文字列であり、前記第二の文字列は対応方法を意味する文字列である、
ことを特徴とする請求項４記載の組み込み機器。
【請求項６】
前記プログラムに記述されている命令の第一の引数に対応づけて、第一の文字列、及び、第二の文字列が登録されているエラーテーブルを有しており、
前記エラーメッセージ表示手段は、前記プログラムに記述されている命令の第一の引数に前記エラーテーブルで対応づけられている前記第一の文字列、及び、前記第二の文字列を読み出し、前記エラーメッセージの予め定められた位置に配置する、
ことを特徴とする請求項３記載の組み込み機器。
【請求項７】
前記第一の文字列はエラー名を意味する文字列であり、前記第二の文字列はエラー内容を意味する文字列である、
ことを特徴とする請求項６記載の組み込み機器。
【請求項８】
前記プログラムをネットワークを介して接続されたサーバからダウンロードするプログラムダウンロード手段を有する、請求項１〜７いずれか１項記載の組み込み機器。
【請求項９】
少なくとも前記エラー番号を含む前記エラーメッセージ及び当該組み込み機器の識別情報を、ネットワークを介して接続された情報処理装置に送信する送信手段、を有することを特徴とする請求項２記載の組み込み機器。
【請求項１０】
複数のファイルを結合して実行可能な１つの圧縮ファイルを作成するプログラム作成装置であって、
前記複数のファイル、及び、結合対象の前記ファイルを指定するファイル指定情報を記憶するファイル記憶手段と、
前記プログラムのバージョン情報の入力を受け付けるバージョン情報受付手段と、
前記ファイル指定情報が指定する前記複数のファイルのそれぞれにファイル識別情報を付与してファイル識別テーブルを作成する識別テーブル作成手段と、
前記ファイルに記述された所定の記号を、前記バージョン情報受付手段が受け付けた前記バージョン情報、前記ファイル識別テーブルに登録されている前記ファイルのファイル識別情報、及び、該記号が記述されている行又は付近の行の行番号、で置き換える記号置き換え手段と、
を有するプログラム作成装置。
【請求項１１】
プログラムを実行する中央処理装置と、
前記プログラムとして複数のファイルが結合された実行可能な圧縮ファイルを記憶するプログラム記憶手段と、を有し、
プログラムの実行時に不具合を検出するとエラーメッセージを表示する組み込み機器に、
命令の実行結果を格納するアドレスの記憶内容に基づき不具合を検出する不具合検出ステップと、
前記不具合検出手段が不具合を検出した場合、命令に記述されている、前記プログラムのバージョン情報、前記ファイルのファイル識別情報、及び、実行中の命令の前記ファイルにおける行番号、を含むエラーメッセージを表示装置に出力するエラーメッセージ表示ステップと、
を実行させるプログラム。
【請求項１２】
複数のファイル及び結合対象のファイルを指定するファイル指定情報を記憶するファイル記憶手段、を有し、複数のファイルを結合して１つの圧縮ファイルを作成するプログラム作成装置に、
前記プログラムのバージョン情報の入力を受け付けるバージョン情報受付ステップと、
前記ファイル指定情報が指定する前記複数のファイルのそれぞれにファイル識別情報を付与してファイル識別テーブルを作成する識別テーブル作成ステップと、
前記ファイルに記述された所定の記号を、前記バージョン情報受付手段が受け付けた前記バージョン情報、前記ファイル識別テーブルに登録されている前記ファイルのファイル識別情報、及び、該記号が記述されている行又は付近の行の行番号、で置き換える記号置き換えステップと、
を実行させるプログラム。
【請求項１３】
請求項１０記載のプログラム作成装置が作成したプログラムであって、
複数のファイルが結合された圧縮ファイルに、当該プログラムのバージョン情報、前記ファイルのファイル識別情報、及び、実行中の命令の前記ファイルにおける行番号、が記述されている、ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの実行時に不具合を検出するとエラーメッセージを表示する組み込み機器で関する。
【背景技術】
【０００２】
コンピュータが搭載された機器がプログラムを実行した際に、なんらかのエラーが生じるとエラーメッセージを表示することがある。エラーメッセージの表示は、ユーザにエラーの発生を通知するという意義があるが、さらに進んでエラーの原因をユーザに通知するという意義を含む場合がある。
【０００３】
図１は、従来のエラーメッセージの一例を示す図である。記述１はエラーの発生をユーザに通知するメッセージであり、記述２は代表的な対応方法を通知するメッセージであり、記述３はエラーの原因をユーザに通知するという意義を含むメッセージである。記述３がどのように表示されるかはソフトウェアによるが、表示可能な情報量に制限がある場合が多い。このため、記述３はコード化されており、ユーザはマニュアルなどでコードに対応したエラー内容を参照することでエラーの原因を把握する。また、ユーザはサポートセンターにコードを通知することで、サポートセンターがエラーの原因をユーザに知らせることも可能になる。
【０００４】
このようなエラーの原因の解析はユーザによっては面倒な作業となる場合がある。このため、コードとエラー内容を、プログラムを実行する機器内に保持する技術が知られている（例えば、特許文献１参照。）。特許文献１には、事象と故障部位を対応付けるテーブルを有するデバイス診断装置について開示されている。機器内にテーブルを有することで、ユーザがエラーの原因を特定したい場合に、解析マニュアルを参照したり、サポートセンターに問い合わせる必要性を低減できる。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来、エラーの発生時に表示されるコードは、大雑把なエラー原因やエラー発生箇所を特定することは可能でも、ソースファイル上でエラーの発生箇所をピンポイントに特定することができないという問題があった。すなわち、従来のコードはエラー原因が異なっていても同じようなエラーであれば同じコードになってしまい、どのようなエラーが発生したかを一意に特定するための情報までは有していない。これは、特許文献１のように装置内にテーブルを有していても同じであり、コードが有する情報量が少ないと、故障部位を正確に特定することは困難である。
【０００６】
例えば、プログラムの開発時にはＩＤＥ（統合開発環境）を用いることで、プログラムにエラーがあるとＩＤＥが行番号を表示してくれる場合がある。また、コンパイル時にも文法上のエラーがあれば行番号を表示してくれる。しかしながら、ＩＤＥをそのまま機器に組み込むことは実行速度やリソースの制約上、困難である。また、コンパイル後のプログラムには行番号が付されていないので、機器がプログラムを実行する段階ではエラー発生時に実行しているプログラムの行番号の特定が困難であった。これは、インタプリタ言語でも同様であり、編集時のソースコードにＩＤＥが行番号を付していても、実行時のインタプリタ言語は行番号を有していないことが一般的である。
【０００７】
また、エラーの発生箇所をピンポイントに特定するため、例えばエラーログを利用してユーザやサポートセンターがエラーの原因を解析することも考えられる。エラーログには障害の発生状況、表示されたエラーメッセージ等が含まれる。多くのプログラムは、エラーログを生成しているので、エラーログがあれば少なくともエラーメッセージよりエラー原因の特定は容易である。
【０００８】
しかしながら、エラーログはユーザが解析するには複雑なため、ユーザがエラーログからエラー原因を特定することは困難な場合が多い。また、汎用型のコンピュータでなく、組み込み装置の場合、そもそもユーザがエラーログにアクセスすることが困難である。
【０００９】
また、機器がエラーログをサポートセンターに送信することでサポートセンターがエラーログを解析することは技術的には可能である。しかし、詳細な情報が含まれているエラーログを外部に送信することに抵抗を感じるユーザは少なくない。また、ユーザがエラーログの解析が可能な場合でもユーザにエラーログを見せることは、機器の詳細な解析を可能にする場合があり、必ずしも好ましい方策ではない。
【００１０】
本発明は、上記課題に鑑み、エラー発生時に表示されるコードから、ソフトウェアのエラー発生箇所を特定することが可能な組み込み装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明は、プログラムの実行時に不具合を検出するとエラーメッセージを表示する組み込み機器であって、前記プログラムを実行する中央処理装置と、前記プログラムとして複数のファイルが結合された実行可能な圧縮ファイルを記憶するプログラム記憶手段と、命令の実行結果を格納するアドレスの記憶内容に基づき不具合を検出する不具合検出手段と、前記不具合検出手段が不具合を検出した場合、命令に記述されている、前記プログラムのバージョン情報、前記ファイルのファイル識別情報、及び、実行中の命令の前記ファイルにおける行番号、を含むエラーメッセージを表示装置に出力するエラーメッセージ表示手段と、を有する。
【発明の効果】
【００１２】
エラー発生時に表示されるコードから、ソフトウェアのエラー発生箇所を特定することが可能な組み込み装置を提供することができる。
【図面の簡単な説明】
【００１３】
【図１】従来のエラーメッセージの一例を示す図である。
【図２】本実施形態のエラーメッセージの一例を示す図である。
【図３】プログラムを実行する装置にエラーが発生した場合にエラー原因が解析されるまでの流れを示す図の一例である。
【図４】装置の一例を示す図である。
【図５】情報処理装置又はＭＦＰのハードウェア構成図の一例である。
【図６】コミュニケーション端末のハードウェア構成図の一例である。
【図７】プログラム作成装置の概略斜視図の一例を示す図である。
【図８】プログラム作成装置及びプログラム実行機器の機能ブロック図の一例である。
【図９】ファイルコードテーブルの一例である。
【図１０】プログラムのバージョンについて説明する図の一例である。
【図１１】ビルドツールが生成するバージョン管理テーブルの一例を示す。
【図１２】エラーコードの一例を示す図である。
【図１３】ソースファイルの記述例を説明する図の一例である。
【図１４】エラーコードに置き換えられた後のソースファイルの一例を示す図である。
【図１５】プログラム作成装置がエラーコードを生成する手順を示すフローチャート図の一例である。
【図１６】装置又はコミュニケーション端末がプログラムを実行した際にエラーメッセージを表示する手順を示すフローチャート図の一例である。
【図１７】エラーコードの一例を示す図である（実施例２）。
【図１８】ソースファイルの記述例を説明する図の一例である（実施例２）。
【図１９】１番目の引数とエラー番号が対応づけられたエラー番号テーブルの一例を示す図である。
【図２０】エラーコードに置き換えられた後のソースファイルの一例を示す図である（実施例２）。
【図２１】プログラム作成装置がエラーコードを生成する手順を示すフローチャート図の一例である（実施例２）。
【図２２】プログラム実行機器がプログラムを実行した際にエラーメッセージを表示する手順を示すフローチャート図の一例である（実施例２）。
【図２３】エラー通知システムの構成図の一例である。
【図２４】プログラム実行機器とサポートセンターの保守用の端末の動作手順を示すフローチャート図の一例である。
【発明を実施するための形態】
【００１４】
以下、本発明を実施するための形態について説明する。
【実施例１】
【００１５】
〔概略〕
まず、本実施形態のプログラム実行機器が表示するエラーメッセージについて説明する。
図２は、本実施形態のエラーメッセージの一例を示す図である。エラーメッセージには、以下の３つの記述とＯＫボタンが表示されている。
記述１：「エラーが発生しました」
記述２：「サポートセンターにご連絡ください。」
記述３：０５１１−０１Ｃ−０
本実施形態のエラーメッセージは、記述３にソースファイルの行番号が含まれる点に特徴の一つがある。記述３の"０１Ｃ"はソースファイルの行番号を１６進数で表示したものである。"０５"はプログラムのバージョンであり、"１１"はエラーが発生したファイルの名前である。以下では、記述３全体をエラーコードと称することとする。
【００１６】
エラー発生時にコンピュータが実行した命令には行番号が含まれていない場合がほとんどであるが、その命令がソースファイルにおいて何行目に相当するかが記述３に含まれることになる。したがって、ユーザが記述３をサポートセンター等に通知すれば、サポートセンター等はエラーが発生した命令をピンポイントで特定でき、エラー原因を早期に解析することが可能になる。
【００１７】
なお、図２では、エラーコードがエラーメッセージ内に含まれているが、エラーコードは、エラーメッセージが表示される前後にエラーメッセージとは独立に表示されてもよい。また、エラーコードのプログラムのバージョン、ファイルの名前、及び、行番号を別々に表示してもよい。
【００１８】
また、本実施形態のエラーとは、プログラムが検出しうる不具合、換言すると想定内の不具合をいう。これに対し、そもそもエラーメッセージの表示が困難となる想定外の不具合（例えばプログラムがハングアップするようなバグ、ハード的にプログラムの実行そのものが困難になるような不具合）は含まれない。
【００１９】
〔エラー発生時の対応例〕
図３は、プログラム実行機器にエラーが発生した場合にエラー原因が解析されるまでの流れを示す図の一例である。
１．エラーが発生し、プログラム実行機器がエラーメッセージを表示する。これにより、ユーザはエラーの発生に気付く。
２．ユーザがエラーメッセージによりエラー原因を特定でき、復旧した場合は、ユーザは継続してプログラム実行機器を使用する。
【００２０】
一方、ユーザがエラーメッセージを目視したりマニュアルなどで調べても、エラー原因が分からず復旧できない場合、障害情報（エラーメッセージ、プログラムのバージョン、エラーの発生状況、エラーログ等）をプログラム実行機器メーカのサポートセンターに通知する。通知には電話や電子メールを用いる方法がある。なお、復旧できない場合に限らず、ユーザは障害情報をサポートセンターに通知することが可能である。多くのプログラム実行機器は再起動することで復旧自体は可能なためである。
３．サポートセンターは、障害情報からエラー原因を解析する。サポートセンターだけではユーザにプログラム実行機器を復旧させることができない場合、又は、エラー原因を特定できない場合、プログラム実行機器メーカの開発区に障害情報を通知する。
４．開発区では、障害情報を元にエラー原因の解析・対策を行う。
５．開発区は、サポートセンターに解析結果を報告する。
６．サポートセンターはユーザに解析結果と、必要であれば対策を通知する。
【００２１】
ここで、「４．」の解析では、開発区にとって、障害情報に多くの情報が含まれているほどエラー原因の解析が容易である。しかし、例えば、上記の障害情報は全てが入手可能とは限らず、入手の困難性には差異がある。
【００２２】
(i)障害の発生状況（なんの操作で起きたか、その前後に行っていた操作は、ハードウェア環境は、等）
(ii)ユーザに表示されたエラーメッセージ
(iii)障害の発生したプログラムのバージョン
(iv)エラーログ
例えば、(i)はユーザがプログラム実行機器の動作状態を観察していれば取得可能だが、観察していないと最小限の情報しか得られない。また、障害の発生状況は、詳細であればあるほど好ましいが、詳細になればなるほど情報を得るのが難しくなる。
【００２３】
（ii)のエラーメッセージは、プログラム実行機器がハングアップなどしなければ、多くの場合は表示されるので、ユーザやサポートセンターが取得することは容易である。しかしながら、上記のとおり、ユーザやサポートセンターがエラー原因を解析する上で十分な情報が含まれてはいなかった。
【００２４】
(iii) 開発区にとってはプログラムのバージョンが分かることで、バージョンに特有のエラー原因を比較的容易に推定できる場合がある。バージョンに特有のエラー原因は他のプログラム実行機器やユーザからも報告済みの可能性が高いためである。ユーザがバージョンを取得するには、起動時や起動後常にバージョンが表示されるプログラムを除くと、ユーザの意識的な操作が必要である。
【００２５】
また、バージョンが判明することで、プログラムを構成する各種のファイルのバージョンも判明するので、特定のファイルに起因するエラー原因を解析しやすくなる。
【００２６】
(iv)のエラーログは、(i)〜(iii)すべての情報を含みうる。エラーログは、エラーの詳細な原因と発生箇所を特定するための情報、特に詳細な解析を行うには必須の情報であるエラーが発生したファイルの名前、プログラムのバージョンを含んでいる。したがって、開発区としては、これを取得することが一番望ましいが、一番取得が難しい情報でもある。理由は上述したとおり、ユーザは外部に提供することを好まず、また機器メーカとしてもユーザに容易にアクセスさせたくないためである。
【００２７】
本実施形態では、開発区がエラーログを入手することが困難な状況下でも、エラーメッセージに含まれるエラーコードから、エラーログと同等の情報をサポートセンターが入手することを可能にする。すなわち、エラーコードには、プログラムのバージョン、エラーが発生したファイルの名前、及び、ソースファイルの行番号とが含まれているため、開発区では、エラーの発生箇所（どのファイルのどの箇所を実行中か）をピンポイントで特定することができる。
【００２８】
〔構成例〕
＜プログラム実行機器＞
後述するように、ソースファイルの行番号を表示するため、プログラム実行機器が実行するプログラムにはすでに行番号が含まれている。このため、本実施形態のプログラム実行機器は、スタンドアロン型、ネットワークを介して接続されたクライアント端末、又は、サーバ等、どのような形態でプログラムを実行するものでもよい。
【００２９】
図４（ａ）はスタンドアロン型のプログラム実行機器として情報処理装置１００の概略斜視図の一例を、図４（ｂ）はＭＦＰ２００の概略斜視図の一例をそれぞれ示す。いずれも内部にＣＰＵとプログラムを有し、ＣＰＵがプログラムを実行することでプログラムに特有の処理を実行する。そして、何らかのエラーが生じた場合、情報処理装置１００又はＭＦＰ（Multifunction Peripheral）２００はエラーコードを表示する。
【００３０】
図４（ｃ）は、コミュニケーションシステム３０１の概略構成図の一例である。ネットワークを介して複数のコミュニケーション端末（以下、区別する場合、コミュニケーション端末Ａ、Ｂという）３００及びサーバ４００が接続されている。コミュニケーション端末Ａは、ある地域（例えばアメリカ合衆国）に、コミュニケーション端末Ｂは別の地域（例えば日本）にあり、サーバ４００を介してネットワーク経由で通信可能に接続されている。
【００３１】
コミュニケーション端末Ａ，Ｂは、それぞれ、カメラ、マイク及びスピーカを有し、さらに表示装置とローカルに接続されている。コミュニケーション端末Ａの近くのユーザが発した音声はコミュニケーション端末Ａのマイクが集音して電気信号に変換した後、コミュニケーション端末Ｂに送信する。コミュニケーション端末Ｂのスピーカは、電気信号を音声に変換してスピーカから出力する。カメラが撮影した映像についても同様であり、コミュニケーション端末Ａは、コミュニケーション端末Ａのカメラが撮影した映像を電気信号に変換してコミュニケーション端末Ｂに送信する。コミュニケーション端末Ｂは電気信号を映像に変換して、表示装置に表示する。したがって、異なる地域のユーザ同士が、音声及び映像を使用して互いにコミュニケーションすることが可能になる。なお、表示装置としては、例えば、プロジェクタや液晶ディスプレイがある。このようなコミュニケーションシステム３０１の具体例としてはテレビ会議システムが知られている。
【００３２】
図４のプログラム実行機器のうち、ＭＦＰ２００やコミュニケーション端末３００は組み込み機器と呼ばれる。本実施形態のエラーメッセージは、ユーザがプログラム実行機器に対し行える操作が少ない組み込み機器において特に有効である。なお、組み込み機器の明確な定義は一般に規定されていないが、例えば、一般的な情報処理装置（ＰＣ：Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）を含まないことが挙げられる。
【００３３】
図５は、情報処理装置１００又はＭＦＰ２００のハードウェア構成図の一例を示す。なお、ＭＦＰ２００のハードウェア構成図はプログラム２０を実行する部分のみを取り出して説明するのであり、図示する以外にスキャナ、プロッタ又はファクシミリなどの機能を有している。
【００３４】
情報処理装置１００又はＭＦＰ２００は、装置全体の動作を制御するＣＰＵ２０１、ＩＰＬ（Initial Program Loader）や静的なデータを記憶したＲＯＭ２０２、ＣＰＵ２０１のワークエリアとして使用されるＲＡＭ２０３、ＣＰＵ２０１が実行するプログラム２０や各種データを記憶するＨＤ２０４、ＣＰＵ２０１の制御にしたがってＨＤ２０４に対する各種データの読み出し又は書き込みを制御するＨＤＤ(Hard Disk Drive)２０５、フラッシュメモリ等の記録メディア２０６に対するデータの読み出し又は書き込み（記憶）を制御するメディアドライブ２０７、カーソル、メニュー、ウィンドウ、文字、又は画像などの各種情報を表示するディスプレイ２０８、通信ネットワーク２を利用してデータ伝送をするためのネットワークＩ／Ｆ２０９、文字、数値、各種指示などの入力のための複数のキーを備えたキーボード２１１、各種指示の選択や実行、処理対象の選択、カーソルの移動などを行うマウス２１２、着脱可能な記録媒体の一例としてのＣＤ−ＲＯＭ(Compact Disc Read Only Memory)２１３等に対する各種データの読み出し又は書き込みを制御するＣＤ−ＲＯＭドライブ２１４、及び、上記各構成要素を図５に示されているように電気的に接続するためのアドレスバスやデータバス等のバスライン２１０を備えている。
【００３５】
なお、プログラム２０は、インストール可能な形式又は実行可能な形式のファイルで、上記記録メディア２０６やＣＤ−ＲＯＭ２１３等のコンピュータで読み取り可能な記録媒体に記録して流通させるようにしてもよい。また、プログラム２０は、不図示のサーバからインストール可能な形式又は実行可能な形式のファイルで情報処理装置１００又はＭＦＰ２００に配布されてもよい。
【００３６】
図６は、コミュニケーション端末３００のハードウェア構成図の一例である。図６に示されているように、本実施形態のコミュニケーション端末３００は、コミュニケーション端末全体の動作を制御するＣＰＵ１０１、ＩＰＬや静的なデータ等を記憶したＲＯＭ１０２、ＣＰＵ１０１のワークエリアとして使用されるＲＡＭ１０３、プログラム２０、画像データ、及び、音声データ等の各種データを記憶するフラッシュメモリ１０４、ＣＰＵ１０１の制御にしたがってフラッシュメモリ１０４に対する各種データの読み出し又は書き込みを制御するＳＳＤ（Solid State Drive）１０５、フラッシュメモリ等の記録メディア１０６に対するデータの読み出し又は書き込み（記憶）を制御するメディアドライブ１０７、端末１０の宛先を選択する場合などに操作される操作ボタン１０８、端末１０の電源のＯＮ／ＯＦＦを切り換えるための電源スイッチ１０９、通信ネットワーク２を利用してデータ伝送をするためのネットワークＩ／Ｆ(Interface)１１１を備えている。なお、記録メディア１０６は、コミュニケーション端末３００に対して着脱自在な構成となっている。
【００３７】
また、コミュニケーション端末３００は、ＣＰＵ１０１の制御に従って被写体を撮像して画像データを得る内蔵型のカメラ１１２、このカメラ１１２の駆動を制御する撮像素子Ｉ／Ｆ１１３、音声を入力する内蔵型のマイク１１４、音声を出力する内蔵型のスピーカ１１５、ＣＰＵ１０１の制御に従ってマイク１１４及びスピーカ１１５との間で音声信号の入出力を処理する音声入出力Ｉ／Ｆ１１６、ＣＰＵ１０１の制御に従って外付けの表示装置１２０に画像データを伝送するディスプレイＩ／Ｆ１１７、各種の外部機器を接続するための外部機器接続Ｉ／Ｆ１１８、及び、上記各構成要素を図６に示されているように電気的に接続するためのアドレスバスやデータバス等のバスライン１１０を備えている。
【００３８】
図の表示装置１２０は、被写体の画像や操作用アイコン等を表示する液晶や有機ＥＬによって構成された液晶ディスプレイであるが、プロジェクタでもよい。表示装置１２０は、ケーブル１２０ｃによってディスプレイＩ／Ｆ１１７に接続される。
【００３９】
なお、カメラやマイク、スピーカは、コミュニケーション端末３００に内蔵されている必要はなく、ＵＳＢ(Universal Serial Bus)ケーブル等によって外部機器接続Ｉ／Ｆ１１８に接続される外付けタイプのものでもよい。
【００４０】
また、上記フラッシュメモリ１０４には、常時、プログラム２０が記憶されているわけではない。これは、コミュニケーションシステム３０１の場合、サーバ４００からコミュニケーション端末３００の型に最適なプログラム２０がダウンロードされるためである。しかしながら、エラーメッセージを出力するプログラム２０の実行時はフラッシュメモリ１０４に記憶されているので、プログラム２０はコミュニケーション端末３００と一体とみなすこともできる。
【００４１】
プログラム２０は、インストール可能な形式又は実行可能な形式のファイルで、上記記録メディア１０６等のコンピュータで読み取り可能な記録媒体に記録した状態にて流通させることもできる。
【００４２】
＜プログラム作成装置＞
本実施形態では、プログラム実行機器（情報処理装置１００、ＭＦＰ２００、コミュニケーション端末３００）が実行するプログラム２０に、ソースファイルの行番号が含まれている。したがって、この特別なプログラム２０を作成する装置が存在する（以下、プログラム作成装置という）。プログラム作成装置は汎用的なＯＳ（例えば、Ｗｉｎｄｏｗｓ（登録商標）、ＵＮＩＸ（登録商標）、Ｌｉｎｕｘ（登録商標））が動作する情報処理装置であればよく、図５の情報処理装置１００と機能的には大きな違いがない場合もある。しかし、一般にプログラム作成装置はメーカ内にあるため、プログラム２０を実行するプログラム実行機器とは区別される。
【００４３】
図７（ａ）はプログラム作成装置５００の概略斜視図の一例を、図７（ｂ）はプログラム作成装置５００のハードウェア構成図の一例をそれぞれ示す。プログラム作成装置５００はそれぞれバスで相互に接続されているＣＰＵ５０１、ＲＡＭ５０２、ＲＯＭ５０３、記憶媒体装着部５０４、通信装置５０５、入力装置５０６、描画制御部５０７、及び、ＨＤＤ５０８を有する。ＣＰＵ５０１は、ＯＳ（Operating  System）やビルドツール５１１をＨＤＤ５０８から読み出して実行することで種々の機能を提供すると共に、補正済み原稿画像データの生成処理を行う。
【００４４】
ＲＡＭ５０２はＣＰＵ５０１がビルドツール５１１を実行する際に必要なデータを一時保管する作業メモリ（主記憶メモリ）になり、ＲＯＭ５０３はＢＩＯＳ（Basic Input Output System）やＯＳを起動するためのＩＰＬ、静的なデータが記憶されている。
【００４５】
記憶媒体装着部５０４には記憶媒体５１０が着脱可能であり、記憶媒体５１０に記録されたデータを読み込み、ＨＤＤ５０８に記憶させる。また、記憶媒体装着部５０４は、ＨＤＤ５０８に記憶されたデータを記憶媒体５１０に書き込むこともできる。記憶媒体５１０は例えば、ＵＳＤメモリ、ＳＤカード等である。
【００４６】
入力装置５０６は、キーボードやマウス、トラックボールなどであり、プログラム作成装置５００へのユーザの様々な操作指示を受け付ける。ＨＤＤ５０８は、ＳＳＤ等の不揮発メモリでもよく、ＯＳ、ビルドツール５１１などの各種のデータが記憶されている。
【００４７】
通信装置５０５は、インターネットなどのネットワークに接続するためのＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）であり、例えば、イーサネット（登録商標）カードである。
【００４８】
描画制御部５０７は、ＣＰＵ５０１がビルドツール５１１を実行してグラフィックメモリに書き込んだ描画コマンドを解釈して、画面を生成しディスプレイ５０９に描画する。
【００４９】
ビルドツール５１１は、インストール可能な形式又は実行可能な形式のファイルで、上記記憶媒体５１０に記録した状態又は不図示のサーバから配布されることができる。
【００５０】
〔機能ブロック〕
図８は、プログラム作成装置５００及びプログラム実行機器の機能ブロック図の一例を示す。プログラム作成装置５００はビルドツール５１１を用いてソースファイルをビルドし、プログラム２０を作成する。ビルドツール５１１は、コンパイル部１２、リンケージ部１５、圧縮部１６、ファイルコード生成部１１、バージョン受付部１３、及び、コード置き換え部１４を有する。このうちコード置き換え部１４は、独立に存在してもよいし、コンパイル部１２が機能の一部として有していてもよい。
【００５１】
コンパイル部１２、リンケージ部１５、及び、圧縮部１６は、いずれもビルドツール５１１が提供する公知の機能である。すなわち、コンパイル部１２は、Ｃ、Ｃ++、ＪＡＶＡ（登録商標、以下省略）などで記述されたソースファイルをコンパイルし、ソースファイル単位で、オブジェクトモジュールファイルを作成する。そして、リンケージ部１５は、複数のオブジェクトモジュールファイルをリンクすることでオブジェクトファイルを作成する。
【００５２】
また、圧縮部１６は、指定されたディレクトリ構造を含め、ディレクトリ内のファイルを結合して圧縮する。圧縮されたファイルには例えば「＊.jar」「＊.war」「＊.exe」という拡張子が付される。圧縮されたファイルがプログラム２０である。プログラム実行機器は圧縮されたプログラム２０を解凍して実行することもできるが、そのまま実行ファイルとして実行することができる。
【００５３】
ビルドツール５１１は、ビルドファイル２２により動作内容が規定される。ビルドファイル２２はＸＭＬで記述され、ソースファイルをどのようにビルドしてプロジェクト（本実施形態のプログラム２０）を生成するかのビルド方法を定義している。
・記述Ｂ１は、"programＡ"というプロジェクト名を定義している。
・記述Ｂ２は変数名を定義しており、files、home、bin、jsというディレクトリ名を変数に格納している。なお、filesとhomeはすでにある。
・記述Ｂ３は、binとjsというディレクトリを作ることを定義している。
・記述Ｂ４は、files内のソースファイルをコンパイルしてbinというファイルにコピーすることを定義している。
・記述Ｂ５は、files内のcalk.jsというファイルをjsというディレクトリにコピーすることを定義している。
・記述Ｂ６は、home以下のディレクトリとファイルを圧縮して「programA.war」という圧縮ファイルを生成することを定義している。
【００５４】
ビルドツール５１１は、開発者がビルドの開始を指示すると、このようなビルドファイル２２を読み込んでビルドを開始する。ビルドファイル２２は開発者が記述することもできるし、ビルドツール５１１が開発中の各ソースファイルのファイル内容などを解析して自動的に作成することも可能である。
【００５５】
ファイルコード生成部１１は、ビルド対象の全てのファイルを特定し、ファイルに重複しないファイルコード（識別情報）を対応づけて、ファイルコードテーブル２１を生成する。図８のビルドファイル２２では、コンパイル対象のfilesディレクトリのファイル、コピー元のファイルcalk.js、がビルド対象の全てのファイルとなる。したがって、filesディレクトリのファイルに重複しないファイルコードを付与すればよい。
【００５６】
図９は、ファイルコードテーブル２１の一例を示す。ファイルコードテーブル２１は、プログラム２０を構成する元となった全てのソースファイルに重複しないファイルコードが対応づけられている。ファイルコード生成部１１は、例えば、ビルドファイル２２を参照して、記述Ｂ４によりコンパイルされるfilesの全てのソースファイル、記述Ｂ５のコピー元のソースファイルを抽出する。そして、各ファイル名にファイルコードを付与する。
【００５７】
なお、ファイルコードテーブル２１は開発者が作成してもよく、この場合、ファイルコード生成部１１は不要である。
【００５８】
バージョン受付部１３は、開発者からプログラム２０のバージョンの入力を受け付ける。プログラム２０のバージョンについては後述する。
【００５９】
また、コード置き換え部１４は、各ファイルに記述されている特定の関数を、プログラム２０のバージョン、ファイルコード、及び、ソースファイルの行番号（１６進数に変換後）、にて置き換える。すなわち、エラーコードを生成する。この置き換えにより、プログラム２０はエラー発生時にソースファイルの行番号の表示が可能になる。
【００６０】
コード置き換え部１４が、コンパイル部１２にあるか、コンパイル部１２の外部にあるかは、ビルド対象のファイルがコンパイルを必要とするか否かの違いに対応するためであり処理内容は同じである。例えば、JavaScript（登録商標、以下省略）で記述されたファイルはコンパイルされないので、コンパイル部１２の外部にあるコード置き換え部１４がエラーコードを生成する。Ｃ++やＪＡＶＡで記述されたファイルはコンパイルされるので、コンパイル部１２のコード置き換え部１４がエラーコードを生成する。コード置き換え部１４がコンパイル前にエラーコードを生成するのであれば、コンパイル部１２の外部にあるコード置き換え部１４のみを搭載してもよい。
【００６１】
ビルドツール５１１がこのようにして生成したプログラム２０は、プログラム２０に特有の様々な機能の他に、エラー検出部１８及びエラーメッセージ表示部１９を有する。エラー検出部１８は、if文などにより変数の内容を判定してエラーの発生を検出する。エラーメッセージ表示部１９は、エラー発生を検出して、エラーメッセージをディスプレイ２０８，１２０に描画する。
【００６２】
また、プログラムＤＬ部１７は、主にコミュニケーション端末３００に搭載される。例えば、コミュニケーション端末３００の電源がオンになると、ＩＰＬが起動してプログラムＤＬ部１７をＣＰＵ１０１に実行させる。プログラムＤＬ部１７は、例えばＦＴＰコマンドで予め既知のサーバ４００のＩＰアドレスを指定してサーバ４００と接続し、ｇｅｔコマンドでプログラム２０のファイル名を指定してサーバ４００からプログラム２０をダウンロードする。
【００６３】
なお、コミュニケーション端末３００の電源がオフにされる際、コミュニケーション端末３００はプログラム２０をフラッシュメモリ１０４から消去する。これにより、電源オフ中に、コミュニケーション端末３００からプログラム２０が盗難されることを防止できる。
【００６４】
〔プログラムのバージョン〕
図１０は、プログラム２０のバージョンについて説明する図の一例である。ある程度の規模のプログラム２０は、複数のソースファイルからビルドという処理を経て生成される。図では、main.cppというＣ++言語のソースファイル、base.hというmain.cppが使用するヘッダファイル、calk.jsというJavaScriptのソースファイル（JavaScriptはコンパイルされないがビルドの対象なのでソースファイルという）等から１つのプログラム２０が構成されることが図示されている。
【００６５】
ビルドとは、これらのファイルを組み合わせて「実行可能ファイル」を作成することをいう。ビルドを行うのは、開発者が使用するプログラム作成装置５００である。一般には、ＭａｋｅやＡＮＴ等のビルドツール５１１が市販されており、プログラム作成装置５００がビルドツール５１１を実行することでプログラム２０である実行可能ファイルが作成される（例えば、＊.war、＊.jar、＊.exe等のファイル）。
【００６６】
そして、この複数のファイルの各バージョンの組み合わせによって、プログラム２０のバージョンが管理される。例えば、calk.jsのバージョンだけが変わった場合（calk.jsだけが更新され、他のファイルに変更がない場合）、calk.jsのバージョンによってプログラム２０のバージョンが更新されていく。図では以下のようになっている。
calk.js  Ver1：プログラムのバージョン  0.1.0.0
calk.js  Ver2：プログラムのバージョン  0.1.0.1
calk.js  VerX：プログラムのバージョン  0.2.0.5
プログラム２０のバージョンは、例えばビルド時に開発者がビルドツール５１１に対し設定するようになっている。プログラム２０のバージョンは、開発者が各ソースファイルのバージョンと共に記録するなどして管理することもできるが、専用のバージョン管理システムが利用されることが多い。バージョン管理システムとしては、例えば、フリーウェアのＣＶＳ（Concurrent Versions System）、ＳＶＮ（Subversion）、Ｇｉｔ等や、商用のVisualSourceSafe（登録商標）等が知られている。ＳＶＮの場合、プログラム２０のバージョンは、例えば以下のようにして付与される。
【００６７】
ｓ１）開発者は、バージョン管理システムのコマンド（import）を使用して、ソースファイルがツリー状に登録されているディレクトリ構造をリポジトリに登録する。リポジトリは、各資源（ソースファイル等）の格納場所である。この時、バージョン管理システムはプロジェクトに初期のバージョンとしてリビジョン１を与える。
【００６８】
ｓ２）開発者が、ソースファイルの1つ以上を編集する場合がある。開発者が、編集後のソースファイルの組み合わせを記録しておきたいと考えると、開発者は、バージョン管理システムのコマンド（commit）を使用して、編集結果をリポジトリに反映させる。バージョン管理システムはプロジェクトのリビジョンを増やして２にする。また、ソースファイルに新しいバージョンを付与する。
【００６９】
ｓ３）開発者が、各ソースファイルをビルドすることでプロジェクトからプログラム２０を作成する場合、バージョン管理システムのコマンド（copy）を使用して、タグ名を与える。タグ名を与えることで、各ソースファイルのその時のバージョン又はバージョン違いのソースファイルそのものがタグ名に関連付けてバージョン管理システムにより記憶される。一般には、「タグ名＝プログラム２０のバージョン」のように付与される。
【００７０】
タグ名を付与することで、プログラム２０のバージョンが分かれば、バージョン管理システムはビルドに用いられた各ソースファイルを一意に特定できる。
【００７１】
以降は、タグ名を付与した時からディレクトリ構造とソースファイルの内容を変えないようにして（新規の変更を加えないようにして）、開発者の操作により、ビルドツール５１１がビルドを行う。ビルドの実行時、開発者は、タグ名をプログラム２０のバージョンとして指定する。
【００７２】
後に、プログラム２０のバージョンに対応したソースファイルを取り出すには、バージョン管理システムに対し、開発者がタグ名を指定して、ソースファイルを特定させる。
【００７３】
なお、ビルドとバージョン管理が行えるＩＤＥもあるので、必ずしもビルドツール５１１とバージョン管理システムを別に用意する必要はない。
【００７４】
図１１は、ビルドツール５１１が生成するバージョン管理テーブルの一例を示す。ビルドツール５１１は、各ソースファイルのバージョン又はタイムスタンプ等を取得し、開発者が設定したプログラム２０のバージョンに対応づけて登録する。したがって、プログラム２０のバージョンが検出されれば、バージョン管理テーブルを参照することで、そのバージョンのプログラム２０を構成する各ファイルのバージョンが特定される。バージョン管理テーブルは開発区で管理される。
【００７５】
なお、図１０のソースファイルは、各ソースファイルの種類（例えば記述言語）が同じではないが、ビルドツール５１１が、単一の種類（例えば、C＋＋言語で記述されたファイルのみ）のファイルだけをビルドする場合もある。この場合、ビルドツール５１１はコンパイルとリンクのみを行う。このような一部のみの処理をビルドと呼ぶか、例えばコンパイルと呼ぶかは呼称だけの相違に過ぎず、ソースファイルが単一の種類しかなくても、プログラム実行機器は同様に行番号を表示することができる。
【００７６】
〔エラーコード〕
図１２はエラーコードの一例を示す図である。図１２ではエラーコード全体で１０桁としている。左から桁番号を付して説明する。エラーコードの上位２桁は、プログラム２０のバージョンの下２桁が入っている。例えば、プログラム２０のバージョンが0.2.0.5 であれば"０５" となる。下２桁だけとしているのは、エラーコードが長くなりすぎてユーザがサポートセンターに通知する際に間違えることを抑制するためである。ちなみに、エラーコードに"−"（ハイフン）が入っているのも、エラーコードを見やすくするためであり、ハイフン自体に意味はない。
【００７７】
バージョンの付け方のルールにもよるが、開発者が１０進数で１つずつバージョンをインクリメントする場合、下２桁だけで１００通りのバージョンを識別できる。したがって、バージョンの下２桁だけで、エラーコードを解析する上では十分な容量である。
【００７８】
エラーコードの第３−４桁の２文字は、エラーメッセージを出力したソースファイルのファイルコードである。ファイルコードは、図９にて説明したようにソースファイルのファイル名を識別する重複しない１６進数である。１６進で２桁あれば、２５５個のファイルを識別することができる。大規模なプログラム２０ではファイルコードが不足するが、一般的な規模のプログラム２０では十分である。また、ファイルコードが不足する場合は、５桁目のハイフンを利用するなどして、桁数を増やすことで対応する。なお、ファイル名をファイルコード化して表示するのは、エラーコードの長さをできるだけ短くするためだけでなく、ファイル名からプログラム２０の機能などの情報がユーザ等に把握されることを防ぐためである。
【００７９】
第６−８桁の３文字は、エラーメッセージを出力したソースファイルの行番号を１６進で示す。１６進数で３桁の場合、最大で４０９６行を表現することができる。１つのソースファイルのコード量が大きい場合には不足するが、一般的には不足することは多くない。また４０９６行では不足する場合、９桁目のハイフンを利用するなどして桁数を増やすことで対応する。行番号を１６進数で表示するのはエラーコードの長さを短くするためである。
【００８０】
第１０桁の１文字は、任意の1文字である。ソースファイルの開発者が、例えば、エラー原因の解析に有効な情報をソースファイルの作成時に記述しておくために利用する。開発者にとっては、任意の1文字によりさらにエラー原因を解析しやすくなる。
【００８１】
〔ソースファイル例〕
図１３は、ソースファイルの記述例を説明する図の一例である。図のソースファイルには１つずつ大きくなる整数の行番号が付されている。実際のソースファイル自体には行番号が含まれないが、ＩＤＥやエディターは開発者を支援するため一行目から連番を付して表示する。
【００８２】
図１３では、エラーメッセージの表示に「printErrorDialog」という関数が使用されている（１１，２８，１０５行目）。この関数がプログラム実行機器により実行されると、プログラム実行機器は図２のようなフォーマット（記述１〜３を有し、OKボタンが１つある）のエラーメッセージを表示する。
【００８３】
この関数は引数を３つ取る。
printErrorDialog（errorTitle1,errorMessage1,createCode(_reason);
１番目の引数のerrorTitle1は図２の記述１を指定し、２番目の引数のerrorMessage1は記述２を指定する。errorTitle1、errorMessage1には不図示の行で文字列が設定されており、文字列はＲＡＭ２０３，１０３、ＨＤ２０４、フラッシュメモリ１０４の所定のアドレスに記憶されている。プログラム実行機器は、この関数を実行すると、errorTitle1にて紐付けられたアドレスの文字列、及び、errorMessage1にて紐付けられたアドレスの文字列をＲＡＭ２０３，１０３、ＨＤ２０４、フラッシュメモリ１０４から読み出す。
【００８４】
「printErrorDialog」関数の３つ目の引数createCode()が、記述３に対応し、エラーコードとの置き換え対象となる。createCode()は、エラーコードを作るための関数であり引数を１つ取る。printErrorDialogの実行時には、文字列になっているのでcreateCode()は関数として機能しない。したがって、関数でなく変数とエラーコードを置き換えてもよい。createCode()関数は、従来のエラーメッセージにおけるエラーコードを表示する関数なので、この関数とエラーコードを置き換えれば、開発者は元のソースファイルを活用して本実施例のエラーコードを表示するようにソースコードを変更できる。
【００８５】
コード置き換え部１４はcreateCode（）をプログラム２０のバージョン、ファイルコード及び行番号に置き換え、createCode（）の引数をエラーコードの任意の一文字に置き換える。任意の一文字は、１１行目と２８行目のcreateCode（）では変数として与えられ、１０５行目では文字定数"２"として与えられている。３行目に記述があるように「_reason＝'0'」と記述されているので、１１行目と２８行目のcreateCode（）を置き換えると、任意の１文字は"０"となる。これに対し、１０５行目のcreateCode（）を置き換えると、任意の１文字は"２"となる。任意の一文字が何を意味するかはソースファイルの開発者が一文字とその内容を対応づけたテーブルなどで管理している。
【００８６】
図１３では、１１，２８，１０５行目に合計３つの「printErrorDialog」関数が記述されている。エラーの発生場所や発生状況によって（すなわち、直前の処理に応じて）、開発者は引数を変えるので、記述１や記述２の内容も変わる。当然ながら、１１行目と２８行目のように、複数の「printErrorDialog」関数が同じ引数を有することもある。
【００８７】
このように記述１と２だけでは、同じメッセージを使っている箇所が複数あると、開発者でもどこから出力されたエラーメッセージか区別が難しいか、又は、まったく区別できない。しかしながら、本実施形態のようにエラーコードをソースコードに埋め込んでおくことで、エラーメッセージの記述１，２は同じでも、どのソースファイルのどの箇所（行）から出力されたエラーメッセージかを一意に判別することができる。
【００８８】
例えば、エラーコードに２８行という行番号が含まれていれば、開発者は、出力されたエラーメッセージは、ソースファイルの２８行目の「printErrorDialog」関数により表示されたことを特定できる。したがって、開発者はソースファイルの２８行目の近くにエラー発生の原因となった処理があったことを特定できる。図１３の例ではエラーが発生した処理はエラーコードに含まれる行番号の数行前にある。
【００８９】
「printErrorDialog」関数の直前には例えばif文によるエラー発生の判定処理が記述されている。エラー発生の判定処理は、開発者が判定処理の直前の処理において発生しうるエラーを想定し、そのようなエラーが生じたか否かを検出するために最適な判定条件が記述されている。例えば、１１行目のエラーメッセージが表示されるのは、変数operationにfailedという値が設定された場合であり、２８行目のエラーメッセージが表示されるのは、変数errorOccurredに"０"以外の値が設定されていた場合であり、１０５行目のエラーメッセージが表示されるのは、変数getValueにnull（何も設定されていない）という値が設定された場合である。したがって、処理に特有のエラーを確実に検出することができる。変数operation、変数errorOccurred、変数getValueは実際にはＲＡＭ２０３，１０３、ＨＤ２０４、フラッシュメモリ１０４の所定のアドレスに記憶されている。プログラム実行機器が変数名によりこのアドレスにアクセスすればエラーの発生を判定できる。
【００９０】
なお、if文によるエラー発生の判定は一例であり、例えばSwitch文によりエラー発生を判定してもよい。
【００９１】
図１４は、エラーコードに置き換えられた後のソースファイルの一例を示す図である。図１３と比較すると分かるように、
１１  行目のCreateCode（_Reason）が０５１１−００Ｂ−０
２８  行目のCreateCode（_Reason）が０５１１−０１Ｃ−０
１０５行目のCreateCode（'２'）が     ０５１１−０６９−２
にそれぞれ置き換えられている。
【００９２】
〔動作手順〕
図１５は、プログラム作成装置５００がエラーコードを生成する手順を示すフローチャート図の一例である。なお、この処理手順はコード置き換え部１４がコンパイル部１２の外にある場合を例示するが、コンパイル部１２のコード置き換え部１４が処理する場合も実行のタイミングが異なるだけで処理内容は同じである。
【００９３】
開発者は、各ファイルをビルドするに当たり、ビルド後のプログラム２０のバージョンをプログラム作成装置５００に設定する（Ｓ１０）。プログラム作成装置５００のバージョン受付部１３はバージョンの入力を受け付ける。
【００９４】
次に、ファイルコード生成部１１は、ファイルコードテーブル２１を作成する（Ｓ２０）。ビルド対象のソースファイルはビルドファイル２２から特定することができる。上図の例では、filesディレクトリの下位のファイルが相当する。
【００９５】
次に、コード置き換え部１４は、ファイルコードテーブル２１の作成対象となったソースファイルを順番に読み出す（Ｓ３０）。これにより、現在着目しているソースファイルのファイルコードが特定される。
【００９６】
コード置き換え部１４は、新たなソースファイルを読み出すと、１行目から順番に命令を読み出す（Ｓ４０）。１つの命令が２行以上にわたって記述されていても、１行ずつ読み出す。すなわち、命令の書式や文法には影響されずに読み出せばよいが、１〜２行のずれはエラー原因の特定の大きな障害とはならないので、行を跨いた１つの命令の全体を読み出してもよい。
【００９７】
次に、コード置き換え部１４は、読み出した行にcreateCode()関数が含まれているか否かを判定する（Ｓ５０）。createCode()関数の引数はどのような値でもよいし、なくてもよい。
【００９８】
createCode()関数が含まれていない場合（Ｓ５０のＮｏ）、処理はステップＳ４０に戻る。
【００９９】
createCode()関数が含まれている場合（Ｓ５０のＹｅｓ）、コード置き換え部１４は、エラーコードを作成する（Ｓ６０）。エラーコードの作成には、プログラム２０のバージョン、ファイルコード及び行番号を用いる。上述した任意の一文字は置き換えても置き換えなくてもよい。コード置き換え部１４は、開発者がプログラム作成装置５００に入力しているプログラム２０のバージョンを取得し、下位の２桁を抽出する。次に、現在着目しているファイルのファイル名に対応づけられたファイルコードをファイルコードテーブル２１から読み出す。次に、現在読み出している行をそのまま行番号として、１６進数に変換する。また、createCode()関数の引数があれば任意の一文字を特定する。なお、エラーが生じた処理は数行前であるので、現在読み出している行から数行を引いた値を行番号として１６進数に変換してもよい。そしてこれらの文字列とハイフンを予め定められた桁に配置することで、エラーコードを作成する。
【０１００】
コード置き換え部１４は、作成したエラーコードでcreateCode()関数を置き換える（Ｓ７０）。
【０１０１】
そして、コード置き換え部１４は、１つのソースファイルの最終行まで到達したか否かを判定する（Ｓ８０）。最終行まで到達していない場合（Ｓ８０のＮｏ）、処理はステップＳ４０に戻る。最終行まで到達した場合（Ｓ８０のＹｅｓ）、処理はステップＳ９０に進む。
【０１０２】
最終行まで到達すると、コード置き換え部１４は、ビルド対象の全てのファイル（ファイルコードテーブル２１の全てのソースファイル）について処理したか否かを判定する（Ｓ９０）。
【０１０３】
ビルド対象の全てのソースファイルを処理するまでは（Ｓ９０のＮｏ）、ステップＳ３０からの処理を繰り返す。ビルド対象の全てのファイルを処理した場合（Ｓ９０のＹｅｓ）、ビルド部はファイルを結合して圧縮する（Ｓ１００）。より具体的には、コンパイルするソースファイルに対してはコンパイル部１２がコンパイルし、リンケージ部１５がリンクし特定のディレクトリに保存する。また、ビルドツール５１１はコピーするだけでよいソースファイルを特定のディレクトリにコピーする。最終的に圧縮部１６がビルドファイルで指定されるディレクトリ以下の複数のファイルを結合して圧縮する。こうすることで、実行ファイルであるプログラム２０が作成される。
【０１０４】
作成されたプログラム２０は、記憶媒体又はネットワークを経由してプログラム実行機器にインストールされる。コミュニケーション端末３００の場合は、電源オンによりサーバ４００からダウンロードされる。
【０１０５】
図１６は、プログラム実行機器がプログラム２０を実行した際にエラーメッセージを表示する手順を示すフローチャート図の一例である。
【０１０６】
プログラム実行機器は、分岐やサブルーチンなどの呼び出しがなければプログラム２０をアドレス順に実行する（Ｓ１１０）。
【０１０７】
そして、if文などのエラー検出部１８はエラーが検出されたか否かを判定する（Ｓ１２０）。エラー検出部１８がエラーを検出した場合（Ｓ１２０のＹｅｓ）、エラーメッセージ表示部１９がエラーメッセージを作成する（Ｓ１３０）。具体的には、PrintErrorDialog関数の１つめの引数であるerrorTitle1に対応づけて記憶されている文字列をＲＡＭ２０３，１０３、ＨＤ２０４、フラッシュメモリ１０４から読み出し、２つめの引数であるerrorMessage1に対応づけて記憶されている文字列をＲＡＭ２０３，１０３、ＨＤ２０４、フラッシュメモリ１０４から読み出す。また、３つの引数である例えば「０５１１−００Ｂ−０」という文字列をＲＡＭ２０３，１０３、ＨＤ２０４、フラッシュメモリ１０４から読み出す。各記述１〜３の配置位置は、開発者がPrintErrorDialog関数の属性としてソースファイルの作成時に指定している。
【０１０８】
エラーメッセージ表示部１９はエラーメッセージをディスプレイ２０８，１２０等に表示する（Ｓ１４０）。これにより図２に示したようにエラーコードにおいてエラーが発生した行番号が表示されるので、ユーザはエラーコードをサポートセンターに通知することができる。ユーザがＯＫボタンを押下すると、プログラム実行機器はPrintErrorDialog関数の次の命令から処理を再開する。
【０１０９】
サポートセンターや開発区はバージョン管理テーブルを参照して、エラーコードに含まれるプログラム２０のバージョンに対応づけられた各ファイルのバージョンを特定する。次に、サポートセンターや開発区はファイルコードテーブル２１を参照して、エラーコードに含まれるファイルコードに対応づけられたファイル名を特定する。これにより、エラーが発生したソースファイルとそのバージョンを特定できる。サポートセンターや開発区は、エラーコードに含まれる行番号によりソースファイルにおけるエラーの発生箇所を特定する。したがって、エラーの発生した命令をピンポイントに特定できたことになる。
【実施例２】
【０１１０】
本実施例では、実施例１とは別のエラーコードを表示するプログラム実行機器及びプログラム作成装置について説明する。
【０１１１】
〔エラーコード〕
図１７は、本実施例のエラーコードの一例を示す図である。図１７のエラーコードは、全体で１２桁としている。左から桁番号を付して説明する。本実施例では、エラーコードの１−４桁の４文字にエラー番号が付されていることに特徴がある。
【０１１２】
エラー番号は、エラー内容を一意に（又はいくつかのエラーをまとめて）識別する識別情報である。実施例１のエラーコードは、開発者がソースコードを参照してエラーコードを解析することが前提であった。ユーザは、サポートセンターにメッセージとエラーコードを通知するが、メッセージやエラーコードが長い場合や似たようなメッセージ又はエラーコードが多数ある場合、正しく通知できないおそれがある。
【０１１３】
エラーコードの上位４桁はこの課題を解決するためのものである。また、プログラム実行機器のメーカがエラー番号に対応したエラー内容及び解決策が記述されたマニュアルをユーザサイドに配布したり、エラー番号からエラー内容及び解決策を表示するＷｅｂページを用意しておくことが可能になる。ユーザがエラーコードの上位４桁に基づきマニュアル等を参照することで、サポートセンターに連絡することなくプログラムの不具合の要因を解消する機会を得られる可能性を増やすことができる。
【０１１４】
エラーコードの５桁目のハイフンは、エラー番号とその他を区分するための記号である。必ずしもハイフンである必要はなく"＿""  "（スペース）、"：""／"等でもよい。また、ハイフン等がなければエラー番号を記述できないわけではない。
【０１１５】
６，７桁の２文字は、図１２のエラーコードの１，２桁と同じもの（プログラム２０のバージョンの下２桁）であり、８，９桁の２文字は、図１２のエラーコードの３，４桁と同じもの（エラーメッセージを出力したソースファイルのファイルコード）である。
【０１１６】
図１２のエラーコードの５桁目のハイフンは、図１７のエラーコードでは省略されている。これは、図１７のエラーコードではハイフンを５桁目のハイフンの１つとすることで、エラー番号とそれ以外のコードを明確化するためである。エラーコード以外のコード（６−１２桁）は実施例１と同様に開発区が使用する。また、ハイフンを省くことでエラーコードが長くなりすぎることを抑制できる。
【０１１７】
１０−１２桁の３文字は、図１２のエラーコードの６−８桁と同じもの（ソースファイルの行番号）である。
【０１１８】
なお、図１２のエラーコードの９，１０桁は削除されている。これは、エラーコードが長くなることを防ぐためである。ただし、削除せずに図１７のエラーコードの１３，１４桁に追加してもよい。
【０１１９】
また、エラー番号は上位１−４桁に記述されているが、エラー番号の位置は上位１−４桁に限られない。エラー番号以外の、プログラム２０のバージョン及びソースファイルの行番号の記述位置も図１７の例に限定されない。また、エラー番号の桁数は４桁に限らず、３桁以下、又は、５桁以上としてもよい。
【０１２０】
〔ソースファイル例〕
図１８は、ソースファイルの記述例を説明する図の一例である。図１８において図１３との共通部はその主要部を説明する。実施例１と同様に「printErrorDialog」という関数がエラーメッセージを表示する関数である。しかし、本実施例のprintErrorDialog関数は２つの引数を取る。
【０１２１】
１番目の引数のerror1（又はerror2）には、エラー番号テーブルにより、予めエラー番号と紐づけられている。また、１番目の引数がエラー番号に対応づけられたため、実施例１で１番目の引数が対応づけられていた記述１及び２番目の引数が対応づけられていた記述２は１番目の引数に紐付く形でエラー番号テーブルに登録されている。このため、実施例１の２番目の引数が省略される。
【０１２２】
３番目の引数createCode()は、エラーコードとの置き換え対象となる。なお、本実施例では、エラーコードに任意の１文字が含まれないので、createCode()の引数は使用されない。
【０１２３】
図１９は、１番目の引数とエラー番号、記述１及び記述２が対応づけられたエラー番号テーブル３１の一例を示す図である。エラー番号テーブル３１は、プログラム作成装置５００の例えばＨＤＤ５０８、及び、プログラム実行機器のＨＤ２０４、ＳＳＤ１０５などに記憶されている。エラー番号テーブル３１は「errorName」「errorNumber」「errorTitle」「errorMessage」の各フィールドを有する。
「errorName」：「printErrorDialog」関数の１番目の引数となりうる値が登録されている
「errorNumber」：エラーコードにおけるエラー番号が登録されている
「errorTitle」：エラー名（エラーの簡単な内容）が登録されている
「errorMessage」：エラーメッセージ（エラーの具体的な内容）が登録されている
このようにソースファイルのprintErrorDialog関数の１番目の引数が「errorName」として登録されている。なお、エラーメッセージの記述１には「errorTitle」が、記述２には「errorMessage」がそれぞれ表示される。
【０１２４】
コード置き換え部１４は、１番目の引数に基づきエラー番号テーブル３１を参照し、エラー番号と記述１、２を読み出す。また、createCode（）を、エラー番号、プログラム２０のバージョン、ファイルコード及び行番号に置き換える。これにより、createCode（）はエラーコードに置き換えられる。
【０１２５】
図２０は、エラーコードに置き換えられた後のソースファイルの一例を示す図である。図１８と比較すると分かるように、
１１  行目のCreateCode（）が"０００１−０５１１００Ｂ"
２８  行目のCreateCode（）が"０００１−０５１１０１Ｃ"
１０５行目のCreateCode（）が"０００２−０５１１０６９"
にそれぞれ置き換えられている。
【０１２６】
上述したように、エラーコードの１−４桁がエラー番号に置き換えられている。
【０１２７】
〔動作手順〕
図２１は、プログラム作成装置５００がエラーコードを生成する手順を示すフローチャート図の一例である。図２１の手順は、ステップＳ５５が追加されている点で図１５と異なっている。
【０１２８】
すなわち、ソースファイルから読み出した行にcreateCode()関数が含まれている場合（Ｓ５０のＹｅｓ）、コード置き換え部１４は、エラー番号テーブル３１を参照してエラー番号を特定する（Ｓ５５）。すなわち、コード置き換え部１４はcreateCode()関数を第２引数とするprintErrorDialog関数の１番目の引数（図１８ではerror1又はerror２）を読み出す。
【０１２９】
そして、エラー番号テーブル３１において１番目の引数が「errorName」に登録されているレコードの「errorNumber」を読み出す。これがエラー番号になる。また、コード置き換え部１４は、図１５の手順と同様に、プログラム２０のバージョン、ファイルコード及び行番号を特定する。これにより、図１７のエラーコードを生成できる。
【０１３０】
コード置き換え部１４は、作成したエラーコードでcreateCode()関数を置き換える（Ｓ７０）。以降の処理は実施例１と同様である。
【０１３１】
図２２は、プログラム実行機器がプログラム２０を実行した際にエラーメッセージを表示する手順を示すフローチャート図の一例である。
【０１３２】
プログラム実行機器は、分岐やサブルーチンなどの呼び出しがなければプログラム２０をアドレス順に実行する（Ｓ１１０）。
【０１３３】
そして、if文などのエラー検出部１８はエラーが検出されたか否かを判定する（Ｓ１２０）。エラー検出部１８がエラーを検出した場合（Ｓ１２０のＹｅｓ）、エラーメッセージ表示部１９が、エラー番号テーブル３１において、PrintErrorDialog関数の１番目の引数が「errorName」に登録されているレコードの「errorTitle」「errorMessage」を読み出す（Ｓ１２５）。
【０１３４】
次いで、エラーメッセージ表示部１９がエラーメッセージを作成する（Ｓ１３０）。具体的には、２番目の引数である例えば「０００１−０５１１００Ｂ」という文字列をＲＡＭ２０３，１０３、ＨＤ２０４、フラッシュメモリ１０４から読み出す。これが記述３であり、「errorTitle」を記述１、「errorMessage」を記述２として、エラーメッセージを作成する。各記述１〜３の配置位置は、開発者がPrintErrorDialog関数の属性としてソースファイルの作成時に指定している。
【０１３５】
エラーメッセージ表示部１９はエラーメッセージをディスプレイ２０８，１２０等に表示する（Ｓ１４０）。これにより、エラー番号が含まれるエラーコードがエラーメッセージの一部として表示される。
【０１３６】
したがって、ユーザはエラーコードをサポートセンターに通知することができる。また、マニュアルやＷｅｂページからエラー番号に基づきエラー内容や解決策を調べることが可能になる。ユーザがＯＫボタンを押下すると、プログラム実行機器はPrintErrorDialog関数の次の命令から処理を再開する。
【０１３７】
このように、本実施例のプログラム実行機器及びプログラム作成装置によれば、実施例１の効果に加えて、ユーザがエラー内容や解決策を調べることを可能にできる。
【実施例３】
【０１３８】
本実施例では、エラーメッセージをサポートセンターに通知するプログラム実行機器について説明する。
【０１３９】
図２３は、エラー通知システム７００の構成図の一例を示す。ネットワークを介して複数のプログラム実行機器が、サポートセンターの保守用の端末６００と通信可能に接続されている。サポートセンターの保守用の端末６００のハードウェア構成は情報処理装置１００と同じであるため図示は省略する。
【０１４０】
プログラム実行機器にはサポートセンターの保守用の端末６００のＩＰアドレスが予め登録されている。ＩＰアドレスでなくＵＲＬにてサポートセンターの保守用の端末６００を特定してもよい。また、プログラム実行機器には、識別情報が予め登録されている。この識別情報は、プログラム実行機器を一意に特定するための情報であり、数値、アルファベット若しくは記号をそれぞれ単独で組み合わせたもの、又は、これらの任意の１つ以上を組み合わせたものである。
【０１４１】
プログラム実行機器は、エラーメッセージをサポートセンターに通知する際、識別情報をサポートセンターに送信する。
【０１４２】
サポートセンターの保守用の端末６００は、識別情報に対応づけられたユーザ情報を有している。ユーザ情報は、企業名、部署名、住所及び連絡先などの情報である。サポートセンターは識別情報によりプログラム実行機器のユーザを特定し、アフターサービスなどを提供することができる。
【０１４３】
なお、ユーザによっては、識別情報からユーザ情報が特定されることを好まないユーザも存在する。よって、ユーザは、プログラム実行機器による識別情報の自動送信の禁止を、プログラム実行機器に設定可能になっている。または、識別情報を自動的に送信することは許可しても、ユーザがユーザ情報の登録を禁止するようにサポートセンターに依頼することが可能になっている。
【０１４４】
また、サポートセンターの保守用の端末６００は、エラー番号テーブル３１とエラー詳細情報を記憶している。エラー番号テーブル３１は、実施例２と同じものである。エラー詳細情報は、エラー番号に対応づけてエラーの詳細な内容を有している。すなわち、エラー詳細情報は、エラー番号テーブル３１の「errorTitle」「errorMessage」よりもさらに詳細な情報である。
【０１４５】
サポートセンターの保守用の端末６００がエラー番号テーブル３１を有することで、保守用の端末６００は、プログラム実行機器から受信したエラー番号によりエラーメッセージを端末６００のディスプレイに表示することができる。また、保守用の端末６００は、プログラム実行機器から受信したエラー番号によりエラー詳細情報を端末６００のディスプレイに表示することができる。また、サポートセンターの保守用の端末６００はプログラム実行機器の識別情報又はプログラム実行機器のユーザ情報を表示することもできる。
【０１４６】
したがって、プログラム実行機器のユーザが、エラーコードをサポートセンターに通知しなくてもサポートセンターにおいて、エラーメッセージだけでなく、エラーが発生したプログラム実行機器（又はユーザ）を特定でき、さらに、エラーが発生したプログラムコードの命令をピンポイントで特定できる。
【０１４７】
図２４は、プログラム実行機器とサポートセンターの保守用の端末６００の動作手順を示すフローチャート図の一例である。
【０１４８】
プログラム実行機器がプログラムを実行した際、エラーが発生する（Ｓ２１０）。実施例２で説明したように、プログラム実行機器はエラーメッセージを作成する。本実施例のプログラム実行機器は、エラーメッセージの全体又はエラーメッセージのうち少なくともエラーコード、及び、識別情報をサポートセンターの保守用の端末６００に送信する（Ｓ２２０）。
【０１４９】
サポートセンターの保守用の端末６００は、識別情報とエラーコードを受信する（Ｓ２３０）。
【０１５０】
サポートセンターの保守用の端末６００は、エラーコードから１−４桁のエラー番号を取り出す（Ｓ２４０）。
【０１５１】
サポートセンターの保守用の端末６００は、エラー番号に基づきエラー番号テーブル３１を参照しエラーメッセージを作成し、また、エラー番号に基づきエラー詳細情報を読み出す（Ｓ２５０）。
【０１５２】
サポートセンターの保守用の端末６００は、識別情報・エラーメッセージ・エラー詳細情報をディスプレイに表示する（Ｓ２６０）。
【０１５３】
以上のように、本実施例のエラー通知システム７００は、プログラム実行機器が識別情報とエラーコードを送信し、サポートセンターの保守用の端末６００が識別情報を表示することでエラーが発生したプログラム実行機器を特定できる。また、エラーメッセージを表示するので、エラーが発生したプログラムコードの命令をピンポイントで特定できる。また、エラー詳細情報を表示するので、サポートセンターがエラー内容を特定し解決策を把握することができる。
【符号の説明】
【０１５４】
１１      ファイルコード生成部
１２      コンパイル部
１３      バージョン受付部
１４      コード置き換え部
１５      リンケージ部
１６      圧縮部
１７      プログラムＤＬ部
１８      エラー検出部
１９      エラーメッセージ表示部
２０      プログラム
３１      エラー番号テーブル
１００    情報処理装置
２００    ＭＦＰ
３００    コミュニケーション端末
３０１    コミュニケーションシステム
４００    サーバ
５００    プログラム作成装置
６００    サポートセンターの保守用の端末
７００    エラー通知システム
【先行技術文献】
【特許文献】
【０１５５】
【特許文献１】特開２００６−２０１９２７号公報
【図１】
2013041571.tif 000003
【図２】
2013041571.tif 000004
【図３】
2013041571.tif 000005
【図４】
2013041571.tif 000006
【図５】
2013041571.tif 000007
【図６】
2013041571.tif 000008
【図７】
2013041571.tif 000009
【図８】
2013041571.tif 000010
【図９】
2013041571.tif 000011
【図１０】
2013041571.tif 000012
【図１１】
2013041571.tif 000013
【図１２】
2013041571.tif 000014
【図１３】
2013041571.tif 000015
【図１４】
2013041571.tif 000016
【図１５】
2013041571.tif 000017
【図１６】
2013041571.tif 000018
【図１７】
2013041571.tif 000019
【図１８】
2013041571.tif 000020
【図１９】
2013041571.tif 000021
【図２０】
2013041571.tif 000022
【図２１】
2013041571.tif 000023
【図２２】
2013041571.tif 000024
【図２３】
2013041571.tif 000025
【図２４】
2013041571.tif 000026