JP6079868B2 - エラー分析方法、情報処理装置およびエラー分析プログラム - Google Patents
エラー分析方法、情報処理装置およびエラー分析プログラム Download PDFInfo
- Publication number
- JP6079868B2 JP6079868B2 JP2015506440A JP2015506440A JP6079868B2 JP 6079868 B2 JP6079868 B2 JP 6079868B2 JP 2015506440 A JP2015506440 A JP 2015506440A JP 2015506440 A JP2015506440 A JP 2015506440A JP 6079868 B2 JP6079868 B2 JP 6079868B2
- Authority
- JP
- Japan
- Prior art keywords
- program
- instruction
- register
- error
- registers
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/366—Software debugging using diagnostics
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Description
本発明はエラー分析方法、情報処理装置およびエラー分析プログラムに関する。
コンピュータがプログラムを実行しているとき、プログラムの不備によって意図しないエラーが発生することがある。エラーの例としては、存在しないメモリ領域を示すアドレスやアクセスが許可されていない保護されたメモリ領域のアドレスを指定してメモリにアクセスしようとしたときに発生するメモリアクセスエラーが挙げられる。エラーが検出されると、例えば、プロセッサに対して割り込み信号が入力され、現在実行中の処理が中断されてエラーの種類に応じた復旧処理(例外処理と言うことがある)が行われる。
複数のプログラムモジュールが実行されるコンピュータでは、復旧処理の中で、エラーの原因となった不備のあるプログラムモジュールを強制的に停止させて実行されないようにすることが考えられる。しかし、エラーが検出された時点で実行されていたプログラムモジュールが、エラーの原因を作った不備のあるものとは限らない。エラー原因の判定を誤ると、不備のあるプログラムモジュールが停止されずに不備のないプログラムモジュールが停止され、コンピュータの動作が意図せず不安定になるおそれがある。そこで、エラーの原因となったプログラムモジュールを分析する方法が提案されている。
例えば、現在実行しているプログラムがユーザプログラムとシステムプログラムとの間で遷移するコンピュータにおいて、システム制御管理方法が提案されている。このシステム制御管理方法では、ユーザプログラムからシステムプログラムへの遷移、および、システムプログラムからユーザプログラムへの遷移が発生したときに、プロセスの属性情報を時間情報と対応付けてトレース用バッファに記憶する。プログラム実行中にエラーが発生すると、トレース用バッファに記憶された属性情報を時系列に辿ることで、エラー原因がユーザプログラムにあるかシステムプログラムにあるかを判定する。
なお、プログラム開発におけるデバッグ支援に関して、次のようなものが提案されている。例えば、レジスタまたはメモリへの書き込み命令が実行される直前にトレースデータを出力するようなデバッグ用プログラムを生成し、ユーザによるデバッグ作業を容易にするデバッグシステムが提案されている。このデバッグシステムは、デバッグ用プログラムが異常停止したとき、トレースデータに基づいて命令を1つずつ逆順に実行していく。
また、メモリ上のスタック領域へのアクセスが適切であるか確認できるようにするトレース装置が提案されている。このトレース装置は、プログラムの中から、スタック領域内の位置を指し示すスタックポインタを変更する命令を検出し、当該命令が実行されたときにトレースデータを出力する。また、使用するメモリの記憶領域を変更しながらプログラムを複数回テストし、参照アドレスやメモリアクセス回数や命令の実行順序が全てのテストを通じて等しいかを確認するデバッグ方法が提案されている。
しかしながら、上記の特許文献1に記載されたシステム制御管理方法のように、プログラムモジュールの間の呼び出し関係をトレースするだけの方法では、エラーの原因となったプログラムモジュールの判定精度に改善の余地がある。例えば、あるプログラムモジュールにおいて、受け取った値(例えば、アドレス)が不適切であるために実行中にエラーが発生する場合が考えられる。この場合に、呼び出し関係をトレースするだけでは、エラーが検出されたプログラムモジュールと呼び出し関係にある他のプログラムモジュールの中から、不適切な値を用意したものを精度よく判定することは容易でなかった。また、呼び出し関係にあるプログラムモジュールの中に不適切な値を用意したものがあるとは限らず、エラーの原因となったプログラムモジュールを発見できない可能性もあった。
1つの側面では、本発明は、エラーの原因となったプログラムモジュールの判定精度を向上させることができるエラー分析方法、情報処理装置およびエラー分析プログラムを提供することを目的とする。
1つの態様では、複数のプログラムモジュールを実行するコンピュータが行うエラー分析方法が提供される。エラー分析方法では、複数のプログラムモジュールが実行される間、コンピュータのプロセッサが備える複数のレジスタの少なくとも一部について、当該少なくとも一部のレジスタへの値の書き込みを検出し、検出した書き込みを示す履歴情報を記録する。複数のプログラムモジュールの中に含まれる一の命令でエラーが発生すると、少なくとも一部のレジスタのうち当該命令で参照されたレジスタを特定する。参照されたレジスタへの値の書き込みを示す履歴情報に基づいて、複数のプログラムモジュールのうちエラーの原因となったプログラムモジュールを判定する。
また、1つの態様では、複数のプログラムモジュールを実行する情報処理装置が提供される。情報処理装置は、複数のレジスタを備えるプロセッサと、複数のレジスタの少なくとも一部について、複数のプログラムモジュールが実行される間に行われた、当該少なくとも一部のレジスタへの値の書き込みを示す履歴情報を記憶する記憶部と、を有する。プロセッサは、複数のプログラムモジュールの中に含まれる一の命令でエラーが発生すると、少なくとも一部のレジスタのうち当該命令で参照されたレジスタを特定し、参照されたレジスタへの値の書き込みを示す履歴情報に基づいて、複数のプログラムモジュールのうちエラーの原因となったプログラムモジュールを判定する。
また、1つの態様では、複数のプログラムモジュールを実行するコンピュータに、以下の処理を実行させるエラー分析プログラムが提供される。コンピュータのプロセッサが備える複数のレジスタの少なくとも一部について、複数のプログラムモジュールが実行される間に行われた、当該少なくとも一部のレジスタへの値の書き込みを示す履歴情報を記録する。複数のプログラムモジュールの中に含まれる一の命令でエラーが発生すると、少なくとも一部のレジスタのうち当該命令で参照されたレジスタを特定する。参照されたレジスタへの値の書き込みを示す履歴情報に基づいて、複数のプログラムモジュールのうちエラーの原因となったプログラムモジュールを判定する。
1つの側面では、エラーの原因となったプログラムモジュールの判定精度が向上する。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の情報処理装置の例を示す図である。
[第1の実施の形態]
図1は、第1の実施の形態の情報処理装置の例を示す図である。
第1の実施の形態に係る情報処理装置10は、プログラムモジュール13−1〜13−4を含む複数のプログラムモジュールを実行する。情報処理装置10は、プロセッサ11および記憶部12を有する。プロセッサ11は、レジスタRa,Rb,Rcを含む複数のレジスタを備える。プロセッサ11は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)と呼ばれるものでもよい。プロセッサ11は、レジスタを用いてプログラムモジュール13−1〜13−4を実行する。記憶部12は、プログラムモジュール13−1〜13−4が実行されている間に生成される履歴情報14を記憶する。記憶部12は、RAM(Random Access Memory)などの揮発性メモリでもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性の記憶装置であってもよい。
プログラムモジュール13−1〜13−4は、プロセッサ11が実行可能な形式の命令の集合である。命令には、メモリからレジスタへのロード命令、レジスタからメモリへのストア命令、算術演算命令や論理演算命令などの演算命令、分岐命令などの制御命令が含まれ得る。プログラムモジュール13−1〜13−4は、オペレーティングシステム(OS:Operating System)プログラムでもよいし、OSプログラム以外のユーザプログラムでもよい。また、プログラムモジュール13−1〜13−4は、呼び出し関係によって直列に関連付けられていてもよいし、互いに呼び出し関係になくてもよい。
一例として、プログラムモジュール13−1〜13−4に次のような動作が定義されているとする。プログラムモジュール13−1により、メモリ上にメモリ領域#1が確保され、メモリ領域#1に値1が記憶される。プログラムモジュール13−2により、メモリ領域#1に記憶されている値1がレジスタRbに書き込まれる。プログラムモジュール13−2は、プログラムモジュール13−1から呼び出されるものでなくてもよい。
また、プログラムモジュール13−2からプログラムモジュール13−3が呼び出される。プログラムモジュール13−3により、メモリ領域#2に記憶された値2がレジスタRaに書き込まれ、メモリ領域#3に記憶された値3がレジスタRcに書き込まれる。また、プログラムモジュール13−3からプログラムモジュール13−4が呼び出される。プログラムモジュール13−4により、レジスタRbを参照した処理が行われる。
履歴情報14は、プログラムモジュール13−1〜13−4が実行される間に行われたレジスタRa,Rb,Rcへの値の書き込みを示す。例えば、プロセッサ11が、レジスタRa,Rb,Rcへの値の書き込みを検出し、履歴情報14を生成して記憶部12に格納する。プロセッサ11による書き込みの検出は、プロセッサ11が備えるエミュレータなどのハードウェアを用いて実現してもよいし、ソフトウェアを用いて実現してもよい。書き込みを検出するレジスタRa,Rb,Rcは、プロセッサ11が備える複数のレジスタのうち所定の性質を備えるものに限定してもよい。例えば、プロセッサ11がメモリにアクセスするときに参照するベースアドレスを記憶するレジスタに限定してもよい。
一例として、履歴情報14は、メモリ領域#1からレジスタRbに値1がロードされたことを示す情報を含む。この情報は、プログラムモジュール13−2が実行されたときに生成されて記録される。また、履歴情報14は、メモリ領域#2からレジスタRaに値2がロードされたことを示す情報、および、メモリ領域#3からレジスタRcに値3がロードされたことを示す情報を含む。この情報は、プログラムモジュール13−3が実行されたときに生成されて記録される。レジスタRa,Rb,Rcへの書き込みを示すこれらの情報は、好ましくは、実行順序が明確になるように記録される。
ここで、プログラムモジュール13−1〜13−4の中に含まれる一の命令を実行したときにエラーが発生したとする。例えば、プロセッサ11が一のレジスタの値に応じたメモリ領域にアクセスする命令を実行したときに、メモリアクセスエラーが発生した場合が考えられる。すると、プロセッサ11は、その命令で参照されたレジスタを特定し、記憶部12に記憶された履歴情報14の中から、当該参照されたレジスタへの値の書き込みを示す情報を検索する。そして、プロセッサ11は、検索された情報に基づいて、プログラムモジュール13−1〜13−4のうちエラーの原因となったものを判定する。
一例として、プログラムモジュール13−4に含まれるレジスタRbを参照する命令が実行されたときにエラーが発生したとする。すると、履歴情報14の中から、メモリ領域#1からレジスタRbに値1がロードされたことを示す情報が検索される。この値1が不適切であるために、レジスタRbを参照する命令でエラーが発生したと推定される。そこで、例えば、プロセッサ11は、OSがもつメモリ管理情報を参照して、メモリ領域#1を使用しているプログラムモジュール13−1を特定し、プログラムモジュール13−1がエラーの原因となったプログラムモジュールであると判定する。
ただし、プロセッサ11は、値1をレジスタRbに書き込んだプログラムモジュール13−2を、エラーの原因となったプログラムモジュールであると判定してもよい。その場合、履歴情報14には、レジスタRa,Rb,Rcに値を書き込む命令またはその命令を含むプログラムモジュールを識別するための情報が含まれることが好ましい。
第1の実施の形態によれば、プログラムモジュール13−1〜13−4が実行される間、レジスタRa,Rb,Rcへの値の書き込みが検出されて履歴情報14が記録される。そして、エラー原因を分析するとき、エラーが発生した命令で参照されているレジスタへの書き込みを示す情報が履歴情報14から検索される。これにより、レジスタに記憶された不適切な値を用意したプログラムモジュールを特定でき、エラーの原因となったプログラムモジュールの判定精度を向上させることができる。また、エラーが検出されたプログラムモジュールとエラーの原因となったプログラムモジュールとの間に呼び出し関係がないときであっても、エラー原因を特定できる可能性が高くなる。
[第2の実施の形態]
第2の実施の形態を説明する。第2の実施の形態に係る情報処理装置100は、OSプログラムおよび複数のユーザプログラムを実行する。情報処理装置100は、ユーザが操作する端末装置(クライアントコンピュータと呼んでもよい)でもよいし、端末装置からアクセスされるサーバ装置(サーバコンピュータと呼んでもよい)であってもよい。
第2の実施の形態を説明する。第2の実施の形態に係る情報処理装置100は、OSプログラムおよび複数のユーザプログラムを実行する。情報処理装置100は、ユーザが操作する端末装置(クライアントコンピュータと呼んでもよい)でもよいし、端末装置からアクセスされるサーバ装置(サーバコンピュータと呼んでもよい)であってもよい。
この情報処理装置100は、プログラムの実行中にエラーが発生すると、エラーの原因を分析する。エラーの原因が一のユーザプログラムにあると判定した場合、情報処理装置100はそのユーザプログラムを強制的に停止させる。この場合、他のユーザプログラムやOSプログラムの実行は継続し得る。一方、エラーの原因がOSプログラムにあると判定した場合、情報処理装置100はOSを停止または再起動させる。この場合、情報処理装置100の全てのプログラムの実行が停止する可能性がある。
なお、第2の実施の形態の「ユーザプログラム」は、アプリケーションプログラムやユーザライブラリなど、ユーザ空間で実行されるプログラムのモジュールである。また、第2の実施の形態の「OSプログラム」は、OS空間で実行されるプログラムのモジュールである。第2の実施の形態の「ユーザプログラム」および「OSプログラム」は、第1の実施の形態のプログラムモジュール13−1〜13−4の一例である。
図2は、情報処理装置のハードウェア例を示すブロック図である。
情報処理装置100は、CPU101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、媒体リーダ106および通信インタフェース107を有する。CPU101は、第1の実施の形態のプロセッサ11の一例であり、RAM102やHDD103は、第1の実施の形態の記憶部12の一例である。
情報処理装置100は、CPU101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、媒体リーダ106および通信インタフェース107を有する。CPU101は、第1の実施の形態のプロセッサ11の一例であり、RAM102やHDD103は、第1の実施の形態の記憶部12の一例である。
CPU101は、プログラムの命令を実行する演算回路を含むプロセッサである。CPU101は、HDD103に記憶されているプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、CPU101は複数のプロセッサコアを備えてもよく、情報処理装置100は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列実行してもよい。また、複数のプロセッサの集合(マルチプロセッサ)を「プロセッサ」と呼んでもよい。
RAM102は、CPU101が実行するプログラムやCPU101が演算に用いるデータを一時的に記憶する揮発性メモリである。なお、情報処理装置100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
HDD103は、OSやファームウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、情報処理装置100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
画像信号処理部104は、CPU101からの命令に従って、情報処理装置100に接続されたディスプレイ21に画像を出力する。ディスプレイ21としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ(PDP:Plasma Display Panel)、有機EL(OELD:Organic Electro-Luminescence)ディスプレイなどを用いることができる。
入力信号処理部105は、情報処理装置100に接続された入力デバイス22から入力信号を取得し、CPU101に出力する。入力デバイス22としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、情報処理装置100に、複数の種類の入力デバイスが接続されてもよい。
媒体リーダ106は、記録媒体23に記録されたプログラムやデータを読み取る駆動装置である。記録媒体23として、例えば、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。媒体リーダ106は、例えば、記録媒体23から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
通信インタフェース107は、ネットワークを介して他の情報処理装置と通信を行うインタフェースである。通信インタフェース107は、ケーブルにより通信装置に接続する有線インタフェースでもよいし、無線で基地局に接続する無線インタフェースでもよい。
ただし、情報処理装置100は、媒体リーダ106を備えていなくてもよい。また、端末装置からネットワーク経由で情報処理装置100を制御できる場合には、情報処理装置100は、画像信号処理部104や入力信号処理部105を備えなくてもよい。
図3は、プロセッサのハードウェア例を示す図である。
CPU101は、レジスタファイル111、演算回路112および命令エミュレータ113を有する。レジスタファイル111は、複数のレジスタを有する。この複数のレジスタには、ベースレジスタとしてのレジスタBR1,BR2,BR3,・・・と、汎用レジスタとしてのレジスタR1,R2,・・・が含まれる。レジスタBR1,BR2,BR3は、第1の実施の形態のレジスタRa,Rb,Rcの一例である。
CPU101は、レジスタファイル111、演算回路112および命令エミュレータ113を有する。レジスタファイル111は、複数のレジスタを有する。この複数のレジスタには、ベースレジスタとしてのレジスタBR1,BR2,BR3,・・・と、汎用レジスタとしてのレジスタR1,R2,・・・が含まれる。レジスタBR1,BR2,BR3は、第1の実施の形態のレジスタRa,Rb,Rcの一例である。
レジスタBR1,BR2,BR3は、ベースアドレスを記憶する。ベースアドレスは、RAM102上の基準となる位置を指し示すメモリアドレスである。プログラムの命令は、アクセスしたい位置を特定するために、絶対アドレスではなくベースアドレスからの差分を指定することができる。ベースアドレスは、例えば、RAM102にテーブル構造のデータが記憶されているときに用いられる。その場合、テーブルの先頭アドレスがレジスタBR1,BR2,BR3の何れかにベースアドレスとして記憶され、テーブルの先頭からアクセスしたいデータが格納されている位置までの差分が命令によって指定される。
レジスタR1,R2は、記憶するデータの種類が限定されておらず、演算回路112が多目的に使用できるレジスタである。レジスタR1,R2に記憶され得るデータには、算術演算や論理演算のオペランドや、プログラムの中のジャンプ先の命令を示す命令アドレスなどが含まれる。なお、汎用レジスタの一部または汎用レジスタ以外のレジスタの一部は、相対的なアドレス差(インデックス)を記憶するインデックスレジスタとして用いられることがある。また、ベースレジスタは予め固定されていてもよいし、レジスタファイル111が有するレジスタの中からCPU101が選択するようにしてもよい。
演算回路112は、命令エミュレータ113から取得した命令を実行する。例えば、演算回路112は、ロード命令に従い、RAM102からレジスタBR1,BR2,BR3,R1,R2にデータを読み込む。また、演算回路112は、算術演算命令や論理演算命令に従い、レジスタR1,R2に記憶されたデータを書き換える。また、演算回路112は、ストア命令に従い、レジスタR1,R2からRAM102にデータを書き戻す。
命令エミュレータ113は、RAM102からプログラムの命令を読み込み、演算回路112に命令を出力する。ただし、RAM102に記憶されたプログラムが、演算回路112が解釈できる命令セットと異なる命令セットを用いて記述されている場合がある。その場合、命令エミュレータ113は、RAM102から読み込んだ命令を、演算回路112が解釈可能な命令に変換して演算回路112に出力する。
また、命令エミュレータ113は、レジスタBR1,BR2,BR3へのベースアドレスの書き込みを伴う命令(例えば、RAM102からレジスタBR1,BR2,BR3へのロード命令)が実行されることを検出する。すると、命令エミュレータ113は、ベースアドレスの書き込みを示す実行ログをRAM102に記録する。なお、上記の命令変換機能およびログ記録機能は、ハードウェアとして実現することもできるし、命令エミュレータ113に記憶したファームウェアを用いて実現することもできる。
次に、ユーザプログラムおよびOSプログラムの実行の流れの例を説明する。
図4は、複数のプログラムの間の呼び出し例を示す図である。
1つのプログラムからは、並列に実行される複数のプロセスを起動することが可能である。例えば、情報処理装置100は、あるプログラムに従ってデータAを処理するプロセスAと、同じプログラムに従ってデータBを処理するプロセスBとを、並行して実行することができる。また、1つのプロセスの中では、複数のプログラムが起動されることがある。例えば、プログラムAがプログラムBを呼び出したとき、呼び出されたプログラムBが呼び出し元のプログラムAと同じプロセスの中で実行されることがある。すなわち、プログラムとプロセスは多対多に対応付けられる。図4は、4つのユーザプログラムと1つのOSプログラムとが同一のプロセスの中で実行される例を示している。
図4は、複数のプログラムの間の呼び出し例を示す図である。
1つのプログラムからは、並列に実行される複数のプロセスを起動することが可能である。例えば、情報処理装置100は、あるプログラムに従ってデータAを処理するプロセスAと、同じプログラムに従ってデータBを処理するプロセスBとを、並行して実行することができる。また、1つのプロセスの中では、複数のプログラムが起動されることがある。例えば、プログラムAがプログラムBを呼び出したとき、呼び出されたプログラムBが呼び出し元のプログラムAと同じプロセスの中で実行されることがある。すなわち、プログラムとプロセスは多対多に対応付けられる。図4は、4つのユーザプログラムと1つのOSプログラムとが同一のプロセスの中で実行される例を示している。
例えば、ユーザプログラムAが起動されると、CPU101はユーザプログラムAの命令に従って、RAM102にユーザプログラムAのためのメモリ領域を確保し、データを生成して確保したメモリ領域に格納する。そして、ユーザプログラムAからユーザプログラムBが呼び出される。ユーザプログラムBが呼び出されると、CPU101はユーザプログラムBの命令に従って、ユーザプログラムAのデータをRAM102から読み出して処理を行う。そして、ユーザプログラムBからユーザプログラムCが呼び出される。
ユーザプログラムCが呼び出されると、CPU101はユーザプログラムCの命令に従って、RAM102にユーザプログラムCのためのメモリ領域を確保し、データを生成して確保したメモリ領域に格納する。そして、ユーザプログラムCからユーザプログラムDが呼び出される。ユーザプログラムDが呼び出されると、CPU101はユーザプログラムDの命令に従って処理を行う。そして、ユーザプログラムDからOSプログラムが呼び出される。ユーザプログラムからOSプログラムの呼び出しは、例えば、スーパーバイザーコール(システムコールとも呼ばれ得る)によって行われる。
OSプログラムが呼び出されると、CPU101はOSプログラムの命令に従って、ユーザプログラムCのデータをRAM102から読み出して処理を行う。OSプログラムの処理が正常に終了すると、呼び出しとは逆方向にユーザプログラムD、ユーザプログラムC、ユーザプログラムB、ユーザプログラムAの順に制御が戻される。なお、OSプログラムおよび各ユーザプログラムに割り当てられたメモリ領域(使用中のメモリ領域)は、OSによって管理されており、OSがもつメモリ管理情報に登録されている。
このように、あるプログラムによって生成されてRAM102に格納されたデータが、他のプログラムによって読み出されて参照されることがある。なお、データを生成するプログラムとそのデータを参照するプログラムとは、直列の呼び出し関係で関連付けられている(呼び出す側と呼び出される側の関係にある)とは限らない。例えば、ある親プログラムから2つの子プログラムが呼び出されるとき、一方の子プログラムによって生成されたデータが他方の子プログラムによって参照される場合が考えられる。
図5は、メモリアクセスエラーの発生例を示す図である。
ここでは、プログラム#1からプログラム#2が呼び出される場合を考える。プログラム#1,#2は、ユーザプログラムでもよいしOSプログラムでもよい。
ここでは、プログラム#1からプログラム#2が呼び出される場合を考える。プログラム#1,#2は、ユーザプログラムでもよいしOSプログラムでもよい。
プログラム#1には、RAM102のメモリ領域#1からレジスタBR2にデータを読み込むロード命令が含まれる。メモリ領域#1にはベースアドレス#1が格納されていることを想定している。プログラム#2には、RAM102のメモリ領域#2からレジスタBR1にデータを読み込むロード命令が含まれる。このロード命令は、レジスタBR2に格納されたベースアドレス#1を基点として、メモリ領域#2の位置を指定している。すなわち、このロード命令は、参照するベースレジスタ(レジスタBR2)、および、ベースアドレス#1とメモリ領域#2の先頭アドレスとの差分を指定している。メモリ領域#2にはベースアドレス#2が格納されていることを想定している。
また、プログラム#2には、RAM102のメモリ領域#3からレジスタBR3にデータを読み込むロード命令が含まれる。このロード命令は、ベースアドレス#1を基点として、メモリ領域#3の位置を指定する。メモリ領域#3にはベースアドレス#3が格納されていることを想定している。また、プログラム#2には、RAM102からレジスタR1にデータを読み込むロード命令が含まれる。このロード命令は、ベースアドレス#1を基点として、データが格納されたメモリ領域の位置を指定する。
ここで、CPU101がレジスタR1へのロード命令を実行するときに、メモリアクセスエラーが発生したとする。メモリアクセスエラーが発生する場合として、例えば、RAM102にアクセスするときに指定するアドレスが、RAM102に存在しないアドレスであった場合が考えられる。また、他の場合として、例えば、アクセスしようとしたメモリ領域が、プログラム#2からのアクセスが許可されていない場合が考えられる。
メモリアクセスエラーが発生したこのロード命令は、レジスタBR2を参照している。よって、メモリアクセスエラーの原因として、レジスタBR2に格納されたベースアドレス#1が異常なアドレスであることが考えられる。そこで、ベースアドレス#1が異常である可能性があるとき、このベースアドレス#1を用意したプログラムをメモリアクセスエラーの原因となったプログラムと推定できる。第2の実施の形態では、情報処理装置100は、ベースアドレス#1が格納されていたRAM102のメモリ領域#1を使用するプログラムを、メモリアクセスエラーの原因となったプログラムと判定する。
なお、ベースアドレス#1を用意したプログラムは、ベースアドレス#1をレジスタBR2に読み込んだプログラム#1自身であることもある。また、ベースアドレス#1を用意したプログラムは、プログラム#1を呼び出したプログラムであることもあり、プログラム#1と呼び出し関係にない他のプログラムであることもある。
図6は、情報処理装置の機能例を示すブロック図である。
情報処理装置100は、ログ記録部121、命令変換部122、記憶部123、割り込み検出部124、エラー分析部125、ユーザプログラム停止部126およびシステム停止部127を有する。ログ記録部121および命令変換部122は、例えば、命令エミュレータ113が備えるハードウェアを用いて実現される。記憶部123は、例えば、RAM102またはHDD103に確保した記憶領域として実現される。割り込み検出部124、エラー分析部125、ユーザプログラム停止部126およびシステム停止部127は、例えば、OSに含まれるソフトウェアのモジュールとして実現される。
情報処理装置100は、ログ記録部121、命令変換部122、記憶部123、割り込み検出部124、エラー分析部125、ユーザプログラム停止部126およびシステム停止部127を有する。ログ記録部121および命令変換部122は、例えば、命令エミュレータ113が備えるハードウェアを用いて実現される。記憶部123は、例えば、RAM102またはHDD103に確保した記憶領域として実現される。割り込み検出部124、エラー分析部125、ユーザプログラム停止部126およびシステム停止部127は、例えば、OSに含まれるソフトウェアのモジュールとして実現される。
ログ記録部121は、レジスタBR1,BR2,BR3へのベースアドレスの書き込みを検出し、ベースアドレスの書き込みを示す実行ログを記憶部123に格納する。ログ記録部121は、RAM102からCPU101にプログラムの命令が読み込まれたとき、その命令が何れかのベースレジスタを更新する命令(例えば、レジスタBR1,BR2,BR3の何れかを指定したロード命令)であるか判断する。ベースレジスタを更新する命令の場合、ログ記録部121はその命令に対応する実行ログを生成し、ベースレジスタを更新する命令でない場合、ログ記録部121は実行ログを生成しない。
命令変換部122は、RAM102に格納されているプログラムが、演算回路112が解釈可能な命令セットと異なる命令セットによって記述されているとき、命令の変換を行う。命令変換部122は、RAM102からCPU101にプログラムの命令が読み込まれると、その命令を演算回路112が解釈可能な命令に変換して演算回路112に渡す。
記憶部123は、エラー分析に用いられる管理情報を記憶する。管理情報は、ログ記録部121によって生成された実行ログを含む。記憶部123に記憶される実行ログには、OSプログラムの中で行われたベースレジスタへの書き込みを示すOSプログラムの実行ログと、ユーザプログラムの中で行われたベースレジスタへの書き込みを示すユーザプログラムの実行ログとが含まれる。また、管理情報は、ログ採取の設定を示すシステム情報、プログラムの間の呼び出し関係を示す呼び出し関係情報、情報処理装置100で実行中のプロセスを示すプロセス情報などを含む。システム情報の少なくとも一部は、予めユーザによって記述される。呼び出し関係情報およびプロセス情報は、OSによって生成されて記憶部123に格納される。管理情報の構造については後述する。
割り込み検出部124は、プログラムの実行中にエラーが発生すると、割り込み信号を受け付ける。割り込み信号が入力されると、エラー発生直前にCPU101で実行されていたプログラムの処理が中断されて、割り込み検出部124の処理が開始される。割り込み検出部124は、割り込み信号を受け付けると割り込みの種類を判定し、メモリアクセスエラーによる割り込みである場合はエラー分析部125を呼び出す。
エラー分析部125は、メモリアクセスエラーが発生したとき、記憶部123に記憶された実行ログに基づいてエラーの原因となったプログラムを判定する。前述のように、第2の実施の形態では、エラーが検出されたプログラムではなく、異常なベースアドレスを用意したプログラムをエラーの原因と判定する。ベースアドレスが正常か判定する方法は後述する。エラーの原因となったプログラムがユーザプログラムのとき、エラー分析部125はユーザプログラム停止部126を呼び出す。エラーの原因となったプログラムがOSプログラムのとき、エラー分析部125はシステム停止部127を呼び出す。
ユーザプログラム停止部126は、あるユーザプログラムがエラーの原因であるとエラー分析部125において判定されると、そのユーザプログラムの実行を強制的に停止させる(ユーザプログラムをシャットダウンする)。この場合、シャットダウンされたユーザプログラムと並行して実行されているOSプログラムや他のユーザプログラムは、原則として、影響を受けずに継続して実行し続けることができる。
システム停止部127は、OSプログラムがエラーの原因であるとエラー分析部125において判定されると、OSを強制的に停止させる(OSをシャットダウンする)。OSがシャットダウンされると、原則として、情報処理装置100で実行されている全てのプログラムが停止する。ただし、情報処理装置100が複数のプロセッサを備え、プロセッサ毎にOSを実行している場合、エラーの原因のOSプログラムと異なるプロセッサで実行されるプログラムは、影響を受けずに継続して実行し続けることができる場合がある。なお、システム停止部127は、OSを再起動するようにしてもよい。
次に、実行ログを含む管理情報のデータ構造の例を説明する。
図7は、管理情報の全体構造の例を示す図である。
記憶部123に記憶される管理情報は、システム情報131、ジョブ管理情報132、呼び出し関係情報133、プロセス情報の集合、OSプログラムの実行ログの集合およびユーザプログラムの実行ログの集合を含む。各プロセス情報は、1つのプロセスとユーザプログラムの組に対応する。各OSプログラムの実行ログは、OSプログラムの中で行われた1回のベースレジスタへの書き込みに対応する。各ユーザプログラムの実行ログは、ユーザプログラムの中で行われた1回のベースレジスタへの書き込みに対応する。
図7は、管理情報の全体構造の例を示す図である。
記憶部123に記憶される管理情報は、システム情報131、ジョブ管理情報132、呼び出し関係情報133、プロセス情報の集合、OSプログラムの実行ログの集合およびユーザプログラムの実行ログの集合を含む。各プロセス情報は、1つのプロセスとユーザプログラムの組に対応する。各OSプログラムの実行ログは、OSプログラムの中で行われた1回のベースレジスタへの書き込みに対応する。各ユーザプログラムの実行ログは、ユーザプログラムの中で行われた1回のベースレジスタへの書き込みに対応する。
システム情報131は、実行ログを採取する条件を示す設定情報を含む。システム情報131は、情報処理装置100が備えるCPUの数分だけ、OSによって生成されて管理される。設定情報は、情報処理装置100のユーザからの指示に応じて生成される。また、システム情報131は、OSプログラムの実行ログのうち先頭の実行ログへのポインタを含む。ジョブ管理情報132は、呼び出し関係情報133へのポインタと、各プロセス情報へのポインタとを含む。呼び出し関係情報133は、プログラムの間の呼び出し関係を示す。呼び出し関係情報133は、OSによって生成されて管理される。ジョブ管理情報132からポインタを辿ることで呼び出し関係情報133にアクセスすることができる。
各プロセス情報は、1つのプロセスの中で1つのユーザプログラムが起動されたときにOSによって生成される。各プロセス情報は、プロセスおよびユーザプログラムを示す情報を含む。また、各プロセス情報は、プロセスの中でそのユーザプログラムが実行されたときの実行ログ(プロセスとユーザプログラムの組に対応する実行ログ)のうち、先頭の実行ログへのポインタを含む。ジョブ管理情報132からポインタを辿ることで、所望のプロセスおよびプログラムの組に対応するプロセス情報にアクセスすることができる。
複数のOSプログラムの実行ログは、書き込みの時系列順に並べられてリスト構造として保存されている。また、同じプロセスとユーザプログラムの組についての複数の実行ログは、書き込みの時系列順に並べられてリスト構造として保存されている。実行ログの間のポインタを辿ることで、所望の条件を満たす実行ログを検索することができる。なお、図7に示したように、プロセス情報の集合には後述するプロセス情報134が含まれ、OSプログラムの実行ログの集合には後述する実行ログ135が含まれ、ユーザプログラムの実行ログの集合には実行ログ136が含まれているものとする。
図8は、システム情報の構造例を示す図である。
システム情報131は、OSプログラムの実行ログのうち、先頭の実行ログのアドレスと末尾の実行ログのアドレスを含む。新しいOSプログラムの実行ログはリストの末尾に追加される。すなわち、末尾の実行ログが最新の実行ログになる。また、システム情報131は、制御フラグの集合とログを採取するユーザプログラムの識別情報を含む。制御フラグの集合には、OS適用フラグおよびプログラム限定フラグが含まれる。
システム情報131は、OSプログラムの実行ログのうち、先頭の実行ログのアドレスと末尾の実行ログのアドレスを含む。新しいOSプログラムの実行ログはリストの末尾に追加される。すなわち、末尾の実行ログが最新の実行ログになる。また、システム情報131は、制御フラグの集合とログを採取するユーザプログラムの識別情報を含む。制御フラグの集合には、OS適用フラグおよびプログラム限定フラグが含まれる。
OS適用フラグは、OSプログラムを実行ログ採取の対象とするか否かを示すフラグである。例えば、OS適用フラグ=1のときOSプログラムを実行ログ採取の対象とし、OS適用フラグ=0のときOSプログラムを実行ログ採取の対象外とする。OSプログラムを実行ログ採取の対象外とした場合、命令エミュレータ113は、ベースレジスタへの書き込みを示す命令がOSプログラムに含まれていても実行ログを生成しない。
プログラム限定フラグは、実行ログ採取の対象とするユーザプログラムを限定するか否かを示すフラグである。例えば、プログラム限定フラグ=0のとき全てのユーザプログラムを実行ログ採取の対象とし、プログラム限定フラグ=1のとき一部のユーザプログラムのみを実行ログ採取の対象とする。ユーザプログラムを限定する場合、実行ログ採取の対象とするユーザプログラムがシステム情報131に登録される。その場合、命令エミュレータ113は、システム情報131に登録されていないユーザプログラムにベースレジスタへの書き込みを示す命令が含まれていても、実行ログを生成しない。
図9は、呼び出し関係情報の構造例を示す図である。
呼び出し関係情報133は、複数のプログラムの間の呼び出し関係を示す。呼び出し関係情報133は、プログラム毎に、プログラムの識別情報と、そのプログラムから呼び出される子プログラムを指し示す呼出ポインタと、そのプログラムを呼び出した親プログラムを指し示す復帰ポインタとを含む。呼出ポインタおよび復帰ポインタを順に辿ることで、あるプログラムと直列の呼び出し関係にある他のプログラムを検索することができる。例えば、あるプログラムでエラーが発生したとき、復帰ポインタを辿ることで、エラーが発生したプログラムにデータを渡した可能性のあるプログラムを検索できる。
呼び出し関係情報133は、複数のプログラムの間の呼び出し関係を示す。呼び出し関係情報133は、プログラム毎に、プログラムの識別情報と、そのプログラムから呼び出される子プログラムを指し示す呼出ポインタと、そのプログラムを呼び出した親プログラムを指し示す復帰ポインタとを含む。呼出ポインタおよび復帰ポインタを順に辿ることで、あるプログラムと直列の呼び出し関係にある他のプログラムを検索することができる。例えば、あるプログラムでエラーが発生したとき、復帰ポインタを辿ることで、エラーが発生したプログラムにデータを渡した可能性のあるプログラムを検索できる。
図10は、プロセス情報の構造例を示す図である。
プロセス情報134は、プロセスの識別情報とプログラムの識別情報を含む。また、プロセス情報134は、そのプロセスとプログラムの組に対応する実行ログのうち、先頭の実行ログのアドレスと末尾の実行ログのアドレスを含む。新しいユーザプログラムの実行ログはリストの末尾に追加される。すなわち、末尾の実行ログが最新の実行ログになる。なお、他のプロセス情報もプロセス情報134と同様のデータ構造を有する。
プロセス情報134は、プロセスの識別情報とプログラムの識別情報を含む。また、プロセス情報134は、そのプロセスとプログラムの組に対応する実行ログのうち、先頭の実行ログのアドレスと末尾の実行ログのアドレスを含む。新しいユーザプログラムの実行ログはリストの末尾に追加される。すなわち、末尾の実行ログが最新の実行ログになる。なお、他のプロセス情報もプロセス情報134と同様のデータ構造を有する。
図11は、実行ログの構造例を示す図である。
実行ログ135は、実行ログのリストにおける次の実行ログのアドレスと前の実行ログのアドレスを含む。次の実行ログは実行ログ135より1つ後に生成されたものであり、前の実行ログは実行ログ135より1つ前に生成されたものである。
実行ログ135は、実行ログのリストにおける次の実行ログのアドレスと前の実行ログのアドレスを含む。次の実行ログは実行ログ135より1つ後に生成されたものであり、前の実行ログは実行ログ135より1つ前に生成されたものである。
また、実行ログ135は、命令タイプ、レジスタ番号、命令アドレス、メモリアドレス、ロード前のレジスタ値およびロード後のレジスタ値を含む。命令タイプは、ロード命令などの命令の種類である。レジスタ番号は、更新するベースレジスタ(例えば、レジスタBR1,BR2,BR3の何れか)の番号である。命令アドレスは、実行された命令をプログラムの中で識別するためのアドレスである。メモリアドレスは、ベースアドレスが格納されていたRAM102のメモリ領域を示すアドレスである。ロード前のレジスタ値は、命令を実行する前にベースレジスタに格納されていたベースアドレスである。ロード後のレジスタ値は、命令を実行することで書き込まれたベースアドレスである。
また、実行ログ135は、エラー分析に役立つ他のレジスタ値を含んでもよい。他のレジスタ値としては、例えば、命令が実行されたときのインデックスレジスタの値(インデックス)が挙げられる。なお、ログ記録部121は、演算回路112によって命令が実行される前に実行ログ135を生成してもよいし、命令が実行された後に実行ログ135を生成してもよい。ただし、ロード後のレジスタ値は、命令が実行された後に確定する。
上記ではOSプログラムの実行ログである実行ログ135のデータ構造を説明したが、ユーザプログラムの実行ログである実行ログ136も、実行ログ135と同様のデータ構造を有する。また、他の実行ログも、実行ログ135と同様のデータ構造を有する。
次に、ログ採取およびエラー分析の手順例を説明する。
図12は、ログ採取の手順例を示すフローチャートである。
(S10)ログ記録部121は、RAM102から読み込まれた命令を取得する。
図12は、ログ採取の手順例を示すフローチャートである。
(S10)ログ記録部121は、RAM102から読み込まれた命令を取得する。
(S11)ログ記録部121は、記憶部123に記憶されたシステム情報131を参照して、取得した命令がログ採取の対象となるプログラムの命令であるか判断する。ログ採取の対象となるプログラムの命令である場合、処理をステップS12に進める。それ以外の場合、ログ記録部121は実行ログを生成せずに処理を終了する。
具体的には、ログ記録部121は、OSプログラムの命令を取得したとき、OS適用フラグを確認する。例えば、OS適用フラグ=1の場合はログ採取の対象と判断し、OS適用フラグ=0の場合はログ採取の対象外と判断する。また、ログ記録部121は、ユーザプログラムの命令を取得したとき、プログラム限定フラグを確認する。例えば、プログラム限定フラグ=0の場合、ログ採取の対象と判断する。また、プログラム限定フラグ=1で、かつ、実行中のユーザプログラムがシステム情報131に登録されている場合、ログ採取の対象と判断する。プログラム限定フラグ=1で、かつ、実行中のユーザプログラムがシステム情報131に登録されていない場合、ログ採取の対象外と判断する。
(S12)ログ記録部121は、取得した命令の命令タイプを確認し、ベースレジスタであるレジスタBR1,BR2,BR3の何れかを更新する命令であるか判断する。ベースレジスタを更新する命令としては、例えば、ベースレジスタを指定したロード命令が挙げられる。ベースレジスタを更新する命令である場合、処理をステップS13に進める。それ以外の命令である場合、ログ記録部121は実行ログを生成せずに処理を終了する。
(S13)ログ記録部121は、記憶部123に実行ログの記憶領域を確保する。具体的には、OSプログラムの命令が読み込まれたとき、ログ記録部121は、OSプログラムの実行ログのリストの末尾に、新たな実行ログのための記憶領域を確保する。ユーザプログラムの命令が読み込まれたとき、ログ記録部121は、実行中のプロセスおよびプログラムの組に対応するプロセス情報からユーザプログラムの実行ログのリストにアクセスし、その末尾に新たな実行ログのための記憶領域を確保する。
(S14)ログ記録部121は、記憶部123に確保した記憶領域に対して実行ログを書き込む。命令タイプおよびレジスタ番号は、例えば、読み込まれた命令から特定できる。命令アドレスは、例えば、CPU101が備えるプログラムカウンタを参照して特定できる。メモリアドレスは、例えば、読み込まれた命令とその命令が参照するレジスタの内容から特定できる。ロード前のレジスタ値は命令実行前のレジスタの内容から特定でき、ロード後のレジスタ値は命令実行後のレジスタの内容から特定できる。また、ログ記録部121は、システム情報131またはプロセス情報に含まれる「末尾の実行ログのアドレス」と、1つ前の実行ログに含まれる「次の実行ログのアドレス」を更新する。
図13は、エラー分析の手順例を示すフローチャートである。
(S20)割り込み検出部124は、割り込み信号に基づいてメモリアクセスエラーを検出すると、エラー分析部125を呼び出す。エラー分析部125は、エラーが発生したときの命令アドレス(例えば、プログラムカウンタの値)からエラーを生じさせた命令を特定し、OSがもつ情報に基づいてその命令を含むプログラムを特定する。
(S20)割り込み検出部124は、割り込み信号に基づいてメモリアクセスエラーを検出すると、エラー分析部125を呼び出す。エラー分析部125は、エラーが発生したときの命令アドレス(例えば、プログラムカウンタの値)からエラーを生じさせた命令を特定し、OSがもつ情報に基づいてその命令を含むプログラムを特定する。
(S21)エラー分析部125は、OSプログラムに含まれる命令でエラーが発生したか判断する。OSプログラムに含まれる命令である場合は処理をステップS23に進め、ユーザプログラムに含まれる命令である場合は処理をステップS22に進める。
(S22)エラー分析部125は、エラーが発生したときに実行していたプロセスおよびプログラムを特定し、記憶部123からそのプロセスおよびプログラムの組に対応するプロセス情報を検索する。そして、エラー分析部125は、検索したプロセス情報から辿ることができる実行ログのリストを選択する。その後、処理をステップS25に進める。なお、エラー分析部125は、以下のステップS27〜S31を通じて、選択したリストに含まれる実行ログを末尾から先頭に向かって(新しい順に)1つずつ確認していく。
(S23)エラー分析部125は、記憶部123に記憶されたシステム情報131のOS適用フラグを参照して、OSプログラムがログ採取の対象であるか判断する。OSプログラムがログ採取の対象である場合、処理をステップS24に進める。OSプログラムがログ採取の対象外である場合、処理をステップS26に進める。
(S24)エラー分析部125は、記憶部123に記憶されたシステム情報131から辿ることができる実行ログのリスト(OSプログラムの実行ログのリスト)を選択する。なお、エラー分析部125は、以下のステップS27〜S31を通じて、選択したリストに含まれる実行ログを末尾から先頭に向かって(新しい順に)1つずつ確認していく。
(S25)エラー分析部125は、ステップS21で特定したエラーが発生した命令から、参照されたベースレジスタを特定する。ここでは、レジスタBR1,BR2,BR3の何れかが特定される。そして、処理をステップS27に進める。
(S26)エラー分析部125は、OSプログラムがエラー原因である可能性がある一方でOSプログラムの実行履歴を分析できないため、OSプログラムをエラーの原因となったプログラムとみなす。そして、処理を後述するステップS36に進める。
(S27)エラー分析部125は、ステップS22またはS24で選択したリストに含まれる実行ログの探索が終了したか判断する。探索が終了した場合は処理を後述するステップS33に進め、探索が終了していない場合は処理をステップS28に進める。
(S28)エラー分析部125は、現在着目している実行ログに含まれる「レジスタ番号」が、参照されたベースレジスタのレジスタ番号と一致するか判断する。すなわち、エラー分析部125は、現在着目している実行ログが、参照されたベースレジスタへの書き込みを示す実行ログであるか判断する。レジスタ番号が一致した場合、処理をステップS29に進める。レジスタ番号が一致しない場合、「前の実行ログのアドレス」に基づいて1つ前の実行ログが存在するか確認し、処理をステップS27に進める。
(S29)エラー分析部125は、レジスタ番号が一致した実行ログから、参照されたベースレジスタに書き込まれた値(ベースアドレス)を確認する。
(S30)エラー分析部125は、ベースアドレスが正常であるか判断する。ベースアドレスが正常であると判断した場合、処理をステップS31に進める。ベースアドレスが正常でないと判断した場合、処理をステップS32に進める。ベースアドレスが正常か否かは、例えば、以下の方法(a)または方法(b)によって判断できる。
(S30)エラー分析部125は、ベースアドレスが正常であるか判断する。ベースアドレスが正常であると判断した場合、処理をステップS31に進める。ベースアドレスが正常でないと判断した場合、処理をステップS32に進める。ベースアドレスが正常か否かは、例えば、以下の方法(a)または方法(b)によって判断できる。
(a)エラー分析部125は、OSがもつメモリ管理情報を参照して、書き込まれたベースアドレスが示すメモリ領域が、何れかのプログラムによって使用されているか判断する。そのメモリ領域を使用するプログラムが存在する場合、エラー分析部125は、ベースアドレスが正常であると判断する。そのメモリ領域を使用するプログラムが存在しない場合、エラー分析部125は、ベースアドレスが異常であると判断する。
(b)エラー分析部125は、書き込まれたベースアドレスと、プログラムに割り当てられるメモリ領域の単位であるブロックの先頭アドレスとを比較する。そして、エラー分析部125は、以下の条件が満たされる場合にベースアドレスが異常であると判断し、満たされない場合にベースアドレスが正常であると判断する。
条件:書き込まれたベースアドレス<ブロックの先頭アドレスであり、かつ、書き込まれたベースアドレス+閾値≧ブロックの先頭アドレスである。ここで、ブロックは、例えば、4kバイトや8kバイトなどの固定長のメモリ領域である。閾値は、情報処理装置100のハードウェアやOSなどの実行環境に応じて変わり得る。
(S31)エラー分析部125は、現在着目している実行ログから、ベースレジスタにベースアドレスを書き込んだときに参照された他のベースレジスタを特定する。そして、「参照されたベースレジスタ」を当該他のベースレジスタに置き換えて、処理をステップS27に進める。すなわち、エラー分析部125は、現在着目している実行ログより前の実行ログの中から、当該他のベースレジスタへの書き込みを示す実行ログを探索する。これは、読み込まれた値が外見上ベースアドレスとして正常に見えても、上位のベースアドレスが異常であるために意図した値が読み込まれなかった可能性があるためである。
(S32)エラー分析部125は、現在着目している実行ログに含まれる「メモリアドレス」とOSがもつメモリ管理情報とに基づいて、ベースアドレスが格納されていたメモリ領域を確保したプログラムを特定する。特定されるプログラムは、OSプログラムであることもあるし、ユーザプログラムであることもある。そして、エラー分析部125は、特定したプログラムをエラーの原因と判定し、処理を後述するステップS36に進める。
図14は、エラー分析の手順例を示すフローチャート(続き)である。
(S33)エラー分析部125は、記憶部123に記憶された呼び出し関係情報133を参照して、同一プロセス内で現在着目しているプログラムを呼び出した他のプログラムが存在するか判断する。呼び出し元のプログラムが存在する場合は処理をステップS34に進め、存在しない場合は処理をステップS35に進める。
(S33)エラー分析部125は、記憶部123に記憶された呼び出し関係情報133を参照して、同一プロセス内で現在着目しているプログラムを呼び出した他のプログラムが存在するか判断する。呼び出し元のプログラムが存在する場合は処理をステップS34に進め、存在しない場合は処理をステップS35に進める。
(S34)エラー分析部125は、エラーが発生したときに実行していたプロセスおよびステップS33で特定したプログラムの組に対応するプロセス情報を、記憶部123から検索する。そして、エラー分析部125は、検索したプロセス情報から辿ることができる実行ログのリストを選択する。その後、処理をステップS27に進める。
(S35)エラー分析部125は、実行ログを分析しても異常なベースアドレスを用意したプログラムを発見できなかったため、ステップS20で特定したエラーが発生したプログラムを、エラーの原因となったプログラムであると判定する。
(S36)エラー分析部125は、エラーの原因となった異常なプログラムは、OSプログラムであるか判断する。エラーの原因がOSプログラムである場合は処理をステップS38に進め、ユーザプログラムである場合は処理をステップS37に進める。
(S37)ユーザプログラム停止部126は、エラーの原因と判定されたユーザプログラムを強制的に停止させる。このとき、OSプログラムは停止させなくてもよいため、他のユーザプログラムやOSプログラムの実行は継続され得る。
(S38)システム停止部127は、OSをシャットダウンする。なお、システム停止部127は、その後にOSを再起動するようにしてもよい。
第2の実施の形態によれば、メモリアクセスエラーが発生したとき、ベースレジスタへの書き込みを示す実行ログに基づいて、異常なベースアドレスを用意したプログラムを特定することができる。よって、エラーの原因となったプログラムの判定精度を向上させることができる。また、OSプログラムでエラーが発生してもエラー原因がユーザプログラムにあると判定された場合は、OSをシャットダウンしなくてもよい。よって、情報処理装置100が突然停止することを抑制でき、情報処理装置100の安定性が向上する。また、エラーが発生したプログラムとエラーの原因となったプログラムとが直列の呼び出し関係にない場合であっても、エラー原因を特定できる。
第2の実施の形態によれば、メモリアクセスエラーが発生したとき、ベースレジスタへの書き込みを示す実行ログに基づいて、異常なベースアドレスを用意したプログラムを特定することができる。よって、エラーの原因となったプログラムの判定精度を向上させることができる。また、OSプログラムでエラーが発生してもエラー原因がユーザプログラムにあると判定された場合は、OSをシャットダウンしなくてもよい。よって、情報処理装置100が突然停止することを抑制でき、情報処理装置100の安定性が向上する。また、エラーが発生したプログラムとエラーの原因となったプログラムとが直列の呼び出し関係にない場合であっても、エラー原因を特定できる。
なお、上記の第2の実施の形態ではベースレジスタへの書き込みに限定して実行ログを採取したが、他の種類のレジスタへの書き込みを示す実行ログを採取してもよい。また、上記の第2の実施の形態ではメモリアクセスエラーの原因を分析したが、レジスタへの書き込みの実行ログに基づいて他の種類のエラーを分析できるようにしてもよい。
[第3の実施の形態]
第3の実施の形態を説明する。前述の第2の実施の形態との違いを中心に説明し、第2の実施の形態と同様の事項については説明を省略することがある。
第3の実施の形態を説明する。前述の第2の実施の形態との違いを中心に説明し、第2の実施の形態と同様の事項については説明を省略することがある。
第3の実施の形態に係る情報処理装置は、レジスタの値に応じた命令にジャンプするジャンプレジスタ命令の実行ログを更に採取する。第3の実施の形態の情報処理装置は、図2,3,6に示した第2の実施の形態の情報処理装置100と同様の構成によって実現できる。以下、図2,3,6と同じ符号を用いて第3の実施の形態を説明する。
図15は、ジャンプ先での実行エラーの発生例を示す図である。
ここでは、命令の実行シーケンスが、プログラム#1の途中からプログラム#2にジャンプし、プログラム#2の途中からプログラム#3にジャンプし、プログラム#3の途中から更に他のプログラムにジャンプする場合を考える。プログラム#1,#2,#3は、ユーザプログラムでもよいしOSプログラムであってもよい。
ここでは、命令の実行シーケンスが、プログラム#1の途中からプログラム#2にジャンプし、プログラム#2の途中からプログラム#3にジャンプし、プログラム#3の途中から更に他のプログラムにジャンプする場合を考える。プログラム#1,#2,#3は、ユーザプログラムでもよいしOSプログラムであってもよい。
プログラム#1には、RAM102のメモリ領域#1からレジスタR1にデータを読み込むロード命令が含まれる。メモリ領域#1には、プログラム#2に含まれる命令を示す命令アドレス#1が格納されていることを想定している。また、プログラム#1には、レジスタR1の値が示す命令にジャンプするジャンプレジスタ命令が含まれる。
プログラム#2には、RAM102のメモリ領域#2からレジスタR1にデータを読み込むロード命令が含まれる。メモリ領域#2には、命令アドレス#2が格納されていることを想定している。このロード命令が実行されると、命令アドレス#1が消えて命令アドレス#2がレジスタR1に上書きされる。また、プログラム#2には、プログラム#2に含まれる所定の命令にジャンプするジャンプ命令が含まれる。ジャンプレジスタ命令ではジャンプ先が可変であるのに対し、ジャンプ命令ではジャンプ先が固定である。なお、ジャンプ命令およびジャンプレジスタ命令は、分岐命令と呼ばれることがある。
また、プログラム#2には、RAM102のメモリ領域#3からレジスタR2にデータを読み込むロード命令が含まれる。メモリ領域#3には、プログラム#3に含まれる命令を示す命令アドレス#3が格納されていることを想定している。また、プログラム#2には、レジスタR2の値が示す命令にジャンプするジャンプレジスタ命令が含まれる。
プログラム#3には、レジスタR1の値が示す命令にジャンプするジャンプレジスタ命令が含まれる。ここで、レジスタR1に書き込まれた命令アドレス#2が、存在しない命令を指し示す異常な命令アドレスであったとする。すると、ジャンプ後にCPU101が、RAM102上のプログラムが格納されていない非プログラム領域から命令を読み込もうとする可能性がある。この場合、CPU101がRAM102から実行可能な命令を取得することができず、プログラム実行エラーが発生し得る。
非プログラム領域でプログラム実行エラーが発生したとき、情報処理装置100は、非プログラム領域にジャンプしてしまった経緯の分析を支援できるようにすることが好ましい。そこで、第3の実施の形態では、情報処理装置100は、プログラム#1,#2,#3が実行されている間にジャンプレジスタ命令の実行ログを採取する。
ジャンプレジスタ命令の実行ログは、ジャンプによる複数のプログラムの間の関連を分析するために用いることができる。例えば、情報処理装置100は、プログラム実行エラーが発生したとき、ジャンプレジスタ命令の実行ログに基づいて、当該プログラム実行エラーが発生するまでに実行されたプログラムとその実行の順序を特定できる。ジャンプによるプログラム間の関連の分析は、第2の実施の形態のエラー分析と併せて行うことができる。その関連の分析結果は、第2の実施の形態においてエラーの原因となったプログラムを判定するときに呼び出し関係情報として参照されてもよい。
また、ジャンプレジスタ命令の実行ログは、プログラム実行エラーの原因を作ったプログラムを判定するために用いることもできる。例えば、情報処理装置100は、第2の実施の形態のログ採取と同様の方法で、レジスタR1,R2を含む汎用レジスタへの書き込みを示す実行ログを採取する。そして、情報処理装置100は、プログラム実行エラーが発生したとき、ジャンプレジスタ命令の実行ログに基づいてジャンプ元のプログラムを辿り、異常なジャンプ先の命令アドレスを用意したプログラムを判定する。
例えば、図15の場合では、ジャンプレジスタ命令の実行ログに基づいて、プログラム#3に含まれるジャンプレジスタ命令から非プログラム領域にジャンプしたことが特定される。このジャンプレジスタ命令は、レジスタR1を参照している。また、ジャンプレジスタ命令の実行ログに基づいて、プログラム#2からプログラム#3にジャンプしたことが特定される。そして、レジスタ書き込みの実行ログに基づいて、プログラム#2においてメモリ領域#2からレジスタR1にデータが読み込まれたことが特定される。そこで、情報処理装置100は、例えば、メモリ領域#2を使用するプログラムを、プログラム実行エラーの原因となったプログラムであると判定する。情報処理装置100は、第2の実施の形態と同様に、判定したプログラムを強制的に停止させてもよい。
図16は、他の実行ログの構造例を示す図である。
実行ログ137は、CPU101がユーザプログラムやOSプログラムなどのプログラムを実行している間に生成されて記憶部123に記憶される。実行ログ137は、実行ログのリストにおける次の実行ログのアドレスと前の実行ログのアドレスを含む。
実行ログ137は、CPU101がユーザプログラムやOSプログラムなどのプログラムを実行している間に生成されて記憶部123に記憶される。実行ログ137は、実行ログのリストにおける次の実行ログのアドレスと前の実行ログのアドレスを含む。
また、実行ログ137は、命令タイプ、命令アドレスおよびジャンプ先アドレスを含む。命令タイプは、命令の種類がジャンプレジスタ命令であることを示す。命令アドレスは、そのジャンプレジスタ命令をプログラムの中で識別するためのアドレスである。ジャンプ先アドレスは、ジャンプレジスタ命令が参照したレジスタの値であり、ジャンプ先の命令を示す命令アドレスである。また、実行ログ137は、エラー分析に役立つ他のレジスタ値を含んでもよい。他のレジスタ値としては、例えば、ジャンプレジスタ命令が実行されたときのインデックスレジスタの値(インデックス)が挙げられる。
図17は、他のログ採取の手順例を示すフローチャートである。
(S40)ログ記録部121は、RAM102から読み込まれた命令を取得する。
(S41)ログ記録部121は、記憶部123に記憶されたシステム情報131を参照して、取得した命令がログ採取の対象となるプログラムの命令であるか判断する。ログ採取の対象となるプログラムの命令である場合、処理をステップS42に進める。それ以外の場合、ログ記録部121は実行ログを生成せずに処理を終了する。
(S40)ログ記録部121は、RAM102から読み込まれた命令を取得する。
(S41)ログ記録部121は、記憶部123に記憶されたシステム情報131を参照して、取得した命令がログ採取の対象となるプログラムの命令であるか判断する。ログ採取の対象となるプログラムの命令である場合、処理をステップS42に進める。それ以外の場合、ログ記録部121は実行ログを生成せずに処理を終了する。
(S42)ログ記録部121は、取得した命令の命令タイプがジャンプレジスタ命令であるか判断する。ジャンプレジスタ命令である場合、処理をステップS43に進める。それ以外の命令である場合、ログ記録部121は実行ログを生成せずに処理を終了する。
(S43)ログ記録部121は、記憶部123に実行ログの記憶領域を確保する。
(S44)ログ記録部121は、記憶部123に確保した記憶領域に対して実行ログを書き込む。命令タイプは、読み込まれた命令から特定できる。命令アドレスは、例えば、CPU101が備えるプログラムカウンタを参照して特定できる。ジャンプ先アドレスは、ジャンプレジスタ命令が指定するレジスタの内容から特定できる。
(S44)ログ記録部121は、記憶部123に確保した記憶領域に対して実行ログを書き込む。命令タイプは、読み込まれた命令から特定できる。命令アドレスは、例えば、CPU101が備えるプログラムカウンタを参照して特定できる。ジャンプ先アドレスは、ジャンプレジスタ命令が指定するレジスタの内容から特定できる。
第3の実施の形態によれば、非プログラム領域でエラーが発生したときであっても、ジャンプレジスタ命令の実行ログに基づいて、どのプログラムから非プログラム領域にジャンプしたかを特定することができる。また、エラーが発生するまでの経緯、すなわち、どのプログラムがどの順序で実行されたかを特定することが容易となる。また、ジャンプレジスタ命令が参照し得るレジスタへの書き込みの実行ログを併せて採取することで、非プログラム領域へのジャンプの原因を作ったプログラムを判定することができる。
なお、前述のように、第1の実施の形態の情報処理は、情報処理装置10にプログラムを実行させることで実現することができる。また、第2の実施の形態の情報処理は、情報処理装置100にプログラムを実行させることで実現することができる。
プログラムは、コンピュータ読み取り可能な記録媒体(例えば、記録媒体23)に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、FDおよびHDDが含まれる。光ディスクには、CD、CD−R(Recordable)/RW(Rewritable)、DVDおよびDVD−R/RWが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体からHDDなどの他の記録媒体(例えば、HDD103)にプログラムを複製して(インストールして)実行してもよい。
上記については単に本発明の原理を示すものである。更に、多数の変形や変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応する全ての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
10 情報処理装置
11 プロセッサ
12 記憶部
13−1〜13−4 プログラムモジュール
14 履歴情報
Ra,Rb,Rc レジスタ
11 プロセッサ
12 記憶部
13−1〜13−4 プログラムモジュール
14 履歴情報
Ra,Rb,Rc レジスタ
Claims (6)
- 複数のプログラムモジュールを実行するコンピュータが行うエラー分析方法であって、
前記複数のプログラムモジュールが実行される間、前記コンピュータのプロセッサが備える複数のレジスタの少なくとも一部について、当該少なくとも一部のレジスタへの値の書き込みを検出し、検出した書き込みを示す履歴情報であって、前記コンピュータが備えるメモリのうち書き込まれた値を記憶していた記憶領域を示す情報を含む履歴情報を記録し、
前記複数のプログラムモジュールの中に含まれる一の命令でエラーが発生すると、前記少なくとも一部のレジスタのうち当該命令で参照されたレジスタを特定し、
前記参照されたレジスタへの値の書き込みを示す履歴情報に基づいて、前記参照されたレジスタに書き込まれた値を記憶していた前記メモリの記憶領域を特定し、特定した記憶領域に基づいて、前記複数のプログラムモジュールのうちエラーの原因となったプログラムモジュールを判定する、
エラー分析方法。 - 複数のプログラムモジュールを実行するコンピュータが行うエラー分析方法であって、
前記複数のプログラムモジュールが実行される間、前記コンピュータのプロセッサが備える複数のレジスタの少なくとも一部について、当該少なくとも一部のレジスタへの値の書き込みを検出し、検出した書き込みを示す履歴情報を記録し、
前記複数のプログラムモジュールの中に含まれる一の命令でエラーが発生すると、前記少なくとも一部のレジスタのうち当該命令で参照されたレジスタを特定し、
前記参照されたレジスタへの値の書き込みを示す履歴情報に基づいて、前記参照されたレジスタに書き込まれた値が正常か判定し、
正常と判定された場合、前記参照されたレジスタに値を書き込むときに参照された他のレジスタを特定し、前記参照された他のレジスタへの値の書き込みを示す履歴情報に基づいて、前記複数のプログラムモジュールのうちエラーの原因となったプログラムモジュールを判定する、
エラー分析方法。 - 書き込みを検出する前記少なくとも一部のレジスタを、前記プロセッサが備える前記複数のレジスタのうちベースアドレスを記憶するレジスタに限定する、
請求項1または2記載のエラー分析方法。 - 前記少なくとも一部のレジスタへの値の書き込みの検出は、前記プロセッサが備えるエミュレータを用いて行い、
前記エラーの原因となったプログラムモジュールの判定は、前記プロセッサに実行させる他のプログラムモジュールを用いて行う、
請求項1乃至3の何れか一項に記載のエラー分析方法。 - 複数のプログラムモジュールを実行する情報処理装置であって、
複数のレジスタを備えるプロセッサと、
メモリと、を有し、
前記プロセッサは、
前記複数のプログラムモジュールが実行される間、前記複数のレジスタの少なくとも一部について、当該少なくとも一部のレジスタへの値の書き込みを検出し、検出した書き込みを示す履歴情報であって、前記メモリのうち書き込まれた値を記憶していた記憶領域を示す情報を含む履歴情報を記録し、
前記複数のプログラムモジュールの中に含まれる一の命令でエラーが発生すると、前記少なくとも一部のレジスタのうち当該命令で参照されたレジスタを特定し、前記参照されたレジスタへの値の書き込みを示す履歴情報に基づいて、前記参照されたレジスタに書き込まれた値を記憶していた前記メモリの記憶領域を特定し、特定した記憶領域に基づいて、前記複数のプログラムモジュールのうちエラーの原因となったプログラムモジュールを判定する、
情報処理装置。 - 複数のプログラムモジュールを実行するコンピュータに、
前記コンピュータのプロセッサが備える複数のレジスタの少なくとも一部について、前記複数のプログラムモジュールが実行される間に行われた、当該少なくとも一部のレジスタへの値の書き込みを示す履歴情報であって、前記コンピュータが備えるメモリのうち書き込まれた値を記憶していた記憶領域を示す情報を含む履歴情報を記録し、
前記複数のプログラムモジュールの中に含まれる一の命令でエラーが発生すると、前記少なくとも一部のレジスタのうち当該命令で参照されたレジスタを特定し、
前記参照されたレジスタへの値の書き込みを示す履歴情報に基づいて、前記参照されたレジスタに書き込まれた値を記憶していた前記メモリの記憶領域を特定し、特定した記憶領域に基づいて、前記複数のプログラムモジュールのうちエラーの原因となったプログラムモジュールを判定する、
処理を実行させるエラー分析プログラム。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2013/057798 WO2014147742A1 (ja) | 2013-03-19 | 2013-03-19 | エラー分析方法、情報処理装置およびエラー分析プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP6079868B2 true JP6079868B2 (ja) | 2017-02-15 |
JPWO2014147742A1 JPWO2014147742A1 (ja) | 2017-02-16 |
Family
ID=51579476
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2015506440A Active JP6079868B2 (ja) | 2013-03-19 | 2013-03-19 | エラー分析方法、情報処理装置およびエラー分析プログラム |
Country Status (2)
Country | Link |
---|---|
JP (1) | JP6079868B2 (ja) |
WO (1) | WO2014147742A1 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022195892A1 (ja) * | 2021-03-19 | 2022-09-22 | 三菱電機株式会社 | トレース制御装置、エミュレータ、トレース制御方法、および、トレース制御プログラム |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06348540A (ja) * | 1993-06-11 | 1994-12-22 | Nec Corp | プログラムトレース回路およびプログラムトレース方法 |
JPH10320232A (ja) * | 1997-05-20 | 1998-12-04 | Kofu Nippon Denki Kk | マイクロプログラムデバッグ装置 |
-
2013
- 2013-03-19 WO PCT/JP2013/057798 patent/WO2014147742A1/ja active Application Filing
- 2013-03-19 JP JP2015506440A patent/JP6079868B2/ja active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06348540A (ja) * | 1993-06-11 | 1994-12-22 | Nec Corp | プログラムトレース回路およびプログラムトレース方法 |
JPH10320232A (ja) * | 1997-05-20 | 1998-12-04 | Kofu Nippon Denki Kk | マイクロプログラムデバッグ装置 |
Also Published As
Publication number | Publication date |
---|---|
JPWO2014147742A1 (ja) | 2017-02-16 |
WO2014147742A1 (ja) | 2014-09-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10621066B2 (en) | Automatic repair of scripts | |
US11321081B2 (en) | Affinity recommendation in software lifecycle management | |
JP6543609B2 (ja) | ジャストマイコードを使用したジャバスクリプトデバッギング | |
US8949672B1 (en) | Analyzing a dump file from a data storage device together with debug history to diagnose/resolve programming errors | |
CN105468482B (zh) | 一种硬盘盘位识别和故障诊断方法及其服务器设备 | |
US11030074B2 (en) | Code update based on detection of change in runtime code during debugging | |
US9842044B2 (en) | Commit sensitive tests | |
US10872027B2 (en) | Run-time or compile-time error solutions for locating missing program elements in a programming environment | |
US8370815B2 (en) | Electronic device and method for debugging programs | |
US20110202903A1 (en) | Apparatus and method for debugging a shared library | |
CN112783764B (zh) | 应用程序的自动化测试方法及装置、存储介质、终端 | |
JP6079868B2 (ja) | エラー分析方法、情報処理装置およびエラー分析プログラム | |
JP2016076071A (ja) | ログ管理装置,ログ管理プログラム,及びログ管理方法 | |
US20090259835A1 (en) | System and method for tracking and recording system configurations of electronic devices | |
US7500145B2 (en) | Anomaly-driven software switch to capture event responses and automate recovery | |
US9940068B2 (en) | Device and method for determining memory leaks | |
US9710319B2 (en) | Information processing apparatus and information collection method | |
CN112286804B (zh) | 系统的调试方法、装置、设备和介质 | |
KR101116053B1 (ko) | 파일 백업 방법과 상기 방법을 수행할 수 있는 장치들 | |
US20240045416A1 (en) | Logging support apparatus, logging system, method for logging support, and recording medium | |
JP2017021625A (ja) | ダンプ採取プログラム、ダンプ採取方法および情報処理装置 | |
JP6069719B2 (ja) | ソフトウェアデバッグ方法、情報処理装置およびプログラム | |
JP2014093012A (ja) | ディスクアレイコントローラ、方法、及び、プログラム | |
CN111125296A (zh) | 一种日志测试的方法和设备 | |
JPH11184728A (ja) | デバッグ処理方法ならびに装置及び同方法がプログラムされ記録される記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20161220 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20170102 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6079868 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |