JP2000207246A - デバッグ支援装置及び方法並びにデバッグ支援用ソフトウェアを記録した記録媒体 - Google Patents

デバッグ支援装置及び方法並びにデバッグ支援用ソフトウェアを記録した記録媒体

Info

Publication number
JP2000207246A
JP2000207246A JP11006062A JP606299A JP2000207246A JP 2000207246 A JP2000207246 A JP 2000207246A JP 11006062 A JP11006062 A JP 11006062A JP 606299 A JP606299 A JP 606299A JP 2000207246 A JP2000207246 A JP 2000207246A
Authority
JP
Japan
Prior art keywords
program
identifier
log
recording
debugging
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.)
Pending
Application number
JP11006062A
Other languages
English (en)
Inventor
Shoji Honma
昭次 本間
Tetsuji Fukaya
哲司 深谷
Yoko Yamauchi
洋子 山内
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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP11006062A priority Critical patent/JP2000207246A/ja
Publication of JP2000207246A publication Critical patent/JP2000207246A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【課題】 ユーザが指定した注目箇所に関係する箇所に
ついてのみ実行過程を記録をすることで、必要十分な記
録を行う。 【解決手段】 解析部1が、ソースファイル群10を読
み込み、ソースコード中の文相互の影響関係を調べる。
ユーザが注目箇所入力部17より注目箇所を指定する。
注目箇所の関係箇所調査部18が、指定された注目箇所
と所定の関係を持つ関係箇所を調査する。ログ出力命令
生成・挿入部20が、関係箇所について実行過程を記録
するためのログ出力命令をソースコードに挿入する。こ
のソースコードをコンパイラ22で実行ファイル23に
変換し実行すると、必要十分な実行過程のログがログデ
ータ24として記録される。ログデータ24をログビュ
ーア25で表示させることで、デバッグが効果的に支援
される。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】この発明は、プログラムの動
作を記録して表示することでデバッグを支援する技術の
改良に関するもので、より具体的には、指定された注目
箇所に関係する箇所についてもプログラムの動作を記録
することで、無駄なく必要十分な記録を行うようにした
ものである。
【0002】
【従来の技術】コンピュータの正しいプログラムを実現
するには、プログラムの不具合を取り除くデバッグの作
業が不可欠である。そして、従来から、プログラムの不
具合の原因を特定する有効な手法として、プログラムの
実行過程を記録し、後からそれを再現したり、不具合が
明らかになった箇所からプログラムの実行過程を逆方向
にさかのぼって見てゆくことで、プログラムの動作や不
具合の発生原因を絞り込む手法が知られている。また、
このような手法を適用するために、例えば特願平3−2
21989のように、プログラムの実行過程を表す履歴
すなわち実行ログを記録して表示する技術が提案されて
いる。
【0003】しかし、プログラムの実行過程をすべて記
憶すると、記録する情報が多くなるため、記録するとき
の処理速度の低下や必要な記憶容量の増大といった問題
が生じる。そこで、例えば特願平4−177131のよ
うに、プログラム中からユーザが指定した範囲について
だけ実行過程を記録することで、記録する情報を限定す
る技術も提案されている。
【0004】
【発明が解決しようとする課題】しかしながら、上記の
ように記録する範囲を指定する従来技術では、適切な範
囲を自動的に指定することはできず、ログを記録するプ
ログラムの範囲そのものをユーザが判断して指定しなけ
ればならなかった。このため、作業が煩雑になるだけで
なく、ユーザが指定した範囲が不適切な場合は、必要な
情報を記録し損ねる可能性があった。
【0005】本発明は、上記のような従来技術の問題点
を解決するために提案されたもので、その目的は、実行
過程についてデバッグのために必要かつ十分な情報を記
録するデバッグ支援装置及び方法並びにデバッグ支援用
ソフトウェアを記録した記録媒体を提供することであ
る。また、本発明の他の目的は、円滑な解析を実現する
ことである。また、本発明の他の目的は、容易にログを
得ることである。また、本発明の他の目的は、デバッグ
を効果的に支援することである。
【0006】
【課題を解決するための手段】上記の目的を達成するた
め、請求項1の発明は、プログラムのデバッグを支援す
るためのデバッグ支援装置において、プログラム中の各
部分間の関係を解析するための解析手段と、プログラム
中の所望の箇所を注目箇所として指定するための手段
と、前記注目箇所と予め決められた関係を有する関係箇
所を、解析された前記関係に基づいて調査するための調
査手段と、前記関係箇所の実行過程を記録するための記
録手段と、を備えたことを特徴とする。請求項5の発明
は、請求項1の発明を方法という見方からとらえたもの
で、プログラムのデバッグを支援するためのデバッグ支
援方法において、プログラム中の各部分間の関係を解析
するための解析ステップと、プログラム中の所望の箇所
を注目箇所として指定するためのステップと、前記注目
箇所と予め決められた関係を有する関係箇所を、解析さ
れた前記関係に基づいて調査するための調査ステップ
と、前記関係箇所の実行過程を記録するための記録ステ
ップと、を含むことを特徴とする。請求項9の発明は、
請求項1,5の発明を、コンピュータのソフトウェアを
記録した記録媒体という見方からとらえたもので、コン
ピュータを使って、プログラムのデバッグを支援するた
めのデバッグ支援用ソフトウェアを記録した記録媒体に
おいて、そのソフトウェアは前記コンピュータに、プロ
グラム中の各部分間の関係を解析させ、プログラム中の
所望の箇所について注目箇所としての指定を受け付けさ
せ、前記注目箇所と予め決められた関係を有する関係箇
所を、解析された前記関係に基づいて調査させ、前記関
係箇所の実行過程を記録させることを特徴とする。請求
項1,5,9の発明では、ユーザが指定する注目箇所と
所定の関係を持つ関係箇所について、プログラムの実行
過程がログすなわち履歴として記録されるので、無駄無
く必要かつ十分な記録を行うことができる。
【0007】請求項2の発明は、請求項1記載のデバッ
グ支援装置において、前記解析手段は、プログラムを単
語に分割するための手段と、前記各単語の組み合わせに
基づいて構文を解析するための手段と、前記構文で使わ
れている関数及び変数を識別するための識別子を抽出す
るための手段と、前記構文のどのような部分で前記識別
子同士が関係するかを解析するための手段と、を備えた
ことを特徴とする。請求項6の発明は、請求項2の発明
を方法という見方からとらえたもので、請求項5記載の
デバッグ支援方法において、前記解析ステップは、プロ
グラムを単語に分割するためのステップと、前記各単語
の組み合わせに基づいて構文を解析するためのステップ
と、前記構文で使われている関数及び変数を識別するた
めの識別子を抽出するためのステップと、前記構文のど
のような部分で前記識別子同士が関係するかを解析する
ためのステップと、を含むことを特徴とする。請求項
2,6の発明では、プログラムの単語への分割、単語に
基づく構文解析、構文中での識別子の抽出、識別子間の
関係解析という具合に、プログラムの解析を、単純で原
始的な処理から高度な論理的構造の解析へと順次進める
ので、段階を追った円滑な解析が実現される。
【0008】請求項3の発明は、請求項1又は2記載の
デバッグ支援装置において、前記記録手段は、調査した
前記関係箇所についてプログラム実行のログを記録する
ためのログ出力命令をプログラム中に挿入するための手
段を備え、前記ログ出力命令を挿入したプログラムを実
行したときに記録されるログを出力するための手段を備
えたことを特徴とする。請求項7の発明は、請求項3の
発明を方法という見方からとらえたもので、請求項5又
は6記載のデバッグ支援方法において、前記記録ステッ
プは、調査した前記関係箇所についてプログラム実行の
ログを記録するためのログ出力命令をプログラム中に挿
入するためのステップを含み、前記ログ出力命令を挿入
したプログラムを実行したときに記録されるログを出力
するためのステップを含むことを特徴とする。請求項1
0の発明は、請求項3,7の発明を、コンピュータのソ
フトウェアを記録した記録媒体という見方からとらえた
もので、請求項9記載のデバッグ支援用ソフトウェアを
記録した記録媒体において、前記ソフトウェアは前記コ
ンピュータに、調査した前記関係箇所についてプログラ
ム実行のログを記録するためのログ出力命令をプログラ
ム中に挿入させ、前記ログ出力命令を挿入したプログラ
ムを実行したときに記録されるログを出力させることを
特徴とする。請求項3,7,10の発明では、関係箇所
についてログを記録するための命令をプログラム中に挿
入するので、その後のコンパイルや実行を従来通り行う
ことで容易にログを得ることができ、インタプリタ形式
で関係箇所を判別しログを記録しながらプログラムを実
行する必要がない。
【0009】請求項4の発明は、請求項2又は3記載の
デバッグ支援装置において、前記調査手段は、少なくと
も、前記注目箇所で使われている変数に対して、当該注
目箇所以前において値を変更している箇所を、前記関係
箇所とするように構成されたことを特徴とする。請求項
8の発明は、請求項4の発明を方法という見方からとら
えたもので、請求項6又は7記載のデバッグ支援方法に
おいて、前記調査ステップは、少なくとも、前記注目箇
所で使われている変数に対して、当該注目箇所以前にお
いて値を変更している箇所を、前記関係箇所とすること
を特徴とする。請求項4,8の発明では、代入などによ
って注目箇所の変数の値を変更している箇所について、
関係箇所として実行過程を記録する。このため、バグの
原因となっている変数の値が、どのような経過を経ても
たらされたものかについて情報が過不足なく記録され、
デバッグが効果的に支援される。なお、変数の値を変更
する態様としては、代入だけでなくリセット、インクリ
メント、デクリメント、シフト、ローテイト、データ型
の変更、ポインタ参照、変数抹消、などあらゆる態様が
考えられ、さらに、関係箇所の範囲を、配列変数の要素
番号の変更などに拡大することも望ましい。また、変数
の値を変更している箇所以外にも、注目箇所として指定
された関数の呼び出しや、指定された変数や関数に関わ
る分岐などを関係箇所とすることが望ましい。
【0010】
【発明の実施の形態】以下、本発明の実施の形態(以下
「実施形態」という)について図面を参照しながら説明
する。なお、本発明は、周辺機器を持つコンピュータ
を、ソフトウェアで制御することによって実現されるこ
とが一般的と考えられる。この場合、そのソフトウェア
は、この明細書の記載にしたがった命令を組み合わせる
ことで作られ、上に述べた従来技術と共通の部分には従
来技術で説明した手法も使われる。また、そのソフトウ
ェアは、プログラムコードだけでなく、プログラムコー
ドの実行のときに使うために予め用意されたデータも含
む。
【0011】そして、そのソフトウェアは、CPU、コ
プロセッサ、各種チップセットといった処理装置、キー
ボードやマウスといった入力装置、メモリやハードディ
スク装置といった記憶装置、ディスプレイやプリンタと
いった出力装置などの物理的な資源を活用することで本
発明の作用効果を実現する。
【0012】但し、本発明を実現する具体的なソフトウ
ェアやハードウェアの構成はいろいろ変更することがで
きる。例えば、ソフトウェアの形式には、コンパイラ、
インタプリタ、アセンブラなどいろいろあり、外部との
情報をやり取りするにも、フロッピーディスクなどの着
脱可能な記録媒体、ネットワーク接続装置などいろいろ
考えられる。また、本発明を実現するソフトウェアやプ
ログラムを記録したCD−ROMのような記録媒体は、
単独でも本発明の一態様である。さらに、本発明の機能
の一部をLSIなどの物理的な電子回路で実現すること
も可能である。
【0013】以上のように、コンピュータを使って本発
明を実現する態様はいろいろ考えられるので、以下で
は、本発明や実施形態に含まれる個々の機能を実現する
仮想的回路ブロックを使って、本発明と実施形態とを説
明する。
【0014】〔1.構成〕本実施形態は、プログラムの
デバッグを支援するためのデバッグ支援装置であり、図
1は、本実施形態の構成を示す機能ブロック図である。
なお、本実施形態では、上記のようなソフトウェアが、
CPU51、メモリやハードディスク装置などの記憶装
置52、入出力回路53などを含むハードウェア5を制
御することによって、以下のような構成が実現される。
【0015】〔1−1.全体の構成〕すなわち、本実施
形態は、図1に示すように、解析部1と、注目箇所入力
部17と、命令挿入部2と、コンパイラ22と、ログビ
ューア25と、を備えている。このうち解析部1は、デ
バッグ対象となるプログラム中の各部分間の関係を解析
するための解析手段である。また、注目箇所入力部17
は、プログラム中の所望の箇所を注目箇所として指定す
るための手段であり、より具体的には、ユーザが、プロ
グラムのソースコードの中から、デバッグなどのために
注目したい関数または変数とその位置とを入力すること
で指定するための手段である。
【0016】また、ソースファイル群10は、デバッグ
対象のプログラムのソースコードを格納しているファイ
ルすなわちソースファイルの集まりであり、デバッグ対
象のソースファイルは1つだけでもよい。
【0017】〔1−2.解析部の構成〕また、解析部1
は、より具体的には、ソースファイル群10からソース
コードを記録したソースファイルを順次読み込み、ソー
スコードを解析して識別子データ14と文データ16と
を生成する部分であり、字句解析部11と、構文解析部
12と、識別子とその属性抽出部13と、影響関係解析
部15とを備えている。
【0018】このうち字句解析部11は、ソースファイ
ル群10からプログラムを表すソースファイルを順次読
み込み、ソースコードを解析して単語に分割するための
手段である。また、構文解析部12は、分割された各単
語の組み合わせに基づいて構文を解析するための手段で
あり、より具体的には、字句解析部11によって分割さ
れた単語の並びをさらに解析し、一つまたは複数の単語
の並びの組み合わせを式や文として解釈することで、そ
れぞれの組み合わせがどのような文法的意味を持ってい
るかを出力する手段である。
【0019】また、識別子とその属性抽出部13は、前
記構文で使われている関数及び変数を識別するための識
別子を抽出するための手段であり、より具体的には、構
文解析部12が解析した文法的意味の中から、関数又は
変数の名称である識別子とその属性だけを取り出し、識
別子データ14として出力する手段である。
【0020】一方、影響関係解析部15は、前記構文の
どのような部分で識別子同士が関係するかを解析するた
めの手段であり、より具体的には、字句解析部11によ
って分割された単語と、構文解析部12によって解析さ
れた文法的意味とを、文という単位で捉え直し、この文
を単位としてそのソースコードのフローグラフを求め、
その文の中に現れる識別子の使われ方を解析し、この解
析結果を文データ16として出力する手段である。
【0021】ここで、識別子の使われ方の一例として
は、変数に値が代入されている、変数の値が条件式で参
照されている、関数の戻り値が参照されている、などを
挙げることができる。
【0022】〔1−3.命令挿入部の構成〕また、命令
挿入部2は、注目箇所の関係箇所調査部18と、ログ出
力命令生成・挿入部20とを備えている。このうち関係
箇所調査部18は、注目箇所入力部17によって指定さ
れた注目箇所と予め決められた関係を有する関係箇所
を、解析されたプログラムの各部分間の関係に基づいて
調査するための調査手段である。この注目箇所の関係箇
所調査部18は、より具体的には、識別子データ14、
文データ16を読み込み、注目箇所入力部17から入力
された注目箇所に関係する箇所(関係箇所とも呼ぶ)を
調べ、その結果を関係箇所データ19として出力するよ
うに構成されている。
【0023】また、ログ出力命令生成・挿入部20は、
調査によって判明した関係箇所についてプログラム実行
のログを記録するためのログ出力命令を、プログラム中
に挿入するための手段であり、コンパイラ22ととも
に、調査で判明した関係箇所の実行過程を記録するため
の記録手段を構成している。
【0024】より具体的には、ログ出力命令生成・挿入
部20は、関係箇所データ19の中から、変数について
は値が代入されている箇所や参照されている箇所に、関
数については、呼び出されている箇所や呼び出された関
数の中の箇所、にそれぞれ注目し、その変数や関数の名
前や位置といった情報を調べる手段である。このログ出
力命令生成・挿入部20は、このように調べた関数や変
数について、ログ出力命令を作成し、その命令をソース
コード中の調べた関数や変数の位置の近くに挿入するよ
うに構成されている。
【0025】また、ここでいう調べた関数や変数の位置
とは、関数や変数の直前直後が望ましく、一例を述べる
と、変数については変数の値が変更もしくは参照される
前または後、もしくは前後など、関数については関数が
呼び出される前または後、もしくは前後について、また
は、その関数が終わって呼び出し元に戻る前、などであ
る。
【0026】〔1−4.その他の構成〕そして、このよ
うなログ出力命令を挿入したソースコードをファイルに
出力したものが、ログ出力命令が挿入されたソースファ
イル群21である。また、コンパイラ22は、このソー
スファイル群21をコンパイルすることで、ログ出力命
令が挿入された実行ファイル23を生成する手段であ
る。
【0027】そして、このようにログ出力命令が挿入さ
れた実行ファイル23は、ハードウェア5やそのオペレ
ーティングシステムによって実行されることで、実行結
果のログデータ24が出力される。そして、ログビュー
ア25は、ログ出力命令が挿入された実行ファイル23
を実行したときに記録されるログを出力するための手段
である。
【0028】より具体的には、ログビューア25は、実
行結果のログデータ24を読み込み、プログラムの実行
によって、注目する変数とその変数に関係する変数がど
のように変化したかの過程を表示するための手段であ
り、ユーザは、この表示によってそのような変化の過程
を確認することができる。
【0029】〔2.データ構造の説明〕次に、本実施形
態で用いられる各データの構造を説明する。 〔2−1.識別子データの構造〕まず、識別子データ1
4は、ソースコードの中でどのような変数及び関数が使
われているかを表す識別子の宣言についての情報を含
み、具体的には識別子名、識別子を宣言しているファイ
ル名、そのファイルを格納しているディレクトリ名、識
別子を宣言している行、識別子が局所変数の場合はその
識別子を宣言している関数名、識別子が関数かどうか、
識別子が静的宣言されているかどうか、を含む。
【0030】すなわち、この「識別子データ」は、その
形式の例を図2に示すように、「ディレクトリ情報」、
「ファイル情報」、「識別子情報」を含む。このうち
「ディレクトリ情報」は、ソースファイルが格納してあ
るディレクトリにディレクトリ番号を割り当て、ディレ
クトリ番号からディレクトリ名が参照できるようにした
表である。例えば、図2の例では、ディレクトリD2に
ついて、ディレクトリ番号として2が割り当てられてい
る。
【0031】また、「ファイル情報」は、ソースファイ
ル名にファイル番号を割り当て、さらにソースファイル
のあるディレクトリのディレクトリ番号を格納したもの
である。このファイル情報を参照することで、ファイル
番号から、ソースファイル名と、そのソースファイルが
あるディレクトリ番号が参照できる。すなわち、図2の
例でソースファイル名F2に対してファイル番号2が割
り当てられているが、そのファイルがあるディレクトリ
はディレクトリ番号としてd2が割り当てられたディレ
クトリである。
【0032】また、「識別子情報」は、識別子名に識別
子番号を割り当て、さらにその識別子の宣言に関する属
性を格納したものである。この識別子の宣言に関する属
性としては、その識別子を宣言しているソースファイル
のファイル番号、宣言している行、宣言している関数の
識別子番号(ローカル変数の場合)、関数かどうか、静
的宣言されているかどうか、が挙げられる。このような
識別子番号に基づいて、識別子名やその識別子の宣言に
関する属性を参照することができる。
【0033】例えば、図2の例では、識別子名I2に対
して識別子番号2が割り当てられ、その識別子が宣言さ
れているのは、ファイル番号にf2が振られたファイル
であり、さらに、そのファイル中でその識別子を宣言し
ている行はL2である。
【0034】また、iで始まる属性は、その識別子に対
応する変数を宣言している関数の識別子番号であり、例
えば、上に例示した識別子番号2の識別子に対応する変
数がローカル変数の場合、その変数は、識別子番号にi
2が割り当てられた関数の中で宣言されている。一方、
その識別子に対応する変数がグローバル変数の場合、そ
の変数はどの関数中でも宣言されていないことを示すた
め、例えばi2は−1の値を持つ。
【0035】また、Gで始まる属性は、識別子が関数で
あるかどうかを表す属性であり、例えば、上に例示した
識別子番号2の識別子が関数の場合、G2は1を、その
識別子が変数であれば0を、値として持つ。また、Sで
始まる属性は、その識別子が静的宣言されているかどう
かを表す属性であり、その識別子が静的宣言されていれ
ば、例えばS2は1を、静的宣言されていなければ0を
値として持つ。
【0036】〔2−2.文データの構造〕また、文デー
タ16は、ソースコードを、各単語の組み合わせに基づ
いて文という単位に分割した場合に、個々の文の構文に
よって表される流れの中で、識別子がどのように使われ
ているかの情報を持つ。ここで、ソースコードを文とい
う単位に分割する基準はいろいろ考えられるが、一例と
して、代入式すなわち左辺と代入演算子と右辺からなる
式、関数呼出し、if文などの条件文、do,whil
e,for,switch文といったループの条件式、
などを一文とすることが考えられる。
【0037】そして、文データ16は、図3に形式を例
示するように、その文の識別番号である「文番号」、そ
の文の位置を表す「文の位置情報」、文の実行順序を表
す「フローグラフ情報」、その文で使われる「条件式」
に「現れる識別子」、「代入式」で「代入される変
数」、その変数に「代入する識別子」、についての情報
を含む。
【0038】このうち「文の位置情報」は、その文の
「ファイル番号」、「開始行」、「終了行」、「開始
列」、「終了列」を含む。また、「フローグラフ情報」
は、個々の文が、どの文の次に実行される可能性がある
か、またその次にどの文が実行される可能性があるかを
調べ、このような実行順序を表すフローグラフを所定の
形式の情報として表したものである。
【0039】この場合、ある文とその前後の文との関係
としては、分岐や合流における1対多や多対多の場合も
考えられる。そして、フローグラフ情報は、図3に示す
ように、その文の前に実行される可能性のある文を表す
「前の文番号」、その文の次に実行される可能性のある
文を表す「次の文番号」を含む。また、「条件式」に
「現れる識別子」や、「代入式で」「代入される変
数」、「代入する識別子」については、変数の識別子番
号を格納すればよい。
【0040】例えば、図3の例で、文番号2として格納
されている文データの位置は、ファイル番号f2、行が
l21、列がc21から始まり、行がl22、列がc2
2までの範囲である。また、その文が実行される前に実
行される可能性がある文の文番号は、ps21,ps2
2,...であり、その文が実行された後に実行される
可能性がある文の文番号はns21,ns22,...
である。
【0041】また、その文にif文やループ文の条件式
があれば、その中に現れる変数や関数の識別子名は、例
えばcv21,cv22,...である。また、その文
の中に代入式があれば、代入される変数は例えばuv2
1,uv22,...であり、uv21に対して代入し
ている識別子は例えばsv211,sv212,...
である。
【0042】〔2−3.関係箇所データの構造〕また、
関係箇所データ19は、ソースコード上でユーザによっ
て指定された注目箇所の位置と関数または変数に対し
て、関係する箇所についての情報を表す。この関係箇所
データの形式の例としては、図4に示すように、「文番
号」に対して、「関係する識別子の識別子番号」、「関
係理由」を対応させた形式が挙げられる。このうち「文
番号」は、関係する箇所の文番号である。また、「関係
する識別子の識別子番号」は、その文に現れる識別子の
うち、関係する識別子の識別子番号である。
【0043】また、「関係理由」は、注目箇所の関数や
変数に対して、その関係する箇所がどのような理由で関
係があるかを表すが、その一例としては、例えば、注目
箇所の側の識別子が変数であれば、その変数に値が代入
されている、その変数の値が条件式で参照されている、
などが考えられる。同様に、その識別子が関数であれ
ば、その関数が呼び出されている、その関数の戻り値が
参照されている、などが挙げられる。
【0044】例えば、図4の例では、文番号s1の文に
対してi11,i12,...は関係する識別子を表
し、例えばそのうちi11に対する関係の理由(または
関係の種類、内容)はa11である。
【0045】〔2−4.ログデータの構造〕また、ログ
データ24は、ログ出力命令が挿入された実行ファイル
23を実行したときに出力される実行過程の情報を表
し、その形式の例を図5に示す。この例では、実行過程
の情報は、「文番号」と「識別子情報」からなる。この
うち「文番号」は、実行された文の文番号を表す。ま
た、「識別子情報」は、「識別子番号」、「ポイン
タ」、「サイズ」、「値」からなり、これら「ポイン
タ」、「サイズ」、「値」は例示に過ぎないので、その
具体的な内容は自由に定めることができ、他の事項を記
録するようにしてもよい。
【0046】また、「識別子情報」に格納する内容は、
識別子が関数か変数かで次のように異なる。すなわち、
識別子が関数であれば、「識別子番号」には呼び出され
た関数の識別子番号を格納し、「ポインタ」には関数ポ
インタを格納する。そして、この場合、「サイズ」には
その関数の戻り値のサイズを、「値」には戻り値を格納
する。
【0047】一方、識別子が変数であれば、「識別子番
号」には、値を代入された変数の識別子番号を格納し、
「ポインタ」にはその変数のポインタを格納する。そし
て、この場合「サイズ」にはその変数に代入された値の
サイズを、「値」はその値を格納する。
【0048】例えば、図5の例では、文番号s2のログ
データは、識別子番号がi2で、その識別子のポインタ
がp2であり、その識別子が変数の場合にはa2がその
変数の持つ値のサイズ、v2がその変数の値である。
【0049】〔3.作用〕本実施形態は、上記のような
構成及びデータ構造に基づいて、次のように作用する。
【0050】〔3−1.概略的作用〕まず、図6は、本
実施形態の概略的作用を示すフローチャートである。す
なわち、本実施形態では、まず、デバッグ対象のプログ
ラムのソースコードがソースファイル群10から与えら
れ、解析部1では、字句解析部11が、与えられたソー
スコードを単語に分割する(ステップ61)。また、構
文解析部12は、このように分割された単語の組み合わ
せに基づいてソースコードの構文を解析する(ステップ
62)。
【0051】続いて、識別子とその属性抽出部13が、
構文の解析されたソースコードから、構文に含まれる関
数と変数とを表す各識別子を抽出し、識別子データ14
として保存する(ステップ63)。また、影響関係解析
部15は、構文の解析されたソースコードと識別子デー
タ14とに基づいて、構文の流れの中で各識別子間にど
のような関係が存在するかをさらに解析し、その結果を
文データ16として保存する(ステップ64)。
【0052】そして、ユーザが注目箇所入力部17か
ら、ソースコード中で注目したい関数や変数を注目箇所
として入力すると(ステップ65)、命令挿入部2に設
けられた注目箇所の関係箇所調査部18が、識別子デー
タ14及び文データ16に基づいて、注目箇所と所定の
関係を持つ関係箇所がソースコード中のどこにあるかを
調査する(ステップ66)。また、ログ出力命令生成・
挿入部20は、このような関係箇所の実行過程をログデ
ータとして出力し記録するためのログ出力命令を生成
し、もとのソースファイルの該当箇所に挿入する(ステ
ップ67)。
【0053】このようにログ出力命令が挿入されたソー
スファイル群21は、コンパイラ22によってコンパイ
ルされることによって、ログ出力命令が挿入された実行
ファイル23に変換される(ステップ68)。この実行
ファイル23が、CPU51やそのオペレーティングシ
ステムの作用によって実行されると、ログ出力命令が、
注目箇所の実行過程を表すログをログデータ24として
出力する(ステップ69)。
【0054】ユーザは、ログビューア25にこのログデ
ータ24を表示させ参照することによって(ステップ6
10)、注目箇所と関係ある関係箇所の実行過程を過不
足なく検討でき、プログラムのデバッグが効果的に支援
される。続いて、上記のような各処理について、より具
体的に説明する。
【0055】〔3−2.文法的意味の取り出し〕まず、
字句解析部11と構文解析部12は互いに連携して、文
字の羅列であるソースコードを解析して文法規則に沿っ
て単語に切り分け、文法的意味を取り出す。すなわち、
字句解析部11はソースコードを単語に分割し(ステッ
プ61)、構文解析部12は、ソースコードがどのよう
な構文で構成されているかを、単語の組み合わせに基づ
いて解析する(ステップ62)。構文の例としては、例
えば、左辺と、代入記号と、右辺からなる代入文、など
が挙げられる。
【0056】〔3−3.識別子データの作成〕続いて、
識別子とその属性抽出部13では、ソースコードの各単
語の中から宣言文を取り出し、関数か変数かを識別し
て、図2に例示したような形式で識別子データ14に登
録する。このように識別子とその属性抽出部13が識別
子データ14を生成する手順を図7のフローチャートに
示す。
【0057】すなわち、図7の手順において、識別子と
その属性抽出部13は、指定された解析対象のソースフ
ァイル名を1つずつ取得し(ステップ701)、まず、
読み込んだソースファイルのファイル名(ディレクトリ
名を含む)を「ディレクトリ情報」(ステップ703)
と「ファイル情報」(ステップ704)として登録す
る。
【0058】次に、構文解析部12から、順次ソースコ
ードを単語に区切ったものと、解析された文法的意味と
を受け取り(ステップ705)、現在解析中の行をワー
クメモリ上の「現在解析中のコードに関する情報」72
0に記憶する(ステップ707)。そして、現在ソース
コード中のどういった場所であるか、例えば、何行目
か、関数の中なのか外なのかなどを調べ(ステップ70
8,710)、関数の始まりと終りでは、現在解析中の
関数名に関する情報を「現在解析中のコードに関する情
報」720に格納する(ステップ709)。
【0059】ここで、「現在解析中のコードに関する情
報」720には、現在解析しているソースコードのファ
イル名、行、関数の中か外か、といったその時点で分か
った解析結果が含まれる。
【0060】また、受け取った単語が宣言文であれば
(ステップ711)、「現在解析中のコードに関する情
報」720を参照して、宣言されている識別子の属性、
すなわちファイル番号、行、関数の中か外か、関数の中
であればその関数の識別子番号、関数か変数か、静的宣
言をしているかどうか、などの識別子情報を調べ、識別
子データ14に出力する(ステップ712)。同様に、
受け取った単語が関数呼び出し(ステップ713)、引
数(ステップ714)の場合は、それに対応した識別子
情報を調べて識別子データ14に出力する(ステップ7
12)。
【0061】なお、ステップ706において受け取るべ
き単語と文法的意味を全て処理済みの場合は次のソース
コードの処理に進むが(ステップ701)、処理すべき
解析対象を全て処理し、解析対象のソースファイル名が
なくなくると手順を終了する(ステップ702)。
【0062】〔3−4.文データの作成〕また、影響関
係解析部15は、構文解析部12から単語と文法的意味
とを受け取り、図3に示したような形式の識別子データ
14を参照して、図5に示したような形式の文データ1
6を生成する。このように影響関係解析部15が文デー
タ16を生成する手順を図8のフローチャートに示す。
【0063】すなわち、図8の手順において、影響関係
解析部15は、まず、ソースコードを文という単位で切
り出し、読み込む(ステップ801)。このとき、ソー
スコードを文という単位で切り出す基準については、既
に述べたように、代入式、関数呼出し、条件文、ループ
の条件式、などを一文とすればよい。
【0064】ステップ801で文を読み込めない場合
は、1つのソースファイルを最後まで読み込んだ場合で
あるから処理を終了するが、文を読み込めた場合は(ス
テップ802)次に、切り取った文に文番号を割り振
り、その文の位置情報を文データ16として記録する
(ステップ803)。ここで、位置情報としては、例え
ば、その文があるファイル名、切り取った文の開始行と
列、終了行と列などが考えられる。
【0065】次に、文に分岐があれば(ステップ80
4)、分岐の条件となる識別子を、文データ16の条件
式に現れる識別子として記録する(ステップ805)。
また、文中に代入式があれば(ステップ806)、代入
式に現れる変数を、代入される変数(左辺)と代入する
識別子(右辺)とに分け、文データ16として記録する
(ステップ807)。さらに、文の読み込み順序と分岐
とに基づいて、上に述べたフローグラフ情報を作成し、
文データ16に記録する(ステップ808)。
【0066】〔3−5.注目箇所の入力と関係箇所の調
査〕次に、注目箇所の関係箇所調査部18が関係箇所デ
ータ19を生成する手順を図9のフローチャートに示
す。すなわち、ユーザが注目箇所入力部17から所望の
位置にある変数や関数を注目箇所として指定すると(ス
テップ901)、注目箇所の関係箇所調査部18が、図
2に例示したような形式の識別子データ14と、図3に
例示したような形式の文データ16を参照して、図4に
例示したような形式の関係箇所データ19を生成する。
【0067】具体的には、この手順では、指定された変
数や関数の識別子とその位置とを、関係する識別子と位
置のデータ921に追加する(ステップ902)。な
お、入力された識別子が関数の場合、関数の引数となっ
ている各パラメータの変数を注目箇所とみなして処理す
ることも考えられる。
【0068】そして、この手順では、ユーザが注目箇所
として入力した識別子を、最初の「関係する識別子」と
し、それ以前のフローグラフのなかから、この識別子に
値を代入している識別子とその位置を関係箇所として抽
出し、また、関係箇所を通らない他の経路への分岐も関
係箇所として抽出するものである。
【0069】具体的には、ステップ902によって追加
されたデータ921のなかから、まだ参照していない識
別子tvとその位置tpを1つ参照し、参照したデータ
には参照済みを表すフラグなどの印を付ける(ステップ
903)。そして、まず、このように参照した関係する
識別子tvの位置(関係する位置と呼ぶ)tpを、現在
の位置cpに代入する(ステップ905)。
【0070】そして、文データ16によって表されるフ
ローグラフを逆に辿りながら(ステップ907)現在の
位置cpを更新してゆく(ステップ909)。そして、
フローグラフを逆に辿る経路がない場合はステップ91
2に進むが、現在の位置cpで関係する識別子tvに値
が代入されていると(ステップ906)、代入している
識別子とその位置を「関係する識別子と位置のデータ」
921に追加し、また、代入されている変数とその位置
を「代入される変数と位置のデータ」922に追加する
(ステップ911)。
【0071】すなわち、このような代入で新しく登場し
た関係する識別子tvについては、「関係する識別子と
位置のデータ」921にスタック形式で積んで行き、そ
の新しい関係する識別子tvについてもステップ903
からの手順を繰り返すことができる。これにより、ツリ
ー構造における深さ優先探索のように、その新しい関係
する識別子tvに代入しているさらに別の識別子を派生
的再帰的に調査することができる。
【0072】なお、具体的な実装では、このような派生
的な識別子については何層まで関係箇所とみなすか指定
できるようにしたり、幅優先探索を行うなど、自由な手
順を採用することができる。また、ここでは「変数」が
代入される場合を例示したが、代入されるものは関数で
あってもよい。
【0073】続いて、現在の位置cpに関係する位置t
pを代入し(ステップ912)、フローグラフを逆に辿
る経路を探しながら(ステップ913)、逆に辿る経路
があるかぎり(ステップ914)、フローグラフを1つ
ずつ逆に辿って現在の位置cpをそこに移動する(ステ
ップ915)。そして、現在の位置cpが分岐の場合
(ステップ916)、その分岐からフローグラフを順方
向に辿り、フローグラフの終点まで達する経路のうち、
関係する位置を通らない経路を探す(ステップ91
7)。
【0074】その分岐からこのような経路が見つからな
い場合は(ステップ917)、さらにフローグラフを逆
に辿る経路を探すが(ステップ913)、経路が見つか
るとその分岐の条件文の変数と現在の位置を、「関係す
る識別子と位置のデータ」921に追加し(ステップ9
19)、次の未参照の関係する識別子に関する調査に移
る(ステップ903)。また、ステップ914において
逆に辿る経路がない場合も、次の未参照の関係する識別
子に関する調査に移る(ステップ903)。
【0075】なお、入力された各注目箇所について関係
箇所の調査が終了し、参照するデータがもうなくなると
(ステップ904)、それまでに蓄積された関係する識
別子と位置のデータ921及び代入される変数と位置の
データ922に基づいて、関係箇所データ19を作成し
(ステップ910)、手順を終了する。
【0076】〔3−6.ログ出力命令の挿入〕続いて、
ログ出力命令生成・挿入部20が、ソースファイル10
と、図4に例示したような形式の関係箇所データ19を
参照して、ログ出力命令が挿入されたソースファイル群
21を生成する手順を図10のフローチャートに示す。
【0077】すなわち、この手順では、関係箇所データ
19のうち、個々の関係箇所に関するデータを、なくな
るまで(ステップ102)、1つずつ読み込み(ステッ
プ101)、そのデータで変数に値が代入されていれば
(ステップ103)、ログ出力命令を作成して(ステッ
プ104)、例えばソースコード中のうち変数に値が代
入される箇所の直後に挿入する(ステップ105)。一
方、そのデータで関数が呼ばれていれば(ステップ10
6)、作成されるログ出力命令は(ステップ107)、
ソースコード中のうち、例えば関数が呼ばれた箇所の直
後に挿入される(ステップ108)。
【0078】〔3−7.ログの記録と表示〕このように
ログ出力命令が挿入されたソースファイル群21を、コ
ンパイラ22でコンパイルすることで、ログ出力命令が
挿入された実行ファイル23を作成する(ステップ6
8)。そして、この実行ファイル23を実行すれば、ロ
グ出力命令によって、関係箇所における識別子番号、ポ
インタ、サイズ、値といった実行過程がログデータ24
に記録され(ステップ69)、ユーザはログビューア2
5を使ってこのログデータ24を自由に参照することが
できる(ステップ610)。
【0079】〔4.効果〕以上のように、本実施形態で
は、ユーザが指定する注目箇所と所定の関係を持つ関係
箇所について、プログラムの実行過程がログすなわち履
歴として記録されるので、無駄無く必要かつ十分な記録
を行うことができる。
【0080】また、本実施形態では、プログラムの単語
への分割、単語に基づく構文解析、構文中での識別子の
抽出、識別子間の関係解析という具合に、プログラムの
解析を、単純で原始的な処理から高度な論理的構造の解
析へと順次進めるので、段階を追った円滑な解析が実現
される。
【0081】また、本実施形態では、関係箇所について
ログを記録するための命令をプログラム中に挿入するの
で、その後のコンパイルや実行を従来通り行うことで容
易にログを得ることができ、インタプリタ形式で関係箇
所を判別しログを記録しながらプログラムを実行する必
要がない。
【0082】また、本実施形態では、少なくとも、代入
によって注目箇所の変数の値を変更している箇所につい
て、関係箇所として実行過程が記録される。このため、
バグの原因となっている変数の値が、どのような経過を
経てもたらされたものかについて情報が過不足なく記録
され、デバッグが効果的に支援される。
【0083】〔5.他の実施形態〕なお、本発明は上記
実施形態に限定されるものではなく、次に例示するよう
な他の実施形態も包含するものである。例えば、どのよ
うなプログラミング言語で記述されたプログラムをデバ
ッグ対象とするか、プログラム中の各部分間の関係をど
のように解析するか、注目箇所をどのように指定させる
か、関係箇所をどのような基準でどのように調査する
か、関係箇所の実行過程をどのように記録するは自由に
決定して本発明を実装することができる。
【0084】例えば、プログラム中の各部分間の関係を
解析する場合、必ずしも、プログラムの単語への分割、
単語の組み合わせに基づく構文解析、構文中の識別子の
抽出、識別子同士の関係の解析、という順序は必須では
なく、所望の具体的な解析手法を適用することができ
る。
【0085】また、関係箇所の実行過程を記録するに
は、必ずしも、ログ出力命令をプログラム中に挿入する
必要はなく、例えば、プログラムをインタプリタ形式で
シミュレーション実行し、関係箇所を判別しながら順次
実行過程を記録してもよい。
【0086】また、関係箇所は、注目箇所で使われてい
る変数に対して、注目箇所以前で値を変更している箇所
には限定されない。例えば、関係箇所の変数の値を変更
する態様だけでも、代入の他にリセット、インクリメン
ト、デクリメント、シフト、ローテイト、データ型の変
更、ポインタ参照、変数抹消、などいろいろ考えられ
る。さらに、関係箇所の範囲を、配列変数の要素番号の
変更などに拡大することも望ましい。また、変数の値を
変更している箇所以外にも、注目箇所として指定された
関数の呼び出しや、指定された変数や関数に関わる分岐
などを関係箇所とすることが望ましい。
【0087】
【実施例】次に、上記実施形態において、具体的なプロ
グラムのソースファイルを処理する実施例を説明する。
まず、図11はソースコードの例を示す。このソースコ
ードは、左右二つのファイル101,102からなり、
それぞれ異なるディレクトリに格納されている。
【0088】〔1.識別データの実例〕次に、このよう
な図11のソースコードについて、字句解析部11と、
構文解析部12と、識別子とその属性抽出部14と、に
よって識別子データ14を生成した例を図12に示す。
この識別子データ14は「ディレクトリ情報」、「ファ
イル情報」、「識別子情報」を備えている。
【0089】また、この図12の例は、二つのディレク
トリに基づくものであり、具体的には、ディレクトリ/p
roject/maxmin には「ディレクトリ番号」として1が、
ディレクトリ/project/maxmin/sub には「ディレクトリ
番号」として2が割り振られ、データとして格納されて
いる。
【0090】そして、「ファイル情報」にはmain.
cとsub.cという二つのソースファイル名が格納さ
れている。このうちmain.cの「ファイル番号」に
は1が割り振られ、その「ファイルのあるディレクトリ
のディレクトリ番号」として1が格納されている。ここ
で、main.cの「ファイルのあるディレクトリのデ
ィレクトリ番号」が1というのは、main.cが「デ
ィレクトリ番号」が1であるディレクトリ/project/max
min にあるファイルであることを表す。
【0091】また、「識別子情報」では、識別子ごと
に、「識別子番号」を割り振り、「識別子名」と「識別
子の宣言に関する属性」を格納している。例えば、識別
子名mainについては、「識別子番号」として3が割
り振られ、また、ファイル名の「ファイル番号」が1な
ので、main.cで宣言されていることが判断でき、
また、行が3であることから、そのファイルの3行目で
宣言されていることが判断できる。
【0092】なお、「ファイル番号」と「行」が−1で
あるのは、その識別子が宣言されているソースファイル
を解析していないことを表す。このようにソースファイ
ルを解析していない場合としては、関数がライブラリの
中で宣言されているため該当するソースファイルが存在
しない場合や、該当するソースファイルを解析対象とし
て指定しなかった場合などが考えられる。
【0093】また、「関数の識別子番号」が−1である
のは、その識別子がグローバル識別子であることを示
し、その識別子がローカル識別子の場合には、この「関
数の識別子番号」には、その識別子が宣言されている関
数の識別子番号が格納される。また、「関数かどうか」
は、0であれば変数を表し、1であれば関数を表す。ま
た、「静的宣言されているかどうか」は、0であれば静
的宣言されていないことを、1であれば静的宣言されて
いることを表す。
【0094】〔2.文データの実例〕次に、字句解析部
11と、構文解析部12と、影響関係解析部15と、識
別子データ14と、によって生成した文データ16の例
を図13に示す。この例において、例えば、文番号が1
のデータは、「文の位置情報」については、ファイル番
号1のファイルで4行目の16列目から39列目までに
存在することを表し、このファイル番号1は、図12の
識別子データの例からmain.cを示している。
【0095】また、文番号が1のデータは、「フローグ
ラフ情報」について、「前の文」が−1であることによ
り、前の文がないことを示していて、さらに、「次の文
番号」が2であることにより、次に実行されるのは文番
号が2の文であることを示している。なお、「前の文番
号」もしくは「次の文番号」が複数ある場合には、分岐
などで実行の可能性のある経路が複数あることを示す。
【0096】また「条件式」は、文番号9の文のデータ
を例に取ると、識別子番号8と9の識別子が、その文の
中で条件式の中で使われていることを示す。また、「代
入式」について、例えば文番号2の例では、識別子番号
7が「代入される識別子」、識別子番号4が代入する識
別子を表す。また、「現れる識別子」については、その
文に条件式がある場合の、条件式の識別子番号が格納さ
れている。
【0097】〔3.注目箇所入力の実例〕次に、注目箇
所入力部17で、ユーザによって注目箇所が入力される
ときの画面の表示例を図14に示す。この図14の例で
は、main.cの7行目の変数maxを注目箇所に指
定している。
【0098】〔4.関係箇所の実例〕また、図14に示
した注目箇所の入力例によって入力された注目箇所と、
図12に示した識別子データと、図13に示した文デー
タと、を入力として生成された関係箇所データ19の例
を図15に示す。すなわち、この例では、文番号1,
2,3,4,5,6,8,9,...はそれぞれ、入力
された個々の注目箇所を表し、この関係箇所データは、
それぞれの文番号について関係する識別子の識別子番号
と関係理由とを含んでいる。
【0099】例えば、文番号3のデータについて、識別
子番号4の識別子は、代入しているという理由で文番号
3のデータに関係しており、識別子番号7の識別子は、
代入されているという理由で文番号3のデータに関係し
ていることが示されている。
【0100】〔5.ログ出力命令挿入の実例〕次に、図
11に示したソースコードと図15に示した関係箇所デ
ータに基づいて、ログ出力命令が挿入されたソースコー
ド201,202の例を図16に示す。この例では、O
utputLogという関数が、挿入されたログ出力命
令であり、その引数は左から、文番号、識別子番号、識
別子のポインタ、識別子へ代入された値のサイズ(関数
の場合は0)となっている。
【0101】例えば、/project/maxmin/main.cすなわち
左側に示すソースコード201の4行目の次に挿入され
たログ出力命令は、文番号が1、識別子番号が4、変数
のポインタがx、代入された値のサイズが5×size
of(x[0])となっている。
【0102】〔6.ログ表示の実例〕また、図16に示
したソースコードをコンパイラ22でコンパイルするこ
とによって、ログ出力命令が挿入された実行ファイル2
3が作成され、この実行ファイル23を実行するとログ
データ24が出力される。そして、このログデータ24
をログビューアで表示した時の画面例を図17に示す。
【0103】すなわち、この例では、左のウィンドウ3
01がログを表示したもので、右のウィンドウ302
が、ログに対応するソースコードを表示したものであ
る。このうち左のウィンドウ301では、例えば1行目
と4行目はソースファイル名であり、そのソースファイ
ルに基づくログがそれに続いて表示されている。例え
ば、/project/maxmin/main.cに続く2行目は、そのソー
スファイル中の変数への代入を表している。
【0104】より具体的には、「4:」は、その行が、
ソースコードの4行目について出力されたログであるこ
とを示し、「x[]」は代入された変数名、{3,5,
1,6,2,9}は代入した値を示す。また、例えば3
行目は、関数呼出しが行われたことを示しており、その
行の「maxmin」が呼ばれた関数の名称を示してい
る。
【0105】また、ログを表示する左のウィンドウ30
1に反転表示されているのは、ユーザがマウスのポイン
タでログを選択した様子を示す。そして、このように選
択したログに対応するソースコードを、ソースコードを
表示する右のウィンドウ302で反転表示されて示すこ
とにより、ログとソースコードとの対応関係が解かりや
すくなる。
【0106】
【発明の効果】以上説明したように、本発明によれば、
実行過程についてデバッグのために必要かつ十分な情報
を記録するデバッグ支援装置及び方法並びにデバッグ支
援用ソフトウェアを記録した記録媒体を提供することが
できるので、適切なデバッグを容易に行うことができ
る。
【図面の簡単な説明】
【図1】本発明の実施形態の構成を示す機能ブロック
図。
【図2】本発明の実施形態において、識別子データの形
式の例を示す図。
【図3】本発明の実施形態において、文データの形式の
例を示す図。
【図4】本発明の実施形態において、関係箇所データの
形式の例を示す図。
【図5】本発明の実施形態において、ログデータの形式
の例を示す図。
【図6】本発明の実施形態において、概略的処理手順を
示すフローチャート。
【図7】本発明の実施形態において、構文解析部の出力
結果を参照して、識別子データを生成する手順を示すフ
ローチャート。
【図8】本発明の実施形態において、構文解析部の出力
結果と識別子データを参照して、文データを生成する手
順を示すフローチャート。
【図9】本発明の実施形態において、識別子データと文
データと注目する箇所の入力部からの入力を参照して、
関係箇所データを生成する手順を示すフローチャート。
【図10】本発明の実施形態において、ソースファイル
と関係箇所データを参照して、ログ出力命令が挿入され
たソースファイル群を生成する手順を示すフローチャー
ト。
【図11】本発明の実施例において、ソースコードの実
例を示す図。
【図12】本発明の実施例において、識別子データの実
例を示す図。
【図13】本発明の実施例において、文データの実例を
示す図。
【図14】本発明の実施例において、注目箇所の入力画
面の実例を示す図。
【図15】本発明の実施例において、関係箇所データの
実例を示す図。
【図16】本発明の実施例において、ログ出力命令を挿
入したソースコードの実例を示す図。
【図17】本発明の実施例において、ログビューアの画
面表示例を示す図。
【符号の説明】
1…解析部 2…命令挿入部 10…ソースファイル群 11…字句解析部 12…構文解析部 13…識別子とその属性抽出部 14…識別子データ 15…影響関係解析部 16…文データ 17…注目箇所入力部 18…注目箇所の関係箇所調査部 19…関係箇所データ 20…ログ出力命令生成・挿入部 21…ログ出力命令が挿入されたソースファイル群 22…コンパイラ 23…ログ出力命令が挿入された実行ファイル 24…ログデータ 25…ログビューア STEP〜…手順の各ステップ
───────────────────────────────────────────────────── フロントページの続き (72)発明者 山内 洋子 神奈川県川崎市幸区柳町70番地 株式会社 東芝柳町工場内 Fターム(参考) 5B042 HH10 HH30 HH32 HH35 HH42 LA02 LA23 MA10 MC07 MC12 NN10 NN14 NN23

Claims (10)

    【特許請求の範囲】
  1. 【請求項1】 プログラムのデバッグを支援するための
    デバッグ支援装置において、 プログラム中の各部分間の関係を解析するための解析手
    段と、 プログラム中の所望の箇所を注目箇所として指定するた
    めの手段と、 前記注目箇所と予め決められた関係を有する関係箇所
    を、解析された前記関係に基づいて調査するための調査
    手段と、 前記関係箇所の実行過程を記録するための記録手段と、 を備えたことを特徴とするデバッグ支援装置。
  2. 【請求項2】 前記解析手段は、 プログラムを単語に分割するための手段と、 前記各単語の組み合わせに基づいて構文を解析するため
    の手段と、 前記構文で使われている関数及び変数を識別するための
    識別子を抽出するための手段と、 前記構文のどのような部分で前記識別子同士が関係する
    かを解析するための手段と、 を備えたことを特徴とする請求項1記載のデバッグ支援
    装置。
  3. 【請求項3】 前記記録手段は、調査した前記関係箇所
    についてプログラム実行のログを記録するためのログ出
    力命令をプログラム中に挿入するための手段を備え、 前記ログ出力命令を挿入したプログラムを実行したとき
    に記録されるログを出力するための手段を備えたことを
    特徴とする請求項1又は2記載のデバッグ支援装置。
  4. 【請求項4】 前記調査手段は、少なくとも、前記注目
    箇所で使われている変数に対して、当該注目箇所以前に
    おいて値を変更している箇所を、前記関係箇所とするよ
    うに構成されたことを特徴とする請求項1から3のいず
    れか1つに記載のデバッグ支援装置。
  5. 【請求項5】 プログラムのデバッグを支援するための
    デバッグ支援方法において、 プログラム中の各部分間の関係を解析するための解析ス
    テップと、 プログラム中の所望の箇所を注目箇所として指定するた
    めのステップと、 前記注目箇所と予め決められた関係を有する関係箇所
    を、解析された前記関係に基づいて調査するための調査
    ステップと、 前記関係箇所の実行過程を記録するための記録ステップ
    と、 を含むことを特徴とするデバッグ支援方法。
  6. 【請求項6】 前記解析ステップは、 プログラムを単語に分割するためのステップと、 前記各単語の組み合わせに基づいて構文を解析するため
    のステップと、 前記構文で使われている関数及び変数を識別するための
    識別子を抽出するためのステップと、 前記構文のどのような部分で前記識別子同士が関係する
    かを解析するためのステップと、 を含むことを特徴とする請求項5記載のデバッグ支援方
    法。
  7. 【請求項7】 前記記録ステップは、調査した前記関係
    箇所についてプログラム実行のログを記録するためのロ
    グ出力命令をプログラム中に挿入するためのステップを
    含み、 前記ログ出力命令を挿入したプログラムを実行したとき
    に記録されるログを出力するためのステップを含むこと
    を特徴とする請求項5又は6記載のデバッグ支援方法。
  8. 【請求項8】 前記調査ステップは、少なくとも、前記
    注目箇所で使われている変数に対して、当該注目箇所以
    前において値を変更している箇所を、前記関係箇所とす
    ることを特徴とする請求項5から7のいずれか1つに記
    載のデバッグ支援方法。
  9. 【請求項9】 コンピュータを使って、プログラムのデ
    バッグを支援するためのデバッグ支援用ソフトウェアを
    記録した記録媒体において、 そのソフトウェアは前記コンピュータに、 プログラム中の各部分間の関係を解析させ、 プログラム中の所望の箇所について注目箇所としての指
    定を受け付けさせ、 前記注目箇所と予め決められた関係を有する関係箇所
    を、解析された前記関係に基づいて調査させ、 前記関係箇所の実行過程を記録させることを特徴とする
    デバッグ支援用ソフトウェアを記録した記録媒体。
  10. 【請求項10】 前記ソフトウェアは前記コンピュータ
    に、 調査した前記関係箇所についてプログラム実行のログを
    記録するためのログ出力命令をプログラム中に挿入さ
    せ、 前記ログ出力命令を挿入したプログラムを実行したとき
    に記録されるログを出力させることを特徴とする請求項
    9記載のデバッグ支援用ソフトウェアを記録した記録媒
    体。
JP11006062A 1999-01-13 1999-01-13 デバッグ支援装置及び方法並びにデバッグ支援用ソフトウェアを記録した記録媒体 Pending JP2000207246A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP11006062A JP2000207246A (ja) 1999-01-13 1999-01-13 デバッグ支援装置及び方法並びにデバッグ支援用ソフトウェアを記録した記録媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP11006062A JP2000207246A (ja) 1999-01-13 1999-01-13 デバッグ支援装置及び方法並びにデバッグ支援用ソフトウェアを記録した記録媒体

Publications (1)

Publication Number Publication Date
JP2000207246A true JP2000207246A (ja) 2000-07-28

Family

ID=11628112

Family Applications (1)

Application Number Title Priority Date Filing Date
JP11006062A Pending JP2000207246A (ja) 1999-01-13 1999-01-13 デバッグ支援装置及び方法並びにデバッグ支援用ソフトウェアを記録した記録媒体

Country Status (1)

Country Link
JP (1) JP2000207246A (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003029943A (ja) * 2001-07-16 2003-01-31 Canon Inc 印刷システム及びその管理方法、プログラム、記憶媒体
JP2007094707A (ja) * 2005-09-28 2007-04-12 Hitachi Software Eng Co Ltd アプリケーション動作追跡支援装置
JP2008310508A (ja) * 2007-06-13 2008-12-25 Renesas Technology Corp デバッグ装置
JP2010122759A (ja) * 2008-11-17 2010-06-03 Nec Corp デバッグ装置、ダンプファイルの保存復元方法およびそのプログラム
JP2013080406A (ja) * 2011-10-05 2013-05-02 Fujitsu Ltd コンパイル装置、情報処理システム、コンパイル方法、コンパイルプログラム、記録媒体
US8745595B2 (en) 2011-03-10 2014-06-03 Fujitsu Limited Information processing apparatus and method of acquiring trace log

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003029943A (ja) * 2001-07-16 2003-01-31 Canon Inc 印刷システム及びその管理方法、プログラム、記憶媒体
JP2007094707A (ja) * 2005-09-28 2007-04-12 Hitachi Software Eng Co Ltd アプリケーション動作追跡支援装置
JP4641238B2 (ja) * 2005-09-28 2011-03-02 株式会社日立ソリューションズ アプリケーション動作追跡支援装置
JP2008310508A (ja) * 2007-06-13 2008-12-25 Renesas Technology Corp デバッグ装置
JP2010122759A (ja) * 2008-11-17 2010-06-03 Nec Corp デバッグ装置、ダンプファイルの保存復元方法およびそのプログラム
US8745595B2 (en) 2011-03-10 2014-06-03 Fujitsu Limited Information processing apparatus and method of acquiring trace log
JP2013080406A (ja) * 2011-10-05 2013-05-02 Fujitsu Ltd コンパイル装置、情報処理システム、コンパイル方法、コンパイルプログラム、記録媒体

Similar Documents

Publication Publication Date Title
US6964036B2 (en) Descriptive variables while debugging
US6067641A (en) Demand-based generation of symbolic information
US6961924B2 (en) Displaying variable usage while debugging
EP0664027B1 (en) Program modeling system
US5325531A (en) Compiler using clean lines table with entries indicating unchanged text lines for incrementally compiling only changed source text lines
US6574792B1 (en) Dynamically generating expanded user messages in a computer system
US5170465A (en) Incremental-scanning compiler for source-code development system
US5313387A (en) Re-execution of edit-compile-run cycles for changed lines of source code, with storage of associated data in buffers
US5182806A (en) Incremental compiler for source-code development system
EP0643851B1 (en) Debugger program which includes correlation of computer program source code with optimized objet code
US5201050A (en) Line-skip compiler for source-code development system
JPH0883197A (ja) ソフトウエアプログラムをデバッグする方法およびコンピュータシステム
US20050086633A1 (en) Content layers
Lyle et al. Unravel: A case tool to assist evaluation of high integrity software volume 1: Requirements and design
JP2018156133A (ja) コンパイラプログラム、情報処理装置およびコンパイル方法
JP2000207246A (ja) デバッグ支援装置及び方法並びにデバッグ支援用ソフトウェアを記録した記録媒体
EP0406028A2 (en) Incremental compiler for source code development system
JPH0766342B2 (ja) プログラムテスト装置
JP2007226685A (ja) アプリケーションメンテナンス支援装置、アプリケーション生成装置、アプリケーションメンテナンス支援方法、およびコンピュータプログラム
JP4055197B2 (ja) プログラムに含まれる手続きの解析装置
Snelting et al. Unification in many-sorted algebras as a device for incremental semantic analysis
JP2002108649A (ja) トレース解析を支援するためのプログラムを記録した記録媒体及びプログラム製品
JP2002288004A (ja) プログラムソース処理装置、プログラムソース処理方法、およびプログラムソース処理プログラム
JP3857842B2 (ja) プログラム分析装置及び記録媒体
JPH0926897A (ja) プログラム解析装置及びプログラム解析方法

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20040803