JP3029368B2 - プログラム誤り検出方法および誤り検出装置 - Google Patents

プログラム誤り検出方法および誤り検出装置

Info

Publication number
JP3029368B2
JP3029368B2 JP5299950A JP29995093A JP3029368B2 JP 3029368 B2 JP3029368 B2 JP 3029368B2 JP 5299950 A JP5299950 A JP 5299950A JP 29995093 A JP29995093 A JP 29995093A JP 3029368 B2 JP3029368 B2 JP 3029368B2
Authority
JP
Japan
Prior art keywords
variable
program
assignment
variable type
statement
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 - Lifetime
Application number
JP5299950A
Other languages
English (en)
Other versions
JPH07152601A (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.)
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 JP5299950A priority Critical patent/JP3029368B2/ja
Publication of JPH07152601A publication Critical patent/JPH07152601A/ja
Application granted granted Critical
Publication of JP3029368B2 publication Critical patent/JP3029368B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】この発明はプログラムの誤り検出
方法および誤り検出装置に関し、特にプログラム実行時
にその誤りを検出するための誤り検出方法および誤り検
出装置に関する。
【0002】
【従来の技術】一般に、ソースプログラムを実行可能形
式に変換する際には、コンパイラによよって構文が解析
され、これによって文法的な誤り(シンタックスエラ
ー)の検出が行われる。このため、文法的な誤りについ
てはプログラム実行前に検出でき、その修正を簡単に行
うことができる。
【0003】しかし、文法的な誤りが無くても、プログ
ラムを実際に実行すると、正しくない結果が得られた
り、存在しないメモリ番地を参照したり、そこにデータ
を書き込むといった状態に陥る場合がある。これらは、
ポインタ変数を使用してコーディングされたプログラム
に多く発生する。すなわち、プログラム実行時の誤り
は、例えば、添字の値が配列の添字の範囲を越えたり、
あるいはポインタを変更するための演算の誤りなどによ
るポインタ変数のエラーによって引き起こされる。
【0004】このようなブログラム誤りを検出する方法
としては、実際にプログラムにデータを流して実行さ
せ、その際の結果や過程を調べる動的テストが知られて
いる。しかしながら、この動的テストを実行するための
従来のテストツールは、プログラム実行が終了するまで
の時間、CPUの使用量、メモリの内容や使用量、プロ
グラムの実行の流れ、プログラムの出力結果、などから
総合的にエラーを発見するものであるので、エラーの原
因解明には多くの時間を要するという欠点がある。
【0005】
【発明が解決しようとする課題】このため、例えばポイ
ンタ変数のエラーによって異なる変数の型同士でデ―タ
の代入等が行なわれても、それを発見するためには多く
の時間が必要とされた。したがって、プログラムの開発
効率の低下が引き起こされていた。
【0006】
【0007】この発明はこのような点に鑑みてなされた
もので、ポインタ変数のエラーによって異なる変数の型
同士でデ―タの代入が行われることによるプログラム実
行時のエラーを容易に発見できるようにし、プログラム
開発効率の向上を実現できるプログラム誤り検出方法お
よび誤り検出装置を提供することを目的とする。
【0008】
【課題を解決するための手段および作用】この発明によ
るプログラムの誤り検出方法は、ソースプログラムの宣
言文によって宣言される変数の変数型毎にそれぞれ異な
る変数型識別子を割り当て、前記ソースプログラムの代
入文によって指定される代入先変数と代入元変数の変数
型にそれぞれ対応する前記変数型識別子を比較して、そ
れら変数型識別子の一致の有無に応じてエラー発生を提
示するプログラムコードを、前記ソースプログラムに付
加し、前記プログラムコードを含む前記ソースプログラ
ムを実行可能形式に変換し、前記付加されたプログラム
コードによって変数型の違いによるプログラム実行時の
誤りの発生を検出することを特徴とする。
【0009】この誤り検出方法においては、ソースプロ
グラムを実行可能形式に変換する際に、変数の代入文に
変数型条件の非成立を検出するためのコードが自動的に
ソースプログラムに付加される。このコードが付加され
たソースプログラムをコンパイルして実行すると、代入
文の実行毎に変数型が調べられ、異なる変数型へのデ―
タ代入等のエラーが発見される。これによって容易にプ
ログラム実行時のエラーを発見できる。したがって、プ
ログラムの効率良い開発が可能となる。
【0010】
【実施例】以下、図面を参照してこの発明の実施例を説
明する。図1には、この発明の一実施例に係わるエラー
検出方法を実現するためのコンパイラの構成が示されて
いる。このコンパイラ12は、ソースプログラムコード
11を実行可能形式すなわちオブジェクトコード13に
変換するトランスレータであり、コンピュータシステム
のメモリ上にロードされて実行される。ソースプログラ
ムコード11は、ポインタ変数を用いてコーディングさ
れたものである。
【0011】コンパイラ12は、字句解析、構文解析、
意味解析、およびコード生成ユニットを含むトランレー
タ機能に加え、この発明のエラー検出方法を実現するた
めの機能要素として、変数型識別子割当て部14、チェ
ックコード付加部15、およびエラー検出コード付加部
16を備えている。
【0012】これら変数型識別子割当て部14、チェッ
クコード付加部15、およびエラー検出コード付加部1
6は、それぞれコンパイル時に実行され、次のような処
理を行う。
【0013】すなわち、変数型識別子割当て部14は、
ソ―スプログラムコ―ド11からオブジェクトコード1
3が生成される際に、ソースプログラムコード11の中
で使われている変数の型を調べ、それぞれに一意に識別
子を割り振る。
【0014】この場合、変数型識別子割当て部14は、
コンパイラ12によってメモリ上に確保された変数格納
領域と識別子格納領域に、変数およびその変数に割り当
てた識別子をそれぞれ格納する。
【0015】チェックコード付加部15は、ソ―スプロ
グラムコ―ド11の中に記述されている変数への代入文
に対し、代入される側の変数、および代入する側の変数
に付けられた識別子をチェックするプログラムコードを
付加する。このプログラムコードは、代入文のポインタ
変数に対応する識別子をメモリ上の識別子格納領域から
リードする。
【0016】エラー検出コード付加部16は、チェック
コード付加部15によって付加されたプログラムコード
の後に、識別子が一致しなかった場合に、警告を行な
う、あるいは警告を行なった後実行を中止するなど、プ
ログラム実行時の誤りを検出したことを利用者に提示す
るプログラムコードを付加する。
【0017】このプログラムコードは、識別子格納領域
からリードされた識別子同志を比較し、それらが一致し
ない時にエラー発生を検出する。図2には、変数型識別
子割当て部14の処理手順が模式的に示されている。
【0018】すなわち、コンパイラ12には変数の型と
識別子の対応関係を示す対応表21が設けられており、
変数型識別子割当て部14による識別子割当ては、その
対応表21を利用して行われる。
【0019】すなわち、、変数型識別子割当て部14
は、対応表21をサーチして、ソースプログラムコード
11中の変数宣言文によって宣言された変数の変数型に
対応する識別子を検出し、識別子と変数をメモリ上に確
保した識別子格納領域および変数格納領域に格納する。
図においては、4つの変数宣言文、つまり、 変数「A」,変数型「い」の宣言文…(1) 変数「B」,変数型「か」の宣言文…(2) 変数「C」,変数型「こ」の宣言文…(3) 変数「D」,変数型「い」の宣言文…(4) について、それぞれ識別子割り当てを行った時の様子が
示されている。
【0020】対応表21には、変数型「あ」〜「け」に
それぞれ対応して異なる識別子「1」〜「9」が登録さ
れており、(1)の宣言文については識別子「2」およ
び変数「A」がそれぞれ識別子格納領域24および変数
格納領域25に格納される。同様に、(2)の宣言文に
ついては識別子「6」および変数「B」がそれぞれ識別
子格納領域26および変数格納領域27に格納される。
【0021】また、(3)の宣言文のように対応表21
に登録されてない変数型については、新たな識別子(こ
こでは、「10」)が発生され、それが対応表21に登
録されると共に、識別子「10」および変数「C」がそ
れぞれ識別子格納領域22および変数格納領域23に格
納される。
【0022】この場合、識別子としては、新たな識別子
を発生する度に+1カウントアップするカウンタの値を
利用することができる。これにより、識別子の重複を招
くこと無く、変数型毎に異なる識別子が対応表21に登
録される。
【0023】さらに、(4)の宣言文については、変数
「D」の変数型が変数「A」と同じ「い」であるため、
その「い」に対応する識別子「2」および変数「D」が
それぞれ識別子格納領域28および変数格納領域29に
格納される。
【0024】次に、図3のフローチャートを参照して、
コンパイラ12による変換処理の手順を説明する。読み
込まれたソ―スプログラムコ―ド11は行単位で順次解
析され、変数の宣言があるか否か、変数への代入文があ
るか否かが検出される(ステップS11,S12,S1
9)。変数の宣言が検出されると、コンパイラ12は、
まず、前述の変数格納領域および識別子格納領域をメモ
リ上に確保する(ステップS13)。この場合、識別子
格納領域は変数格納領域の一部としてメモリ上に確保さ
れ、変数格納領域および識別子格納領域は同一ポインタ
変数(アドレス)によって指定される。
【0025】次いで、変数型識別子割当て部14は、対
応表21を調べ(ステップ14)、変数の型が対応表2
1の中に登録されている場合には、その変数型に対応す
る識別子と変数とをそれぞれ識別子格納領域および変数
格納領域に格納する(ステップS15,S16)。
【0026】一方、前述の(3)の宣言文のように対応
表21の中に登録されていない変数型の場合には、その
型に新たな識別子を割り当て、対応表21に登録すると
共に(ステップS17)、新たに登録した識別子と変数
とをそれぞれ識別子格納領域および変数格納領域に格納
する(ステップS17,S18)。
【0027】また、変数への代入文が検出されると、チ
ェックコード付加部15は、代入する変数に対応する識
別子格納領域および代入される変数に対応する識別子格
納領域からそれぞれ読み出して比較するチェックコード
を代入文に付加してソースコードに挿入する(ステップ
S20)。
【0028】この後、エラー検出コード付加部16は、
チェックコードによって識別子の不一致が検出された際
に警告メッセ―ジ等を出力するコ―ドを挿入する(ステ
ップS21)。
【0029】次いで、コンパイラ12によって実行可能
な形式に変換される(ステップS22)。これらステッ
プS11〜S22の処理は、ソースプログラム11のフ
ァイルの終了行まで繰り返し実行される(ステップS2
3)。
【0030】図4には、変数型識別子割当て部14、チ
ェックコード付加部15、およびエラー検出コード付加
部16によって処理が施された後のソースプログラムコ
ード11の内容の一例が示されている。
【0031】ここでは、行61〜64に前述の(1)〜
(4)の変数の宣言文があり、行65、行66に変数の
代入文が存在する場合が想定されている。この場合、行
66については、変数Dの格納位置を指定する変数ポイ
ンタ*Dの値(アドレス)で実際に指定される領域に格
納されている識別子と、代入される変数Aの格納位置を
指定する変数ポインタ*Aの値(アドレス)によって実
際に指定される領域に格納されている識別子とを比較
し、一致しなければエラーメッセージをプリントアウト
してから、代入文を実行し、一致すればエラーメッセー
ジを出さずに、そのまま代入文を実行するコード、すな
わち、 if(A.識別子!=D.識別子) print“AとDの識別子が一致しません”; A.値=D.値 が挿入される。
【0032】次に、図5のフローチャートを参照して、
実行可能形式に変換されたプログラムが実行される時の
流れを説明する。実行可能形式に変換されたプログラム
の命令は逐次読み込まれ(ステップS41)、その命令
が代入命令であった場合には(ステップS42)、代入
する側の識別子と代入される側の識別子を調べ比較する
命令が実行される(ステップS43)。
【0033】ポインタ変数のエラーなどにより、識別子
が一致しなかった場合には(ステップS44)、識別子
が一致しないという警告を行なう命令が実行される(ス
テップS45)。そして、その後、代入命令が実行され
る(ステップS46)。代入命令でなかった場合には、
その取り込んだ命令が実行される(ステップS47,S
48)。
【0034】以上のように、この実施例においては、ソ
ースプログラム11を実行可能形式に変換する際に、変
数の代入文に変数型条件の非成立を検出するためのコー
ドがコンパイラ12によって自動的に付加される。
【0035】このコードが付加されたソースプログラム
を実行すると、代入文の実行毎に変数型がチェックさ
れ、異なる変数型へのデ―タ代入等のエラーが発見され
る。異なる変数の型同士でデ―タの代入は、配列の添字
の範囲を越えたアクセス、あるいはデ―タをアクセスす
る際のポインタを変更する際の演算の誤りなどのポイン
タ変数エラーによるものであるので、これによって容易
にプログラム実行時のエラーを発見できる。したがっ
て、プログラムの効率良い開発が可能となる。
【0036】なお、図5では、識別子が一致しなかった
場合にも該当する代入命令を実行したが、図6のフロー
チャートに示されているように、識別子が不一致の場合
は、ステップS45でエラーメッセージによる警告を行
った後、代入命令を実行せずに、プログラム実行をその
時点中止しても良い。また、エラーメッセージの提示形
式としては、プリントアウト、画面表示など種々の形式
が採用できることは勿論である。
【0037】
【発明の効果】以上説明したように、この発明によれ
ば、計算機プログラム中で用いる変数の型毎に識別子を
一意に割り振り、計算機プログラムの実行時には、変数
をアクセスする毎に、変数に付けられた識別子をチェッ
クして、識別子が一致しない場合には警告を行なうこと
により、計算機プログラム中の誤り検出を容易にし、計
算機プログラムの効率良い開発が可能となるなど、多大
なる効果が得られる。
【図面の簡単な説明】
【図1】この発明の一実施例に係わるプログラム誤り検
出方法を実現するためのコンパイラの構成を示すブロッ
ク図。
【図2】図1のコンパイラによって実行される処理を模
式的に示す図。
【図3】図1のコンパイラによるソースコードから実行
可能形式への変換動作を説明するフローチャート。
【図4】図3の変換動作においてソースコードに挿入さ
れるチェックコードの一例を示す図。
【図5】図1のコンパイラによって生成されたプログラ
ム実行時の動作の一例を説明するフローチャート。
【図6】図1のコンパイラによって生成されたプログラ
ム実行時の動作の一例を説明するフローチャート。
【符号の説明】
11…ソ―スコ―ド、12…コンパイラ、13…オブジ
ャクトコード、14…変数型識別子割り当て部、15…
チェックコード付加部、16…エラー検出コード付加
部。
───────────────────────────────────────────────────── フロントページの続き (56)参考文献 特開 昭60−167043(JP,A) 特開 昭63−98031(JP,A) 特開 平3−34030(JP,A) 特開 平3−174630(JP,A) Borland Internati onal著「TURBO C++ PR OGRAMMER’S GUIDE」, 初版,1990年12月20日,株式会社ボーラ ンドジャパン,p.80−81,401,405 (58)調査した分野(Int.Cl.7,DB名) G06F 11/28 G06F 9/44 - 9/45 G06F 9/06

Claims (5)

    (57)【特許請求の範囲】
  1. 【請求項1】 ソースプログラムの宣言文によって宣言
    される変数の変数型毎にそれぞれ異なる変数型識別子を
    割り当て、 前記ソースプログラムの代入文によって指定される代入
    先変数と代入元変数の変数型にそれぞれ対応する前記変
    数型識別子を比較してそれら変数型識別子の一致の有無
    に応じてエラー発生を提示するプログラムコードを前記
    ソースプログラムに付加し、 前記プログラムコードを含む前記ソースプログラムを実
    行可能形式に変換し、 前記付加されたプログラムコードによって変数型の違い
    によるプログラム実行時の誤りの発生を検出することを
    特徴とするプログラムの誤り検出方法。
  2. 【請求項2】 ソースプログラムを解析してそのソース
    プログラムに含まれる変数の宣言文および変数への代入
    文を検出し、 前記変数の宣言文の検出に応答して、その宣言文によっ
    て宣言される変数格納領域および変数型識別子格納領域
    をメモリ上に確保し、 前記検出された宣言文によって宣言される変数およびそ
    の変数型に対応する変数型識別子を、前記確保された変
    数格納領域および変数型識別子格納領域にそれぞれ格納
    し、 前記変数の代入文の検出に応答して、その代入文によっ
    て指定される代入先変数と代入元変数にそれぞれ対応す
    る変数型識別子を前記変数型識別子格納領域から読み出
    して比較する第1プログラムコードと、変数型識別子の
    比較結果に基づいてエラー発生を提示する第2プログラ
    ムコードとを、前記ソースプログラムに付加し、 前記第1および第2プログラムコードを含む前記ソース
    プログラムを実行可能形式に変換し、 前記付加された第1および第2のプログラムコードによ
    って変数型の違いによるプログラム実行時の誤りの発生
    を検出することを特徴とするプログラムの誤り検出方
    法。
  3. 【請求項3】 ソースプログラムの宣言文によって宣言
    される変数の変数型毎にそれぞれ異なる変数型識別子を
    割り当てる手段と、 前記ソースプログラムの代入文によって指定される代入
    先変数と代入元変数の変数型にそれぞれ対応する前記変
    数型識別子を比較して、それら変数型識別子の一致の有
    無に応じてエラー発生を提示するプログラムコードを、
    前記ソースプログラムに付加する手段と、 前記プログラムコードを含む前記ソースプログラムを実
    行可能形式に変換する手段とを具備し、 前記付加されたプログラムコードよって変数型の違いに
    よるプログラム実行時の誤りの発生を検出することを特
    徴とする誤り検出装置。
  4. 【請求項4】 ソースプログラムを解析してそのソース
    プログラムに含まれる変数の宣言文および変数への代入
    文を検出する手段と、 前記変数の宣言文の検出に応答して、その宣言文によっ
    て宣言される変数格納領域および変数型識別子格納領域
    をメモリ上に確保する手段と、 前記検出された宣言文によって宣言される変数およびそ
    の変数型に対応する変数型識別子を、前記確保された変
    数格納領域および変数型識別子格納領域にそれぞれ格納
    する手段と、 前記変数の代入文の検出に応答して、その代入文によっ
    て指定される代入先変数と代入元変数にそれぞれ対応す
    る変数型識別子を前記変数型識別子格納領域から読み出
    す第1プログラムコードと、前記変数型識別子格納領域
    から読み出された代入先変数と代入元変数の変数型識別
    子を比較して、それら変数型識別子の一致の有無に応じ
    てエラー発生を提示する第2プログラムコードとを、前
    記ソースプログラムに付加する手段と、 前記第1および第2プログラムコードを含む前記ソース
    プログラムを実行可能形式に変換する手段とを具備し、 前記付加された第1および第2のプログラムコードによ
    って変数型の違いによるプログラム実行時の誤りの発生
    を検出することを特徴とする誤り検出装置。
  5. 【請求項5】 ソースプログラムを実行可能形式に変換
    するコンパイラと、 このコンパイラに設けられ、前記変換処理に先だって、
    前記ソースプログラムの宣言文によって宣言される変数
    の変数型毎にそれぞれ異なる変数型識別子を割り当てる
    手段と、 前記コンパイラに設けられ、前記変換処理に先だって、
    前記ソースプログラムの代入文によって指定される代入
    先変数と代入元変数の変数型にそれぞれ対応する前記変
    数型識別子を比較して、それら変数型識別子の一致の有
    無に応じてエラー発生を提示するプログラムコードを、
    前記ソースプログラムに付加する手段とを具備し、 変数型の違いによるプログラム実行時の誤りの発生を検
    出することを特徴とする 誤り検出装置。
JP5299950A 1993-11-30 1993-11-30 プログラム誤り検出方法および誤り検出装置 Expired - Lifetime JP3029368B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP5299950A JP3029368B2 (ja) 1993-11-30 1993-11-30 プログラム誤り検出方法および誤り検出装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP5299950A JP3029368B2 (ja) 1993-11-30 1993-11-30 プログラム誤り検出方法および誤り検出装置

Publications (2)

Publication Number Publication Date
JPH07152601A JPH07152601A (ja) 1995-06-16
JP3029368B2 true JP3029368B2 (ja) 2000-04-04

Family

ID=17878921

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5299950A Expired - Lifetime JP3029368B2 (ja) 1993-11-30 1993-11-30 プログラム誤り検出方法および誤り検出装置

Country Status (1)

Country Link
JP (1) JP3029368B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6968543B2 (en) 2000-03-10 2005-11-22 Fujitsu Limited Information processing apparatus
JP5073767B2 (ja) * 2010-02-10 2012-11-14 株式会社エクサ Cobolソースコードチェックプログラム、cobolソースコードチェックシステム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Borland International著「TURBO C++ PROGRAMMER’S GUIDE」,初版,1990年12月20日,株式会社ボーランドジャパン,p.80−81,401,405

Also Published As

Publication number Publication date
JPH07152601A (ja) 1995-06-16

Similar Documents

Publication Publication Date Title
US6353925B1 (en) System and method for lexing and parsing program annotations
US5313616A (en) Method for analyzing calls of application program by inserting monitoring routines into the executable version and redirecting calls to the monitoring routines
US8863101B2 (en) Compiler generator
US5860011A (en) Method and system for automatically checking computer source code quality based on rules
US6434742B1 (en) Symbol for automatically renaming symbols in files during the compiling of the files
US5909580A (en) Development system and methods with direct compiler support for detecting invalid use and management of resources and memory at runtime
US20030028364A1 (en) Development assistance for mixed-language sources
US7950005B2 (en) Method and apparatus for performing versioning for loop, method and apparatus for collecting array range check information in basic blocks, method for modifying array range check information, method for optimizing array range checks, method for generating codes for array range checks, method and apparatus for eliminating redundant array range checks, method for selecting array range checks, method for modifying array range checks, method for collecting array range checks, and method for determining handling of array range checks
US20060041867A1 (en) Method, apparatus and computer program product for implementing enhanced compiled breakpoint analysis
US6519765B1 (en) Method and apparatus for eliminating redundant array range checks in a compiler
US8042099B2 (en) Facilitating availability of object data types at runtime
US20040015747A1 (en) System and method for preventing software errors
US6330714B1 (en) Method and computer program product for implementing redundant lock avoidance
US5822589A (en) Method for locating errors in a computer program
CN114144764A (zh) 使用影子栈的栈跟踪
US7530060B1 (en) Methods and computer program product for optimizing binaries with coding style formalization
JP3062266B2 (ja) 支援装置
US6986126B2 (en) Method and apparatus for detecting violations of type rules in a computer program
JP3029368B2 (ja) プログラム誤り検出方法および誤り検出装置
JP4055197B2 (ja) プログラムに含まれる手続きの解析装置
US8769517B2 (en) Generating a common symbol table for symbols of independent applications
WO2022022279A1 (en) Systems, methods and media for dynamically shaped tensors using liquid types
JPH10312313A (ja) C言語の計算機プログラム検査処理方法およびプログラム記憶媒体
JP3077627B2 (ja) デバッグ方法およびデバッグプログラムを記録する記録媒体
JP3018783B2 (ja) コンパイル方式