JP3372387B2 - プログラム検査方法 - Google Patents
プログラム検査方法Info
- Publication number
- JP3372387B2 JP3372387B2 JP05572695A JP5572695A JP3372387B2 JP 3372387 B2 JP3372387 B2 JP 3372387B2 JP 05572695 A JP05572695 A JP 05572695A JP 5572695 A JP5572695 A JP 5572695A JP 3372387 B2 JP3372387 B2 JP 3372387B2
- Authority
- JP
- Japan
- Prior art keywords
- program
- inspection
- instruction
- reference numeral
- checking
- 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
Links
Landscapes
- Debugging And Monitoring (AREA)
Description
【0001】
【産業上の利用分野】本発明は,コンピュータプログラ
ムの検査方法に関する。作成されたコンピュータプログ
ラムの間違いをチェックするためにそれぞれのプログラ
ム言語に検査プログラムライブラリが用意されている。
ムの検査方法に関する。作成されたコンピュータプログ
ラムの間違いをチェックするためにそれぞれのプログラ
ム言語に検査プログラムライブラリが用意されている。
【0002】本発明はデバッガによりその検査プログラ
ムライブラリを利用して配列要素の添字検査,未定義変
数検査,引数検査等のプログラム検査を高速に行うこと
のできるプログラム検査方法を提供するものである。
ムライブラリを利用して配列要素の添字検査,未定義変
数検査,引数検査等のプログラム検査を高速に行うこと
のできるプログラム検査方法を提供するものである。
【0003】
【従来の技術】図9は従来のプログラム検査のための構
成を示す。図9において,110はソースプログラムで
ある。
成を示す。図9において,110はソースプログラムで
ある。
【0004】111はソースプログラムにおける「GO
DBG(SUBCHK)」の記述であって,デバッガを
起動し,デバッガの検査手段(SUBCHK)を使用し
て配列要素名の添字式の検査(SUBCHK)を命令す
るサブコマンドの記述である。
DBG(SUBCHK)」の記述であって,デバッガを
起動し,デバッガの検査手段(SUBCHK)を使用し
て配列要素名の添字式の検査(SUBCHK)を命令す
るサブコマンドの記述である。
【0005】111’は配列名A,B,Cの定義である
(図10参照)。112はコンパイラである。113は
ソースプログラム111のコンパイルの処理である。
(図10参照)。112はコンパイラである。113は
ソースプログラム111のコンパイルの処理である。
【0006】114はオブジェクトプログラムであっ
て,コンパイルの処理113により生成されるオブジェ
クトプログラムである。114’はデバッグ情報であっ
て,検査指示のある場合にオブジェクトプログラムとと
もに比較生成される。デバッグ情報は(1) シンボリック
情報(図10のソースプログラムの場合,配列名A,
B,C),(2) 中断点情報(図10のソースプログラム
の行番号5等)を持つものである。
て,コンパイルの処理113により生成されるオブジェ
クトプログラムである。114’はデバッグ情報であっ
て,検査指示のある場合にオブジェクトプログラムとと
もに比較生成される。デバッグ情報は(1) シンボリック
情報(図10のソースプログラムの場合,配列名A,
B,C),(2) 中断点情報(図10のソースプログラム
の行番号5等)を持つものである。
【0007】115はオブジェクトプログラム114の
デバッグの処理を表す。116はデバッガである。11
7はデバッガの有する配列要素名の添字検査の検査プロ
グラム(SUBCHK)である。
デバッグの処理を表す。116はデバッガである。11
7はデバッガの有する配列要素名の添字検査の検査プロ
グラム(SUBCHK)である。
【0008】118は検査結果の出力である。120は
検査手段のライブラリであって,言語プログラムに備え
るものである。
検査手段のライブラリであって,言語プログラムに備え
るものである。
【0009】121は添字検査手段であって,配列要素
名の添字式の検査をするものである。122は未定義変
数検査手段であって,代入文の右辺が定義された変数で
あるかないかを検査するものである。
名の添字式の検査をするものである。122は未定義変
数検査手段であって,代入文の右辺が定義された変数で
あるかないかを検査するものである。
【0010】123は引数検査手段であって,引数の検
査をするものである。図10は従来のプログラム検査方
法である。図10 (a)はプログラムの例であり,図10
(b)は従来の配列要素名の添字式の検査方法のフローチ
ャートである。
査をするものである。図10は従来のプログラム検査方
法である。図10 (a)はプログラムの例であり,図10
(b)は従来の配列要素名の添字式の検査方法のフローチ
ャートである。
【0011】110はソースプログラムの例であって,
配列名Aの配列要素名A(I)の添字式Iに対してI=
1からI=100まで1ずつ値を増やしながら配列要素
A(I)の値を加算するプログラムである。
配列名Aの配列要素名A(I)の添字式Iに対してI=
1からI=100まで1ずつ値を増やしながら配列要素
A(I)の値を加算するプログラムである。
【0012】図10 (a)のソースプログラム110を例
として,図10 (b)のフローチャートにより図9の従来
のプログラム検査のための構成を説明する。ソースプロ
グラム110に対してデバッガの起動と配列要素名の添
字式の検査の指示をする(例えば,図9のようにGOD
BG(SUBCHK)111をソースプログラム110
に記述する)。サブコマンドはSUBCHKの他,未定
義変数の検査をするUNDEF,引数チェックをするA
RGCHKコマンド等がある。
として,図10 (b)のフローチャートにより図9の従来
のプログラム検査のための構成を説明する。ソースプロ
グラム110に対してデバッガの起動と配列要素名の添
字式の検査の指示をする(例えば,図9のようにGOD
BG(SUBCHK)111をソースプログラム110
に記述する)。サブコマンドはSUBCHKの他,未定
義変数の検査をするUNDEF,引数チェックをするA
RGCHKコマンド等がある。
【0013】コンパイラ112によりコンパイルしてオ
ブジェクトプログラム114を得る。GODBG(SU
BCHK)によりデバッガ116が起動され,デバッグ
の処理115がなされる。
ブジェクトプログラム114を得る。GODBG(SU
BCHK)によりデバッガ116が起動され,デバッグ
の処理115がなされる。
【0014】デバッグの処理115について図10 (b)の
フローチャートにより説明する(ユーザにより行番号5
で中断する指示が与えられているとする)。S1 デバ
ッガ116は,デバッグ情報114’の中断点の情報を
参照し,ソースプログラム110の行番号5が指定され
た中断点なので,ソースプログラム110を中断する。
SUBCHKがONであるので,デバッガの添字検査プ
ログラム(SUBCHK)117を呼び出す。
フローチャートにより説明する(ユーザにより行番号5
で中断する指示が与えられているとする)。S1 デバ
ッガ116は,デバッグ情報114’の中断点の情報を
参照し,ソースプログラム110の行番号5が指定され
た中断点なので,ソースプログラム110を中断する。
SUBCHKがONであるので,デバッガの添字検査プ
ログラム(SUBCHK)117を呼び出す。
【0015】S2 添字検査プログラム(SUBCH
K)117はデバッグ情報114’のシンボリック情報
を参照し,配列名A,B,Cについて,定義された添字
範囲で処理されているかどうかを検査して,メインの処
理に戻る。
K)117はデバッグ情報114’のシンボリック情報
を参照し,配列名A,B,Cについて,定義された添字
範囲で処理されているかどうかを検査して,メインの処
理に戻る。
【0016】S3 S2の検査が終了すると,デバッガ
116は,ソースプログラム110の行番号6におい
て,再度添字検査プログラム(SUBCHK)117を
呼び出す。
116は,ソースプログラム110の行番号6におい
て,再度添字検査プログラム(SUBCHK)117を
呼び出す。
【0017】S4 添字検査プログラム(SUBCH
K)117はデバッグ情報114’のシンボリック情報
を参照し,配列名A,B,Cについて,定義された添字
範囲で処理されているかどうかを検査し,メインの処理
に戻る。
K)117はデバッグ情報114’のシンボリック情報
を参照し,配列名A,B,Cについて,定義された添字
範囲で処理されているかどうかを検査し,メインの処理
に戻る。
【0018】S5 S4の検査が終了すると,行番号7
において,さらに添字検査プログラム(SUBCHK)
117を呼び出す。S6 添字検査プログラム(SUB
CHK)117はデバッグ情報114’のシンボリック
情報を参照し,配列A,B,Cについて,定義された添
字範囲で処理されているかどうかを検査し,メインの処
理へ戻る。
において,さらに添字検査プログラム(SUBCHK)
117を呼び出す。S6 添字検査プログラム(SUB
CHK)117はデバッグ情報114’のシンボリック
情報を参照し,配列A,B,Cについて,定義された添
字範囲で処理されているかどうかを検査し,メインの処
理へ戻る。
【0019】
【発明が解決しようとする課題】従来のデバッガを使用
した配列要素名の添字式の検査は,上記のように,検査
の度に,検査箇所のプログラムで使用されていなくても
プログラムの他の箇所で定義されている配列要素名を含
めて全てについて行っていたので,検査に長い時間を要
するものであった。また,添字式の検査だけてなく,代
入文の右辺に代入される変数が未定義のものでないかど
うかを判定する未定義変数検査も同様に,検査毎にプロ
グラムで定義されている全ての変数について検査するの
で時間を要するものであった。また,プログラムで使用
される引数の検査も同様に,プログラムの先頭でデバッ
ガ独自の検査手段でプログラムに記述されている全部の
引数に対して検査するので長時間を要するものであっ
た。また,引数検査のような複雑な検査の場合には,言
語プログラム自身が備える検査手段のライブラリの検査
プログラムとデバッガが有する検査プログラムとで検査
結果が異なる場合があり,検査が二重化することがあっ
た。
した配列要素名の添字式の検査は,上記のように,検査
の度に,検査箇所のプログラムで使用されていなくても
プログラムの他の箇所で定義されている配列要素名を含
めて全てについて行っていたので,検査に長い時間を要
するものであった。また,添字式の検査だけてなく,代
入文の右辺に代入される変数が未定義のものでないかど
うかを判定する未定義変数検査も同様に,検査毎にプロ
グラムで定義されている全ての変数について検査するの
で時間を要するものであった。また,プログラムで使用
される引数の検査も同様に,プログラムの先頭でデバッ
ガ独自の検査手段でプログラムに記述されている全部の
引数に対して検査するので長時間を要するものであっ
た。また,引数検査のような複雑な検査の場合には,言
語プログラム自身が備える検査手段のライブラリの検査
プログラムとデバッガが有する検査プログラムとで検査
結果が異なる場合があり,検査が二重化することがあっ
た。
【0020】あるいは,ソースプログラムの持つ検査手
段のライブラリの検査プログラムを使用した検査は,
「DEBAG(UNDEF,SUBCHK,ARGCH
K),GO」で行なえる,この場合には,指定された検
査に対してエラーが発生するまで中断されることなくプ
ログラムが実行され,中断点の設定,検査抑止等を柔軟
に行うことができない。
段のライブラリの検査プログラムを使用した検査は,
「DEBAG(UNDEF,SUBCHK,ARGCH
K),GO」で行なえる,この場合には,指定された検
査に対してエラーが発生するまで中断されることなくプ
ログラムが実行され,中断点の設定,検査抑止等を柔軟
に行うことができない。
【0021】本発明は,検査の抑止・再開を容易に制御
し,検査に必要な検査対象のみを検査するようにして能
率的に検査を行うことのできるプログラム検査方法を提
供することを目的とする。
し,検査に必要な検査対象のみを検査するようにして能
率的に検査を行うことのできるプログラム検査方法を提
供することを目的とする。
【0022】
【課題を解決するための手段】本発明は,検査手段のラ
イブラリおよびデバッガを備え,プログラム検査を指定
してコンパイルすることにより得られるオブジェクトプ
ログラムの命令列に該ライブラリから検査手段を呼び出
す命令とデバッグ情報が組み込まれた実行形式プログラ
ムに対して,該デバッグ情報から該当する中断点におい
て該当する検査手段を呼び出し、検査単位の命令列の領
域に含まれる検査対象のみを検査単位毎に検査すること
により検査を高速化するとともに,検査を行なわない検
査単位の領域でプログラムの実行を中断し,検査手段を
呼び出す命令を無操作命令に書き換えることにより検査
プログラムの抑止,再開をプログラムの任意の箇所で容
易に行えるようにした。また,さらに,デバッガにより
プログラム言語が備える検査手段のライブラリを制御す
るようにして,ライブラリの検査プログラムのみにより
検査することによりチェック論理の二重化を防ぐように
した。
イブラリおよびデバッガを備え,プログラム検査を指定
してコンパイルすることにより得られるオブジェクトプ
ログラムの命令列に該ライブラリから検査手段を呼び出
す命令とデバッグ情報が組み込まれた実行形式プログラ
ムに対して,該デバッグ情報から該当する中断点におい
て該当する検査手段を呼び出し、検査単位の命令列の領
域に含まれる検査対象のみを検査単位毎に検査すること
により検査を高速化するとともに,検査を行なわない検
査単位の領域でプログラムの実行を中断し,検査手段を
呼び出す命令を無操作命令に書き換えることにより検査
プログラムの抑止,再開をプログラムの任意の箇所で容
易に行えるようにした。また,さらに,デバッガにより
プログラム言語が備える検査手段のライブラリを制御す
るようにして,ライブラリの検査プログラムのみにより
検査することによりチェック論理の二重化を防ぐように
した。
【0023】図1は本発明の基本構成を示す。図1にお
いて,1はソースプログラムである。
いて,1はソースプログラムである。
【0024】2はコンパイラである。3はデバッガであ
る。4はデバッグの処理を表す。
る。4はデバッグの処理を表す。
【0025】ソースプログラム1において,5はデバッ
ガの起動と,検査プログラムを指定する記述である。
5’は中断点を指定する記述である。
ガの起動と,検査プログラムを指定する記述である。
5’は中断点を指定する記述である。
【0026】6はプログラムの記述を表す。10は検査
手段である。デバッグの処理3において,12は実行形
式プログラムであって,コンパイラ2によってソースプ
ログラム1をコンパイルして得られたオブジェクト命令
列に検査手段のライブラリ10から検査手段を呼び出す
命令を組み込んだものである。
手段である。デバッグの処理3において,12は実行形
式プログラムであって,コンパイラ2によってソースプ
ログラム1をコンパイルして得られたオブジェクト命令
列に検査手段のライブラリ10から検査手段を呼び出す
命令を組み込んだものである。
【0027】13は実行形式プログラム12における検
査手段を呼び出す命令列の記述である。14は検査手段
を呼び出す命令を表す。
査手段を呼び出す命令列の記述である。14は検査手段
を呼び出す命令を表す。
【0028】13”は検査の対象となる命令列である。
18は検査対象である。15はデバッグ情報であって,
デバッグに必要な情報である。
18は検査対象である。15はデバッグ情報であって,
デバッグに必要な情報である。
【0029】16は検査手段を呼び出す命令14の存在
する位置を表すものである。12’は実行形式プログラ
ムであって,検査を行わない場合の実行形式プログラム
である。
する位置を表すものである。12’は実行形式プログラ
ムであって,検査を行わない場合の実行形式プログラム
である。
【0030】13’は検査手段を呼び出す命令列であ
る。14’は無操作命令である(例えばNOP)。1
3''' は検査対象となる命令列である(13”と同じで
ある)。
る。14’は無操作命令である(例えばNOP)。1
3''' は検査対象となる命令列である(13”と同じで
ある)。
【0031】15’はデバッグ情報である。
【0032】
【作用】図1の本発明の基本構成の動作を説明する。ソ
ースプログラム1にデバッガを起動する記述(GODB
C等)と検査手段を指定する記述(SUBCHK等)を
する。また,必要に応じてプログラムの実行を中断する
箇所も指定する。
ースプログラム1にデバッガを起動する記述(GODB
C等)と検査手段を指定する記述(SUBCHK等)を
する。また,必要に応じてプログラムの実行を中断する
箇所も指定する。
【0033】コンパイラ2により,ソースプログラム1
をコンパイルする。ソースプログラム1をコパイルする
ことにより,検査手段ライブラリ10の指定された検査
手段を呼び出す命令列を含む実行形式プログラム12が
生成される。そこで,実行形式プログラム12を実行す
ると,検査手段のライブラリ10から指定した検査手段
(SUBCHK等)が呼び出され,プログラム検査がさ
れる。そして,検査手段を呼び出す命令14により検査
手段のライブラリ10から検査手段が呼び出される。検
査手段は検査の対象となる命令列13”に含まれる検査
対象(例えば,配列要素名の添字式の検査であれば,配
列要素名と添字式等)を求め,検査をする。
をコンパイルする。ソースプログラム1をコパイルする
ことにより,検査手段ライブラリ10の指定された検査
手段を呼び出す命令列を含む実行形式プログラム12が
生成される。そこで,実行形式プログラム12を実行す
ると,検査手段のライブラリ10から指定した検査手段
(SUBCHK等)が呼び出され,プログラム検査がさ
れる。そして,検査手段を呼び出す命令14により検査
手段のライブラリ10から検査手段が呼び出される。検
査手段は検査の対象となる命令列13”に含まれる検査
対象(例えば,配列要素名の添字式の検査であれば,配
列要素名と添字式等)を求め,検査をする。
【0034】また,その箇所の検査を抑制するのであれ
ば,ソースプログラム1にその箇所の中断点(BREA
K POINT)を設定しておく。中断を指定した箇所
もしくはデバッガの判断により中断する箇所でプログラ
ムが中断されると,デバッガがその箇所に対応するプロ
グラムの命令列のプログラム検査をするかしないかを画
面上で問い合わせてくるので,その箇所のプログラム検
査をしない場合には,ユーザはデバッガ3によりその箇
所のプログラム検査を行わない旨の命令(SUBCHK
OFF等)のサブコマンドを入力する。その結果,実
行形式プログラム12’に示すように,その箇所を検査
する検査手段を呼び出す命令列13’の検査手段を呼び
出す命令を無操作命令(NOP)に書き換える。
ば,ソースプログラム1にその箇所の中断点(BREA
K POINT)を設定しておく。中断を指定した箇所
もしくはデバッガの判断により中断する箇所でプログラ
ムが中断されると,デバッガがその箇所に対応するプロ
グラムの命令列のプログラム検査をするかしないかを画
面上で問い合わせてくるので,その箇所のプログラム検
査をしない場合には,ユーザはデバッガ3によりその箇
所のプログラム検査を行わない旨の命令(SUBCHK
OFF等)のサブコマンドを入力する。その結果,実
行形式プログラム12’に示すように,その箇所を検査
する検査手段を呼び出す命令列13’の検査手段を呼び
出す命令を無操作命令(NOP)に書き換える。
【0035】その結果,実行形式プログラム12’を実
行する過程において,検査手段を呼び出す命令が無操作
命令(NOP)なので検査手段が呼び出されることがな
くプログラム検査は抑止される。
行する過程において,検査手段を呼び出す命令が無操作
命令(NOP)なので検査手段が呼び出されることがな
くプログラム検査は抑止される。
【0036】本発明によれば,プログラム検査の抑止と
再開を簡単に行うことができる。また,検査プログラム
もデバッガの検査プログラムでなく,プログラム言語に
備えられた検査プログラムライブラリの検査プログラム
のみを使用するので,プログラム検査の二重化をなくす
ことができる。また,実行形式プログラムの検査の対象
となる命令列に含まれる検査対象のみを検査するので検
査範囲が限定され,配列,定義変数,引数等の検査の対
象を必要とするもののみを行う。そのため,検査を必要
としないものについは検査することがないので,検査が
高速化される。
再開を簡単に行うことができる。また,検査プログラム
もデバッガの検査プログラムでなく,プログラム言語に
備えられた検査プログラムライブラリの検査プログラム
のみを使用するので,プログラム検査の二重化をなくす
ことができる。また,実行形式プログラムの検査の対象
となる命令列に含まれる検査対象のみを検査するので検
査範囲が限定され,配列,定義変数,引数等の検査の対
象を必要とするもののみを行う。そのため,検査を必要
としないものについは検査することがないので,検査が
高速化される。
【0037】また,ユーザが検査を必要とする箇所のみ
ユーザが指定して検査でき,しかも検査手段を呼び出す
命令列は同じような形式のものを繰り返して使用でき,
検査を抑止するための命令の設定方法も簡単である。
ユーザが指定して検査でき,しかも検査手段を呼び出す
命令列は同じような形式のものを繰り返して使用でき,
検査を抑止するための命令の設定方法も簡単である。
【0038】
【実施例】図2は本発明の実施例を説明するためのソー
スプログラムの例である。図2において,21はソース
プログラムであって,フォートラン言語である。
スプログラムの例である。図2において,21はソース
プログラムであって,フォートラン言語である。
【0039】A.FORTはファイル名である。22は
プログラム名A.FORTに対してデバッガを使用し,
GODBG,UNDEF,SUBCHK,ARGCHK
をオペランドとして,コンパイル−結合編集−デバッグ
することの記述である。UNDEF(未定義変数検
査),SUBCHK(添字範囲検査),ARGCHK
(引数検査)を実行時に行うことの指示である。
プログラム名A.FORTに対してデバッガを使用し,
GODBG,UNDEF,SUBCHK,ARGCHK
をオペランドとして,コンパイル−結合編集−デバッグ
することの記述である。UNDEF(未定義変数検
査),SUBCHK(添字範囲検査),ARGCHK
(引数検査)を実行時に行うことの指示である。
【0040】23は配列名Aの添字式Iを1から100
まで1ずつインクリメントしながら変数Tに対して配列
要素の値A(I)を順次加算するプログラムである。配
列要素名A(I)はI=1から100まで定義されてい
る。
まで1ずつインクリメントしながら変数Tに対して配列
要素の値A(I)を順次加算するプログラムである。配
列要素名A(I)はI=1から100まで定義されてい
る。
【0041】25はコンパイラである。28はオブジェ
クトプログラムである。図3は本発明の実施例を説明す
るためのオブジェクトプログラムの例であって,図2の
ソースプログラムをコンパイルした例を示す。
クトプログラムである。図3は本発明の実施例を説明す
るためのオブジェクトプログラムの例であって,図2の
ソースプログラムをコンパイルした例を示す。
【0042】図3において,28はオブジェクトプログ
ラムであって,コンパイラにより生成されるものであ
る。図2のソースプログラム21のようにGODBGオ
ペランド指定の場合には,オブジェクト命令列の他にデ
バッグ情報が生成される。
ラムであって,コンパイラにより生成されるものであ
る。図2のソースプログラム21のようにGODBGオ
ペランド指定の場合には,オブジェクト命令列の他にデ
バッグ情報が生成される。
【0043】30はUNDEF(未定義変数検査)を呼
び出す命令列である。以下,命令列30をCALL♯U
NDEF (T)と称することとする。 第1行「L15,=V(♯UNDEF)」はUNDEF
名の検査手段のあるアドレスをレジスタ15に設定する
命令である。
び出す命令列である。以下,命令列30をCALL♯U
NDEF (T)と称することとする。 第1行「L15,=V(♯UNDEF)」はUNDEF
名の検査手段のあるアドレスをレジスタ15に設定する
命令である。
【0044】第2行「LA 1,パラメータリスト」は
パラメータリストの番地をレジスタ1に設定する命令で
ある。 第3行「BALR 14,15」はレジスタ15に設定
されているアドレスに分岐し,その処理を終了したらレ
ジスタ15に分岐し,その処理を終了したらレジスタ1
4に設定されているアドレスに戻ることを指示する命令
である。レジスタ15に設定されているアドレスにUN
DEFCHKが存在する。
パラメータリストの番地をレジスタ1に設定する命令で
ある。 第3行「BALR 14,15」はレジスタ15に設定
されているアドレスに分岐し,その処理を終了したらレ
ジスタ15に分岐し,その処理を終了したらレジスタ1
4に設定されているアドレスに戻ることを指示する命令
である。レジスタ15に設定されているアドレスにUN
DEFCHKが存在する。
【0045】31はUNSUB名称の未定義変数検査と
添字検査を行うプログラムを呼び出すプログラムであ
る。命令列31をCALL♯UNSUB(A(I))と
称することとする。UNSUBはUNDEFの検査とS
UBCHKの検査の双方を行うことを表す。
添字検査を行うプログラムを呼び出すプログラムであ
る。命令列31をCALL♯UNSUB(A(I))と
称することとする。UNSUBはUNDEFの検査とS
UBCHKの検査の双方を行うことを表す。
【0046】プログラムの記述の意味は,呼び出す検査
手段がことなるだけで,CALL♯UNDEF (T)
(30)と同様である。32は検査対象の命令列である。
手段がことなるだけで,CALL♯UNDEF (T)
(30)と同様である。32は検査対象の命令列である。
【0047】33は検査対象の命令列に含まれる検査対
象(シンボル)である。35はデバッグ情報であって,
GODBGオペランド指定の場合に生成されるものであ
り,デバッガが使用する情報列である。
象(シンボル)である。35はデバッグ情報であって,
GODBGオペランド指定の場合に生成されるものであ
り,デバッガが使用する情報列である。
【0048】図4は図3のデバッグ情報の詳細である。
40はシンボル情報のテーブルであって,ソースプログ
ラム21で使用されている変数,配列名等(A,B,・
・・,T等の属性情報)のリストである(本発明では使
用しない)。
40はシンボル情報のテーブルであって,ソースプログ
ラム21で使用されている変数,配列名等(A,B,・
・・,T等の属性情報)のリストである(本発明では使
用しない)。
【0049】41は中断点情報であって,中断点の相対
アドレスである。BREAK10,BREAK42等は
相対番地10,42で中断することを表す。42は検査
手段を呼び出す命令(BALR命令)の相対番地であ
る。BALR命令が相対番地18と28にあることを示
す。
アドレスである。BREAK10,BREAK42等は
相対番地10,42で中断することを表す。42は検査
手段を呼び出す命令(BALR命令)の相対番地であ
る。BALR命令が相対番地18と28にあることを示
す。
【0050】図5は本発明の実施例構成である。図5に
おいて,21はソースプログラムである。
おいて,21はソースプログラムである。
【0051】25はコンパイラである。26はコンパイ
ルの処理を表す。28はコンパイルして得られたオブジ
ェクトプログラムであり,オブジェクト命令列である。
ルの処理を表す。28はコンパイルして得られたオブジ
ェクトプログラムであり,オブジェクト命令列である。
【0052】35はデバッグ情報である。45は検査手
段のライブラリであって,各種検査手段を備えるもので
ある。リンケージエディタ(UNIXではld)によっ
て検査手段のライブラリ45の検査手段がオブジェクト
プログラム28に結合される。
段のライブラリであって,各種検査手段を備えるもので
ある。リンケージエディタ(UNIXではld)によっ
て検査手段のライブラリ45の検査手段がオブジェクト
プログラム28に結合される。
【0053】46は結合編集手段であって,オブジェク
トプログラム28,デバッグ情報35,検査手段のライ
ブラリ45の検査手段を結合して実行形式のロードモジ
ュール55を作成するものである。
トプログラム28,デバッグ情報35,検査手段のライ
ブラリ45の検査手段を結合して実行形式のロードモジ
ュール55を作成するものである。
【0054】50はデバッガである。51はデバッガ用
サブコマンドであって,デバッグに入力するサブコマン
ドを表す。
サブコマンドであって,デバッグに入力するサブコマン
ドを表す。
【0055】52はデバッガ50を使用してロードモジ
ュール55をデバッグする処理を表す(GODBG命令
によりコンパイラ25がデバッガを呼び出す)。55は
オブジェクト命令列28,各種検査手段を結合した実行
形式のロードモジュールである。
ュール55をデバッグする処理を表す(GODBG命令
によりコンパイラ25がデバッガを呼び出す)。55は
オブジェクト命令列28,各種検査手段を結合した実行
形式のロードモジュールである。
【0056】60はデバッグ結果である。図5の構成の
動作を説明する。ソースプログラム21をコンパイルし
てオブジェクトプログラム28を得る。ソースプログラ
ム21に検査指示があればデバッグ情報35も合わせて
生成される。結合編集手段46はオブジェクト命令列2
8を結合編集し,さらに検査手段のライブラリ45より
必要な検査手段を取り出してオブジェクトプログラムの
命令列28に組み込み,ロードモジュール55を生成す
る。
動作を説明する。ソースプログラム21をコンパイルし
てオブジェクトプログラム28を得る。ソースプログラ
ム21に検査指示があればデバッグ情報35も合わせて
生成される。結合編集手段46はオブジェクト命令列2
8を結合編集し,さらに検査手段のライブラリ45より
必要な検査手段を取り出してオブジェクトプログラムの
命令列28に組み込み,ロードモジュール55を生成す
る。
【0057】デバッガ50とデバッガ用サブコマンド5
1の入力によりロードモジュール55に対してデバッグ
を行う。デバッグの実行論理の前提は次の通りである。
1の入力によりロードモジュール55に対してデバッグ
を行う。デバッグの実行論理の前提は次の通りである。
【0058】ユーザはSUBCHK ONを入力するこ
とによりデバッガはSUBCHKを有効とする。また,
SUBCHK OFFとすることによりSUBCHKを
無効とする。同様にUNDEF ON,ARGCHK
ONでそれぞれの検査プログラムが有効となり,UND
EF OFF,ARGCHK OFFで無効となる。
とによりデバッガはSUBCHKを有効とする。また,
SUBCHK OFFとすることによりSUBCHKを
無効とする。同様にUNDEF ON,ARGCHK
ONでそれぞれの検査プログラムが有効となり,UND
EF OFF,ARGCHK OFFで無効となる。
【0059】初期状態ではSUBCHK,UNDEF,
ARGCHKが有効であるとする。大きさ引継ぎ配列の
場合,最後の次元のSUBCHKを行わない(例えば,
A((I),(J),(K))の場合,I,Jについて
は検査するがKについては検査しない)。
ARGCHKが有効であるとする。大きさ引継ぎ配列の
場合,最後の次元のSUBCHKを行わない(例えば,
A((I),(J),(K))の場合,I,Jについて
は検査するがKについては検査しない)。
【0060】コンパイラにおいて,検査手段を呼び出す
命令を使用するので,SUBCHK,UNDEF,AR
GCHKを実行しない場合には,図5のデバッグ52の
処理はない。
命令を使用するので,SUBCHK,UNDEF,AR
GCHKを実行しない場合には,図5のデバッグ52の
処理はない。
【0061】図6,図7により本発明のデバッグの処理
の実施例を説明する。図6は本発明の検査抑止方法の実
施例である。図6において,70はCALL#SUBC
HKの命令列(SUBCHK)である。
の実施例を説明する。図6は本発明の検査抑止方法の実
施例である。図6において,70はCALL#SUBC
HKの命令列(SUBCHK)である。
【0062】71はBALR命令である。75はCAL
L#SUBCHK(70)のBALR命令をNOPに書
き換えたものである。
L#SUBCHK(70)のBALR命令をNOPに書
き換えたものである。
【0063】72はNOP(無操作命令)である。本発
明では,検査を抑止する場合には,デバッガに対してサ
ブコマンドを入力することにより,ソースプログラム言
語にオプションとして用意されている検査ライブラリの
検査手段を呼び出す命令を図示のようにNOP命令に書
き換えるようにする。
明では,検査を抑止する場合には,デバッガに対してサ
ブコマンドを入力することにより,ソースプログラム言
語にオプションとして用意されている検査ライブラリの
検査手段を呼び出す命令を図示のようにNOP命令に書
き換えるようにする。
【0064】図7は本発明のデバッグの実行論理を示す
フローチャートの例である。 S1 実行形式プログラムの検査対象の命令列から検査
対象(配列要素名,添字式,未定義変数,引数等)を求
める。
フローチャートの例である。 S1 実行形式プログラムの検査対象の命令列から検査
対象(配列要素名,添字式,未定義変数,引数等)を求
める。
【0065】S2 求めた検査対象について判定する
(添字範囲は定義された範囲内にあるか等)。 S3 デバッガは指定された中断点で実行を中断する。
(添字範囲は定義された範囲内にあるか等)。 S3 デバッガは指定された中断点で実行を中断する。
【0066】S4 中断点の命令列に対して検査を行わ
ない場合には,S7に進む。中断点の命令列に対して検
査を行う場合にはS5に進む。検査を抑止する時は,検
査を行わない旨のサブコマンドを入力する。サブコマン
ドは,例えば,UNDEFOFF,UNSUB OF
F,ARGCHK OFF等である。
ない場合には,S7に進む。中断点の命令列に対して検
査を行う場合にはS5に進む。検査を抑止する時は,検
査を行わない旨のサブコマンドを入力する。サブコマン
ドは,例えば,UNDEFOFF,UNSUB OF
F,ARGCHK OFF等である。
【0067】S5,S6 検査を行う場合には,命令列
から検査対象を求め判定する。 S7 検査を抑止するサブコマンド(UNDEF OF
F,UNSUB OFF,ARGCHK OFF等)が
入力された時は,オブジェクトプログラムの命令列のB
ALR命令をNOP(無操作命令)に書き換える。
から検査対象を求め判定する。 S7 検査を抑止するサブコマンド(UNDEF OF
F,UNSUB OFF,ARGCHK OFF等)が
入力された時は,オブジェクトプログラムの命令列のB
ALR命令をNOP(無操作命令)に書き換える。
【0068】S8 必要な検査を全て行ったか判定す
る。全て検査を行っていなければ,S1に戻る。全て検
査を終了していればS9に進む。 S9 検査結果を出力し,処理を終了する。
る。全て検査を行っていなければ,S1に戻る。全て検
査を終了していればS9に進む。 S9 検査結果を出力し,処理を終了する。
【0069】図8は本発明の実施例である。図8におい
て,80はメインプログラム(MAIN)である。
て,80はメインプログラム(MAIN)である。
【0070】81はSUBCHKの呼び出し命令列であ
る。82はBALR命令である。83はSUBCHKの
呼び出し命令例である。
る。82はBALR命令である。83はSUBCHKの
呼び出し命令例である。
【0071】84はBALR命令である。85はサブル
ーチンのプログラム(SUB1)である。86はサブル
ーチン1(SUB1)であって,ARGCHKを呼び出
す命令列である。
ーチンのプログラム(SUB1)である。86はサブル
ーチン1(SUB1)であって,ARGCHKを呼び出
す命令列である。
【0072】87はBALR命令である。88はサブル
ーチン2(SUB2)であって,ARGCHKの呼び出
し命令列である。
ーチン2(SUB2)であって,ARGCHKの呼び出
し命令列である。
【0073】91はBALR命令である。92はSUB
CHKの呼び出し命令例である。93はBALR命令で
ある。
CHKの呼び出し命令例である。93はBALR命令で
ある。
【0074】図8の構成において,メインプログラム8
0のCALL SUB1の記述によりSUB1(85)
が呼び出されて実行される。SUB1(85)の記述に
おけるCALL SUB2の記述によりSUB2が呼び
出され実行される。
0のCALL SUB1の記述によりSUB1(85)
が呼び出されて実行される。SUB1(85)の記述に
おけるCALL SUB2の記述によりSUB2が呼び
出され実行される。
【0075】メインプログラムのSUBCHKの検査を
抑止する指示をすることにより,メインプログラムのS
UBCHKを呼び出すBALR命令82,BALR命令
84がNOP命令に書き換えられ,検査が抑止される。
同時に,SUB2(88)のSUBCHKの呼び出し命
令列のBALR命令もNOP命令に書き換えられる。
抑止する指示をすることにより,メインプログラムのS
UBCHKを呼び出すBALR命令82,BALR命令
84がNOP命令に書き換えられ,検査が抑止される。
同時に,SUB2(88)のSUBCHKの呼び出し命
令列のBALR命令もNOP命令に書き換えられる。
【0076】同様に,ARGCHK検査を抑止する場合
には,SUB1(85)のARGCHKの呼び出し命令
列のBALR命令87およびSUB2(88)のARG
CHKの呼び出し命令列のBALR命令がNOP命令に
書き換えられ,メインプログラムおよび関連するサブル
ーチンのプログラムの検査が全て抑止される。
には,SUB1(85)のARGCHKの呼び出し命令
列のBALR命令87およびSUB2(88)のARG
CHKの呼び出し命令列のBALR命令がNOP命令に
書き換えられ,メインプログラムおよび関連するサブル
ーチンのプログラムの検査が全て抑止される。
【0077】
【発明の効果】本発明によれば,プログラム検査の抑止
と再開を簡単に行うことができ,実行形式プログラムの
検査対象となる命令列に含まれる配列名,未定義変数,
引数等の必要な検査対象のみについて検査するので検査
が高速化される。
と再開を簡単に行うことができ,実行形式プログラムの
検査対象となる命令列に含まれる配列名,未定義変数,
引数等の必要な検査対象のみについて検査するので検査
が高速化される。
【0078】また,検査プログラムもデバッガの検査プ
ログラムでなく,プログラム言語に備えられた検査プロ
グラムライブラリの検査プログラムのみを使用するの
で,プログラム検査の二重化をなくすことができる。
ログラムでなく,プログラム言語に備えられた検査プロ
グラムライブラリの検査プログラムのみを使用するの
で,プログラム検査の二重化をなくすことができる。
【0079】従って,ユーザに自由に中断点を設定して
プログラム検査の抑止,再開を柔軟に行うことができる
ようになるとともに,検査も高速化される。そのため,
本発明によれば,プログラム検査の能率を大幅に向上さ
せることができる。
プログラム検査の抑止,再開を柔軟に行うことができる
ようになるとともに,検査も高速化される。そのため,
本発明によれば,プログラム検査の能率を大幅に向上さ
せることができる。
【図1】本発明の基本構成を示す図である。
【図2】ソースプログラムの例を示す図である。
【図3】オブジェクトプログラムの例を示す図である。
【図4】本発明のデバッグ情報の例を示す図である。
【図5】本発明の実施例構成を示す図である
【図6】本発明の検査抑止方法の実施例を示す図であ
る。
る。
【図7】本発明のデバッグの実行論理のフローチャート
である。
である。
【図8】本発明の実施例を示す図である。
【図9】従来のプログラム検査のための構成を示す図で
ある。
ある。
【図10】従来のプログラム検査方法である。
1:ソースプログラム
2:コンパイラ
3:デバッガ
4:デバックの処理
5:デバッガの起動と検査プログラムを指定する記述
5’:中断点を指定する記述
6:プログラムの記述
10:検査手段のライブラリ
12:実行形式プログラム
13:検査手段を呼び出す命令列
14:検査手段を呼び出す命令
15:デバッグ情報
16:検査手段を呼び出す命令の位置
12’:実行形式プログラム
13’:検査手段を呼び出す命令列
14’:無操作命令(NOP)
15’:デバッグ情報
17:検査結果出力
フロントページの続き
(56)参考文献 特開 平1−211135(JP,A)
特開 平4−306741(JP,A)
特開 平2−15336(JP,A)
特開 平2−148330(JP,A)
特開 平3−174630(JP,A)
特開 平4−333935(JP,A)
特開 平5−204705(JP,A)
(58)調査した分野(Int.Cl.7,DB名)
G06F 11/28 - 11/34
Claims (2)
- 【請求項1】 プログラム検査方法において、 検査手段のライブラリおよびデバッガを備え、プログラ
ム検査をしてコンパイルすることにより得られるオブジ
ェクトプログラムの命令列に該ライブラリから検査手段
を呼び出す命令とデバッグ情報が組み込まれた実行形式
プログラムに対して、 該デバッグ情報から該当する中断点において該当する検
査手段を呼び出し、 検査単位の命令列の領域に含まれる検査対象のみを検査
単位毎に検査し、検査を行なわない場合には、検査を行
なわない検査単位の領域でプログラムの実行を中断し、
検査手段を呼び出す該命令を無操作命令に書き換えるこ
とにより該領域の検査を抑止することを特徴とするプロ
グラム検査方法。 - 【請求項2】該検査手段が配列要素名の添字式の検査、
未定義変数の検査手段もしくは引数の検査手段であるこ
とを特徴とする請求項1に記載のプログラム検査方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP05572695A JP3372387B2 (ja) | 1995-03-15 | 1995-03-15 | プログラム検査方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP05572695A JP3372387B2 (ja) | 1995-03-15 | 1995-03-15 | プログラム検査方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH08249208A JPH08249208A (ja) | 1996-09-27 |
JP3372387B2 true JP3372387B2 (ja) | 2003-02-04 |
Family
ID=13006870
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP05572695A Expired - Fee Related JP3372387B2 (ja) | 1995-03-15 | 1995-03-15 | プログラム検査方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3372387B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011159084A (ja) * | 2010-01-29 | 2011-08-18 | Toshiba Corp | 情報処理装置及びプログラム書き込み方法 |
CN108415840A (zh) * | 2018-03-14 | 2018-08-17 | 百度在线网络技术(北京)有限公司 | 修复函数缺陷的方法、装置及服务器 |
-
1995
- 1995-03-15 JP JP05572695A patent/JP3372387B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH08249208A (ja) | 1996-09-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5313387A (en) | Re-execution of edit-compile-run cycles for changed lines of source code, with storage of associated data in buffers | |
US5201050A (en) | Line-skip compiler for source-code development system | |
EP0753814B1 (en) | Determining dynamic properties of programs | |
JP2003323318A (ja) | 特殊名付き関数によるソフトウェア区切り点の実行装置及びその方法 | |
JP3372387B2 (ja) | プログラム検査方法 | |
EP0406028A2 (en) | Incremental compiler for source code development system | |
JP2007004516A (ja) | 組込みシステムのプログラムデバッグ方法 | |
Nielson et al. | Transformations on higher-order functions | |
JPH11110256A (ja) | プログラムデバッグ装置、プログラムデバッグ方法及びその方法を記録したコンピュータ読取り可能な記録媒体 | |
JP2672968B2 (ja) | デバッグ用ソースリスト出力処理方式 | |
JPS626260B2 (ja) | ||
JP2802128B2 (ja) | プログラム開発装置 | |
JP3019330B2 (ja) | コンパイル装置 | |
JPS6292032A (ja) | プログラムテスト方法 | |
JPH06119203A (ja) | デバック行削除装置 | |
JP2686801B2 (ja) | マイクロコンピュータのプログラム開発ツール | |
JP2006350676A (ja) | 組込みシステムのプログラムデバッグ方法 | |
JPS63178343A (ja) | 中断点の設定方式 | |
JP2002073370A (ja) | デバッグ支援装置およびその装置によるデバッグ方法 | |
JPH05216719A (ja) | デバッガのブレイク方法およびデバッガ | |
Berthaud et al. | Coupling virtual machines and system construction | |
JPH09305411A (ja) | コンパイル型プログラムのプログラム実行装置 | |
JPH05250221A (ja) | シミュレータ実行方式 | |
JPH10214180A (ja) | ソフトウェアの開発支援方法 | |
JPH0766343B2 (ja) | プログラムテスト装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20021105 |
|
LAPS | Cancellation because of no payment of annual fees |