JP2002108651A - オブジェクト指向開発用デバッグ支援装置 - Google Patents

オブジェクト指向開発用デバッグ支援装置

Info

Publication number
JP2002108651A
JP2002108651A JP2000293398A JP2000293398A JP2002108651A JP 2002108651 A JP2002108651 A JP 2002108651A JP 2000293398 A JP2000293398 A JP 2000293398A JP 2000293398 A JP2000293398 A JP 2000293398A JP 2002108651 A JP2002108651 A JP 2002108651A
Authority
JP
Japan
Prior art keywords
value
history
name
debugging
application
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.)
Granted
Application number
JP2000293398A
Other languages
English (en)
Other versions
JP3698974B2 (ja
Inventor
Hiroki Watanabe
浩樹 渡邊
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.)
Hitachi Software Engineering Co Ltd
Original Assignee
Hitachi Software Engineering Co Ltd
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 Hitachi Software Engineering Co Ltd filed Critical Hitachi Software Engineering Co Ltd
Priority to JP2000293398A priority Critical patent/JP3698974B2/ja
Publication of JP2002108651A publication Critical patent/JP2002108651A/ja
Application granted granted Critical
Publication of JP3698974B2 publication Critical patent/JP3698974B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【課題】 オブジェクト指向言語を使用したイベントド
リブンなアプリケーションのデバッグ作業の労力を軽減
する。 【解決手段】 ユーザが行った操作とアプリケーション
内のオブジェクトの値の履歴とを取得する手段108、
操作と値の履歴とを関連付けて保存する手段109、同
一の操作に対して取得した複数のオブジェクトの履歴同
士を比較して差異を検出する手段110、履歴中のオブ
ジェクトの状態の一覧を生成し、クラスのメンバの値の
仕様上の定義域と、実際に取得された値とを比較し、定
義域外に外れている状態を検出する手段110などを備
える。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、オブジェクト指向
言語を使用したイベントドリブンなアプリケーションな
どの開発でのデバッグ作業を支援するオブジェクト指向
開発用デバッグ支援装置に関する。
【0002】
【従来の技術】プログラムの開発においてデバッグのた
めの情報を得る従来からの技術としてトレーサがある。
これはプログラムが実行した経路を記録しつつ、指定し
た変数の値を監視して、実行経路や変数の値を表示/出
力するものであるが、オブジェクト指向言語を使用した
アプリケーションなどにおけるオブジェクトの内容を保
存する機能はない。
【0003】また、最近のオブジェクト指向言語を使用
したアプリケーションのデバッグ支援環境では、ステッ
プの実行をしながらオブジェクトのメンバ変数の値を表
示する機能をもつものもあるが、履歴が残らないため、
何度もデバッグ実行を繰り返す必要がある。
【0004】なお、ユーザがアプリケーションに対して
行った操作を取得できる技術としては、例えば特開平1
0−275093号公報「プログラムテスト支援装置」
に記載の技術があるが、アプリケーションの内部の状態
を確認できないため、デバッグ支援に適用するのは難し
い。
【0005】
【発明が解決しようとする課題】近年、オブジェクト指
向言語の普及により、アプリケーションが複数のオブジ
ェクトやコンポーネント間のメッセージのやり取りで動
作するようになってきている。そのため、デバッグの際
には、問題のあるオブジェクトだけを取り出して振る舞
いを調べることはできず、関連するオブジェクトも含め
てデバッグを行う必要がある。
【0006】一般に多数のオブジェクトの相互作用で動
作しているアプリケーションにおいては、アプリケーシ
ョンの不具合は、あるオブジェクトが異常な値をとるこ
とによってその影響が伝播し、最終的に外部からわかる
異常となって現れるものである場合が多く、このような
場合、デバッグの際にはオブジェクト自身の値だけでな
く、そのオブジェクトに関連する変数やオブジェクトの
値も調べる必要がある。しかし、従来からのトレーサや
ステップ実行では、実行経路を監視したり、実行中に指
定した変数の値を抽出することはできるが、実行経路に
沿って、あるオブジェクトに関連する変数やオブジェク
トの値、またはそのオブジェクト自身の値を一度に抽出
することはできない。このような場合、従来のトレーサ
やデバッグ支援環境では、不具合が発生した個所の特定
から不具合の原因を突き止めるまでに、その都度監視す
る対象を変えながら、何回もデバッグ実行を繰り返す必
要がある。場合によっては、ステップ実行をおこなって
目視でオブジェクトや変数の値の確認を行うという、長
時間にわたって継続的な緊張をデバッグ担当者に強いる
作業を何回も繰り返さなければならないという問題点が
あった。
【0007】また、GUI(Graphical Us
er Interface)ベースの所謂イベントドリ
ブンなアプリケーションにおいては、処理の実行にはユ
ーザの操作が必要であるため、バッチ処理のように同じ
入力パラメータを与えて自動で実行させることができな
い。そのため、デバッグ中やデバッグ完了後のデグレー
ドチェックも含めて、同一の操作を何回も正確に手動で
繰り返し、アプリケーションの動作を確認しなくてはな
らないという問題もある。
【0008】本発明の目的は、オブジェクト指向言語を
使用したイベントドリブンなアプリケーションなどの開
発において、何度も同じ条件で実行しなければならない
長時間の緊張を強いるデバッグ作業の実施回数の削減
と、修正後のアプリケーションの動作が正しいか確認す
るデグレードチェック作業にかかる作業の労力の削減
と、1回のデバッグ作業そのものにかかる労力の削減な
どを実現するオブジェクト指向開発用デバッグ支援装置
を提供することにある。
【0009】
【課題を解決するための手段】本発明のオブジェクト指
向開発用デバッグ支援装置は、ユーザが行った操作と、
アプリケーション内のオブジェクトの値の履歴とを取得
する手段、操作と値の履歴とを関連付けて保存する手
段、同一の操作に対して取得した複数のオブジェクトの
履歴同士を比較して差異を検出する手段、履歴中のオブ
ジェクトの状態の一覧を生成し、クラスのメンバの値の
仕様上の定義域と、実際に取得された値とを比較し、定
義域外に外れている状態を検出する手段、オブジェクト
履歴比較結果やオブジェクト状態一覧などを表示・出力
する手段等を有することを特徴とする。
【0010】
【発明の実施の形態】以下に、本発明の一実施の形態を
図面を参照して具体的に説明する。図1は、本発明によ
るオブジェクト指向開発用デバッグ支援装置の一実施の
形態の構成例を示すブロック図である。図1において、
116は後述のスタートアップシステムや実行時システ
ムおよびテスト、デバッグ対象のアプリケーションが動
作するOSである。118はオリジナルソースコード、
117はオリジナルソースコードをビルドして作られた
テスト対象アプリケーション、115は後述のデバッグ
情報取得用ソースコード記憶手段114に保存されたソ
ースコードをビルドして作られるデバッグ用アプリケー
ションである。線100で囲った部分が本発明を実施す
る部分であり、以下の構成からなる。
【0011】101はオリジナルソースコード118の
クラスまたはモジュールのコードを解析して、データメ
ンバまたはモジュールレベル変数またはオブジェクトを
検出し、クラスまたはモジュールにそれらのデータメン
バまたはモジュールレベル変数の値を保存するためのメ
ンバ保存用メソッドを追加するメンバ保存用メソッド追
加手段である。102はイベントプロシージャやメソッ
ドを解析して、プロシージャ引数およびオブジェクトの
データメンバおよびモジュールレベル変数の値を保存す
るためのメンバ保存用メソッドを呼び出すコードを追加
するプロシージャ内メンバ変数保存用コード追加手段で
ある。103は実行時システムのオブジェクト値保存機
能を呼び出すコードを追加するオブジェクト値保存機能
呼び出しコード追加手段103である。104はメンバ
保存用メソッド追加手段101がどのソースコードにど
の名前のメンバ保存用メソッドを追加したかを記憶する
メンバ保存用メソッド名テーブル104である。114
はメンバ保存用メソッド追加手段101およびプロシー
ジャ内変数保存用コード追加手段102およびオブジェ
クト値保存機能呼び出しコード追加手段103によって
加工されたソースファイルを記憶しておくデバッグ情報
取得用ソースコード記憶手段である。
【0012】105はユーザがアプリケーションに対し
て行った操作を取得するユーザ操作取得手段である。1
06はユーザ操作取得手段105によって取得された操
作を記憶する操作情報記憶手段である。107は操作情
報記憶106手段に格納された操作情報に基づいて、デ
バッグ用アプリケーション115に対しユーザの操作を
再現するユーザ操作再生手段である。108はデバッグ
用アプリケーション115から指定された変数またはオ
ブジェクトの値を取得するオブジェクト値履歴取得手段
である。109はオブジェクト値履歴取得手段108に
よって取得された変数またはオブジェクトの値を記憶す
るオブジェクト値履歴記憶手段である。110はオブジ
ェクト値履歴記憶手段109の内容を用いて、二つある
いはそれ以上のオブジェクト値の履歴を比較するオブジ
ェクト履歴比較手段である。111はあらかじめクラス
ごとに定義されたクラスのメンバの定義情報を格納した
メンバ変数定義域情報テーブルである。112はオブジ
ェクト値履歴記憶手段109の内容からあるクラスのす
べてのオブジェクトがとった状態の一覧を作成し、メン
バ変数定義域情報テーブル111内に格納されているメ
ンバ変数の定義域と実際に取得したオブジェクトの値を
比較し、不正な値が設定されている状態を検出するオブ
ジェクト状態一覧作成手段である。113はオブジェク
ト履歴比較手段110とオブジェクト状態一覧作成手段
112の出力を表示・出力したり、オブジェクト値履歴
記憶手段109内の情報を検索、一覧表示・出力する、
表示・出力手段である。
【0013】図1中、スタートアップシステムは、メン
バ保存用メソッド追加手段101、、プロシージャ内変
数保存用コード追加手段102、オブジェクト値保存機
能呼び出しコード追加手段103、メンバ変数保存用メ
ソッド名テーブル104、デバッグ情報取得用ソースコ
ード記憶手段114から構成される。
【0014】実行時システムは、ユーザ操作取得手段1
05、操作情報記憶手段106、ユーザ操作再生手段1
07、オブジェクト値履歴取得手段108、オブジェク
ト値履歴記憶手段109、オブジェクト履歴比較手段1
10、メンバ変数定義域情報テーブル111、オブジェ
クト状態一覧作成手段112、表示・出力部113から
構成される。
【0015】スタートアップシステムは、デバッグ開始
時に一度だけ実行されて、ソースコードを加工し、実行
時システムはデバッグ中に動作する。
【0016】図2は、スタートアップシステムに含まれ
る各手段と、実行時システムに含まれる各手段を用いて
デバッグする際のおおまかなフローチャートを示したも
のである。まず、このフローチャートを用いて、図1の
全体の処理の流れを説明する。
【0017】図2に示すように、まず、アプリケーショ
ン117のテストを行う際に、予め実行時システムのユ
ーザ操作取得手段105により、ユーザがアプリケーシ
ョン117に対して行った操作を取得し、操作情報記憶
手段106に保存しておく(ステップ201)。テスト
で不具合が発生したら、スタートアップシステムのメン
バ保存用メソッド追加手段101、プロシージャ内変数
保存用コード追加手段102、オブジェクト値保存機能
呼び出しコード追加手段103、メンバ変数保存用メソ
ッド名テーブル104により、新しくデバッグ用のソー
スコードをデバッグ情報取得ソースコード記憶手段11
4に生成し、デバッグ用アプリケーション115をビル
ドする(ステップ202)。この間のスタートアップシ
ステムの動作については後で詳細に説明する。
【0018】次に、実行時システムの操作情報記憶手段
106から、不具合が確認された操作情報を取り出し、
ユーザ操作再生手段107により、取り出された操作情
報を再生し、デバッグ用アプリケーション115を操作
する(ステップ203)。このとき、スタートアップシ
ステムによって追加されたコードが実行され、オブジェ
クト値がオブジェクト値履歴取得手段108によってオ
ブジェクト値履歴記憶手段109に保存される(ステッ
プ204)。次に、オブジェクト値履歴記憶手段109
の内容をオブジェクト履歴比較手段110、オブジェク
ト状態一覧作成手段112によって調査し、アプリケー
ションをデバッグする(ステップ205)。デバッグ
後、アプリケーションに対して、操作情報をユーザ操作
再生手段107によって再生してアプリケーションを実
行し(ステップ206)、不具合が発生しないことを確
認する。もしまだ不具合が発生するのであれば、再びオ
ブジェクト値履歴記憶手段109の内容をオブジェクト
履歴比較手段110、オブジェクト状態一覧作成手段1
12によって調べ、デバッグする(ステップ206に戻
る)。
【0019】以上のようにして、図1に示す本システム
はオブジェクト指向言語を使用したイベントドリブンな
アプリケーションのデバッグ作業を支援する。
【0020】次に、スタートアップシステムについて詳
細に説明する。図3はメンバ保存用メソッド追加手段1
01の動作を示すフローチャートである。図4はJav
a言語で記述されたあるクラスについて、スタートアッ
プシステムのメンバ保存用メソッド追加手段101を実
行して得られる新しいソースコードの例である。
【0021】図4中、401がメンバ保存用メソッド追
加手段101によって追加される有効なソースコードで
あり、402が変数またはオブジェクトのメンバ変数を
保存するためのオブジェクト値履歴取得手段108の変
数保存用インターフェースである。
【0022】図3に示すように、メンバ保存用メソッド
追加手段101は、まず、対象となるすべてのソースフ
ァイルについて、バックアップを作成する(ステップ3
01)。次に対象ソースファイルに、そのソースファイ
ルにある既存のメソッド名と重複しない名前で、空のメ
ンバ保存用メソッドを追加する(ステップ302)。追
加するごとにメンバ変数保存用メソッド名テーブル10
4に当該ソースファイル名と作成したメソッド名を記入
する(ステップ303)。図5にメンバ変数保存用メソ
ッド名テーブル104の構造を示す。
【0023】次に、メンバ保存用メソッド追加手段10
1は、おのおののソースファイル118について、その
ソースファイルがクラスであるかモジュールであるか判
断する(ステップ304)。クラスであった場合、クラ
スのメンバ変数を調べる(ステップ305)。基本デー
タ型に属するデータメンバであれば、そのデータ型に応
じたデータを保存するためにオブジェクト値保存機能呼
び出しコード追加手段103を呼び出して、そのソース
ファイルのメンバ保存用メソッド内にそのメンバ変数の
値を保存するためのコードを追加する(ステップ30
6)。クラスのメンバ変数があるクラスのオブジェクト
であった場合は、メンバ変数保存用メソッド名テーブル
104から、そのクラスのメンバ保存用メソッド名を特
定し、メンバを保存するメソッドを呼び出すコードを追
加する(ステップ307)。
【0024】以上のようにして、メンバ変数があるクラ
スのオブジェクトであっても再帰的にメンバ保存用メソ
ッドを呼び出してデータメンバの値を保存する機能を実
現する。
【0025】次に、メンバ保存用メソッド追加手段10
1は、ソースファイル118がモジュールであった場
合、そのモジュール内のモジュールレベル変数を調べる
(ステップ308)。基本データ型に属するモジュール
変数であれば、そのデータ型に応じたデータを保存する
ためにオブジェクト値保存機能呼び出しコード追加手段
103を呼び出して、メソッド内にそのメンバ変数の値
を保存するためのコードを追加する(ステップ30
9)。モジュール変数が、あるクラスのオブジェクトで
あった場合は、そのクラスのメンバ保存用メソッドを呼
び出すコードを追加する(ステップ310)。
【0026】以上のようにして、モジュール変数がある
クラスのオブジェクトであっても再帰的にメンバ保存用
メソッドを呼び出してデータメンバの値を保存する機能
を実現する。
【0027】図6はプロシージャ内変数保存用コード追
加手段の動作を示すフローチャートである。図7はJa
va言語で記述されたあるクラスについて、スタートア
ップシステムを実行して得られる新しいソースファイル
の例である。
【0028】図7中、701はイベントプロシージャ名
とイベント名の保存および、そのオブジェクト自身のメ
ンバ変数の値を保存するためにイベントプロシージャに
追加されるコード、702はメソッドの開始およびメソ
ッド引数保存開始を宣言するためのオブジェクト値履歴
取得手段108のインターフェース、703はメソッド
呼び出しの引数を保存するためのオブジェクト値履歴取
得手段108のインターフェース、704はメソッド引
数保存の終了を宣言するためのオブジェクト値履歴取得
手段108のインターフェース、705はイベントプロ
シージャ呼び出しが発生したことをオブジェクト値履歴
取得手段108に通知するためのオブジェクト値履歴取
得手段108のインターフェース、706はメンバ保存
用メソッド追加手段101によって追加されるメンバ変
数保存コード、707はログカウンタ902の値を1増
やすためのオブジェクト値履歴取得手段108のインタ
ーフェース、708はメンバ保存用メソッド追加手段1
01によって追加されるメンバ変数保存用メソッド呼び
出しコード(自分自身のオブジェクトのメンバ変数を保
存する)である。
【0029】図6に示すように、プロシージャ内変数保
存用コード追加手段102は、メンバ保存用メソッド追
加手段101からメンバ保存用メソッド追加済みソース
コードを受けとり、対象となるソースコードそれぞれに
ついて、公開メソッドとイベントプロシージャを検索す
る(ステップ601)。イベントプロシージャが見つか
ったら、図7に示すように、そのプロシージャ名とイベ
ント名を保存するコードと、そのオブジェクトのメンバ
変数の値を保存するコード701をイベントプロシージ
ャに追加する(ステップ602)。公開メソッドが見つ
かったら、図7に示すように、まず、メソッド引数保存
開始インターフェースを呼び出すコード702を記述す
る(ステップ603)。次に、メソッド呼び出しの引数
を保存するコード703を追加する(ステップ60
4)。コード703は図4の402と同じである。引数
が基本データ型であれば、そのまま引数の値を保存する
ためのコードを追加し、引数がオブジェクトであれば、
そのオブジェクトのメンバ変数保存用メソッドを呼び出
すコードを追加する。次にメソッド引数保存終了インタ
ーフェースを呼び出すコード704を追加する(ステッ
プ605)。引数がなければ、メソッド引数保存開始イ
ンターフェース呼び出しコード702の直後にメソッド
引数保存終了インターフェースを呼び出すコード704
が追加される。次に、メソッド呼び出し時のオブジェク
トの値を保存するコード706を追加する(ステップ6
06)。
【0030】プロシージャ内メンバ変数保存用コード追
加手段102では、以上の処理をすべてのソースファイ
ルのすべてのイベントプロシージャおよびメソッドに対
して行う。
【0031】スタートアップシステムは、上記のように
メンバ保存用メソッド追加手段101とプロシージャ内
変数保存用コード追加手段103により、オブジェクト
値を保存するコードを順次追加することによって、オブ
ジェクト値履歴取得手段108がデバッグに必要な情報
を得るためのソースコードを埋め込んだ新しいソースコ
ードを生成し、デバッグ情報取得用ソースコード記憶手
段114に格納する。
【0032】次に、実行時システムについて説明する。
実行時システムは、前記スタートアップシステムが生成
したデバッグ情報取得用ソースコード記憶手段114に
格納されているソースコードをコンパイルし、デバッグ
用にビルドしたアプリケーション115を実行すること
で動作する。以下、図2のフローチャートを再度参照し
ながら、実行時システムについて説明する。
【0033】まず、アプリケーションを実際にテストす
るステップ201に関係するユーザ操作取得手段10
5、操作情報記憶手段106について説明する。ユーザ
操作取得手段105は、OS116が提供するメッセー
ジ取得用APIを利用することで操作メッセージを取得
する。記録すべき操作であるか否かは以下の基準によっ
て判断する。すなわち、取得を開始してから最初に操作
されたウインドウに関連するアプリケーションが操作を
記録すべきアプリケーション117であるとみなし、最
初に操作されたウインドウおよびそのウインドウ自身を
親またはオーナーとするすべてのウインドウへ送られる
操作メッセージを記録すべき操作であるとみなす。ユー
ザ操作取得手段105はそのようにして記録が必要であ
ると判断したメッセージとそのメッセージに付随するパ
ラメータを、操作を一意に識別する名前とともに操作情
報記憶手段106に格納する。操作を一意に識別する名
前はユーザが指定することができ、指定された名前が操
作情報記憶手段106中に含まれていれば、ユーザ操作
取得手段105は再度名前の指定をユーザに対して促
す。
【0034】図8は操作情報記憶手段106内の操作情
報記憶テーブルを示す。図8に示すように、操作情報記
憶テーブル801は、操作を一意に識別するための操作
名を記憶する操作名記憶領域802と、アプリケーショ
ンの操作中にユーザ操作取得手段105によって取得さ
れた操作メッセージを記憶する操作メッセージ情報記憶
領域803から構成される。
【0035】ステップ202についてはスタートアップ
システムで説明済みであるので、次に、ステップ20
3、204に関係するユーザ操作再生手段107、オブ
ジェクト値履歴取得手段108、オブジェクト値履歴記
憶手段109について説明する。
【0036】ユーザ操作再生手段107は、操作情報記
憶手段106に格納された操作の再生と、操作対象アプ
リケーション115または117の終了メッセージを監
視する機能を有する。ユーザ操作再生手段107は、O
S116が提供するメッセージ送信用APIを利用する
ことによって操作を再生する。ユーザ操作再生手段10
7は、ユーザによって起動されると、ユーザに対して再
生する操作の名前と操作によって記録される履歴の名前
を問い合わせる。ユーザから操作名と履歴名を受け取る
と、ユーザ操作再生手段107は、操作情報記憶手段1
06中の該当する名前をもつ操作情報を検索し、オブジ
ェクト値履歴取得手段108に対して操作を開始する操
作名および履歴名を通知し、デバッグ用アプリケーショ
ン115を起動する。次に、操作情報記憶手段106に
格納されている指定された名前をもつ操作情報を時系列
に順次読み出して、メッセージ送信用APIに渡し、ア
プリケーション115を操作する。アプリケーション1
15への操作が再生されることにより、オブジェクト値
保存機能呼び出しコード追加手段103によって追加さ
れたコードが実行され、オブジェクト値履歴取得手段1
08が起動され、不具合を起こした操作を行ったときの
アプリケーションの内部のオブジェクトの履歴がオブジ
ェクト値履歴記憶手段109に保存される。
【0037】ユーザ操作再生手段107は、操作の再生
を完了すると、アプリケーション115に対して終了メ
ッセージが発行されるのを待つ。ユーザ操作再生手段1
07はアプリケーション115が終了メッセージを発行
するか、操作再生終了から予め定められた待機時間を経
過したのを検出すると、オブジェクト値履歴取得手段1
08に対して、アプリケーション115の操作の再生が
完了したことを通知する。
【0038】次に、オブジェクト値履歴取得手段108
について説明する。オブジェクト値履歴取得手段108
は、デバッグ用アプリケーション115から独立した別
プロセスの外部コンポーネントとして動作し、指定され
た型の変数またはオブジェクトを受け取ってその値とロ
グ番号をオブジェクト値履歴記憶手段109に格納す
る。以下にオブジェクト値履歴取得手段108の詳細を
説明する。
【0039】図9はオブジェクト値履歴取得手段108
の構成図である。オブジェクト値履歴取得手段108
は、オブジェクト値履歴取得処理を制御するオブジェク
ト値履歴取得部901と、次のログのログ番号を記憶し
ているログカウンタ902と、最後にメンバ変数や引数
の値を記憶したクラスおよびそのメソッド名を記憶する
最終セーブメソッド名レジスタ903と、型名とそのサ
イズを記憶している型サイズテーブル904と、現在再
生されている操作の操作名を記憶する操作名レジスタ9
13、同じく履歴名を記憶する履歴名レジスタ914、
オブジェクト値履歴記憶手段109に格納するデータを
置くための出力レジスタ905から構成される。ログカ
ウンタ902が保持するログ番号は実行順序順でのオブ
ジェクトが取得された順番を示す。オブジェクトのメン
バ変数値を保存する際にはすべてのメンバ変数履歴に同
じログ番号が振られる。出力レジスタ905は、その変
数がどの操作のどの履歴として取得されたデータである
かを示すための一意な操作名を記憶するための操作名部
912および履歴名部915と、その変数が全体で何番
目のログとして記録されたのかを格納するためのログ番
号部906と、どのクラスのどのメソッドの実行によっ
てオブジェクト値が保存されたのかを格納するためのク
ラスおよびメソッド名部907と、どのクラスの何のメ
ンバ変数が保存されたのかを格納するためのクラスおよ
びメンバ名部908とそのメンバの型名を格納する型名
部909とそのオブジェクトがメソッドの引数として保
存されるのかどうかを格納する引数フラグ部910と実
際のデータを格納するデータ部911と、その履歴がど
の操作によって採取された履歴であるかを示す操作名部
912からなる。
【0040】オブジェクト値履歴取得手段108は、イ
ンスタンス化と同時にログカウンタ902、最終セーブ
メソッド名レジスタ903、操作名レジスタ913、履
歴名レジスタ914、出力レジスタ905をクリアす
る。次に、ユーザ操作再生手段107から操作名と履歴
名の通知を受けると、操作名レジスタ913に操作名
を、履歴名レジスタ914に履歴名を記録し、オブジェ
クト履歴記憶手段109に対して、指定された操作名と
履歴名を持つテーブルを生成するように指示する。
【0041】次に、アプリケーション115への操作再
生により、イベントが発生すると、スタートアップシス
テムによりイベントプロシージャに埋め込まれたコード
が実行され、図7に示すオブジェクト値履歴取得手段1
08のイベント発生時用インターフェース705が呼び
出される。イベント発生時用のインターフェース705
が呼び出されると、オブジェクト値履歴取得手段108
は、インターフェースの引数を解析し、どのメソッドが
何のイベントに呼び出されたのかを把握する。次にクラ
ス名およびメソッド名を最終セーブメソッド名レジスタ
903に設定する。次にメンバ変数保存用メソッドであ
る図7のDumpメソッド706が実行されると、図4
に示すようにオブジェクトのメンバ変数を保存するため
に変数値保存用インターフェース402が呼び出され
る。変数値保存用インターフェース402が呼び出され
ると、オブジェクト値履歴取得手段108は、そのイン
ターフェースの引数から、どのクラスの何のメンバを何
の型で保存するべきかを調べる。すなわち、型サイズテ
ーブル904から、引数で渡される実際の値の持つサイ
ズを取得し、引数で渡された値を指定の型のデータ値と
して解釈し、出力レジスタ905のクラスおよびメンバ
名、型名、データに設定する。次に、最終セーブメソッ
ド名レジスタ903からクラスおよびメソッド名を取り
出し、出力レジスタ905に設定する。次に、ログカウ
ンタ902から現在のログ番号を取り出して出力レジス
タ905のログ番号部906に設定する。次に出力レジ
スタ905の引数フラグ部910をリセットし、出力レ
ジスタ905の内容をオブジェクト値履歴記憶手段10
9に格納する。次に、ログカウンタ増加用インターフェ
ース707が呼び出されると、オブジェクト値履歴取得
手段108は、そのイベントプロシージャでのメンバ変
数の保存が完了したとして出力レジスタ905と最終セ
ーブメソッド名レジスタ903をクリアし、ログカウン
タ902の値を1増やす。出力レジスタ905をクリア
するときには、引数フラグ部910をリセットする。
【0042】以上のようにして、オブジェクト値履歴取
得手段108はイベントプロシージャの実行とそのとき
のオブジェクトの値を保存する。
【0043】また、デバッグ用アプリケーション115
の実行により、あるオブジェクトのメソッドが実行され
ると、スタートアップシステムにより、メソッドに埋め
込まれたコード402が実行され、図7に示すオブジェ
クト値保存機能のメソッド実行時用インターフェース7
02が呼び出される。メソッド実行時用インターフェー
ス702が呼び出されると、オブジェクト値履歴取得手
段108は、インターフェース702の引数を解析し、
どのメソッドが呼び出されたのかを把握する。次にクラ
ス名およびメソッド名最終セーブメソッド名レジスタ9
03にメソッド名を設定し、出力レジスタ905の引数
フラグ部910をセットする。図7に示すように基本デ
ータ型を保存するための変数値保存用インターフェース
703が実行されると、オブジェクト値履歴取得手段1
08は、そのインターフェース703の引数から、メソ
ッドの引数をどのクラスのオブジェクトとして保存する
べきかを調べる。型サイズテーブル904から、引数で
渡される実際の値の持つサイズを取得し、引数で渡され
た値を指定の型のデータ値として解釈し、出力レジスタ
905のクラスおよびメンバ名、型名、データに設定す
る。次に、最終セーブメソッド名レジスタ903からク
ラスおよびメソッド名を取り出し、出力レジスタ905
に設定する。次に、ログカウンタ902から現在のログ
番号を取り出して出力レジスタ905のログ番号部90
6に設定し、出力レジスタ905の内容をオブジェクト
値履歴記憶手段109に格納する。その際出力レジスタ
905の引数フラグ部910はセットされたままになっ
ており、そのオブジェクトのメンバ変数が引数として保
存されたこと示すようにオブジェクト値履歴記憶手段1
09に保存される。もし、引数があるクラスのオブジェ
クトである場合は、図7に示すようにそのクラスのメン
バ変数をダンプするコード708が埋め込まれており、
そのコードの実行によって引数となっているオブジェク
トのメンバ変数がオブジェクト値履歴記憶手段109に
保存される。次に、メソッド引数保存終了インターフェ
ースを呼び出すコード704が実行されると、オブジェ
クト値履歴取得手段108は出力レジスタ905の引数
フラグ部910をリセットする。次にメンバ変数保存用
メソッドである図7のDumpメソッド708が実行さ
れると、図4に示すようにオブジェクトのメンバ変数を
保存するために変数値保存用インターフェース402が
呼び出される。変数値保存用インターフェース402が
呼び出されると、オブジェクト値履歴取得手段108
は、そのインターフェース402の引数から、どのクラ
スの何のメンバを何の型で保存するべきかを調べる。型
サイズテーブル904から、引数で渡される実際の値の
持つサイズを取得し、引数で渡された値を指定の型のデ
ータ値として解釈し、出力レジスタ905のクラスおよ
びメンバ名、型名、データに設定する。次に、最終セー
ブメソッド名レジスタ903からクラスおよびメソッド
名を取り出し、出力レジスタ905に設定する。次に、
ログカウンタ902から現在のログ番号を取り出して出
力レジスタ905のログ番号部906に設定する。次に
出力レジスタ905の引数フラグ部910をリセット
し、出力レジスタ905の内容をオブジェクト値履歴記
憶手段109に格納する。次に、ログカウンタ増加用イ
ンターフェースが呼び出されると、オブジェクト値履歴
取得手段108は、そのメソッドでのメンバ変数の保存
が完了したとして出力レジスタ905と最終セーブメソ
ッド名レジスタ903をクリアし、ログカウンタ902
の値を1増やす。出力レジスタ905をクリアするとき
には、引数フラグ部910をリセットする。
【0044】以上のようにして、オブジェクト値履歴取
得手段108はメソッドの実行とそのときのオブジェク
トの値を保存する。
【0045】オブジェクト値履歴取得手段108は、ユ
ーザ操作再生手段107から操作の再生終了の通知を受
けると、ログカウンタ902、最終セーブメソッド名レ
ジスタ903、操作名レジスタ913、履歴名レジスタ
914、出力レジスタ905をクリアする。
【0046】次に、オブジェクト値履歴記憶手段109
について説明する。オブジェクト値履歴記憶109は、
オブジェクト値履歴取得手段108内の出力レジスタ9
05を複数個含むテーブルを、操作名、履歴名ごとに含
んでいる。オブジェクト値履歴記憶手段109は、オブ
ジェクト値履歴取得手段108から、指定された操作名
および履歴名のテーブル作成の指示を受けると、指定さ
れた操作名および履歴名で識別される、オブジェクト値
履歴取得手段108内の出力レジスタ905の構造を1
要素とする可変個の要素を格納可能なテーブルを用意す
る。次にオブジェクト値履歴取得手段108から出力レ
ジスタ905の内容の格納指示を受けると、出力レジス
タ905内の操作名部912と履歴名部915の内容か
ら格納すべきテーブルを特定し、出力レジスタ905の
内容を新しい要素としてテーブルの最後に追加する。
【0047】次に、オブジェクト値履歴比較手段11
0、オブジェクト状態一覧取得手段112について説明
する。オブジェクト値履歴比較手段110では、オブジ
ェクト値履歴記憶手段109に記憶されている複数のオ
ブジェクト値履歴を比較する。比較は二つの履歴中の同
じログ番号同士のデータを突き合わせることで行い、違
いを検出した部分のログ番号、クラスおよびメソッド
名、メンバ変数名を表示・出力手段113に出力する。
これにより、アプリケーション115に修正を加えた場
合にどこの何時の状態が変化したかを、また、何らの変
化もおきていないことを確認できる。
【0048】図10にオブジェクト値履歴比較手段11
0の比較結果を表示・出力手段113によって出力した
例を示す。結果欄の記号NMは値が一致していないこと
を表し、記号WRは実行順序が変わってしまい、対応す
るログがないことを示す。オブジェクト値履歴比較手段
110は、対応するログがなくなった場合、値以外の情
報が一致するログを比較先履歴から検索し、その間の履
歴については実行順序が変わったとみなして記号WRを
結果欄に出力するよう表示・出力手段113に指示す
る。このようにすることで、デグレードチェックなど
で、ユーザがプログラムの実行経路が変化したり値が変
わったりしていないか確認することを容易にする。
【0049】次に、オブジェクト状態一覧取得手段11
2について説明する。オブジェクト状態一覧取得手段1
12は、オブジェクト値履歴記憶手段109に記憶され
ているある履歴中に含まれる、あるクラスのオブジェク
トが履歴取得時点でとったすべての状態の一覧を作成す
る。まず、オブジェクト値履歴記憶手段109中のある
履歴中に含まれるログで、特定のクラス名を持つものを
列挙する。次にメンバ変数定義情報テーブル111から
その定義域を調べ、列挙したオブジェクト値のうちで、
定義域から外れたものを列挙する。
【0050】図11にオブジェクト状態一覧取得手段1
12による状態一覧を表示・出力手段113によって出
力した例を示す。結果欄の記号ORは値が正当な範囲に
入っていないことを示す。
【0051】次に正当な値にあるかどうか判断するのに
使用するメンバ変数定義情報テーブル111について説
明する。メンバ変数定義情報テーブル111はクラスの
メンバ変数ごとに、型名とその仕様上正当な値の範囲を
リストにして保持している。履歴中の値が正当かどうか
を判断するときは、仕様上正当な値の範囲のリストの各
要素について、その要素が示す値の範囲内に履歴中の値
が含むかどうかを判定する。数値に基づく変数は数値比
較によって範囲内にあるか判定し、文字列であれば辞書
順比較で判定する。上記のようにして、不良の原因とな
りうる、不正なオブジェクトの値を検出し、デバッグ作
業を支援する。
【0052】次に表示・出力手段113について説明す
る。表示・出力手段113は前記オブジェクト値履歴比
較手段110やオブジェクト状態一覧取得手段112の
出力を整形して表示・出力したり、オブジェクト値履歴
記憶手段109中のデータを検索して表示出力したり、
そのまま表示出力したりする。表示形式はオブジェクト
値履歴取得手段108から出力レジスタ905の構造で
オブジェクト値履歴記憶手段109の内容を列挙したも
のである。
【0053】
【発明の効果】以上の説明から明らかなように、本発明
によれば次のような効果が得られる。 (1) 不具合が起きたときのユーザの操作を正確に記録
し、デバッグの際に再生することで、不具合が発生した
ときの操作を正確に再現できる。これにより、不具合を
確認するための操作の誤解を防止し、何度も同じ操作を
正確に繰り返すことによる労力を軽減できる。 (2) 不具合の発生した操作を正確に再現し、それによ
って動作している最中のアプリケーションの状態をイベ
ント発生時やメソッド実行時に履歴として記録するた
め、その履歴を閲覧することにより、何の操作が行われ
たときにどのような不良が発現して不具合となったのか
の原因の見当をつけることを容易にできる。 (3) クラスのメンバ変数が仕様上取りうる定義域と実
際に記録されたオブジェクトのメンバ変数の値とを比較
することで、異常な値が何の操作またはどのタイミング
で発生しているかを知ることができる。これもまたデバ
ッグの際の原因究明作業にかかる労力を軽減できる。
【図面の簡単な説明】
【図1】本発明によるオブジェクト指向開発用デバッグ
支援装置の一実施形態のブロック図である。
【図2】図1の全体的動作を示す大まかなフローチャー
トである。
【図3】図1のメンバ保存用メソッド追加手段の動作を
示すフローチャートである。
【図4】メンバ保存用メソッド追加手段が行うソースの
加工例を示す図である。
【図5】図1のメンバ変数保存用メソッド名テーブルの
構造図である。
【図6】図1のプロシージャ内変数保存用コード追加手
段の動作を示すフローチャートである。
【図7】プロシージャ内変数保存用コード追加手段が行
うソースの加工例を示す図である。
【図8】図1の操作情報記憶の構造図である。
【図9】図1のオブジェクト値履歴取得手段の構成図で
ある。
【図10】図1のオブジェクト履歴比較手段の出力例を
示す図である。
【図11】図1のオブジェクト状態一覧作成手段の出力
例を示す図である。
【符号の説明】
101 メンバ保存用メソッド追加手段 102 プロシージャ内変数保存用コード追加手段 103 オブジェクト値保存機能呼び出しコード追加手
段 104 メンバ変数保存用メソッド各テーブル 105 ユーザ操作取得手段 106 操作情報記憶手段 107 ユーザ操作再生手段 108 オブジェクト値履歴取得手段 109 オブジェクト値履歴記憶手段 110 オブジェクト履歴比較手段 111 メンバ変数定義域情報テーブル 112 オブジェクト状態一覧作成手段 113 表示、出力する手段 114 デバッグ情報取得用ソースコード記憶手段 115 デバッグ用アプリケーション 117 テスト対象アプリケーション 118 オリジナルソースコード

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】 オブジェクト指向言語を使用したアプリ
    ケーションの開発のデバッグ作業を支援する装置におい
    て、ユーザが行った操作とアプリケーション内のオブジ
    ェクトの値の履歴とを取得する手段と、前記操作とオブ
    ジェクトの値の履歴とを関連付けて保存する手段と、前
    記関連付けて保持された操作とオブジェクトの値の履歴
    を表示・出力する手段とを有することを特徴とするオブ
    ジェクト指向開発用デバッグ支援装置。
  2. 【請求項2】 請求項1記載のオブジェクト指向開発用
    デバッグ支援装置において、ユーザが行った操作の操作
    情報を記憶する手段と、前記記憶された操作情報に基づ
    いてユーザの操作を再生してアプリケーションを操作す
    る手段を有し、最初にユーザが行った操作とまったく同
    一の操作で何回でもデバッグ実行を行い、オブジェクト
    の値を取得することを特徴とするオブジェクト指向開発
    用デバッグ支援装置。
  3. 【請求項3】 請求項1、2記載のオブジェクト指向開
    発用デバッグ支援装置において、同一の操作に対して取
    得した複数のオブジェクトの履歴同士を比較し差異を検
    出する手段と、履歴中のオブジェクトの状態の一覧を生
    成し、クラスごとに予め定義されたメンバ変数の定義域
    と、実際に取得された値とを比較し、定義域外に外れて
    いる状態を検出する手段とを有することを特徴とするオ
    ブジェクト指向開発用デバッグ支援装置。
  4. 【請求項4】 請求項1、2、3記載のオブジェクト指
    向開発用デバッグ支援装置において、クラスのメンバを
    認識し、そのメンバの値を取り出すためのアクセサを自
    動生成する手段と、クラスのメソッドを認識し、メソッ
    ド呼び出し時点での、メソッドへの引数の値およびメン
    バ変数およびメソッド内で作成された自動変数の値を保
    存するためのコードを生成する手段と、前記生成された
    コードを記憶する手段とを有し、前記記憶されたコード
    によりデバッグ用アプリケーションを生成することを特
    徴とするオブジェクト指向開発用デバッグ支援装置。
JP2000293398A 2000-09-27 2000-09-27 オブジェクト指向開発用デバッグ支援装置 Expired - Fee Related JP3698974B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2000293398A JP3698974B2 (ja) 2000-09-27 2000-09-27 オブジェクト指向開発用デバッグ支援装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2000293398A JP3698974B2 (ja) 2000-09-27 2000-09-27 オブジェクト指向開発用デバッグ支援装置

Publications (2)

Publication Number Publication Date
JP2002108651A true JP2002108651A (ja) 2002-04-12
JP3698974B2 JP3698974B2 (ja) 2005-09-21

Family

ID=18776202

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000293398A Expired - Fee Related JP3698974B2 (ja) 2000-09-27 2000-09-27 オブジェクト指向開発用デバッグ支援装置

Country Status (1)

Country Link
JP (1) JP3698974B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100351835C (zh) * 2004-01-06 2007-11-28 富士施乐株式会社 信息处理设备及用于信息处理设备的方法
KR101213843B1 (ko) 2004-08-27 2012-12-20 마이크로소프트 코포레이션 원활한 객체 비교 시스템 및 방법

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08212108A (ja) * 1995-02-08 1996-08-20 Kokusai Electric Co Ltd ソフトウェアのテスト方法及び装置
JPH08314752A (ja) * 1995-05-17 1996-11-29 Ricoh Co Ltd オブジェクト指向システムの開発支援装置
JPH103402A (ja) * 1996-06-18 1998-01-06 Toshiba Corp システム診断装置およびシステム診断方法
JPH1083326A (ja) * 1996-05-01 1998-03-31 Internatl Business Mach Corp <Ibm> トレース・データ収集方法およびコンピュータ読み取り可能コード
JPH10275093A (ja) * 1997-03-31 1998-10-13 Hitachi Software Eng Co Ltd プログラムテスト支援装置
JP2000047901A (ja) * 1998-07-27 2000-02-18 Fujitsu Ltd 実行パス照合装置および実行パス照合プログラムの記録媒体
JP2000215082A (ja) * 1999-01-26 2000-08-04 Hitachi Ltd 分散オブジェクト環境のプレイバックテスト方式

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08212108A (ja) * 1995-02-08 1996-08-20 Kokusai Electric Co Ltd ソフトウェアのテスト方法及び装置
JPH08314752A (ja) * 1995-05-17 1996-11-29 Ricoh Co Ltd オブジェクト指向システムの開発支援装置
JPH1083326A (ja) * 1996-05-01 1998-03-31 Internatl Business Mach Corp <Ibm> トレース・データ収集方法およびコンピュータ読み取り可能コード
JPH103402A (ja) * 1996-06-18 1998-01-06 Toshiba Corp システム診断装置およびシステム診断方法
JPH10275093A (ja) * 1997-03-31 1998-10-13 Hitachi Software Eng Co Ltd プログラムテスト支援装置
JP2000047901A (ja) * 1998-07-27 2000-02-18 Fujitsu Ltd 実行パス照合装置および実行パス照合プログラムの記録媒体
JP2000215082A (ja) * 1999-01-26 2000-08-04 Hitachi Ltd 分散オブジェクト環境のプレイバックテスト方式

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100351835C (zh) * 2004-01-06 2007-11-28 富士施乐株式会社 信息处理设备及用于信息处理设备的方法
KR101213843B1 (ko) 2004-08-27 2012-12-20 마이크로소프트 코포레이션 원활한 객체 비교 시스템 및 방법

Also Published As

Publication number Publication date
JP3698974B2 (ja) 2005-09-21

Similar Documents

Publication Publication Date Title
US7340726B1 (en) Systems and methods for performing static analysis on source code
US6513154B1 (en) System and method for testing of computer programs in programming effort
US6532552B1 (en) Method and system for performing problem determination procedures in hierarchically organized computer systems
US5513315A (en) System and method for automatic testing of computer software
US8429467B2 (en) User-triggered diagnostic data gathering
US20080052683A1 (en) Method and Apparatus for Breakpoint Analysis of Computer Programming Code Using Unexpected Code Path Conditions
US7689872B2 (en) Autonomic program error detection and correction
US20020091968A1 (en) Object-oriented data driven software GUI automated test harness
JPH0325629A (ja) プログラムのエラー検出方法及びシステム
US20060143596A1 (en) Program analyzing apparatus and testing apparatus, and analyzing method and program therefor
US7178135B2 (en) Scope-based breakpoint selection and operation
US20080082967A1 (en) Method and system for parameter profile compiling
JP4023803B2 (ja) ウェブアプリケーション開発支援装置、データ処理方法及びプログラム
KR20080050118A (ko) 임베디드용 소프트웨어의 오류 검출 방법
US10613969B2 (en) Code coverage module with testing function identifier
US6738778B1 (en) Method and apparatus for monitoring the execution of a program
JP2003122599A (ja) 計算機システムおよび計算機システムにおけるプログラム実行監視方法
CN114048099A (zh) Java应用监控方法及装置、存储介质及电子设备
JPH09212385A (ja) 並列プログラムデバッグ装置
US6792562B1 (en) Format for extensible error and event codes
JP2002108651A (ja) オブジェクト指向開発用デバッグ支援装置
US9710360B2 (en) Optimizing error parsing in an integrated development environment
JPH11224186A (ja) ソフトウェア解析装置及びソフトウェア解析方法
CN115827451A (zh) 测试缺陷的检测方法和装置、存储介质及电子装置
US20070168978A1 (en) Computer program code debugging method and system

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20050228

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050308

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050509

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: 20050705

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050706

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080715

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080715

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080715

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110715

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140715

Year of fee payment: 9

LAPS Cancellation because of no payment of annual fees