JP2001134464A - 情報処理方法および装置 - Google Patents

情報処理方法および装置

Info

Publication number
JP2001134464A
JP2001134464A JP31887999A JP31887999A JP2001134464A JP 2001134464 A JP2001134464 A JP 2001134464A JP 31887999 A JP31887999 A JP 31887999A JP 31887999 A JP31887999 A JP 31887999A JP 2001134464 A JP2001134464 A JP 2001134464A
Authority
JP
Japan
Prior art keywords
program
data
timing
stored
operation condition
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.)
Withdrawn
Application number
JP31887999A
Other languages
English (en)
Inventor
Takeshi Koizumi
毅 小泉
Yoichi Iwabuchi
洋一 岩渕
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP31887999A priority Critical patent/JP2001134464A/ja
Publication of JP2001134464A publication Critical patent/JP2001134464A/ja
Withdrawn legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【課題】不十分な情報からの直感的推理に頼っていた従
来のプログラムの動作履歴の解析/検証作業に対して、
充分な情報を提供することを可能とする。 【解決手段】プログラムの動作履歴情報を生成するにお
いて、関数呼出し識別部300は動作条件を保存すべき
タイミングとして、実行ファイル1200中の関数呼び
出し命令を検出する。この検出により、関数呼出し識別
部300、動作条件記憶部400は、当該プログラムの
全ての動作条件を当該関数名との組で動作条件履歴デー
タ2000として外部記憶装置10に記憶する。動作条
件再現部700は、記憶された動作条件履歴データ20
00から、任意の関数名における動作条件を読み出し
て、ユーザに提示する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、プログラムのテス
トあるいはデバッグ作業における、プログラムの動作を
解析する際の、またはプログラムのテストを行う際の、
プログラムの動作条件の履歴を再現する装置に関するも
のである。
【0002】
【従来の技術】従来、プログラムの動作条件を追跡、再
現する装置として、一般にデバッガーと呼ばれるものが
存在する。このデバッガーにおいては、(1)記憶、表
示、再現する動作条件(変数あるいは変数が格納されて
いるRAM上の位置)や、(2)動作条件の記憶、表
示、再現を行なう時点など、を予め人手により指定し
て、特定のプログラムの任意の動作条件を、任意の時点
で記憶、表示、再現するものが存在する。
【0003】しかしながら、従来の装置は、前記プログ
ラムの動作条件、およびプログラムの動作条件を記憶す
る時点を、自動的に識別するものではない。すなわち、
利用者は、追跡しようとするプログラムの動作条件と、
当該動作条件を記憶する時点をあらかじめ特定しておか
なければない。従って、プログラムが予想外の動作をし
た場合、プログラムの実行後に、プログラムの動作を詳
細に再現/検証することは非常に困難であった。
【0004】また、あらかじめ追跡しようとする動作条
件、および動作条件の記憶時点を特定することなく、自
動的にプログラムの全ての動作条件を記憶する装置とし
ては、プログラムの異常終了時に、自動的に、プログラ
ム終了時点の全ての動作条件を記憶する装置が存在す
る。しかし、この装置が記憶する動作条件は、あくまで
もプログラム終了時点のものであり、プログラムの終了
に至る動作履歴を、後から追跡することはできなかっ
た。
【0005】また、動的な実行の履歴を詳細に記憶し、
プログラム実行後の解析に供するのとしては、カバレッ
ジテスタが一般的であるが、これはプログラム中のどの
部分を実行したかを示すものであり、特定の時点に遡っ
てその時点でのプログラムの動作条件を再現することは
できなかった。
【0006】
【発明が解決しようとする課題】従って、従来はソフト
ウェアのデバッグもしくはテスト作業において、プログ
ラムの動作履歴をプログラムの実行後に追跡するため
に、(1)デバッガーを用いて、追跡対象とするプログ
ラムの動作条件と、プログラムの動作条件を記憶する時
点を予め指定しておき、その情報からプログラムの動作
履歴を推理するか、(2)プログラムの終了時点に記憶
されるプログラムの全ての動作条件から、プログラムの
終了に至る動作履歴を推理するか、(3)カバレージテ
スターが出力するソースコード上の各実行ステップが実
行されたか否かの情報から、プログラムの動作履歴を推
理するかのいずれか、または、これらの複数の手段を組
み合わせて用いた。従って、従来の装置では、プログラ
ムの品質保持において必須であるところの、プログラム
実行後に動作履歴を追跡して検証する作業の効率を著し
く害していた。
【0007】本発明は上記従来例に鑑みてなされたもの
で、従来、不十分な情報からの直感的推理に頼っていた
プログラムの動作履歴の解析/検証作業に対して、充分
な情報を提供することを目的とする。
【0008】また、本発明の他の目的は、記憶した動作
条件を、任意の関数呼び出し時点、または関数呼び出し
の順番に応じて再現することによって、プログラムの実
行後の任意の時点での、プログラムの動作履歴のうち任
意の範囲を再現して検証することを可能とすることにあ
る。
【0009】
【課題を解決するための手段】上記目的を達成するため
に本発明の情報処理装置は例えば以下のような構成から
なる。すなわち、プログラムの動作履歴情報を生成する
情報処理装置であって、動作条件を保存すべきタイミン
グを検出する検出手段と、前記検出手段で前記タイミン
グが検出された場合に、当該プログラムの全ての動作条
件を、当該タイミングとの組で記憶する記憶手段と、前
記記憶手段によって記憶された、任意のタイミングにお
ける動作条件を提示する提示手段とを備える。
【0010】また、上記の目的を達成するための本発明
による情報処理方法は、例えば以下の工程を備える。す
なわち、プログラムの動作履歴情報を生成する情報処理
方法であって、動作条件を保存すべきタイミングを検出
する検出工程と、前記検出工程で前記タイミングが検出
された場合に、当該プログラムの全ての動作条件を、当
該タイミングとの組でメモリに記憶する記憶工程と、前
記記憶工程によってメモリに記憶された、任意のタイミ
ングにおける動作条件を提示する提示工程とを備える。
【0011】
【発明の実施の形態】以下、添付図面を参照して本発明
の好適な実施形態を詳細に説明する。
【0012】[第1の実施形態]図1は本実施形態によ
るプログラム動作履歴再現装置の構成を示すブロック図
である。
【0013】図1において、1はCPUであり、以下に
説明する3〜10の装置を2で示したバスを介してアク
セスし制御を行なう。CPU1は図2により後述するよ
うに、レジスタ3200、および、プログラムカウンタ
3100を持っている。3はバス2を介してCPU1か
らアクセス可能な読み出し専用メモリ(ROM)であ
り、本実施形態でその動作を詳細に説明する処理プログ
ラム3a、及び処理プログラム3aにより使用されるパ
ラメータ3bが格納されている。
【0014】4は読み書き可能なメモリ(RAM)であ
り、ROM3内の処理プログラム3aが動作履歴を解析
する対象となるところのプログラム(以下解析対象プロ
グラムと呼ぶ)のソースコードファイルを格納するソー
スコード格納領域4d、解析対象プログラムの実行ファ
イルを格納する実行ファイル格納領域4c、解析対象プ
ログラムの動作に必要なデータ格納領域4a、解析対象
プログラムの動作に必要なスタック領域4bを格納する
スタック格納領域が確保されている。尚、データ格納領
域4a、及びスタック格納領域4bの詳細については後
述する。
【0015】5は入力インターフェースであり、6で示
したキーボード、マウス、タブレット等の入力装置を介
してなされる入力を受け取る。7は出力インターフェー
スであり、8で示したCRT、LCD等の表示媒体8
a、更にはプリンタ、プロッタ等の出力装置8bに対し
データの表示及び出力を行なう。
【0016】9は外部記憶装置インターフェースであ
り、10で示したHD、FD、CD−ROM、MODな
どの外部記憶装置に対するデータの入出力を行なうもの
である。外部記憶装置10には、本プログラム動作条件
再現装置が作成する、プログラムの動作条件の記憶領域
(動作条件格納領域)10aが確保されている。動作条
件格納領域10aの詳細についても後述する。
【0017】本第1の実施形態では、処理プログラム3
a(動作の詳細は後述する)や、パラメータ3bがRO
M3上にあるものとして、また、処理対象となる各デー
タの格納領域(4a〜4c)がRAM4上にあるものと
して説明を行なうが、これらは全て、外部記憶装置10
上に配置することも可能であり、更に、必要に応じて、
外部記憶装置10からRAM上にロードし使用すること
もできる。また、CPU1上のキャッシュメモリ上に配
置することも同様に可能である。
【0018】図2は、図1の構成における処理プログラ
ム3aの構成要素と、それら構成要素が図1で示した各
格納領域に格納されるデータとどのような関係にあるか
を示す図である。
【0019】図2において、100は入力編集部で、入
力インターフェース5を介して入力される、複数の関数
から構成され、かつそれらの呼び出しを行なうことで動
作するプログラムのソースコードを、RAM4上に設け
られたソースコード格納領域4d上にソースコード11
00として作成する。
【0020】200はソースコード1100の内容をC
PUが実行可能である機械語の形式に変換し、それを実
行ファイル1200として実行ファイル格納領域4cに
格納するソースコード解釈部である。同時に、後述の関
数呼び出し識別部300、及び、動作条件記憶部400
に相当する実行コードを、実行ファイル1200中に埋
め込む。
【0021】ここで、ユーザが動作履歴を保存する箇所
を限定したい場合は、限定された一部の関数に対しての
み上記実行コードを埋め込んでも構わない。例えば、実
行ファイル中の所望の区間にある関数に対して実行コー
ドを埋め込んだり、所望の名称の関数に対して実行コー
ドを埋め込むように構成することも可能である。
【0022】300は関数呼び出し識別部であり、ソー
スコード解釈部200により得られた実行ファイル12
00を実行し、その実行過程において関数呼び出しが行
なわれる毎に、当該時点のCPU1内のプログラムカウ
ンタ3100の値とレジスタ3200の値、及び呼び出
された関数名とその順番を認識し、動作条件履歴データ
2000の一部を生成する。ここで、ユーザが動作履歴
を保存する箇所を限定したい場合は、限定された一部の
関数に対してのみ上記保存を行なうこととしても構わな
い。
【0023】400は動作条件記憶部であり、実行ファ
イル1200の実行過程で関数呼び出しが行なわれる毎
に、RAM4上のデータ格納領域4a、スタック格納領
域4b上に各々配置されている、当該時点の全てのグロ
ーバルデータ(関数にまたがって利用される共有デー
タ)、及び全てのスタックデータを、関数呼び出し識別
部300によって記憶された呼出先関数名、プログラム
カウンタ3100の値、レジスタ3200の値と対にし
て、動作条件履歴データ2000として、動作条件格納
領域10aに格納する。
【0024】ここで、ユーザが動作履歴を保存する箇所
を限定したい場合は、限定された一部の関数または一部
期間のみ上記保存を行なうこととしても構わない。
【0025】また、動作条件記憶部400は、外部記憶
装置10の容量や、実行スピードの問題などにより、関
数呼び出しが行なわれる度に全ての動作条件を記憶する
ことが困難な場合、当該動作条件記憶部に、別のCPU
を割り当てて、独自にバス2を監視して、RAM4への
書き込み命令を逐次保持することによって動作条件を記
憶することができる。この方法については第2の実施形
態で説明する。
【0026】500は動作条件表示部であり、解析対象
プログラムの実行後の任意の時点で、関数呼び出し識別
部300及び、動作条件記憶部400によって識別/記
憶された、複数の時点のプログラムの全ての動作条件の
うち再現する時点に対応する動作条件を特定するため、
各々の動作条件に対応する関数呼び出し時点で呼び出さ
れた関数名を用いて、動作条件を記憶した時点を一覧表
示する。この際、表示は、出力インターフェース7を介
して行なわれる。
【0027】600は動作条件指定部であり、動作条件
表示部500で関数名を用いて表示された動作条件の一
覧から、利用者が再現したい動作条件を指定する。動作
条件の指定は入力インターフェース5を通じて行なわれ
る。
【0028】700は動作条件再現部であり、解析対象
プログラム実行後の任意の時点で、動作条件指定部60
0を用いて利用者から指定された、任意の関数呼び出し
時点での動作条件履歴データ2000の内容を、グロー
バルデータ1300、スタックデータ1400として、
各々データ格納領域4a、スタック格納領域4b上に再
現し、また、CPU1内のプログラムカウンタ310
0、及びレジスタ3200を各々再現する。
【0029】2000は動作条件履歴データであり、関
数呼び出し識別部300及び、動作条件記憶部500に
よって識別/記憶された、複数の時点のプログラムの全
ての動作条件を記憶した動作条件履歴データである。動
作条件履歴データ2000は、グローバルデータ130
0と、スタックデータ1400と、CPU1内のプログ
ラムカウンタ3100の値、及びレジスタ3200の値
の組みと、当該データを識別するための情報によって構
成されている。
【0030】この動作条件履歴データ2000は、解析
対象プログラムを実行した後の任意の時点で、任意の関
数呼び出し時点の動作条件を再現するために用いるもの
であり、当該目的を達成する限りにおいて、動作条件格
納領域10aの容量節約などの理由で、全ての動作条件
をそのまま保存するのではなく、関数呼び出し間の差分
を保存したり、圧縮して保存するなど他の保存方法を用
いても構わない。
【0031】CPU1内にあるプログラムカウンタ31
00は、現在実行するプログラムのアドレスを示すもの
であり、本装置において再現するプログラムの動作条件
の一部を構成する。また、CPU1内にあるレジスタ3
200は、複数の格納領域から構成されている。その一
部は、グローバルデータ1300のうち実行中のプログ
ラムが使用するグローバルデータの位置を決定するため
に利用され、また別の一部は、スタックデータ1400
のうち実行中のプログラムが使用するスタックデータの
位置を決定するために利用される。
【0032】このように、CPU1内のレジスタ320
0の値は、本装置において再現するプログラムの動作条
件の一部を構成する。しかし、本発明の具体的実施とし
ては、どのレジスタがどのように利用されていても構わ
ない。
【0033】図3はプログラムが複数の関数から構成さ
れ、かつそれらの関数呼び出しを行なうことで動作する
プログラムの一例を示す図である。なお、図3に示した
プログラムはプログラム言語Cにより記述されたプログ
ラムであるが、関数呼び出しもしくはそれに類する仕様
を有するその他の言語で記述されても本発明が同様に適
応し得ることは当然である。
【0034】図3において、左端に付加した数字(1か
ら58)はソースコード中の行番号を示している。以下
の説明ではこの番号を使用する。
【0035】図3では、main()、a()、
b()、c()、d()、e()、からなる6つの関数
及びそれらの間の呼び出し関係が定義されている。関数
mainは9行目から24行目で定義されており、14
行目で関数a()、17行目で関数b()、18行目で
関数c()、21行目で関数d()、の関数呼び出しを
行なっている。
【0036】次に、図3のプログラムを基に、図4及
び、図4のステップS10をより詳細に説明した図5を
用いて、基本的な処理を説明する。図4は第1の実施形
態による動作履歴の格納および再現処理を説明するフロ
ーチャートである。また、図5は図4のステップS10
における動作履歴の格納処理を詳細に説明するフローチ
ャートである。
【0037】ステップS1でオペレータは入力インター
フェース5から、入出力編集部100を用いて図3に示
したようなプログラムのソースコードを入力し、それを
ソースコード1100としてRAM4に格納する。次
に、ステップS2で、前記記憶されたソースコード11
00の内容に基づき、ソースコード解釈部200を用い
て実行ファイル1200を生成する。
【0038】この実行ファイルを作成する際、全ての関
数呼び出しに対して無条件に、後で述べる関数呼び出し
識別部300、及び、動作条件記憶部400に対応する
実行コードを、RAM1200の中の、実行ファイル1
200中に埋め込み記憶する。この際、ユーザが動作履
歴を保存する箇所を限定したい場合は、限定された一部
の関数に対してのみ上記実行コードを埋め込んでも構わ
ない。
【0039】図6はステップS2で生成された実行コー
ド1200の論理的なイメージ図である。実行ファイル
1200の内容はCPUに解釈されるバイナリ形式であ
り、人が直接理解できないため、図6では実行ファイル
1200の代わりに、実行ファイル1200と内容が等
価であるソースコード1100の内容を用いて、ステッ
プS2の実行後の実行ファイル1200の内容に相当す
る条件を示している。
【0040】図6では、行番号14の「a()」、18
の「c()」、21の「d()」、30の「d()」、
32の「e()」、40の「e()」、45の
「d()」、46の「e()」の8箇所で関数呼び出し
が行なわれている。従って、図6では、これら8箇所の
各関数呼び出しの直前に、関数呼び出し識別部300及
び、動作条件記憶部400に相当する実行コードが埋め
込まれていることが示されている。
【0041】本例では、関数呼び出しの直前に関数呼び
出し識別部300及び、動作条件記憶部400に相当す
る実行コードを埋め込み、関数呼び出し直線の動作条件
を記憶し、再現するものとして説明を続ける。しかし、
関数呼び出しの直後(各関数の最初の実行命令の直前)
に、関数呼び出し識別部300及び、動作条件記憶部4
00に相当する実行コードを埋め込み、関数呼び出し直
後の動作条件を記憶、再現することもできる。すなわ
ち、どちらであっても、本発明の効果を同等に得ること
ができる。
【0042】ステップS3では、ステップS2で作成し
た実行ファイル1200を実行し、同じくステップS2
により実行ファイル1200中に埋め込まれた実行コー
ドにより、その実行過程で関数呼び出しが行なわれる毎
に、関数呼び出し識別部300により、当該時点のプロ
グラムカウンタ3100の値、レジスタ3200の値、
及び呼び出された関数名を、その順番を保持しながら動
作条件履歴データ2000に追加格納していく。
【0043】この際、ユーザが動作履歴を保存する期
間、あるいは関数を限定したい場合は、限定された一部
の期間にあるいは関数に対してのみ上記格納を行なうこ
ととしても構わない。これは、前記ステップS2で、実
行コードを埋め込む箇所を限定しても、本発明の効果を
同等に得ることができるのと同様である。
【0044】ステップS4では、動作条件記憶部400
が、当該関数呼び出し時点における、RAM4上のグロ
ーバルデータ4aとスタックデータ4bの全てを、ステ
ップS3で関数呼び出し識別部300が格納したプログ
ラムカウンタ3100の値と、レジスタ3200の値、
及び呼び出された関数名と対になるように、動作条件履
歴データ2000に追加格納する。
【0045】ここで、必ずしも前記のように全ての動作
条件を無条件に格納する必要は無く、前回の動作条件と
の差分を識別してこの差分のみを動作条件として記憶し
ても構わないが、以下では簡便のため、全ての動作条件
を無条件に格納するものとして説明を続ける。
【0046】ステップS3及びステップS4で、実行フ
ァイル1200の実行が完了する。以下続くステップS
5、S6及びS7は、実行ファイル1200の実行後、
任意の時点で実行ファイル1200の動作履歴の確認、
検証のために行なわれるステップである。
【0047】ステップS5では、ステップS3及びS4
でRAM4に蓄積された実行ファイル1200の動作履
歴の、外部記憶装置10上にある動作条件履歴データ2
000のうち、どのデータを再現、検証するかを特定す
るため、動作条件表示部500が、動作条件履歴データ
2000に記憶されている関数名を、実行順序を保持し
ながら取り出して、一覧表示する。
【0048】ステップS6では、ステップS5で表示し
た関数名を含む一覧表示を参考に、動作条件指定部60
0を用いて、利用者が任意の実行時点を指定し、動作条
件履歴データ2000のうち、どの時点のデータを再
現、検証するかを決定する。そして、ステップS7で
は、動作条件再現部700によって、ステップS6で指
定された動作条件履歴データ2000の中の特定の時点
のデータを、プログラムカウンタ3100、レジスタ3
200、グローバルデータ4a、スタックデータ4bヘ
コピーし、当該時点の動作条件を再現する。
【0049】このように、本装置によって動作条件が再
現された後は、再現された特定関数の呼出時点の動作条
件に基づき、本発明が属する領域で、常識的に用いられ
ているデバッガーを用いるなどして、当該関数の動作及
びそれ以後の任意の時点までの動作を再現、検証してい
くことができる。
【0050】以上で図4のフローチャートに基づいた、
本実施形態の全体的な動作手順の説明を終わる。
【0051】次に、図4のステップS10(ステップS
3及びステップS4)に相当する実行ファイル1200
の実行過程を、図5等を参照して、更に詳細に説明す
る。
【0052】実行ファイル1200の内容はCPU1に
解釈されるバイナリ形式であり、人が直接理解できない
ため、図6では、実行ファイル1200の代わりに、実
行ファイル1200と内容が等価であるソースコード1
100の内容例を用いて、ステップS2実行後の実行フ
ァイル1200の内容に相当する情報を示している。以
下、この図6を用いて実際にプログラムが実行される順
序に従って説明を進める。
【0053】今、図7に示すように(図7は引数なしの
場合のプログラム実行例を示す図である)、図3のプロ
グラムソースコード(sample.c)をコンパイルした結果の
実行ファイルのファイル名をsampleとし、 sample のように、引数なしで実行した場合を考える。
【0054】図6では、C言語の規約によりまずは関数
main()が実行対象となり、13行目のif文、
“if(argc==1)”が実行される。
【0055】前記if文では、引数のargcの値を調
べているが、図6に示したように、ここでは引数なしで
実行されているためargcは1であり、上記if文の
()内は真となる。そのため、次の実行コードとして識
別されるのは、14行目の、“a()”である。
【0056】この実行コードの直前には、図6に示す通
り、図4のステップS2で挿入された、関数呼び出し識
別部及び動作条件記憶部の実行コードが埋め込まれてい
る。従って、この実行コードにより、関数呼び出し識別
部300及び動作条件記憶部400の処理(ステップS
10)が起動されることになる。このステップS10の
詳細は図5に示されており、以下、図5のフローチャー
トを基に説明する。
【0057】ステップS101では、現時点のプログラ
ムの動作条件のうち、プログラムカウンタ3100の
値、及びレジスタ3200の値をその後の動作によって
変更されることを避けるため、あらかじめRAM4上に
確保された領域に待避する。
【0058】ステップS102では、ステップS101
でRAM4上に待避したプログラムカウンタ3100の
値、レジスタ3200の値、及び、図4のステップS2
で埋め込まれた呼び出し先関数名であるa()を動作条
件履歴データ2000に格納する。このとき、動作条件
履歴データ2000の内容は、図8のようになってい
る。図8は作成中の動作条件履歴データを示す図であ
る。
【0059】図8に示すように、動作条件履歴データ2
000は関数が呼ばれた「順番」、「関数名」、「プロ
グラムカウンタ」、「レジスタ」、「グローバルデー
タ」、「スタックデータ」の各領域によって構成されて
いることが示されており、この時点では、「グローバル
データ」、「スタックデータ」の各領域は、空欄となっ
ている。
【0060】図8に示した動作条件履歴データ2000
の形式のうち、「順番」については、関数名との組みで
特定の関数呼び出しを識別できる任意のID(呼び出さ
れた時刻など)を用いても構わない。また、動作条件履
歴データ2000に格納された順序そのものをIDとし
て用いるのであれば、「順番」に相当する値を保持しな
くても構わない。
【0061】また、「順番」、「関数名」、「プログラ
ムカウンタ」、「レジスタ」、「グローバルデータ」、
「スタックデータ」の各領域は、結果としてこれらのデ
ータの組と記憶された順序を識別できれば、他のどのよ
うなデータの保持形式を用いても本発明の効果を同等に
得ることができることは明らかである。例えば、各デー
タそのものは、別の記憶装置に格納しておき、図8に示
したテーブルには、各データの記憶位置を示す情報のみ
を格納する方式などでも実現できる。
【0062】また、RAM4上のグローバルデータ領域
4a、スタック領域4bが確定できない場合は、図8の
「グローバルデータ」領域と「スタック領域」領域を区
別して記憶する必要はない。
【0063】また、動作条件履歴データ2000には、
図8に示したデータの他にも、動作履歴の表示、再現の
際に利用することができる任意の情報を加えてもよい。
【0064】また、本実施形態では、図8の「レジス
タ」領域には、レジスタ3200の全ての領域を無条件
にコピーしているが、プログラムの動作条件と無関係な
使用されていないレジスタなどが特定できる場合、それ
らを除いて必要なレジスタ領域のみを選択的にコピーし
ても、本発明の効果と同等の効果を得ることができるこ
とは明らかである。
【0065】次に、ステップS103では、動作条件記
憶部400により、グローバルデータ、及びスタックデ
ータを動作条件履歴データ2000に格納する。
【0066】図9は、RAM4の構成の一例を示した図
である。通常、RAM領域はオペレーティングシステム
によって、図9のように分割管理されており、並列して
動作する全てのプログラムのグローバル及びスタックデ
ータは、RAM4上の特定の領域に割り当てられてい
る。
【0067】本例では(図9)、グローバルデータ領域
はアドレス5000番地から7FFF番地までの領域に
割り当てられており、スタックデータ領域は、アドレス
E000番地からEFFF番地までに割り当てられてい
るものとして説明するが、この番地以外のどのような場
所に割り当てられていても、本発明の効果を同等に得る
ことができることは当然である。
【0068】また、グローバルデータ領域と、スタック
データ領域の位置が図9のように明確に識別できない場
合は、この2つの領域を敢えて識別する必要はない。
【0069】また、これらの領域のうち、図6に示した
実行ファイル1200で用いるグローバルデータ及びス
タックデータがどこに位置するかは、上記ステップS1
02で動作条件履歴データ2000に保存したレジスタ
3200の値によって、直接または間接にポイントされ
ている。
【0070】図10はその一例であり、レジスタからR
AMの利用領域を得る関係を例示する図である。但し、
具体的にどのレジスタがどのような経路をたどって目的
とするデータの番地を示しているかは、具体的な言語や
コンパイラによるものであり本発明では、上記ステップ
S102で示したように、全てのレジスタを無条件に記
憶、再現するものであるため、図10のようなプログラ
ム中で使われている変数のアドレスを特定する機構がど
のようなものであっても構わない。但し、この機構が明
らかになっており、プログラムの動作条件の決定に無関
係なレジスタが特定できる場合には、レジスタを選択的
に保存、再現することにしても、本発明の効果を同等に
得ることができることは当然である。
【0071】ステップS103では、図9に示したRA
M4のアドレス5000番地から7FFF番地までのデ
ータを動作条件履歴データ2000の「グローバルデー
タ」領域に、アドレスE000番地からEFFF番地ま
でのデータを動作条件履歴データ2000の「スタック
データ」領域にそれぞれコピーする。
【0072】図11は、ステップS103実行後の動作
条件履歴データ2000の条件を示した図である。ここ
では、RAM4上のデータを無条件に動作条件履歴デー
タ2000にコピーしているが、データを圧縮してコピ
ーするとか、前回との差分をコピーするなどの他の方法
もあり、これらのいずれの方法を用いてもよい。すなわ
ち、図4のステップS5、S6で動作条件を再現する際
に、データを保存時の形に再現できる方法であれば、ど
のような方法であっても構わない。
【0073】図11において、動作条件履歴データ20
00の「グローバルデータ」領域及び「スタックデー
タ」領域には、RAM4上のデータが無条件にコピーさ
れているが、「レジスタ」領域の値によって決定される
「グローバルデータ」領域の特定の位置には、実行ファ
イル1200で利用されているグローバルデータの値
が、また、「スタックデータ」領域の特定の位置には、
関数main()で利用されているスタックデータの値
が記憶されている。
【0074】図6において実行ファイル1200中で利
用されているグローバルデータは、7行目で定義されて
いるvalのみであり、この時点でのvalの値は、 7 int val=0; で与えられた初期値の0である。また、関数mai
n()で利用されているスタックデータには、11行目
で定義されているnumがあり、 11 int num で初期値が与えられていないため、その値は不定であ
る。
【0075】尚、スタックデータ領域には、関数の戻り
アドレスなど、関数の動作に必要なデータも格納されて
おり、これらも動作条件履歴データ2000の「レジス
タ」領域の値によって決定される「スタックデータ」領
域の特定の位置にコピーされている。
【0076】以上で、関数a()の実行直前時点での実
行ファイル1200の全ての動作条件が、動作条件履歴
データ2000に記憶されたことになり、 14 a(); を実行し、関数a()が実際に呼び出される。
【0077】関数a()の呼び出しが実行されると、実
行は図6の30行目に移り、以降31行目、32行目の
コードが順次実行されることになる。
【0078】この間、30行目で関数a()は関数
d()を呼び出している。
【0079】また、31行目の繰り返しにより32行目
の関数e()の呼び出しは5回行なわれることになる。
ここで、図3のプログラムソースコードにおいて関数d
()、及びe()はそれぞれの関数内部では関数呼び出
しを行なっていない。
【0080】以上の処理手順により、30行目での関数
d()の呼び出し時点で1回、32行目での関数e()
の呼び出し時点で5回、関数呼び出し識別部300及び
動作条件記憶部400が、上述の図5のフローチャート
に沿った説明の通り動作し、動作条件履歴データ200
0には計7回分の動作条件履歴データが記憶されること
になる。
【0081】次に、引数指定なしの場合の実行過程を説
明する。関数a()の実行を完了して後、次に、mai
n()に処理が戻る。ここで、引数が指定されていない
場合は処理が終わるため、次の実行コードはなく、実行
ファイル1200の実行が終わる。
【0082】図12は、この時点(実行ファイルの実行
終了時)での動作条件履歴データ2000の内容を示し
た図である。
【0083】また、図6のプログラムにおいてグローバ
ルデータとして7行目で宣言されている変数valの値
は、関数d()で、0に初期化され、その後関数e()
により、関数e()が呼び出される度に1ずつインクリ
メントされ、第7最終行に示すように、プログラムの終
了時点では5となる。
【0084】図13は、動作条件履歴データのグローバ
ルデータの内容例を示す図である。ず13は、特に前記
グローバルデータvalの値変化に着目することを目的と
して、図12に示した動作条件履歴データ2000の
「グローバルデータ」領域のうち、「レジスタ」領域の
値によって決定される、グローバルデータvalに相当す
る位置の値を示している。
【0085】すなわち、プログラム中の特定のグローバ
ルデータの値に変化を記憶することができることは、前
記説明と、図13より、RAM4上のグローバルデータ
領域の全てと、全てのレジスタの値を記憶することによ
ってできる。また、スタック領域のデータについても同
様であることは、理解できよう。
【0086】一般に、グローバルデータは並列して動作
する他のプログラムにも公開(アクセス可能)されてい
るデータであり、他のプログラムによって更新される可
能性もある。
【0087】図6のプログラムの32行目の関数e()
の5回呼び出しのうち、2回目と3回目の間に、グロー
バルデータvalのデータが、図6のプログラムと同様
に、関数呼び出し識別部と、動作条件記憶部に相当する
実行コードを埋め込まれた他のプログラムの関数Zによ
って、val=5として更新されたものとすると、図6の
プログラム実行終了後の動作条件履歴データ2000の
内容は、図14のようになっている。このときのプログ
ラムの実行結果は、図15に示すように、val=8とな
る(図15は、予想外のグローバルデータ更新があった
場合の動作を示す図である)。
【0088】以上の説明のようにプログラムが予想外の
動きをした場合にも、本発明では、その動作履歴を正確
に保存することができる。
【0089】次に、引数指定ありの場合の実行過程を説
明する。図16は引数3で実行した場合の動作を示す図
である。図16に示すように、 “sample 3” と引数を与えて実行した場合は、前述した引数なしの場
合とは異なり、図6のプログラムの13行目のif文、
“if(argc==1)”が実行された時点で、図16に示した
ように、引数を一つ付加して実行すると、argcは2であ
り、if文の()内は偽となる。従って、次の実行コー
ドとして識別されるのは、8行目の、 “16 if((num=atoi(argv[1]))>0){” となる。このとき図16より、arg[1]は3である
ためif文の()内は真となり、以降、順次17行目、
18行目が読み出され実行されることになる。
【0090】17行目の、 “17 b(num);” は関数b()の呼び出しである。関数呼び出し識別部3
00及び動作条件記憶部400が、前記、図5で示すフ
ローチャートに沿った動作を行い、動作条件履歴データ
2000に、関数b()の呼び出し直前の全ての動作条
件が格納される。
【0091】関数b()が呼び出されると実行は、関数
b()の中の実行コードに移り、図6の、39,40行
目が実行される。
【0092】39,40行目は、 39 for(i=0;i<num;i++) 40 e(); であり、関数e()が変数numで指定されている回数
呼び出されている。本プログラムでは、numが3であ
るため、関数e()は関数b()から3回呼び出される
ことになり、関数e()の3回の呼び出し直前のプログ
ラムのすべての動作条件が、動作条件履歴データ200
0に追加格納される。
【0093】関数b()の処理が終了すると再び関数m
ain()に戻り、18行目の、 18 c(); が実行される。
【0094】これは関数c()の呼び出しであるため、
関数c()の呼び出し直前のプログラムの全ての動作条
件が呼び出されると、実行は、関数c()の実行コード
に移り、45,46行目が実行される。すなわち、 45 d(); 46 e(); のステップで関数d()、e()がそれぞれ呼び出さ
れ、各々関数d()の呼び出し直前と、関数e()の呼
び出し直前のプログラムの全ての動作条件が、動作条件
履歴データ2000に追加格納される。
【0095】以上のようにして、各関数の呼び出しの直
前のデータが、順次、動作条件履歴データ2000に格
納される。動作条件履歴データ2000に格納される動
作条件履歴データを、図17に示す。また、図18は、
動作条件履歴データ2000の「グローバルデータ」領
域のうち、「レジスタ」領域によって決定される、グロ
ーバル変数valの位置の値を示す。本例の実行では、グ
ローバル変数valの値は、図18に示すように変化し、
プログラムの実行終了時には、図16に示すように、va
l=1となって終了する。
【0096】以上で、図6に示した実行ファイル120
0の本装置を用いた実行過程(図2ステップS10)の
説明を終わる。
【0097】次に、動作履歴の再現過程について説明す
る。以下、前記実行過程の後の任意の時点で、前記実行
過程で保存したプログラム動作条件履歴データ2000
をもとに、プログラムの動作を再現する過程(図2ステ
ップS20)の詳細な説明を行なう。
【0098】図14は、動作条件履歴データ2000の
例である。図14に示す動作条件履歴データは、図15
に示すように、引数なしで実行し、関数e()の2回目
の実行と3回目の実行の間に、他のプログラムの関数Z
()によってグローバル変数valが変更された例であ
る。ここでの動作条件履歴データ2000は、“sample
1”という名前で保存されているものとする。
【0099】図19は、図2のステップS20(ステッ
プS5及びステップS6)を詳細に説明したフローチャ
ートである。以下、このフローチャートをもとにプログ
ラムの動作再現時の説明を行なう。
【0100】まず、ステップS201では、ユーザが再
現する動作条件を選択するため、本プログラム動作履歴
再現装置を起動し、記憶された動作条件の一覧を、動作
条件履歴データ2000をもとに表示する。図20はこ
の際の表示の一例を示す図である。
【0101】図20の1行目の、 rerun sample 1 は、本プログラム動作履歴再現装置を、動作条件履歴デ
ータ2000の名前を引数として、コマンド形式で起動
していることを示している。この起動形式は一例であ
り、同等な他の任意のコマンド名、起動形式を用いても
構わない。また、本実施形態では、キャラクタ形式のユ
ーザインターフェースを用いて説明するが、グラフィッ
クユーザインターフェースなど他のユーザインターフェ
ースを用いても、本発明の効果を同等に得ることができ
ることは明らかである。
【0102】図20では、関数が呼び出された順番とと
もに、関数名を表示することによって、ユーザの選択を
促している。ここで、関数が呼び出された順番は、関数
が呼び出された時刻など特定の関数呼び出しを識別でき
るものであれば何でも構わない。
【0103】また、図20では、図6のプログラムの中
に含まれていない予想外の関数であるZ()の呼び出し
が行なわれていることがわかる。
【0104】ステップS202では、ユーザがステップ
S201で表示された一覧の中から任意の動作条件(関
数呼び出し時点)を選択する。
【0105】図21は、図6のプログラムの中に含まれ
ていない予想外の関数の、Z()の呼び出しの直後の関
数e()の呼び出し時点を、関数呼び出し時点の識別子
となっている順番の6を指定することによって選択した
例を示している。selectは、本プログラム動作履歴再現
装置に対する動作条件選択命令の一例である。
【0106】本例では、特定の関数呼び出し時点を指定
する方法をとっているが、最初の関数呼び出しから順に
進める方法や、最後の関数呼び出しから順に戻るなど、
他の任意の指定方法を用いても構わない。
【0107】ステップS203は、図14の動作条件履
歴データ2000(sample 1)の中から、5行目のデー
タを再現する。このとき、プログラムカウンタ310
0、レジスタ3200、グローバルデータ1300、ス
タックデータ1400に即座に再現して即座に再実行を
しても良いし、選択された関数呼び出し時点の動作条件
(プログラムカウンタ、レジスタ、グローバルデータ、
スタックデータ)を直接表示または印刷してこれを解析
しても良い。
【0108】ここでは、従来から一般的に用いられてい
るデバッガー相当の機能を用いて更に解析を行なうもの
とし、これらのデータをデバッガーが指定する形式にし
て引き渡すものとする。ここで用いるデバッガーは、特
定の時点の動作条件をもとに解析を行なう機能を持つも
のであれば、どのようなものでも構わない。また、プロ
グラム動作条件履歴データ2000には、プログラムの
動作条件を決定できるすべての情報が記憶されているの
で、デバッガーに引き渡す情報が不足することはない。
ステップS204では、ステップS203で再現された
動作条件をもとに、デバッガーを用いて解析する。
【0109】図22は、デバッガーの命令であるprint
コマンドを用いて、プログラムが予想外の結果を示すこ
とになった原因の変数の、valの値を調べている様子を
示している。この時点でのvalの値は5であり、ここで
その直前の予想外の関数呼び出しであるZ()によっ
て、valの値が書き換えられたことをほぼ確実に推理す
ることができる。
【0110】(第1の実施形態の効果)以上、詳細に説
明した第1の実施形態において、通常、予想外の関数呼
び出しであるZ()を、事前に予想することはできな
い。従って、従来技術であるデバッガーなどに、事前に
valの値を追跡したり、Z()の呼び出しを監視したり
する命令を与えることは非常に難しく、このような予想
外の実行結果を事後に追跡することは困難であった。
【0111】また、従来技術により、プログラム終了時
の動作条件がすべて保存されているとしても、その情報
からは、前記1の関数Z()の呼び出しを検出すること
はできない。
【0112】しかしながら、上記第1の実施形態によれ
ば、ユーザが事前に解析内容を指定することなく、事後
の解析によって、容易に予想外の結果を示した原因を解
析することができる。
【0113】更に、動作履歴として呼び出された関数名
を表示することによって、プログラムの動作履歴の概略
をつかむことができ、上記例では関数Z()の呼び出し
を容易に検知することができる。
【0114】[第2の実施形態]上述した第1の実施形
態の説明では、図2の動作条件記憶部400に相当する
実行コードを、ソースコード解釈部200によって実行
ファイル1200に埋め込む方法を用いて説明を行なっ
た。
【0115】しかし、実行ファイル1200の実行中
に、動作条件記憶部400が動作し、グローバルデータ
1300及びスタックデータ1400を、動作条件履歴
データ2000へコピーすることが、実行スピードの面
で問題となる場合が想定できる。そのような場合は以下
のようにして本発明を実施することができる。
【0116】図23は、第2の実施形態における、図1
の構成における処理プログラム3aの構成要素と、それ
ら構成要素が図1で示した各格納領域に格納されるデー
タとどのような関係にあるかを示す図である。
【0117】第1の実施形態の説明に使用した図2と比
較すると、バス2のブロックが追加されている。バス2
にはRAMへの命令4100と、書き込みアドレス42
00と、書き込みデータ4300がある。これらは、実
行ファイル1200を実行するCPU1に接続されてい
るバス2上を、CPU1の動作に応じて流れる情報であ
る。
【0118】第2の実施形態では、動作条件記憶部40
0は、CPU1と同期をとって動作することのできる別
のCPUに配置され、これらの情報をもとに、CPU1
の動作を監視して、グローバルデータ1300、スタッ
クデータ1400への変更を認識して、動作条件履歴デ
ータ2000を作成する。
【0119】また、作業領域5000は、動作条件記録
部400が、プログラムの実行終了後、動作条件履歴デ
ータ2000を作成するために、グローバルデータ13
00、スタックデータ1400への変更を情報を蓄積す
る作業領域である。なお、第2の実施形態では、作業領
域5000が動作条件履歴データ2000と同一の2次
記憶装置に配置されているが、他の記憶媒体に配置され
ていても、本発明の効果を同等に得ることができること
は当然である。
【0120】次に、第2の実施形態の処理の手順を、第
1の実施形態の説明で用いた図4を用いて説明する。
【0121】まず、図4のステップS1でプログラムの
ソースコードを入力し、それをソースコード1100と
して格納することは、第1の実施形態と同様である。次
に、ステップS2で、ソースコード1100の内容に基
づき、ソースコード解釈部200を用いて実行ファイル
1200を生成する。
【0122】ここで、第1の実施形態では、実行ファイ
ルを作成する際、全ての関数呼び出しに対して無条件
に、関数呼び出し識別部300、及び、動作条件記憶部
400に相当する実行コードを、実行ファイル1200
中に埋め込んでいる。しかし、本第2の実施形態では、
動作条件記憶部400を別CPUに配置して実行スピー
ドを確保するため、ステップS2では関数呼び出し識別
部300に相当する実行コードを埋め込むのみであり、
動作条件記憶部400に相当する実行コードの埋め込み
は行なわない。
【0123】また、別CPUで動作してバスを監視して
いる動作条件記憶部400が、関数呼び出し時点を認識
できるように擬似コード(例えば、RAM上の特定のア
ドレスへのリードを伴うコード)を挿入する。この擬似
命令は、バスを監視している動作条件記憶部400が認
識できる命令であれば何でも構わない。
【0124】また、動作条件記憶部400が関数呼び出
し時点を識別するためには、実行ファイル1200に擬
似コードを埋め込む上記の方法のほかに、動作条件記憶
部400が動作するCPUへ割込み信号のようなハード
ウェア信号を送る方法もあるが、このいずれの方法を用
いても構わない。
【0125】以下、具体的説明のために、ステップS2
で動作条件記憶部400が関数呼び出しを識別するため
の擬似コードを挿入するものとし、動作条件記憶部40
0では、この命令を関数呼び出し命令として認識するも
のとして説明する。
【0126】ステップS3で、ステップS2で作成した
実行ファイル1200を実行し、同じくステップS2に
より実行ファイル1200中に埋め込まれた実行コード
により、その実行過程において関数呼び出しが行なわれ
る毎に、関数呼び出し識別部300により、当該時点の
プログラムカウンタ3100の値と、レジスタ3200
の値、及び呼び出された関数名を、その順番を保持しな
がら動作条件履歴データ2000に追加格納する。この
処理は、第1の実施形態と同様である。
【0127】図24は、本実施形態において、実行ファ
イル1200の実行が終了し、ステップS4での動作条
件履歴データ2000の作成を行なう前の時点での、動
作条件履歴データ2000の一例である。
【0128】本実施形態で、動作条件履歴データ200
0の「グローバルデータ」領域、及び「スタックデー
タ」領域への書き込みを、実行ファイル1200の終了
後に行なうため、これらの領域は空欄になっている。
【0129】ステップS4では、動作条件記憶部400
が、関数呼び出し時点における、グローバルデータ4a
とスタックデータ4b(図1参照)の、全てを動作条件
履歴データ2000に追加格納することは、第1の実施
形態と同様である。しかし、第2の実施形態では、動作
条件記憶部400は、CPU1と同期をとって動作する
ことのできる別のCPUに配置され、これらの情報をも
とに、CPU1の動作を監視し、グローバルデータ13
00と、スタックデータ1400への変更を認識して、
まず変更を記録し、後に動作条件履歴データ2000を
作成する手順をとる。
【0130】以上で実行ファイル1200の実行を終わ
り、ステップS5及びステップS6で、動作条件履歴デ
ータ2000をもとに動作履歴を再現する。この動作履
歴再現過程は、第1の実施形態の説明と全く同一である
ため、説明を省略する。
【0131】以上で第2の実施形態の全体の処理手順の
説明を終わる。
【0132】次に、第2の実施形態による動作条件記憶
部400の処理手順を説明する。図25は、図4の第2
の実施形態におけるステップS4の動作条件記憶部40
0の処理手順の詳細を示すフローチャートである。
【0133】まず、ステップS401では、RAM4へ
のアクセスと関数呼び出しを監視するために、CPU1
とRAM4を接続するバス2のデータを読み込む。次
に、ステップS402で、読み出したデータが最初の関
数呼び出し擬似命令であるかどうかの判断を行なう。本
実施形態では、動作条件履歴データ2000の作成に際
して、まずRAM4への変更命令を蓄積し、プログラム
の実行終了後、各関数呼び出し時点でのRAM4の領域
の状態を再現する方法をとっている。そのため、最初の
データに限っては、蓄積すべきRAM領域の状態を全て
記憶しておかなければならない。ステップS402の判
断は、そのために行なうものである。ステップS402
で最初の関数呼び出し擬似命令であると判断された場合
は、ステップS403に進む。
【0134】ステップS403では、グローバルデータ
1300、及びスタックデータ1400を作業領域50
00へコピーする。図26は、作業領域の内容を示す構
成図である。図中、初期データ格納域5010は、ステ
ップS403でグローバルデータ1300及びスタック
データ1400を格納する領域である。また、RAM変
更命令格納域5020は、ステップS404以降で認識
されるRAMへの変更命令及び関数呼び出し擬似命令を
順次格納していく領域である。
【0135】図27は、図26の初期データ格納領域の
この時点での内容を示した例である。ここでは、説明の
便宜のため、ステップS403の終了時点でのデータ
(最初の関数呼び出し時点でのグローバルデータ130
0、及びスタックデータ1400)が、全て0であるも
のとしている。ステップS403が終了すると、再びス
テップS401に戻ってバスのデータを読み、ステップ
S402に進む。
【0136】ステップS402では、既に最初の関数呼
び出し擬似命令ではないためNOと判断され、ステップ
S404に進む。ステップS404では、読み出した命
令が記憶が必要なものであるかどうかを判断する。ここ
では、グローバルデータ領域とスタックデータ領域への
変更(書き込み)命令か、関数呼び出し擬似命令を記憶
の対象としなければならない。そのためには、以下の条
件を満たす必要がある。すなわち、 (1)命令が関数呼び出し擬似命令である場合は、無条
件に記憶対象とする。 (2)命令が書き込み命令である場合は、書き込みアド
レスがグローバルデータ領域かスタックデータ領域に係
るものである場合にのみ、記憶対象とする。
【0137】以上の条件を満たした場合にのみステップ
S404でYESと判断され、ステップS405へ進
む。ステップS405では、読み込んだバスのデータを
図26の5020で示すRAM変更命令格納領域へ書き
込む。次に、ステップS406では、実行ファイル12
00の実行が終了しているかどうかを判断し、終了して
いなければステップS401に戻り、バスのデータを読
み込む。
【0138】以下、プログラムが実行されている間、上
述のステップS401,S402,S404,S40
5,S406を繰り返し、バスから読み込んだグローバ
ルデータと、スタックデータへの変更命令と、関数呼び
出し擬似命令を、RAM変更命令格納領域5020に順
次格納していく。そして、実行ファイル1200の実行
が終了していれば、ステップS406でYESと判断さ
れ、ステップS407へ進む。図28は、この時点での
RAM変更命令格納領域(図26の5020)の状態の
一例を示している。
【0139】ステップS407では、作業領域5000
に格納したデータから、動作条件履歴データ2000を
作成する。ここでは、動作条件履歴データ2000は図
24の様になっており、作業領域5000の初期データ
格納領域5010は図27、RAM変更命令格納領域5
020の内容は図28のように各々なっているものとし
て、この状態から最終的な動作条件履歴データ2000
を作成する過程を説明する。
【0140】図29は第2の実施形態における動作条件
履歴データの作成手順を示すフローチャートである。ま
ず、ステップS4071では、初期データを、動作条件
履歴データ2000の図24の1行目及び2行目の「グ
ローバルデータ」領域及び「スタックデータ」領域にコ
ピーする。
【0141】図24の1行目は、初回の関数呼び出しに
相当する領域であるため、作業領域5000の初期デー
タ格納領域5010のデータをそのまま「グローバルデ
ータ」領域及び「スタックデータ」領域にコピーする。
【0142】また、図24の2行目の「グローバルデー
タ」領域及び「スタックデータ」領域に対応するデータ
は、図24の1行目の初期データに対し、図28の1行
目から4行目までの変更命令(2回目の関数呼び出しま
での変更命令)を実行して作成する必要があり、ここで
はその基データとして、初期データ格納領域5010を
そのままコピーする。図30は、この時点での動作条件
履歴データ2000の内容を示している。
【0143】次に、ステップS4072では、1回目の
関数呼び出しa()から、2回目の関数呼び出しd()
の関数呼び出しに至るRAMへの変更命令を、動作条件
履歴データ2000の図30の2行目の「グローバルデ
ータ」領域と「スタックデータ」領域に反映するため、
作業領域5000のRAM変更命令格納領域5020か
ら1命令分を読み込む。
【0144】ここでまず最初に読み込まれるデータは、 “書き込み/2000/0001” である。
【0145】次に、ステップS4073に進み、読み込
んだ命令が、関数呼び出し擬似命令かどうかを判断す
る。これは、次回の関数呼び出し擬似命令のタイミング
を識別し、それまでの変更命令を、動作条件履歴データ
2000の図30の2行目の「グローバルデータ」領域
と「スタックデータ」領域に反映するための判断であ
る。ここでは、読み込んだ命令は書き込み命令であるた
めNOと判断され、ステップS4075に進む。
【0146】ステップS4075では、読み込んだRA
M変更命令、 “書き込み/2000/0001” を、動作条件履歴データ2000の、図30の2行目の
「グローバルデータ」領域「スタックデータ」領域に対
して実行する。
【0147】図31は、この時点の動作条件履歴データ
2000の内容のうち、図30の2行目の「グローバル
データ」領域の状態をより詳細に説明したものである。
ステップS4075の実行前には、この領域は、ステッ
プS4071で初期データをコピーしたままの状態であ
るから、その内容は図27のようであった。この状態か
らステップS4075の書き込み命令の条件によって、
図31のように変化したことになる。
【0148】次に、ステップS4076に進み、RAM
変更命令格納領域5020のデータを全て処理し終わっ
たかどうかを判断する。ここでは、処理は終了しておら
ず、未処理の命令が残っているので、NOと判断され、
ステップS4072へ戻る。
【0149】以下、ステップS4072,S4075,
S4076が、ステップS4073で、RAM変更命令
格納領域5020のデータが、関数呼び出し擬似命令で
あると判断されるまで繰り返される。ここでは、図28
の5行目の関数呼び出し擬似命令が読み出され、ステッ
プS4074に進むまで、処理を繰り返す。
【0150】この時点までに、図28のRAM変更命令
格納領域のデータのうち、 “書き込み 2000 0001” “書き込み 2040 FFFF” “書き込み 2000 0002” “書き込み 2000 0003” の4件が、ステップS4075で処理され、動作条件履
歴データ2000のデータに反映されていく。
【0151】図32は、この時点の動作条件履歴データ
2000の内容のうち、図30の2行目の「グローバル
データ」領域の状態をより詳細に説明したものである。
【0152】次に、図28の5行目のデータでの、 “関数呼び出し擬似命令” に対する判断をステップS4073で行なう。この命令
は、関数呼び出し擬似命令であるから、YESと判断さ
れ、ステップS4074に進む。
【0153】この時点で、動作条件履歴データ2000
の2回目d()の関数呼び出しに対応する全ての情報の
作成が完了したことになり、この時点の動作条件履歴デ
ータ2000の状態は、図33のようになっている。ま
た、図33において、2行目の「グローバルデータ」領
域の状態を詳細にみると図32のようになっている。
【0154】ステップS4074では、図33の3行目
の「グローバルデータ」領域、「スタックデータ」領域
の作成を開始するため、その初期値として、2行目のデ
ータを3行目にコピーする。この時点での動作条件履歴
データ2000の内容は、図34のようになっている。
【0155】以下、同様の処理となるため、説明を省略
するが、図29のフローチャートに従いRAM変更命令
格納領域の全ての命令を処理し、ステップS4076で
RAM変更命令終了と判断されて終了すると、動作条件
履歴データ2000が完成したことになる。
【0156】この時点での動作条件履歴データ2000
の内容を図35に、また、図35の最終行の「グローバ
ルデータ」領域を詳細に見た状態を図36に示す。
【0157】以上で、図29のフローチャートに基づい
た図25ステップS407の詳細な説明を終わる。
【0158】本第2の実施形態においては、実行ファイ
ル1200の実行時間を確保するため、動作条件記憶部
400を別CPUに配置し、かつ、実行ファイル120
0の実行中には動作条件履歴データ2000へのRAM
のコピーを行なわず、実行ファイル1200の実行終了
後に、はじめて動作条件履歴データ2000を作成する
方式をとっている。
【0159】しかし、実行スピードに対する制約があま
り厳しくない場合などは、本実施形態と同等の構成をと
りながら、実行ファイル1200の実行中に、図29の
ステップS4075に相当する処理を行い、動作実行履
歴データ2000を作成しても構わない。
【0160】また、本第2の実施形態においては、図4
ステップS5〜S7のプログラム動作の再現を行なう前
に、動作条件履歴データ2000を作成する方法をとっ
ているが、これを行なわず、作業領域5000と、動作
条件履歴データ2000をそのまま保存しておき、図4
ステップS7の動作の再現の時点で必要とされた関数呼
び出し時点に対応するデータに対してのみ、図29ステ
ップS4075に相当する処理を行なって動作条件履歴
データ2000を作成しても構わない。
【0161】以上説明したように、第2の実施形態によ
れば、実行時間の制約などがある場合でも、本発明の効
果を同等に得ることができることは明らかである。
【0162】以上説明したように、上記の各実施形態に
よれば、複数の関数から構成され、かつそれらの呼び出
しを行なうことで動作するプログラムにおいて、関数呼
び出しの時点に着目して当該時点でのプログラムの全て
の動作条件を記憶、再現することによって、従来は非常
に困難な作業であったプログラムの動作の検証作業の効
率を飛躍的に向上させることができる。
【0163】また、上記実施形態によれば、実行スピー
ドや各記憶媒体の容量の問題も、容易に避けながら実現
可能である。
【0164】なお、本発明は、複数の機器(例えばホス
トコンピュータ,インタフェイス機器,リーダ,プリン
タなど)から構成されるシステムに適用しても、一つの
機器からなる装置(例えば、複写機,ファクシミリ装置
など)に適用してもよい。
【0165】また、本発明の目的は、前述した実施形態
の機能を実現するソフトウェアのプログラムコードを記
録した記憶媒体を、システムあるいは装置に供給し、そ
のシステムあるいは装置のコンピュータ(またはCPU
やMPU)が記憶媒体に格納されたプログラムコードを
読出し実行することによっても、達成されることは言う
までもない。
【0166】この場合、記憶媒体から読出されたプログ
ラムコード自体が前述した実施形態の機能を実現するこ
とになり、そのプログラムコードを記憶した記憶媒体は
本発明を構成することになる。
【0167】プログラムコードを供給するための記憶媒
体としては、例えば、フロッピディスク,ハードディス
ク,光ディスク,光磁気ディスク,CD−ROM,CD
−R,磁気テープ,不揮発性のメモリカード,ROMな
どを用いることができる。
【0168】また、コンピュータが読出したプログラム
コードを実行することにより、前述した実施形態の機能
が実現されるだけでなく、そのプログラムコードの指示
に基づき、コンピュータ上で稼働しているOS(オペレ
ーティングシステム)などが実際の処理の一部または全
部を行い、その処理によって前述した実施形態の機能が
実現される場合も含まれることは言うまでもない。
【0169】さらに、記憶媒体から読出されたプログラ
ムコードが、コンピュータに挿入された機能拡張ボード
やコンピュータに接続された機能拡張ユニットに備わる
メモリに書込まれた後、そのプログラムコードの指示に
基づき、その機能拡張ボードや機能拡張ユニットに備わ
るCPUなどが実際の処理の一部または全部を行い、そ
の処理によって前述した実施形態の機能が実現される場
合も含まれることは言うまでもない。
【0170】
【発明の効果】以上説明したように、本発明によれば、
従来は不十分な情報からの直感的推理に頼っていたプロ
グラムの動作履歴の解析/検証作業に対して、充分な情
報を提供することが可能となる。
【0171】また、本発明によれば、記憶した動作条件
を、任意の関数呼び出し時点、または関数呼び出しの順
番に応じて再現することによって、プログラムの実行後
の任意の時点での、プログラムの動作履歴のうち任意の
範囲を再現して検証することが可能となる。
【図面の簡単な説明】
【図1】本実施形態によるプログラム動作履歴再現装置
の構成を示すブロック図である。
【図2】図1の構成における処理プログラム3aの構成
要素と、それら構成要素が図1で示した各格納領域に格
納されるデータとどのような関係にあるかを示す図であ
る。
【図3】プログラムが複数の関数から構成され、かつそ
れらの関数呼び出しを行なうことで動作するプログラム
の一例を示す図である。
【図4】第1の実施形態による動作履歴の格納および再
現処理を説明するフローチャートである。
【図5】図4のステップS10における動作履歴の格納
処理を詳細に説明するフローチャートである。
【図6】ステップS2で生成された実行コード1200
の論理的なイメージ図である。
【図7】引数なしの場合の実行例を示す図である。
【図8】作成中の動作条件履歴データを示す図である。
【図9】RAMの構成例を示す図である。
【図10】レジスタからRAMの利用領域を得る関係例
を示した図である。
【図11】作成中の動作条件履歴データ(図8の続き)
を示す図である。
【図12】作成済みの動作条件履歴データ(図11の続
き)を示す図である。
【図13】動作条件履歴データのグローバルデータの内
容例を示す図である。
【図14】予想外のグローバルデータ更新があった場合
の動作条件履歴データのグローバルデータのない用例を
示す図である。
【図15】予想外のグローバルデータ更新があった場合
の動作を示す図である。
【図16】引数3で実行した場合の動作を示す図であ
る。
【図17】引数3で実行した場合の動作条件履歴データ
を示す図である。
【図18】引数3で実行した場合の動作条件履歴データ
のグローバルデータの内容例を示す図である。
【図19】第2の実施形態のプログラム動作履歴の選択
再現を示すフローチャートである。
【図20】動作条件の一覧を関数で表示した図である。
【図21】動作条件の選択動作の例を示した図である。
【図22】動作条件の再現後変数を表示した例を示す図
である。
【図23】第2の実施形態における機能ブロック図であ
る。
【図24】第2の実施形態におけるプログラム実行終了
直後の動作条件履歴データを示す図である。
【図25】第2の実施形態における動作条件記憶部の動
きを示すフローチャートである。
【図26】作業領域の内容を示す図である。
【図27】初期データ格納域の内容を示す図である。
【図28】RAM変更命令格納域の内容を示す図であ
る。
【図29】第2の実施形態における動作条件履歴データ
の作成手順を示すフローチャートである。
【図30】第2の実施形態における作成中の動作条件履
歴データを示す図である。
【図31】図30のグローバルデータ領域の内容を示す
図である。
【図32】変更中のグローバルデータ領域の内容を示す
図である。
【図33】作成中の動作条件履歴データ(図30の続
き)を示す図である。
【図34】作成中の動作条件履歴データ(図33の続
き)を示す図である。
【図35】作成済みの動作条件履歴データ(図34の続
き)を示す図である。
【図36】図35最終行のグローバルデータの内容を示
す図である。

Claims (17)

    【特許請求の範囲】
  1. 【請求項1】 プログラムの動作履歴情報を生成する情
    報処理装置であって、 動作条件を保存すべきタイミングを検出する検出手段
    と、 前記検出手段で前記タイミングが検出された場合に、当
    該プログラムの全ての動作条件を、当該タイミングとの
    組で記憶する記憶手段と、 前記記憶手段によって記憶された、任意のタイミングに
    おける動作条件を提示する提示手段とを備えることを特
    徴とする情報処理装置。
  2. 【請求項2】 前記検出手段は、前記プログラムの実行
    ファイル中に埋め込まれた所定のコマンドを検出するこ
    とで行われることを特徴とする請求項1に記載の情報処
    理装置。
  3. 【請求項3】 前記実行ファイル中より関数の呼び出し
    に係る部分を取得し、前記所定のコマンドを該実行ファ
    イル中の関数の呼び出しに係る部分に埋め込む埋め込み
    手段を更に備えることを特徴とする請求項1に記載の情
    報処理装置。
  4. 【請求項4】 前記記憶手段は、前記検出手段で前記所
    定のコマンドが検出された場合に、当該プログラムの全
    ての動作条件を、対応する関数との組で記憶することを
    特徴とする請求項3に記載の情報処理装置。
  5. 【請求項5】 前記記憶手段において記憶される動作条
    件は、前記タイミングにおけるCPUのプログラムカウ
    ンタ値とレジスタ値、及びメモリ内の動作条件データを
    含むことを特徴とする請求項1に記載の情報処理装置。
  6. 【請求項6】 前記動作条件データは、グローバル変数
    とスタックデータを含むことを特徴とする請求項1に記
    載の情報処理装置。
  7. 【請求項7】 前記記憶手段は、前記メモリ内の動作条
    件データを、当該プログラムを実行するCPUとは別の
    CPUによって保持することを特徴とする請求項6に記
    載の情報処理装置。
  8. 【請求項8】 前記提示手段は、前記記憶手段によって
    記憶された全てのタイミングを時系列で並べて一覧にし
    て提示するリスト提示手段と、前記リスト提示手段で提
    示されたタイミング中の所望のタイミングを選択する選
    択手段とを備え、前記選択手段で選択されたタイミング
    における動作条件を提示することを特徴とする請求項1
    に記載の情報処理装置。
  9. 【請求項9】 プログラムの動作履歴情報を生成する情
    報処理方法であって、 動作条件を保存すべきタイミングを検出する検出工程
    と、 前記検出工程で前記タイミングが検出された場合に、当
    該プログラムの全ての動作条件を、当該タイミングとの
    組でメモリに記憶する記憶工程と、 前記記憶工程によってメモリに記憶された、任意のタイ
    ミングにおける動作条件を提示する提示工程とを備える
    ことを特徴とする情報処理方法。
  10. 【請求項10】 前記検出工程は、前記プログラムの実
    行ファイル中に埋め込まれた所定のコマンドを検出する
    ことで前記タイミングを検出することを特徴とする請求
    項9に記載の情報処理方法。
  11. 【請求項11】 前記実行ファイル中より関数の呼び出
    しに係る部分を取得し、前記所定のコマンドを該実行フ
    ァイル中の関数の呼び出しに係る部分に埋め込む埋め込
    み工程を更に備えることを特徴とする請求項9に記載の
    情報処理方法。
  12. 【請求項12】 前記記憶工程は、前記検出工程で前記
    所定のコマンドが検出された場合に、当該プログラムの
    全ての動作条件を、対応する関数との組でメモリに記憶
    することを特徴とする請求項11に記載の情報処理方
    法。
  13. 【請求項13】 前記記憶工程においてメモリに記憶さ
    れる動作条件は、前記タイミングにおけるCPUのプロ
    グラムカウンタ値とレジスタ値、及びメモリ内の動作条
    件データを含むことを特徴とする請求項9に記載の情報
    処理方法。
  14. 【請求項14】 前記動作条件データは、グローバル変
    数とスタックデータを含むことを特徴とする請求項9に
    記載の情報処理方法。
  15. 【請求項15】 前記記憶工程は、前記メモリ内の動作
    条件データを、当該プログラムを実行するCPUとは別
    のCPUによって保持することを特徴とする請求項14
    に記載の情報処理方法。
  16. 【請求項16】 前記提示工程は、前記記憶工程によっ
    て記憶された全てのタイミングを時系列で並べて一覧に
    して提示するリスト提示工程と、前記リスト提示工程で
    提示されたタイミング中の所望のタイミングを選択する
    選択工程とを備え、前記選択工程で選択されたタイミン
    グにおける動作条件を提示することを特徴とする請求項
    9に記載の情報処理方法。
  17. 【請求項17】 コンピュータにプログラムの動作履歴
    情報を生成させるための制御プログラムを格納する記憶
    媒体であって、該制御プログラムが、 動作条件を保存すべきタイミングを検出する検出工程の
    コードと、 前記検出工程で前記タイミングが検出された場合に、当
    該プログラムの全ての動作条件を、当該タイミングとの
    組でメモリに記憶する記憶工程のコードと、 前記記憶工程によってメモリに記憶された、任意のタイ
    ミングにおける動作条件を提示する提示工程のコードと
    を備えることを特徴とする記憶媒体。
JP31887999A 1999-11-09 1999-11-09 情報処理方法および装置 Withdrawn JP2001134464A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP31887999A JP2001134464A (ja) 1999-11-09 1999-11-09 情報処理方法および装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP31887999A JP2001134464A (ja) 1999-11-09 1999-11-09 情報処理方法および装置

Publications (1)

Publication Number Publication Date
JP2001134464A true JP2001134464A (ja) 2001-05-18

Family

ID=18103990

Family Applications (1)

Application Number Title Priority Date Filing Date
JP31887999A Withdrawn JP2001134464A (ja) 1999-11-09 1999-11-09 情報処理方法および装置

Country Status (1)

Country Link
JP (1) JP2001134464A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008027172A (ja) * 2006-07-20 2008-02-07 Kyocera Mita Corp 画像形成装置
JP2017516230A (ja) * 2014-05-14 2017-06-15 インテル コーポレイション 高度なアプリケーションのためのイベントベースの記録及び再生
JP2019521402A (ja) * 2016-05-16 2019-07-25 ティブコ ソフトウェア インク プロセスアプリケーションを開発及び診断するためのステップバック機構

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008027172A (ja) * 2006-07-20 2008-02-07 Kyocera Mita Corp 画像形成装置
JP2017516230A (ja) * 2014-05-14 2017-06-15 インテル コーポレイション 高度なアプリケーションのためのイベントベースの記録及び再生
JP2019521402A (ja) * 2016-05-16 2019-07-25 ティブコ ソフトウェア インク プロセスアプリケーションを開発及び診断するためのステップバック機構
JP7015625B2 (ja) 2016-05-16 2022-02-03 ティブコ ソフトウェア インク プロセスアプリケーションを開発及び診断するためのステップバック機構

Similar Documents

Publication Publication Date Title
TWI446262B (zh) 在常式內切換執行緒之技術
US6286132B1 (en) Debugging support apparatus, a parallel execution information generation device, a computer-readable recording medium storing a debugging support program, and a computer-readable recording medium storing a parallel execution information generation program
JP4950454B2 (ja) テスト自動化のスタック階層化
US6378087B1 (en) System and method for dynamically detecting unchecked error condition values in computer programs
US20060271345A1 (en) Debugging a circuit using a circuit simulation verifier
CA2325684A1 (en) Automation and isolation of software component testing
JPH0836488A (ja) ダイナミック・パッチングを使用するランタイム・エラー・チェック方法と装置
US7188279B2 (en) Method, program, and storage medium for acquiring logs
US7624381B1 (en) Portable detection of start and completion of object construction
US5963741A (en) Information processor which rewrites instructions in program to dynamically change program structure and method therefor
US20050171731A1 (en) Method, program, and storage medium for acquiring logs
JPH08212106A (ja) システム試験支援装置及びシステム試験支援方法
JP2007207120A (ja) システム検証装置及びその検証方法
JP2006221630A (ja) ログ取得方法およびプログラム、記憶媒体
JP2001134464A (ja) 情報処理方法および装置
JP2005338987A (ja) 例外テスト支援プログラム及び例外テスト支援装置
JP4125055B2 (ja) ログ取得方法
CN113805861B (zh) 基于机器学习的代码生成方法、代码编辑系统及存储介质
JP4125053B2 (ja) ログ取得方法
CN115145595A (zh) 依赖库的安装方法、装置、服务器、电子设备及存储介质
JP4125056B2 (ja) ログ取得方法
JP2005174045A (ja) ソースプログラム変換装置、ソースプログラム変換方法、ソースプログラム変換プログラム、および、プログラム記録媒体
US20050050523A1 (en) Method to generate a formatted trace for an embedded device
JP3278588B2 (ja) プログラム開発支援装置及びプログラム開発支援方法
JP2003015914A (ja) 情報処理装置を評価するためのテストプログラムを作成する方法、装置、およびそのための処理を記述したプログラム

Legal Events

Date Code Title Description
A300 Withdrawal of application because of no request for examination

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20070109