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

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

Info

Publication number
JP3698974B2
JP3698974B2 JP2000293398A JP2000293398A JP3698974B2 JP 3698974 B2 JP3698974 B2 JP 3698974B2 JP 2000293398 A JP2000293398 A JP 2000293398A JP 2000293398 A JP2000293398 A JP 2000293398A JP 3698974 B2 JP3698974 B2 JP 3698974B2
Authority
JP
Japan
Prior art keywords
history
value
name
code
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.)
Expired - Fee Related
Application number
JP2000293398A
Other languages
English (en)
Other versions
JP2002108651A (ja
Inventor
浩樹 渡邊
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

Images

Landscapes

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

Description

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

  1. オブジェクト指向言語を使用したアプリケーションの開発のデバッグ作業を支援する装置において、ユーザが行った操作とアプリケーション内のオブジェクトの値の履歴とを取得する手段と、前記操作とオブジェクトの値の履歴とを関連付けて保存する手段と、同一の操作に対して取得した複数のオブジェクトの履歴同士を比較し差異を検出する手段と、履歴中のオブジェクトの状態の一覧を生成し、クラスごとに予め定義されたメンバ変数の定義域と、実際に取得された値とを比較し、定義域外に外れている状態を検出する手段と、前記関連付けて保持された操作とオブジェクトの値の履歴、オブジェクト履歴比較結果あるいはオブジェクト状態一覧を表示・出力する手段とを有することを特徴とするオブジェクト指向開発用デバッグ支援装置。
  2. 請求項1記載のオブジェクト指向開発用デバッグ支援装置において、ユーザが行った操作の操作情報を記憶する手段と、前記記憶された操作情報に基づいてユーザの操作を再生してアプリケーションを操作する手段をさらに有し、最初にユーザが行った操作とまったく同一の操作で何回でもデバッグ実行を行い、オブジェクトの値を取得することを特徴とするオブジェクト指向開発用デバッグ支援装置。
  3. 請求項1もしくは2記載のオブジェクト指向開発用デバッグ支援装置において、デバッグ対象アプリケーションのオリジナルソースコードを解析して、クラスのメソッドやメンバを認識し、メソッド呼び出し時点での、メソッドへの引数の値およびメンバ変数およびメソッド内で作成された自動変数の値を保存するためのコードを生成する手段と、前記生成されたコードを記憶する手段とをさらに有し、前記記憶されたコードによりデバッグ用アプリケーションを生成することを特徴とするオブジェクト指向開発用デバッグ支援装置。
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 JP2002108651A (ja) 2002-04-12
JP3698974B2 true 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)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4581404B2 (ja) * 2004-01-06 2010-11-17 富士ゼロックス株式会社 情報処理装置及び情報処理プログラム
US7503038B2 (en) 2004-08-27 2009-03-10 Microsoft Corporation System and method for seamlessly comparing objects

Family Cites Families (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 オブジェクト指向システムの開発支援装置
US5896536A (en) * 1996-05-01 1999-04-20 International Business Machines Corp. Data triggered trace support for debugging object oriented programs
JPH103402A (ja) * 1996-06-18 1998-01-06 Toshiba Corp システム診断装置およびシステム診断方法
JP3182111B2 (ja) * 1997-03-31 2001-07-03 日立ソフトウエアエンジニアリング株式会社 プログラムテスト支援装置
JP2000047901A (ja) * 1998-07-27 2000-02-18 Fujitsu Ltd 実行パス照合装置および実行パス照合プログラムの記録媒体
JP2000215082A (ja) * 1999-01-26 2000-08-04 Hitachi Ltd 分散オブジェクト環境のプレイバックテスト方式

Also Published As

Publication number Publication date
JP2002108651A (ja) 2002-04-12

Similar Documents

Publication Publication Date Title
US6513154B1 (en) System and method for testing of computer programs in programming effort
US8473919B2 (en) System and method for repeating program flow for debugging and testing
US8156475B2 (en) Device and method for testing embedded software using emulator
US20070220370A1 (en) Mechanism to generate functional test cases for service oriented architecture (SOA) applications from errors encountered in development and runtime
US7353505B2 (en) Tracing the execution path of a computer program
US9146831B2 (en) Sampling based runtime optimizer for efficient debugging of applications
US20060143596A1 (en) Program analyzing apparatus and testing apparatus, and analyzing method and program therefor
JPH0325629A (ja) プログラムのエラー検出方法及びシステム
US20080256517A1 (en) Method and System for Automatically Generating Unit Test Cases Which Can Reproduce Runtime Problems
US7237232B2 (en) Method and system for recording program information in the event of a failure
US20050160405A1 (en) System and method for generating code coverage information
WO2017044069A1 (en) Automatic regression identification
US7086033B2 (en) Software debugger having a monitor for monitoring conditional statements within a software program
US6738778B1 (en) Method and apparatus for monitoring the execution of a program
JP3206641B2 (ja) マイコンシステムのデバッグ方法、デバッグ装置及びデバッグプログラムを記録した記録媒体
JP3698974B2 (ja) オブジェクト指向開発用デバッグ支援装置
JP2005338987A (ja) 例外テスト支援プログラム及び例外テスト支援装置
JP2007207213A (ja) ワイヤレスデバイスのリアルタイム診断に適用する診断情報収集手法
CN113127367B (zh) Android动态权限申请的缺陷检测方法
JP2005174045A (ja) ソースプログラム変換装置、ソースプログラム変換方法、ソースプログラム変換プログラム、および、プログラム記録媒体
JP2007328447A (ja) ソフトウェア試験項目選択装置、ソフトウェア試験項目選択プログラム、ソフトウェア試験項目選択プログラムが格納された記憶媒体およびソフトウェア試験項目選択方法
JPH036630A (ja) 対話処理プログラム検査方式
JP2001331344A (ja) 組み込みシステムの障害情報トレーサ装置
JP6668808B2 (ja) 未テスト箇所検出装置、未テスト箇所検出方法、および、プログラム
CN115994090A (zh) 一种动态注入配置的区块链集成测试方法和系统

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