JPH07271605A - C言語プログラムデバッグ方式 - Google Patents
C言語プログラムデバッグ方式Info
- Publication number
- JPH07271605A JPH07271605A JP6064779A JP6477994A JPH07271605A JP H07271605 A JPH07271605 A JP H07271605A JP 6064779 A JP6064779 A JP 6064779A JP 6477994 A JP6477994 A JP 6477994A JP H07271605 A JPH07271605 A JP H07271605A
- Authority
- JP
- Japan
- Prior art keywords
- memory area
- secured
- error
- argument
- checked whether
- 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
Landscapes
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】 (修正有)
【目的】C言語プログラム開発におけるソースコード中
のメモリ記述の誤りの検出を自動的に行う手段を与え
る。 【構成】ソースコードを読み込み(101)、文字型に定義
された変数のメモリ領域が確保されているかをチェック
する(102)。確保されている場合はその変数の登録を行
う(103)。確保されていない場合は、メモリ領域の内容
を不正に書き換える可能性をチェックし(104)、可能性
がある場合、さらにその変数が引数であるかをチェック
し(105)、引数でなければ誤りとし(107)、引数である場
合はそれ以前に登録されているかをチェックし(106)、
登録されていなければ誤りとする(107)。続いて、メイ
ンからサブルーチンへ値を渡す場合の引数にポインタが
渡されているかをチェックする(108)。引数がポインタ
でない場合、引渡し後に渡されたデータの変更があるか
をチェックし(109)、変更がある場合呼出し側で変更し
たデータを使用するかをチェックし(110)、使用する場
合誤りとする。
のメモリ記述の誤りの検出を自動的に行う手段を与え
る。 【構成】ソースコードを読み込み(101)、文字型に定義
された変数のメモリ領域が確保されているかをチェック
する(102)。確保されている場合はその変数の登録を行
う(103)。確保されていない場合は、メモリ領域の内容
を不正に書き換える可能性をチェックし(104)、可能性
がある場合、さらにその変数が引数であるかをチェック
し(105)、引数でなければ誤りとし(107)、引数である場
合はそれ以前に登録されているかをチェックし(106)、
登録されていなければ誤りとする(107)。続いて、メイ
ンからサブルーチンへ値を渡す場合の引数にポインタが
渡されているかをチェックする(108)。引数がポインタ
でない場合、引渡し後に渡されたデータの変更があるか
をチェックし(109)、変更がある場合呼出し側で変更し
たデータを使用するかをチェックし(110)、使用する場
合誤りとする。
Description
【0001】
【産業上の利用分野】ソフトウエア開発におけるデバッ
グ作業に係り、特にメモリ領域の使用法のチェックを行
う方法に関する。
グ作業に係り、特にメモリ領域の使用法のチェックを行
う方法に関する。
【0002】
【従来の技術】C言語において、ソースコード中のメモ
リ操作の記述に誤りがあっても、コンパイラは誤りを発
見できず、そのまま実行すればメモリ領域の内容の不正
書き換えが起こり、プログラムが異常な動作をすること
があった。このような場合、プログラマが誤りを発見す
るための従来の技術としては、配列データを有するプロ
グラムにおいて配列名と配列変数を対にして定義しハー
ドウエアやコンパイラ等に配列のチェックを行う情報処
理装置特願昭60−167043が知られている。しか
し、他のチェックを行う場合は人手により行っていた。
リ操作の記述に誤りがあっても、コンパイラは誤りを発
見できず、そのまま実行すればメモリ領域の内容の不正
書き換えが起こり、プログラムが異常な動作をすること
があった。このような場合、プログラマが誤りを発見す
るための従来の技術としては、配列データを有するプロ
グラムにおいて配列名と配列変数を対にして定義しハー
ドウエアやコンパイラ等に配列のチェックを行う情報処
理装置特願昭60−167043が知られている。しか
し、他のチェックを行う場合は人手により行っていた。
【0003】
【発明が解決しようとする課題】上記の情報処理装置で
は、ソースコード中で、 (1)文字型変数の定義において、メモリ領域が確保され
ていない場合 (2)メモリ領域が確保されていなければ、メモリ領域の
内容の不正書き換えが起こる可能性がある命令が存在す
る場合において、メモリ領域が確保されていない場合 (3)サブルーチンへの値を渡す際に引数の定義形式がポ
インタでない場合 誤りの発見を行えないという問題があった。
は、ソースコード中で、 (1)文字型変数の定義において、メモリ領域が確保され
ていない場合 (2)メモリ領域が確保されていなければ、メモリ領域の
内容の不正書き換えが起こる可能性がある命令が存在す
る場合において、メモリ領域が確保されていない場合 (3)サブルーチンへの値を渡す際に引数の定義形式がポ
インタでない場合 誤りの発見を行えないという問題があった。
【0004】本発明の目的は、ソースコード中のメモリ
操作の記述の誤りの検出を自動的に行う手段を与えるこ
とで作業の効率向上を図ることにある。
操作の記述の誤りの検出を自動的に行う手段を与えるこ
とで作業の効率向上を図ることにある。
【0005】
【課題を解決するための手段】本発明では、上記の(1)
の課題を解決するため、ソースコード中に定義された変
数について、メモリ領域が確保されていれば登録を行
い、確保されていなければ、以前に前記の登録が行われ
ているかのチェックを行うこととした。
の課題を解決するため、ソースコード中に定義された変
数について、メモリ領域が確保されていれば登録を行
い、確保されていなければ、以前に前記の登録が行われ
ているかのチェックを行うこととした。
【0006】また、上記の(2)の課題を解決するため、
メモリ領域が確保されていなければ、メモリ領域の内容
の不正書き換えが起こる可能性がある命令が存在する場
合、メモリが確保されているかを確かめるために、以前
に前記の登録が行われているかのチェックを行うことと
した。
メモリ領域が確保されていなければ、メモリ領域の内容
の不正書き換えが起こる可能性がある命令が存在する場
合、メモリが確保されているかを確かめるために、以前
に前記の登録が行われているかのチェックを行うことと
した。
【0007】また、上記の(3)の課題を解決するため、
引数の定義形式がポインタであるかのチェックを行うこ
ととした。
引数の定義形式がポインタであるかのチェックを行うこ
ととした。
【0008】
【作用】本発明により、従来技術で手作業で行ってい
た、ソースコード中のメモリ操作の記述の誤りの発見を
自動的に行うことができ、作業の効率向上が図れる。
た、ソースコード中のメモリ操作の記述の誤りの発見を
自動的に行うことができ、作業の効率向上が図れる。
【0009】
【実施例】以下、本発明の実施例を図を用いて詳細に説
明する。図1及び図2は、本発明のソースコードの誤り
のチェックを行う為の処理手順を示すフローチャートで
あり、図3は本発明を実現する計算機の機器構成であ
り、図4、図5はC言語によるソースコードの例であ
る。図1〜図5を用いて、本発明によるソースコードの
誤り検出方式の動作を説明する。
明する。図1及び図2は、本発明のソースコードの誤り
のチェックを行う為の処理手順を示すフローチャートで
あり、図3は本発明を実現する計算機の機器構成であ
り、図4、図5はC言語によるソースコードの例であ
る。図1〜図5を用いて、本発明によるソースコードの
誤り検出方式の動作を説明する。
【0010】ファイル読み込み部(202)が全てのソース
コード(206)を入力する(101)。次に、誤りチェック部(2
03)が図1及び図2の流れ(102〜115)でソースコードの
チェックを行い結果を処理結果出力部(204)が表示装置
(207)に表示する(116)。図4、図5は図3のソースコー
ド(206)にあたる。
コード(206)を入力する(101)。次に、誤りチェック部(2
03)が図1及び図2の流れ(102〜115)でソースコードの
チェックを行い結果を処理結果出力部(204)が表示装置
(207)に表示する(116)。図4、図5は図3のソースコー
ド(206)にあたる。
【0011】図4のプログラムのサブルーチン(305)内
には、a(306),b(307),c(308),d(309)が文字列型とし
て定義されている。a(306)はメイン(301)にて、5バイ
トの領域を確保した上で、文字列複写命令strcpyを行っ
ている(310)ため、問題はなく、c(308)は領域を確保し
ていないが変数a(306)のポインタの値をポインタ変数c
(308)に代入している(312)ため問題はない。しかし、b
(307),d(309)はメモリ領域を確保していないにもかか
わらず、文字列複写命令strcpyを行っている(310)(313)
ため、誤りである。
には、a(306),b(307),c(308),d(309)が文字列型とし
て定義されている。a(306)はメイン(301)にて、5バイ
トの領域を確保した上で、文字列複写命令strcpyを行っ
ている(310)ため、問題はなく、c(308)は領域を確保し
ていないが変数a(306)のポインタの値をポインタ変数c
(308)に代入している(312)ため問題はない。しかし、b
(307),d(309)はメモリ領域を確保していないにもかか
わらず、文字列複写命令strcpyを行っている(310)(313)
ため、誤りである。
【0012】図5のプログラムでは、メイン(401)から
サブルーチン(408)へ、a(402),b(410),c(411),d(41
2)を渡している(406)。一般に、C言語では子ルーチン
で引数を変更する場合、親ルーチンから子ルーチンへ、
ポインタを渡さなければならない言語規約になってい
る。d(412)はサブルーチン(408)の中で値が変更され
(414)、変更後の値をメイン(401)で使用して
いる(407)にもかかわらず、d(405)をサブルーチン(408)
へ渡す際にポインタを渡していないためサブルーチン(4
08)の中での値の変更はメイン(401)に反映されず誤りで
ある。
サブルーチン(408)へ、a(402),b(410),c(411),d(41
2)を渡している(406)。一般に、C言語では子ルーチン
で引数を変更する場合、親ルーチンから子ルーチンへ、
ポインタを渡さなければならない言語規約になってい
る。d(412)はサブルーチン(408)の中で値が変更され
(414)、変更後の値をメイン(401)で使用して
いる(407)にもかかわらず、d(405)をサブルーチン(408)
へ渡す際にポインタを渡していないためサブルーチン(4
08)の中での値の変更はメイン(401)に反映されず誤りで
ある。
【0013】上記の図4の例を用いてメモリ領域の確保
のチェック(102〜115)、図5の例を用いて引数にポイン
タが渡されているか(111〜116)のチェックを誤りチェッ
ク部(203)がどのようにして行っているかを説明する。
のチェック(102〜115)、図5の例を用いて引数にポイン
タが渡されているか(111〜116)のチェックを誤りチェッ
ク部(203)がどのようにして行っているかを説明する。
【0014】図4の例において、まず誤りチェック部(2
03)はソースコード内の文字型として定義されたすべて
の変数についてメモリ領域が確保されているかをチェッ
クする(102〜104)。メイン(301)のa(302)は、メモリ領
域が確保されているのでバッファ(205)に登録する(10
3)。メインのb(303)、サブルーチン(305)のa(306),b(3
07),c(308),d(309)についても同様にチェックを行う
と、メモリ領域が確保されていないため登録は行わな
い。
03)はソースコード内の文字型として定義されたすべて
の変数についてメモリ領域が確保されているかをチェッ
クする(102〜104)。メイン(301)のa(302)は、メモリ領
域が確保されているのでバッファ(205)に登録する(10
3)。メインのb(303)、サブルーチン(305)のa(306),b(3
07),c(308),d(309)についても同様にチェックを行う
と、メモリ領域が確保されていないため登録は行わな
い。
【0015】続いて、メモリ領域の使用法の誤りのチェ
ックを行う(105〜110)。そのためには、まず定義された
変数についてメモリ領域が確保されているかをチェック
する(105)。メイン(301)のb(303)、サブルーチン(305)
のa(306),b(307),c(308),d(309)のメモリが確保され
ていない。メモリ領域が確保されていない変数について
は、メモリ領域の内容を不正書き換えする可能性のある
使用法であるかをチェックする(106)。メインのb(303)
は、メイン(301)内ではメモリ領域の内容を不正書き換
えする命令文がないため問題なしとする。サブルーチン
では、c(308)は領域を確保していないが変数a(306)のポ
インタをポインタ変数c(308)に代入している(312)ため
問題はないが、a(306),b(307),d(309)は領域が確
保されていなければメモリ領域の内容の不正書き換えが
起こる可能性がある文字列複写命令strcpyに使用されて
いる(310)(311)(313)。続いて、a(306),b(307),d
(309)がメイン(301)から渡されてきた引数であるかをチ
ェックする(107)。a(306),b(307)は引数であるから、
メイン側(301)で領域が確保されている場合があるた
め、バッファ(205)に登録されているかをチェックする
(108)。a(305)は登録されているので問題ないが、b(3
07)は登録されていないので誤りとする(109)。一方、d
(309)は引数でないため誤りとする(107)。
ックを行う(105〜110)。そのためには、まず定義された
変数についてメモリ領域が確保されているかをチェック
する(105)。メイン(301)のb(303)、サブルーチン(305)
のa(306),b(307),c(308),d(309)のメモリが確保され
ていない。メモリ領域が確保されていない変数について
は、メモリ領域の内容を不正書き換えする可能性のある
使用法であるかをチェックする(106)。メインのb(303)
は、メイン(301)内ではメモリ領域の内容を不正書き換
えする命令文がないため問題なしとする。サブルーチン
では、c(308)は領域を確保していないが変数a(306)のポ
インタをポインタ変数c(308)に代入している(312)ため
問題はないが、a(306),b(307),d(309)は領域が確
保されていなければメモリ領域の内容の不正書き換えが
起こる可能性がある文字列複写命令strcpyに使用されて
いる(310)(311)(313)。続いて、a(306),b(307),d
(309)がメイン(301)から渡されてきた引数であるかをチ
ェックする(107)。a(306),b(307)は引数であるから、
メイン側(301)で領域が確保されている場合があるた
め、バッファ(205)に登録されているかをチェックする
(108)。a(305)は登録されているので問題ないが、b(3
07)は登録されていないので誤りとする(109)。一方、d
(309)は引数でないため誤りとする(107)。
【0016】図5の例において、まず誤りチェック部(2
03)はソースコード中のサブルーチンへの引数がポイン
タであるかをチェックする(111)。例ではa(402)以外は
ポインタではなく変数の値が渡されている。続いて、b
(403),c(404),d(405)について引渡し後のデータに変
更があるかをチェックする(112)。例では、c(404),d(4
05)に変更がある。さらに、メイン(401)で変更したデー
タを使用するかをチェック(113)するとd(412)が当ては
まるので、誤りとする(114)。
03)はソースコード中のサブルーチンへの引数がポイン
タであるかをチェックする(111)。例ではa(402)以外は
ポインタではなく変数の値が渡されている。続いて、b
(403),c(404),d(405)について引渡し後のデータに変
更があるかをチェックする(112)。例では、c(404),d(4
05)に変更がある。さらに、メイン(401)で変更したデー
タを使用するかをチェック(113)するとd(412)が当ては
まるので、誤りとする(114)。
【0017】
【発明の効果】以上説明したように本発明によれば、従
来主に人手により行っていたC言語ソースコード中のメ
モリ操作の記述の誤り、特に領域が確保されていなけれ
ばメモリ領域の不正な書き換えを引き起こすもの、ポイ
ンタが渡されていなければ正しく動作しないものの発見
を自動化することで容易に行えるようにし、ソフトウエ
ア開発の効率を向上させる。
来主に人手により行っていたC言語ソースコード中のメ
モリ操作の記述の誤り、特に領域が確保されていなけれ
ばメモリ領域の不正な書き換えを引き起こすもの、ポイ
ンタが渡されていなければ正しく動作しないものの発見
を自動化することで容易に行えるようにし、ソフトウエ
ア開発の効率を向上させる。
【図1】本発明の実施例における処理手順を示す図であ
る。
る。
【図2】図1に続く処理手順を示す図である。
【図3】本発明の実施例におけるシステムの構成図であ
る。
る。
【図4】本発明の実施例におけるソースコードの例を示
す図である。
す図である。
【図5】本発明の実施例におけるソースコードの例を示
す図である。
す図である。
202…ファイル読み込み部、 203…誤りチェック部、 204…処理結果出力部、 206…ソースコード。
Claims (3)
- 【請求項1】C言語を用いたプログラム開発において、
プログラム記述文(以下ソースコードと称する)に定義
された変数について、メモリ領域が確保されていれば登
録を行い、確保されていなければ、以前に前記の登録が
行われているかのチェックを行うことでメモリ領域の使
用法の誤りを検出する方式。 - 【請求項2】C言語を用いたプログラム開発において、
ソースコード中にメモリ領域が確保されていないけれ
ば、メモリの領域の内容の不正書き換えが起こる可能性
のある命令が存在する場合、メモリ領域が確保されてい
るかを、請求項1による登録が行われているかのチェッ
クを行うことでメモリ領域の使用法の誤りを検出する方
式。 - 【請求項3】C言語を用いたプログラム開発において、
ソースコード中でプログラム間の連絡変数(以下引数と
称する)がポインタであるかのチェックを行うことでメ
モリ領域の使用法の誤りを検出する方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP6064779A JPH07271605A (ja) | 1994-04-01 | 1994-04-01 | C言語プログラムデバッグ方式 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP6064779A JPH07271605A (ja) | 1994-04-01 | 1994-04-01 | C言語プログラムデバッグ方式 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH07271605A true JPH07271605A (ja) | 1995-10-20 |
Family
ID=13268048
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP6064779A Pending JPH07271605A (ja) | 1994-04-01 | 1994-04-01 | C言語プログラムデバッグ方式 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH07271605A (ja) |
-
1994
- 1994-04-01 JP JP6064779A patent/JPH07271605A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6163858A (en) | Diagnostic methodology for debugging integrated software | |
US7647584B2 (en) | Automation and isolation of software component testing | |
US6240545B1 (en) | Setting instance breakpoints in object oriented computer programs | |
US20020073403A1 (en) | System and method for whole-system program analysis | |
US20040015748A1 (en) | System and method for providing run-time type checking | |
Störzer et al. | Interference analysis for AspectJ | |
US20070245322A1 (en) | System and method for interactive and assisted program development | |
US6990612B2 (en) | System and method for preventing software errors | |
JPH03188535A (ja) | プログラム・エラー検出方法 | |
US5828890A (en) | System for interrupting program operation when an out-of-range value is encountered to correct a data value | |
US6754888B1 (en) | Facility for evaluating a program for debugging upon detection of a debug trigger point | |
JPH07271605A (ja) | C言語プログラムデバッグ方式 | |
JP2655614B2 (ja) | 添字の不正使用検査方式 | |
JPH025136A (ja) | 言語処理プログラムのエラー処理方式 | |
JP2797749B2 (ja) | ファイル破壊事前チェック機構 | |
JPS60179847A (ja) | 実配列および仮配列間の整合性チエツク方式 | |
JP2502128B2 (ja) | コンパイラ装置 | |
JPH01169641A (ja) | ソフトエラー検出方式 | |
US6654879B1 (en) | Method and apparatus for analyzing code for out-of-range data involving base and seed tables/lists | |
JPH06337780A (ja) | ロードモジュールのパッチ修正装置および方法 | |
KR20240088450A (ko) | 보안체크코드의 유효성 점검 장치, 보안체크코드의 유효성 점검 방법 및 컴퓨터 프로그램 | |
JPS62118448A (ja) | 不定値参照の検出方式 | |
JPH05204698A (ja) | デバッガ処理方式 | |
JPH02190935A (ja) | 構文解析ルールの組込機能を持つプログラムのコンパイル方式 | |
JPH0358232A (ja) | プリプロセッサ呼び出し方式 |