JP2000227861A - デバッグ方法及びデバッグ装置 - Google Patents
デバッグ方法及びデバッグ装置Info
- Publication number
- JP2000227861A JP2000227861A JP11028459A JP2845999A JP2000227861A JP 2000227861 A JP2000227861 A JP 2000227861A JP 11028459 A JP11028459 A JP 11028459A JP 2845999 A JP2845999 A JP 2845999A JP 2000227861 A JP2000227861 A JP 2000227861A
- Authority
- JP
- Japan
- Prior art keywords
- variable
- deletion
- deleted
- value
- information
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 34
- 238000012217 deletion Methods 0.000 claims abstract description 148
- 230000037430 deletion Effects 0.000 claims abstract description 148
- 230000015654 memory Effects 0.000 claims abstract description 34
- 238000005457 optimization Methods 0.000 claims abstract description 28
- 238000012545 processing Methods 0.000 claims abstract description 10
- 238000001514 detection method Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 12
- 238000012937 correction Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 8
- 230000000717 retained effect Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 1
Landscapes
- Debugging And Monitoring (AREA)
Abstract
(57)【要約】
【課題】 デバッグ時に削除変数の値を表示する。
【解決手段】 削除変数情報作成部5は、最適化の課程
で削除された変数を示す削除変数情報を作成する。削除
変数更新情報作成部6は、削除変数が更新される位置と
その更新処理を示す削除変数更新情報を作成する。削除
変数更新実行部13は、削除変数更新情報が示す位置が
実行されるとき、削除変数の更新後の値を削除変数更新
情報に基づいて計算して、削除変数用メモリ17に記憶
された削除変数の値を更新する。変数表示部14は、削
除変数の表示要求が発生したとき、削除変数用メモリ1
7に記憶された削除変数の値を表示する。
で削除された変数を示す削除変数情報を作成する。削除
変数更新情報作成部6は、削除変数が更新される位置と
その更新処理を示す削除変数更新情報を作成する。削除
変数更新実行部13は、削除変数更新情報が示す位置が
実行されるとき、削除変数の更新後の値を削除変数更新
情報に基づいて計算して、削除変数用メモリ17に記憶
された削除変数の値を更新する。変数表示部14は、削
除変数の表示要求が発生したとき、削除変数用メモリ1
7に記憶された削除変数の値を表示する。
Description
【0001】
【発明の属する技術分野】本発明は、プログラムのデバ
ッグに係り、特にプログラムを最適化してコンパイルし
たときに最適化によって使用されなくなった削除変数を
管理し、削除変数の表示要求が発生したとき削除変数の
値を表示するデバッグ方法及びデバッグ装置に関するも
のである。
ッグに係り、特にプログラムを最適化してコンパイルし
たときに最適化によって使用されなくなった削除変数を
管理し、削除変数の表示要求が発生したとき削除変数の
値を表示するデバッグ方法及びデバッグ装置に関するも
のである。
【0002】
【従来の技術】ソフトウエアの実行効率を高めるため
に、コンパイル時に最適化を行うことは広く行われてい
る。最適化の方法として、変数の用途が計算途中の値を
一時的に保持するためだけに使用されているような場合
に、その変数を使わずに計算を行うよう、処理手順を変
更する場合がある。通常、変数を使用したプログラムを
実行する場合、変数はメモリ、レジスタなどの資源に割
り当てられ、値が保持される。したがって、デバッグ時
に該当メモリ、レジスタなどを参照することにより、変
数の値を表示しデバッグ作業の助けとすることができ
る。
に、コンパイル時に最適化を行うことは広く行われてい
る。最適化の方法として、変数の用途が計算途中の値を
一時的に保持するためだけに使用されているような場合
に、その変数を使わずに計算を行うよう、処理手順を変
更する場合がある。通常、変数を使用したプログラムを
実行する場合、変数はメモリ、レジスタなどの資源に割
り当てられ、値が保持される。したがって、デバッグ時
に該当メモリ、レジスタなどを参照することにより、変
数の値を表示しデバッグ作業の助けとすることができ
る。
【0003】しかし、ソースプログラム中で使用してい
る変数が最適化によって使われなくなった場合、その変
数はメモリ、レジスタのいずれにも割り当てられず、値
は保持されない。さらに、最適化によって計算手順が変
更された場合、変数に格納されるべき値の計算が行われ
ない場合もある。このため、デバッグ時に値を表示する
などの操作は不可能である。ソースプログラムを最適化
せずにコンパイルすれば、このような問題は起こらない
が、この場合には、最適化せずにコンパイルしたもので
デバッグを行い、その後最適化してコンパイルしたもの
で再度デバッグを行うことになり、工数の増加は免れな
い。
る変数が最適化によって使われなくなった場合、その変
数はメモリ、レジスタのいずれにも割り当てられず、値
は保持されない。さらに、最適化によって計算手順が変
更された場合、変数に格納されるべき値の計算が行われ
ない場合もある。このため、デバッグ時に値を表示する
などの操作は不可能である。ソースプログラムを最適化
せずにコンパイルすれば、このような問題は起こらない
が、この場合には、最適化せずにコンパイルしたもので
デバッグを行い、その後最適化してコンパイルしたもの
で再度デバッグを行うことになり、工数の増加は免れな
い。
【0004】また近年、プログラムは高機能化してお
り、最適化して実行コードサイズを縮小又は処理速度を
高速化することを前提として設計を行う場合があり、最
適化しなければメモリ容量、あるいは処理速度の関係で
実行させることが不可能となる場合がある。この場合、
最適化しないでデバッグを行う方法は使用できない。し
たがって、ソースプログラムを最適化してコンパイルす
ることが前提条件である場合、最適化の課程で削除され
た変数(以下、削除変数と呼ぶ)を表示するには、削除
変数を実行プログラム以外の場所で管理して、その値を
計算し、更新する手段を用意する必要がある。
り、最適化して実行コードサイズを縮小又は処理速度を
高速化することを前提として設計を行う場合があり、最
適化しなければメモリ容量、あるいは処理速度の関係で
実行させることが不可能となる場合がある。この場合、
最適化しないでデバッグを行う方法は使用できない。し
たがって、ソースプログラムを最適化してコンパイルす
ることが前提条件である場合、最適化の課程で削除され
た変数(以下、削除変数と呼ぶ)を表示するには、削除
変数を実行プログラム以外の場所で管理して、その値を
計算し、更新する手段を用意する必要がある。
【0005】従来のデバッグ方式、例えば特開昭63−
292338号公報に開示されたプログラムデバッグ方
式では、変数に値が割り当てられていない、すなわち変
数がメモリ、レジスタのいずれにも割り当てられていな
いことをユーザに通知する構成を実現しているが、該変
数の値を表示することはできない。
292338号公報に開示されたプログラムデバッグ方
式では、変数に値が割り当てられていない、すなわち変
数がメモリ、レジスタのいずれにも割り当てられていな
いことをユーザに通知する構成を実現しているが、該変
数の値を表示することはできない。
【0006】また、図12に、特開平10−28911
0号公報に開示されたデバッグ装置の構成を示す。この
デバッグ装置において、デバッグ情報記憶部103は、
プログラム変換装置の最適化部105が行った最適化結
果を記憶する。コード実行部203は、デバッグ対象の
コードを実行コード記憶部102より得て実行する。実
行状態監視部204は、コード実行部203を監視し、
実行位置が資源割り当てされた変数やレジスタによる引
数の値渡しが発生したとき、実行状態をコード実行部2
03から取得し、実行状態記憶部201に記録する。ユ
ーザが入力部202に対して変数参照の要求を出したと
き、変数値取得部205は、変数の値がコード実行部2
03から取得不可能な場合、実行状態記憶部201より
値を得て変数値表示部206において表示する。このよ
うな構成により、図12に示したデバッグ装置では、ユ
ーザから要求された変数の値を表示することができる。
しかし、図12に示したデバッグ装置では、変数がメモ
リ、レジスタのいずれにも割り当てられていない場合、
実行状態記憶部201に変数の値が記憶されていないた
め、上記と同様に削除変数の値を表示することはできな
い。
0号公報に開示されたデバッグ装置の構成を示す。この
デバッグ装置において、デバッグ情報記憶部103は、
プログラム変換装置の最適化部105が行った最適化結
果を記憶する。コード実行部203は、デバッグ対象の
コードを実行コード記憶部102より得て実行する。実
行状態監視部204は、コード実行部203を監視し、
実行位置が資源割り当てされた変数やレジスタによる引
数の値渡しが発生したとき、実行状態をコード実行部2
03から取得し、実行状態記憶部201に記録する。ユ
ーザが入力部202に対して変数参照の要求を出したと
き、変数値取得部205は、変数の値がコード実行部2
03から取得不可能な場合、実行状態記憶部201より
値を得て変数値表示部206において表示する。このよ
うな構成により、図12に示したデバッグ装置では、ユ
ーザから要求された変数の値を表示することができる。
しかし、図12に示したデバッグ装置では、変数がメモ
リ、レジスタのいずれにも割り当てられていない場合、
実行状態記憶部201に変数の値が記憶されていないた
め、上記と同様に削除変数の値を表示することはできな
い。
【0007】
【発明が解決しようとする課題】以上のように従来のデ
バッグ方法では、削除変数の値を表示することができな
いという問題点があった。本発明は、上記課題を解決す
るためになされたもので、デバッグ時に削除変数の値を
表示することができるデバッグ方法及びデバッグ装置を
提供することを目的とする。
バッグ方法では、削除変数の値を表示することができな
いという問題点があった。本発明は、上記課題を解決す
るためになされたもので、デバッグ時に削除変数の値を
表示することができるデバッグ方法及びデバッグ装置を
提供することを目的とする。
【0008】
【課題を解決するための手段】本発明のデバッグ方法
は、ソースプログラム(1)を最適化しコンパイルして
実行コード(7)を生成する際、最適化の課程で削除し
た変数を示す削除変数情報を作成すると共に、ソースプ
ログラムにおいて上記削除変数が更新される位置とその
更新処理を示す削除変数更新情報を作成する。また、ソ
ースプログラムのデバッグ時に、上記削除変数情報が示
す削除変数を記憶し、実行コードの実行中に上記削除変
数更新情報が示す位置を実行するとき、削除変数の更新
後の値を削除変数更新情報に基づいて計算して、記憶し
ている削除変数の値を更新する。そして、削除変数の表
示要求が発生したとき、削除変数の値を表示する。
は、ソースプログラム(1)を最適化しコンパイルして
実行コード(7)を生成する際、最適化の課程で削除し
た変数を示す削除変数情報を作成すると共に、ソースプ
ログラムにおいて上記削除変数が更新される位置とその
更新処理を示す削除変数更新情報を作成する。また、ソ
ースプログラムのデバッグ時に、上記削除変数情報が示
す削除変数を記憶し、実行コードの実行中に上記削除変
数更新情報が示す位置を実行するとき、削除変数の更新
後の値を削除変数更新情報に基づいて計算して、記憶し
ている削除変数の値を更新する。そして、削除変数の表
示要求が発生したとき、削除変数の値を表示する。
【0009】本発明のデバッグ装置は、ソースプログラ
ム(1)を最適化しコンパイルして実行コード(7)を
生成する際、最適化の課程で削除した変数を示す削除変
数情報を作成すると共に、ソースプログラムにおいて上
記削除変数が更新される位置とその更新処理を示す削除
変数更新情報を作成するコンパイラ(2)と、上記削除
変数情報が示す削除変数を記憶し、実行コードの実行中
に上記削除変数更新情報が示す位置を実行するとき、削
除変数の更新後の値を削除変数更新情報に基づいて計算
して、記憶している削除変数の値を更新し、削除変数の
表示要求が発生したとき、削除変数の値を表示するデバ
ッガ(18)とを備えるものである。また、上述のコン
パイラの1構成例は、ソースプログラムを最適化しコン
パイルして実行コードを生成する手段(3,4)と、上
記削除変数情報を作成する削除変数情報作成手段(5)
と、上記削除変数更新情報を作成する削除変数更新情報
作成手段(6)とを有している。そして、デバッガの1
構成例は、上記削除変数情報が示す削除変数を記憶する
削除変数用メモリ(17)と、実行コードを実行するコ
ード実行手段(11)と、実行コードにおける実行位置
が上記削除変数更新情報が示す位置かどうかを検出する
削除変数更新検出手段(12)と、上記削除変数更新情
報が示す位置が実行されるとき、削除変数の更新後の値
を削除変数更新情報に基づいて計算して、削除変数用メ
モリに記憶された削除変数の値を更新する削除変数更新
実行手段(13)と、削除変数の表示要求が発生したと
き、削除変数用メモリに記憶された削除変数の値を表示
する変数表示手段(14)とを有している。
ム(1)を最適化しコンパイルして実行コード(7)を
生成する際、最適化の課程で削除した変数を示す削除変
数情報を作成すると共に、ソースプログラムにおいて上
記削除変数が更新される位置とその更新処理を示す削除
変数更新情報を作成するコンパイラ(2)と、上記削除
変数情報が示す削除変数を記憶し、実行コードの実行中
に上記削除変数更新情報が示す位置を実行するとき、削
除変数の更新後の値を削除変数更新情報に基づいて計算
して、記憶している削除変数の値を更新し、削除変数の
表示要求が発生したとき、削除変数の値を表示するデバ
ッガ(18)とを備えるものである。また、上述のコン
パイラの1構成例は、ソースプログラムを最適化しコン
パイルして実行コードを生成する手段(3,4)と、上
記削除変数情報を作成する削除変数情報作成手段(5)
と、上記削除変数更新情報を作成する削除変数更新情報
作成手段(6)とを有している。そして、デバッガの1
構成例は、上記削除変数情報が示す削除変数を記憶する
削除変数用メモリ(17)と、実行コードを実行するコ
ード実行手段(11)と、実行コードにおける実行位置
が上記削除変数更新情報が示す位置かどうかを検出する
削除変数更新検出手段(12)と、上記削除変数更新情
報が示す位置が実行されるとき、削除変数の更新後の値
を削除変数更新情報に基づいて計算して、削除変数用メ
モリに記憶された削除変数の値を更新する削除変数更新
実行手段(13)と、削除変数の表示要求が発生したと
き、削除変数用メモリに記憶された削除変数の値を表示
する変数表示手段(14)とを有している。
【0010】
【発明の実施の形態】次に、本発明の実施の形態につい
て図面を参照して詳細に説明する。図1は本発明の実施
の形態となるデバッグ装置の構成を示すブロック図であ
る。本実施の形態のデバッグ装置は、コンパイラ2、入
力部9、表示部10、削除変数用メモリ17、デバッガ
18及びコード実行用メモリ19から構成されている。
コンパイラ2は、最適化部3、翻訳部4、削除変数情報
作成部5及び削除変数更新情報作成部6を有し、デバッ
ガ18は、コード実行部11、削除変数更新検出部1
2、削除変数更新実行部13、変数表示部14及び変数
管理部15を有している。
て図面を参照して詳細に説明する。図1は本発明の実施
の形態となるデバッグ装置の構成を示すブロック図であ
る。本実施の形態のデバッグ装置は、コンパイラ2、入
力部9、表示部10、削除変数用メモリ17、デバッガ
18及びコード実行用メモリ19から構成されている。
コンパイラ2は、最適化部3、翻訳部4、削除変数情報
作成部5及び削除変数更新情報作成部6を有し、デバッ
ガ18は、コード実行部11、削除変数更新検出部1
2、削除変数更新実行部13、変数表示部14及び変数
管理部15を有している。
【0011】最適化部3は、ソースプログラム1を読み
込み、このソースプログラム1を実行コード7のサイズ
が小さくなるように、あるいは実行速度が向上するよう
に最適化する。翻訳部4は、最適化部3が最適化したプ
ログラムを翻訳し、実行コード7を生成する。
込み、このソースプログラム1を実行コード7のサイズ
が小さくなるように、あるいは実行速度が向上するよう
に最適化する。翻訳部4は、最適化部3が最適化したプ
ログラムを翻訳し、実行コード7を生成する。
【0012】削除変数情報作成部5は、最適化部3が最
適化の過程で削除した変数(以下、削除変数と呼ぶ)を
削除変数情報としてデバッグ情報8に出力する。削除変
数更新情報作成部6は、削除変数の更新に関する情報を
削除変数更新情報としてデバッグ情報8に出力する。つ
まり、デバッグ情報8には削除変数情報と削除変数更新
情報が含まれる。
適化の過程で削除した変数(以下、削除変数と呼ぶ)を
削除変数情報としてデバッグ情報8に出力する。削除変
数更新情報作成部6は、削除変数の更新に関する情報を
削除変数更新情報としてデバッグ情報8に出力する。つ
まり、デバッグ情報8には削除変数情報と削除変数更新
情報が含まれる。
【0013】コード実行部11は、実行コード7を実行
する。削除変数更新検出部12は、コード実行部11が
実行した部分において、削除変数の値が更新されたかど
うかを検出する。削除変数更新実行部13は、削除変数
の更新後の値を計算し、削除変数の値を更新する。変数
表示部14はユーザによって指示された変数の値を表示
する。
する。削除変数更新検出部12は、コード実行部11が
実行した部分において、削除変数の値が更新されたかど
うかを検出する。削除変数更新実行部13は、削除変数
の更新後の値を計算し、削除変数の値を更新する。変数
表示部14はユーザによって指示された変数の値を表示
する。
【0014】変数管理部15は、変数が削除変数かどう
かを管理する。入力部9は、ユーザの指示を受け取る。
表示部10は、変数表示部14から出力された内容をユ
ーザに見える形で表示する。削除変数用メモリ17は、
削除変数の値を保持するためのメモリである。そして、
変数管理情報16は、変数が削除変数であるかどうかを
示す情報と、削除変数用メモリ17上の削除変数の割り
当て先を示す情報とを含んでいる。
かを管理する。入力部9は、ユーザの指示を受け取る。
表示部10は、変数表示部14から出力された内容をユ
ーザに見える形で表示する。削除変数用メモリ17は、
削除変数の値を保持するためのメモリである。そして、
変数管理情報16は、変数が削除変数であるかどうかを
示す情報と、削除変数用メモリ17上の削除変数の割り
当て先を示す情報とを含んでいる。
【0015】次に、このようなデバッグ装置の動作を説
明する。図2は、コンパイラ2の動作を示すフローチャ
ート図である。コンパイラ2は、ソースプログラム1を
読み込んだ後(ステップS201)、最適化部3におい
てソースプログラム1を最適化する(ステップS20
2)。翻訳部4は、最適化部3が最適化したプログラム
を実行コード7に変換して出力する(ステップS20
3)。
明する。図2は、コンパイラ2の動作を示すフローチャ
ート図である。コンパイラ2は、ソースプログラム1を
読み込んだ後(ステップS201)、最適化部3におい
てソースプログラム1を最適化する(ステップS20
2)。翻訳部4は、最適化部3が最適化したプログラム
を実行コード7に変換して出力する(ステップS20
3)。
【0016】このとき、削除変数情報作成部5は、最適
化部3で最適化した情報に基づき、削除変数情報をデバ
ッグ情報8に出力する(ステップS204)。さらに、
削除変数更新情報作成部6は、ソースプログラム1にお
ける削除変数の更新位置とその更新処理(演算式等)を
示す削除変数更新情報をデバッグ情報8に出力する(ス
テップS205)。
化部3で最適化した情報に基づき、削除変数情報をデバ
ッグ情報8に出力する(ステップS204)。さらに、
削除変数更新情報作成部6は、ソースプログラム1にお
ける削除変数の更新位置とその更新処理(演算式等)を
示す削除変数更新情報をデバッグ情報8に出力する(ス
テップS205)。
【0017】図3は、ソースプログラム1の1例を示す
図である。このプログラムは円の面積を求めるものであ
る。1行目は円の面積を求める関数の名前と引数を示し
ている。この関数の名前はfuncで、円の半径の値を
受け取る引数としての変数rを持つ。
図である。このプログラムは円の面積を求めるものであ
る。1行目は円の面積を求める関数の名前と引数を示し
ている。この関数の名前はfuncで、円の半径の値を
受け取る引数としての変数rを持つ。
【0018】円の面積は、面積=半径*半径*3.14
の公式で求められる。この計算を行うため、2行目で半
径r*半径rの値を計算し、その結果を変数xに格納
し、さらに3行目で変数xに3.14を乗算し、結果を
変数sに格納する。変数sに格納された円の面積は、4
行目のリターン命令(return)により、関数fu
ncを呼び出したプログラムに返され、このプログラム
は終了する。
の公式で求められる。この計算を行うため、2行目で半
径r*半径rの値を計算し、その結果を変数xに格納
し、さらに3行目で変数xに3.14を乗算し、結果を
変数sに格納する。変数sに格納された円の面積は、4
行目のリターン命令(return)により、関数fu
ncを呼び出したプログラムに返され、このプログラム
は終了する。
【0019】図3のソースプログラム1では、計算を2
行目と3行目の2行に分けているが、計算が複雑で、デ
バッグの際に計算の各部分の値が知りたい場合などに、
1つの計算を複数行に分けることはよく行われる。これ
に対して、最適化部3は、最適化処理時の判断により、
プログラムの作成者の意図とは関係なく、複数の計算の
順序を変更し、あるいは計算をまとめて行う場合があ
る。
行目と3行目の2行に分けているが、計算が複雑で、デ
バッグの際に計算の各部分の値が知りたい場合などに、
1つの計算を複数行に分けることはよく行われる。これ
に対して、最適化部3は、最適化処理時の判断により、
プログラムの作成者の意図とは関係なく、複数の計算の
順序を変更し、あるいは計算をまとめて行う場合があ
る。
【0020】図3のプログラムの作成者は、半径r*半
径rの値を変数xに格納し、変数xの値をデバッグ時に
参照することにより、計算が正しく行われるかどうかを
確認できるようにしている。この例では、簡単な計算式
を取り上げているが、複雑な計算であれば、複数の計算
式に分け、値を確認したいという要求は強くなるもので
ある。
径rの値を変数xに格納し、変数xの値をデバッグ時に
参照することにより、計算が正しく行われるかどうかを
確認できるようにしている。この例では、簡単な計算式
を取り上げているが、複雑な計算であれば、複数の計算
式に分け、値を確認したいという要求は強くなるもので
ある。
【0021】なお、関数funcで使用している変数
は、関数funcが実行されているときにのみ使用で
き、他の関数が実行されているときは、関数funcで
使用している変数の値を参照、または変更することはで
きないものである。図3のソースプログラム1を、変数
を可能な限り使用しないように最適化して実行コード7
に変換する場合、図4のように最適化できる。
は、関数funcが実行されているときにのみ使用で
き、他の関数が実行されているときは、関数funcで
使用している変数の値を参照、または変更することはで
きないものである。図3のソースプログラム1を、変数
を可能な限り使用しないように最適化して実行コード7
に変換する場合、図4のように最適化できる。
【0022】図3のソースプログラム1の2行目と3行
目で行っている円の面積を求める計算を1行にまとめる
ことにより、変数xは必要ではなくなる。変数rは関数
の引数であり、半径の値を受け取るために必須であり、
また、変数sはリターン命令に値を渡すために必須であ
るため、この2つの変数を使用しないようにすることは
できない。
目で行っている円の面積を求める計算を1行にまとめる
ことにより、変数xは必要ではなくなる。変数rは関数
の引数であり、半径の値を受け取るために必須であり、
また、変数sはリターン命令に値を渡すために必須であ
るため、この2つの変数を使用しないようにすることは
できない。
【0023】図5は、図4のように最適化されたプログ
ラムの2行目を翻訳した結果をアセンブラ命令で示した
ものである。s=3.14*r*rの計算を行うため
に、1行目ではレジスタregに3.14を代入してい
る。次に、2行目でレジスタregの値3.14に半径
rを掛けて、この結果をレジスタregに格納し、さら
に3行目でもう一度、レジスタregの値に半径rを掛
けて、この結果をレジスタregに格納する。そして、
レジスタregの結果を4行目で変数sに代入してい
る。
ラムの2行目を翻訳した結果をアセンブラ命令で示した
ものである。s=3.14*r*rの計算を行うため
に、1行目ではレジスタregに3.14を代入してい
る。次に、2行目でレジスタregの値3.14に半径
rを掛けて、この結果をレジスタregに格納し、さら
に3行目でもう一度、レジスタregの値に半径rを掛
けて、この結果をレジスタregに格納する。そして、
レジスタregの結果を4行目で変数sに代入してい
る。
【0024】図5に示した計算手順では、変数xは使用
されない。また、この計算手順では3.14*半径rの
計算が先に行われるため、半径r*半径rの計算自体が
行われない。したがって単純に計算途中のメモリ、また
はレジスタの値を取り出し、保存するだけでは、削除変
数を表示するという目的を達することはできない。つま
り、削除変数xの値をデバッガ18で別途計算する必要
がある。
されない。また、この計算手順では3.14*半径rの
計算が先に行われるため、半径r*半径rの計算自体が
行われない。したがって単純に計算途中のメモリ、また
はレジスタの値を取り出し、保存するだけでは、削除変
数を表示するという目的を達することはできない。つま
り、削除変数xの値をデバッガ18で別途計算する必要
がある。
【0025】削除変数があるとき、削除変数情報作成部
5は、削除変数名を示す削除変数情報を作成し、これを
デバッグ情報8に書き込む。図6は、削除変数情報の1
構造例を示す図である。図6の削除変数情報は、変数x
が削除変数であることを示している。
5は、削除変数名を示す削除変数情報を作成し、これを
デバッグ情報8に書き込む。図6は、削除変数情報の1
構造例を示す図である。図6の削除変数情報は、変数x
が削除変数であることを示している。
【0026】また、削除変数更新情報作成部6は、ソー
スプログラム1に削除変数の値を変更する命令があると
き、その実行位置と変更後の値がいくつであるべきかを
示す削除変数更新情報を作成し、これをデバッグ情報8
に書き込む。図7は、削除変数更新情報の1構造例を示
す図である。図7の削除変数更新情報は、ソースプログ
ラム1の2行目で削除変数xの値を半径r*半径rに変
更することを示している。
スプログラム1に削除変数の値を変更する命令があると
き、その実行位置と変更後の値がいくつであるべきかを
示す削除変数更新情報を作成し、これをデバッグ情報8
に書き込む。図7は、削除変数更新情報の1構造例を示
す図である。図7の削除変数更新情報は、ソースプログ
ラム1の2行目で削除変数xの値を半径r*半径rに変
更することを示している。
【0027】図8は、デバッガ18の動作を示すフロー
チャート図である。デバッグ時に、デバッガ18は、実
行コード7をコード実行用メモリ19に読み込む(ステ
ップS301)。実行コード7はコード実行用メモリ1
9を使用して実行されるものである。また、実行コード
7が使用する変数は、実行コード7が実行される際に、
実行コード7によりコード実行用メモリ19に適宜確保
される。
チャート図である。デバッグ時に、デバッガ18は、実
行コード7をコード実行用メモリ19に読み込む(ステ
ップS301)。実行コード7はコード実行用メモリ1
9を使用して実行されるものである。また、実行コード
7が使用する変数は、実行コード7が実行される際に、
実行コード7によりコード実行用メモリ19に適宜確保
される。
【0028】続いて、デバッガ18は、デバッグ情報8
を読み込む(ステップS302)。デバッガ18内の変
数管理部15は、デバッグ情報8に削除変数情報がある
かどうかを調べる(ステップS303)。そして、変数
管理部15は、削除変数情報がある場合、削除変数情報
に登録されている削除変数を削除変数用メモリ17に割
り当て(ステップS304)、削除変数の割り当て先を
管理するために変数管理情報16を作成する(ステップ
S305)。
を読み込む(ステップS302)。デバッガ18内の変
数管理部15は、デバッグ情報8に削除変数情報がある
かどうかを調べる(ステップS303)。そして、変数
管理部15は、削除変数情報がある場合、削除変数情報
に登録されている削除変数を削除変数用メモリ17に割
り当て(ステップS304)、削除変数の割り当て先を
管理するために変数管理情報16を作成する(ステップ
S305)。
【0029】図9は、変数管理情報16の1構造例を示
す図である。図9の変数管理情報16は、削除変数xを
削除変数用メモリ17のデータ番号1に割り当てたこと
を示している。
す図である。図9の変数管理情報16は、削除変数xを
削除変数用メモリ17のデータ番号1に割り当てたこと
を示している。
【0030】次に、デバッガ18は、ユーザからの指示
を待つ(ステップS306)。ユーザは、入力部9を操
作して指示コマンドを入力する。ユーザの指示が終了コ
マンドであれば(ステップS307)、デバッガ18は
処理を終了する。また、ユーザの指示が実行コマンドで
あれば(ステップS308)、デバッガ18内のコード
実行部11が実行コード7を実行する(ステップS30
9)。
を待つ(ステップS306)。ユーザは、入力部9を操
作して指示コマンドを入力する。ユーザの指示が終了コ
マンドであれば(ステップS307)、デバッガ18は
処理を終了する。また、ユーザの指示が実行コマンドで
あれば(ステップS308)、デバッガ18内のコード
実行部11が実行コード7を実行する(ステップS30
9)。
【0031】また、ユーザの指示が変数表示コマンドで
あれば(ステップS310)、デバッガ18内の変数表
示部14がコマンドで指定された変数を表示部10に表
示させる(ステップS311)。また、ユーザの指示が
それ以外のものであれば、デバッガ18は、該当するコ
マンドの処理を行う(ステップS312)。
あれば(ステップS310)、デバッガ18内の変数表
示部14がコマンドで指定された変数を表示部10に表
示させる(ステップS311)。また、ユーザの指示が
それ以外のものであれば、デバッガ18は、該当するコ
マンドの処理を行う(ステップS312)。
【0032】図10は、コード実行部11の動作を示す
フローチャート図である。コード実行部11は、ユーザ
の指示が実行コマンドであれば(ステップS308)、
ユーザが指示した範囲の実行コード7を実行する(ステ
ップS401)。削除変数更新検出部12は、コード実
行部11が実行コード7のどの位置を実行しているかを
調べ、その実行位置がデバッグ情報8内の削除変数更新
情報に記録されている位置に相当するかどうかを調べる
(ステップS402)。
フローチャート図である。コード実行部11は、ユーザ
の指示が実行コマンドであれば(ステップS308)、
ユーザが指示した範囲の実行コード7を実行する(ステ
ップS401)。削除変数更新検出部12は、コード実
行部11が実行コード7のどの位置を実行しているかを
調べ、その実行位置がデバッグ情報8内の削除変数更新
情報に記録されている位置に相当するかどうかを調べる
(ステップS402)。
【0033】削除変数更新情報が示す位置に対応する位
置が実行された場合、削除変数更新実行部13は、変数
管理部15に削除変数の割り当て先を問い合わせる(ス
テップS403)。変数管理部15は、変数管理情報1
6の中から該削除変数に対応する情報を検索し、これを
削除変数更新実行部13へ返す(ステップS404)。
置が実行された場合、削除変数更新実行部13は、変数
管理部15に削除変数の割り当て先を問い合わせる(ス
テップS403)。変数管理部15は、変数管理情報1
6の中から該削除変数に対応する情報を検索し、これを
削除変数更新実行部13へ返す(ステップS404)。
【0034】削除変数更新実行部13は、削除変数更新
情報内の更新処理情報(ここでは、r*r)を基に削除
変数の更新後の値を計算する(ステップS405)。そ
して、削除変数更新実行部13は、変数管理部15から
受け取った変数管理情報16を基に、削除変数用メモリ
17上の該変数管理情報16が示す位置に格納された削
除変数の値を計算した値に変更する(ステップS40
6)。
情報内の更新処理情報(ここでは、r*r)を基に削除
変数の更新後の値を計算する(ステップS405)。そ
して、削除変数更新実行部13は、変数管理部15から
受け取った変数管理情報16を基に、削除変数用メモリ
17上の該変数管理情報16が示す位置に格納された削
除変数の値を計算した値に変更する(ステップS40
6)。
【0035】図11は、変数表示部14の動作を示すフ
ローチャート図である。変数表示部14は、ユーザの指
示が変数表示を要求する変数表示コマンドであれば(ス
テップS310)、変数表示コマンドで指定された変数
が削除変数かどうかを調べる(ステップS501)。変
数表示部14は、表示すべき変数が削除変数であれば、
変数管理部15に削除変数の割り当て先を問い合わせる
(ステップS502)。
ローチャート図である。変数表示部14は、ユーザの指
示が変数表示を要求する変数表示コマンドであれば(ス
テップS310)、変数表示コマンドで指定された変数
が削除変数かどうかを調べる(ステップS501)。変
数表示部14は、表示すべき変数が削除変数であれば、
変数管理部15に削除変数の割り当て先を問い合わせる
(ステップS502)。
【0036】変数管理部15は、変数管理情報16の中
から該削除変数に対応する情報を検索し、これを変数表
示部14へ返す(ステップS503)。変数表示部14
は、削除変数用メモリ17上の該変数管理情報16が示
す位置に格納された削除変数の値を取得し(ステップS
504)、取得した削除変数の値を表示部10に表示さ
せる(ステップS506)。
から該削除変数に対応する情報を検索し、これを変数表
示部14へ返す(ステップS503)。変数表示部14
は、削除変数用メモリ17上の該変数管理情報16が示
す位置に格納された削除変数の値を取得し(ステップS
504)、取得した削除変数の値を表示部10に表示さ
せる(ステップS506)。
【0037】また、変数表示部14は、表示すべき変数
が削除変数でない場合、コード実行用メモリ19に割り
当てられた変数の値を取得し(ステップS505)、取
得した変数の値を表示部10に表示させる(ステップS
506)。
が削除変数でない場合、コード実行用メモリ19に割り
当てられた変数の値を取得し(ステップS505)、取
得した変数の値を表示部10に表示させる(ステップS
506)。
【0038】従来、削除変数の値は一時的にも、あるい
は永続的にも、どこにも保持されなかった。また、最適
化によって計算の順序が変更されることにより、変数に
代入されるべき値そのものの計算が行われない場合もあ
る。したがって、デバッグ時に削除変数の値を表示する
ことは不可能であった。
は永続的にも、どこにも保持されなかった。また、最適
化によって計算の順序が変更されることにより、変数に
代入されるべき値そのものの計算が行われない場合もあ
る。したがって、デバッグ時に削除変数の値を表示する
ことは不可能であった。
【0039】これに対し本発明では、削除変数情報を削
除変数情報作成部5で作成すると共に、削除変数更新情
報を削除変数更新情報作成部6で作成する。デバッガ1
8は、削除変数情報に記録された削除変数の値を削除変
数用メモリ17を使用して記憶する。さらに、削除変数
更新情報の指示に従い値を計算し、更新する。こうし
て、削除変数を、デバッグ作業者によって指定された任
意の時点で表示することが可能となる。
除変数情報作成部5で作成すると共に、削除変数更新情
報を削除変数更新情報作成部6で作成する。デバッガ1
8は、削除変数情報に記録された削除変数の値を削除変
数用メモリ17を使用して記憶する。さらに、削除変数
更新情報の指示に従い値を計算し、更新する。こうし
て、削除変数を、デバッグ作業者によって指定された任
意の時点で表示することが可能となる。
【0040】
【発明の効果】本発明によれば、削除変数をデバッガが
管理し、この削除変数の値をデバッガが計算して、更
新、保持するため、削除変数の値を表示することがで
き、デバッグの助けとすることができる。
管理し、この削除変数の値をデバッガが計算して、更
新、保持するため、削除変数の値を表示することがで
き、デバッグの助けとすることができる。
【図1】 本発明の実施の形態となるデバッグ装置の構
成を示すブロック図である。
成を示すブロック図である。
【図2】 図1のコンパイラの動作を示すフローチャー
ト図である。
ト図である。
【図3】 ソースプログラム1の1例を示す図である。
【図4】 最適化後のソースプログラム1の1例を示す
図である。
図である。
【図5】 最適化後のソースプログラムの2行目を翻訳
した結果を示す図である。
した結果を示す図である。
【図6】 削除変数情報の1構造例を示す図である。
【図7】 削除変数更新情報の1構造例を示す図であ
る。
る。
【図8】 図1のデバッガの動作を示すフローチャート
図である。
図である。
【図9】 変数管理情報の1構造例を示す図である。
【図10】 図1のコード実行部の動作を示すフローチ
ャート図である。
ャート図である。
【図11】 図1の変数表示部の動作を示すフローチャ
ート図である。
ート図である。
【図12】 従来のデバッグ装置の構成を示すブロック
図である。
図である。
【符号の説明】 1…ソースプログラム、2…コンパイラ、3…最適化
部、4…翻訳部、5…削除変数情報作成部、6…削除変
数更新情報作成部、7…実行コード、8…デバッグ情
報、9…入力部、10…表示部、11…コード実行部、
12…削除変数更新検出部、13…削除変数更新実行
部、14…変数表示部、15…変数管理部、16…変数
管理情報、17…削除変数用メモリ、18…デバッガ、
19…コード実行用メモリ。
部、4…翻訳部、5…削除変数情報作成部、6…削除変
数更新情報作成部、7…実行コード、8…デバッグ情
報、9…入力部、10…表示部、11…コード実行部、
12…削除変数更新検出部、13…削除変数更新実行
部、14…変数表示部、15…変数管理部、16…変数
管理情報、17…削除変数用メモリ、18…デバッガ、
19…コード実行用メモリ。
─────────────────────────────────────────────────────
【手続補正書】
【提出日】平成12年1月27日(2000.1.2
7)
7)
【手続補正1】
【補正対象書類名】明細書
【補正対象項目名】特許請求の範囲
【補正方法】変更
【補正内容】
【特許請求の範囲】
【手続補正2】
【補正対象書類名】明細書
【補正対象項目名】0008
【補正方法】変更
【補正内容】
【0008】
【課題を解決するための手段】本発明のデバッグ方法
は、ソースプログラム(1)を最適化しコンパイルして
実行コード(7)を生成する際、最適化する前からソー
スプログラムに存在し、かつ最適化の課程で削除した削
除変数を示す削除変数情報を作成すると共に、ソースプ
ログラムにおいて上記削除変数が更新される位置とその
更新処理を示す削除変数更新情報を作成する。また、ソ
ースプログラムのデバッグ時に、上記削除変数情報が示
す削除変数を記憶し、実行コードの実行中に上記削除変
数更新情報が示す位置を実行するとき、削除変数の更新
後の値を削除変数更新情報に基づいて計算して、記憶し
ている削除変数の値を更新する。そして、削除変数の表
示要求が発生したとき、削除変数の値を表示する。
は、ソースプログラム(1)を最適化しコンパイルして
実行コード(7)を生成する際、最適化する前からソー
スプログラムに存在し、かつ最適化の課程で削除した削
除変数を示す削除変数情報を作成すると共に、ソースプ
ログラムにおいて上記削除変数が更新される位置とその
更新処理を示す削除変数更新情報を作成する。また、ソ
ースプログラムのデバッグ時に、上記削除変数情報が示
す削除変数を記憶し、実行コードの実行中に上記削除変
数更新情報が示す位置を実行するとき、削除変数の更新
後の値を削除変数更新情報に基づいて計算して、記憶し
ている削除変数の値を更新する。そして、削除変数の表
示要求が発生したとき、削除変数の値を表示する。
【手続補正3】
【補正対象書類名】明細書
【補正対象項目名】0009
【補正方法】変更
【補正内容】
【0009】本発明のデバッグ装置は、ソースプログラ
ム(1)を最適化しコンパイルして実行コード(7)を
生成する際、最適化する前からソースプログラムに存在
し、かつ最適化の課程で削除した削除変数を示す削除変
数情報を作成すると共に、ソースプログラムにおいて上
記削除変数が更新される位置とその更新処理を示す削除
変数更新情報を作成するコンパイラ(2)と、上記削除
変数情報が示す削除変数を記憶し、実行コードの実行中
に上記削除変数更新情報が示す位置を実行するとき、削
除変数の更新後の値を削除変数更新情報に基づいて計算
して、記憶している削除変数の値を更新し、削除変数の
表示要求が発生したとき、削除変数の値を表示するデバ
ッガ(18)とを備えるものである。また、上述のコン
パイラの1構成例は、ソースプログラムを最適化しコン
パイルして実行コードを生成する手段(3,4)と、上
記削除変数情報を作成する削除変数情報作成手段(5)
と、上記削除変数更新情報を作成する削除変数更新情報
作成手段(6)とを有している。そして、デバッガの1
構成例は、上記削除変数情報が示す削除変数を記憶する
削除変数用メモリ(17)と、実行コードを実行するコ
ード実行手段(11)と、実行コードにおける実行位置
が上記削除変数更新情報が示す位置かどうかを検出する
削除変数更新検出手段(12)と、上記削除変数更新情
報が示す位置が実行されるとき、削除変数の更新後の値
を削除変数更新情報に基づいて計算して、削除変数用メ
モリに記憶された削除変数の値を更新する削除変数更新
実行手段(13)と、削除変数の表示要求が発生したと
き、削除変数用メモリに記憶された削除変数の値を表示
する変数表示手段(14)とを有している。
ム(1)を最適化しコンパイルして実行コード(7)を
生成する際、最適化する前からソースプログラムに存在
し、かつ最適化の課程で削除した削除変数を示す削除変
数情報を作成すると共に、ソースプログラムにおいて上
記削除変数が更新される位置とその更新処理を示す削除
変数更新情報を作成するコンパイラ(2)と、上記削除
変数情報が示す削除変数を記憶し、実行コードの実行中
に上記削除変数更新情報が示す位置を実行するとき、削
除変数の更新後の値を削除変数更新情報に基づいて計算
して、記憶している削除変数の値を更新し、削除変数の
表示要求が発生したとき、削除変数の値を表示するデバ
ッガ(18)とを備えるものである。また、上述のコン
パイラの1構成例は、ソースプログラムを最適化しコン
パイルして実行コードを生成する手段(3,4)と、上
記削除変数情報を作成する削除変数情報作成手段(5)
と、上記削除変数更新情報を作成する削除変数更新情報
作成手段(6)とを有している。そして、デバッガの1
構成例は、上記削除変数情報が示す削除変数を記憶する
削除変数用メモリ(17)と、実行コードを実行するコ
ード実行手段(11)と、実行コードにおける実行位置
が上記削除変数更新情報が示す位置かどうかを検出する
削除変数更新検出手段(12)と、上記削除変数更新情
報が示す位置が実行されるとき、削除変数の更新後の値
を削除変数更新情報に基づいて計算して、削除変数用メ
モリに記憶された削除変数の値を更新する削除変数更新
実行手段(13)と、削除変数の表示要求が発生したと
き、削除変数用メモリに記憶された削除変数の値を表示
する変数表示手段(14)とを有している。
Claims (3)
- 【請求項1】 ソースプログラムを最適化しコンパイル
して実行コードを生成する際、最適化の課程で削除した
変数を示す削除変数情報を作成すると共に、ソースプロ
グラムにおいて前記削除変数が更新される位置とその更
新処理を示す削除変数更新情報を作成し、 前記ソースプログラムのデバッグ時に、前記削除変数情
報が示す削除変数を記憶し、実行コードの実行中に前記
削除変数更新情報が示す位置を実行するとき、削除変数
の更新後の値を削除変数更新情報に基づいて計算して、
記憶している削除変数の値を更新し、 削除変数の表示要求が発生したとき、削除変数の値を表
示することを特徴とするデバッグ方法。 - 【請求項2】 ソースプログラムを最適化しコンパイル
して実行コードを生成する際、最適化の課程で削除した
変数を示す削除変数情報を作成すると共に、ソースプロ
グラムにおいて前記削除変数が更新される位置とその更
新処理を示す削除変数更新情報を作成するコンパイラ
と、 前記削除変数情報が示す削除変数を記憶し、実行コード
の実行中に前記削除変数更新情報が示す位置を実行する
とき、削除変数の更新後の値を削除変数更新情報に基づ
いて計算して、記憶している削除変数の値を更新し、削
除変数の表示要求が発生したとき、削除変数の値を表示
するデバッガとを備えることを特徴とするデバッグ装
置。 - 【請求項3】 請求項2記載のデバッグ装置において、 前記コンパイラは、ソースプログラムを最適化しコンパ
イルして実行コードを生成する手段と、 前記削除変数情報を作成する削除変数情報作成手段と、 前記削除変数更新情報を作成する削除変数更新情報作成
手段とを有し、 前記デバッガは、前記削除変数情報が示す削除変数を記
憶する削除変数用メモリと、 実行コードを実行するコード実行手段と、 実行コードにおける実行位置が前記削除変数更新情報が
示す位置かどうかを検出する削除変数更新検出手段と、 前記削除変数更新情報が示す位置が実行されるとき、削
除変数の更新後の値を削除変数更新情報に基づいて計算
して、削除変数用メモリに記憶された削除変数の値を更
新する削除変数更新実行手段と、 削除変数の表示要求が発生したとき、削除変数用メモリ
に記憶された削除変数の値を表示する変数表示手段とを
有することを特徴とするデバッグ装置。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP11028459A JP2000227861A (ja) | 1999-02-05 | 1999-02-05 | デバッグ方法及びデバッグ装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP11028459A JP2000227861A (ja) | 1999-02-05 | 1999-02-05 | デバッグ方法及びデバッグ装置 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2000227861A true JP2000227861A (ja) | 2000-08-15 |
Family
ID=12249263
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP11028459A Pending JP2000227861A (ja) | 1999-02-05 | 1999-02-05 | デバッグ方法及びデバッグ装置 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2000227861A (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2008536236A (ja) * | 2005-04-13 | 2008-09-04 | テレフオンアクチーボラゲット エル エム エリクソン(パブル) | コンピュータシステムにおけるデータ値の整合性(コヒーレンス:coherence) |
-
1999
- 1999-02-05 JP JP11028459A patent/JP2000227861A/ja active Pending
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2008536236A (ja) * | 2005-04-13 | 2008-09-04 | テレフオンアクチーボラゲット エル エム エリクソン(パブル) | コンピュータシステムにおけるデータ値の整合性(コヒーレンス:coherence) |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US6993754B2 (en) | Annotations to executable images for improved dynamic optimization functions | |
| JP2810675B2 (ja) | デバック方式 | |
| US8332829B2 (en) | Communication scheduling within a parallel processing system | |
| US6014518A (en) | Terminating polymorphic type inference program analysis | |
| US8448152B2 (en) | High-level language, architecture-independent probe program compiler | |
| US20030028860A1 (en) | Compiler and debugging device | |
| JP2000181725A (ja) | 実行可能なコ―ドを改変し、追加機能を付与するための方法およびシステム | |
| JP3145127B2 (ja) | コンピュータ・システム | |
| JP2000305809A (ja) | メモリアクセス解析方法、メモリアクセス追跡装置、コンピュータ読取可能な記録媒体 | |
| EP1987490B1 (en) | Method and apparatus for moving area operator definition instructions statements within control flow structures | |
| US7213123B2 (en) | Method and apparatus for mapping debugging information when debugging integrated executables in a heterogeneous architecture | |
| US7043717B2 (en) | Debugging apparatus and method | |
| JP2017142794A (ja) | プログラマブルコントローラシステム、そのコントローラ、支援装置、hci装置、二重化コントローラシステム | |
| EP0406028A2 (en) | Incremental compiler for source code development system | |
| US20020129336A1 (en) | Automatic symbol table selection in a multi-cell environment | |
| CN117234953B (zh) | 一种基于影子代码缓存的内核调试方法 | |
| Lyu et al. | A procedure-based dynamic software update | |
| JP2000227861A (ja) | デバッグ方法及びデバッグ装置 | |
| CA1259138A (en) | Method of compiling high level language statements into low level language instruction sets | |
| JPH02146630A (ja) | マイクロプロセッサのプログラム開発システム | |
| JPH05297911A (ja) | シーケンスコントローラ用シーケンス制御回路 | |
| JP2002366378A (ja) | プログラムのデバッグ装置及びデバッグ方法、並びに記憶媒体 | |
| JP3293821B2 (ja) | 動的リンクシステム | |
| JP5208706B2 (ja) | コード実行システム、方法及びプログラム | |
| JPH0255811B2 (ja) |