JPH0581069A - プログラムのデバツグ方法 - Google Patents

プログラムのデバツグ方法

Info

Publication number
JPH0581069A
JPH0581069A JP3241840A JP24184091A JPH0581069A JP H0581069 A JPH0581069 A JP H0581069A JP 3241840 A JP3241840 A JP 3241840A JP 24184091 A JP24184091 A JP 24184091A JP H0581069 A JPH0581069 A JP H0581069A
Authority
JP
Japan
Prior art keywords
program
breakpoint
level
break
execution
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
JP3241840A
Other languages
English (en)
Inventor
Keiko Motokawa
敬子 本川
Keisuke Toyama
圭介 十山
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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP3241840A priority Critical patent/JPH0581069A/ja
Publication of JPH0581069A publication Critical patent/JPH0581069A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 【目的】 プログラムのデバッグ方法に関し、ブレイク
ポイントにレベルを設定することにより有効とするブレ
イクポイントのみでブレイクを行う。 【構成】 ソースプログラムに対して付加されたレベル
情報を持つソース情報テーブル32とレベルフィールド
を持つブレイクポイント表33がある。各ブレイクポイ
ントに対してレベル情報に基づきレベルを設定する。実
行指示時に現在レベルフィールド35に値を設定する。
その値とブレイクポイントのレベル値との比較により、
有効なブレイクポイントであるかどうかを判定する。 【効果】 設定したブレイクポイントの中で有効とする
ものをレベルによって指定できる。そのためブレイクポ
イントの設定解除を繰り返すことが不要となり、デバッ
グ効率が向上する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、プログラムのデバッグ
方法、更に詳しくいえば、デバッグ対象プログラムに、
ブレイクポイント設け、ブレイクポイントにおいてプロ
グラムの実行を中断して実行プログラムの実行過程を調
べるデバッグ方法におけるブレイクポイントの設定方法
に係る。
【0002】
【従来の技術】プログラムのデバッグ方法として、デバ
ッグ対象プログラムの要所要所にブレイクポイント(一
時中断点)を設定し、ブレイクポイントでの内部割込み
の発生により、デバッグ対象プログラムの実行過程を確
認したり、ブレイクポイントにおける変数等のデバッグ
情報を収集するデバッグ方法がある。従来のデバッグ
は、ブレイクポイントにおいて常に実行を中断する方法
である。また、この種のデバッグ方法として、繰返し使
用されるプログラム中に複数のブレイクポイントを設定
する場合に有効なデバッグ方法が特開平2−21654
6公報に記載されている。この方法は、ブレイクポイン
トの各々に対応してスタック領域を設定して、ブレイク
ポイントの各々に対応してスタックデータを格納し、ス
タック領域からスタックデータを読み出す毎にカウンタ
のを更新し、デバッグ対象プログラムの実行時にブレイ
クポイントを通過した回数と共に通過した順序を明確に
するものである。
【0003】
【発明が解決しようとする課題】従来のブレイクポイン
トを設定してデバッグを行う方法では、ブレイクポイン
トにおいて常に実行が中断されるため、既に設定したブ
レイクポイントを無効にするためにはブレイクポイント
を解除し、必要なときに再設定しなければならない。こ
のため、ユーザは何度もブレイクポイントの設定、解除
の指示を行わなければならず、デバッグの効率が悪いと
いう問題があった。
【0004】また、従来のデバッグ方法では、再帰呼び
出しを含むプログラムのデバッグを行う場合、ブレイク
ポイントが設定された文が再帰呼び出しにより実行され
るごとに毎回実行が中断される。例えば、図7のプログ
ラムの場合、17行目でf(2)が呼び出される。f(2)
の31行目で実行を中断させたい場合、31行目にブレ
イクポイントを設定すると、f(0)、f(1)、f(2)の
各々の31行目で実行が中断される。このように、従来
のデバッガのブレイク方法では、関数の再帰呼び出しの
際、関数が何回目に呼ばれたときにブレイクするかとい
うことを指定できないため、ユーザの意図する点まで実
行させるのに手間がかかったり、ユーザが意図していな
い中断点で誤ってデバッグ情報の収集を行ってしまうと
いう問題点があった。
【0005】本発明の目的は、ブレイクポイントを有効
にするかどうかを選択できるようにして、多数のブレイ
クポイントを設定したままで、ユーザが意図するブレイ
ク点まで実行を進められるプログラムのデバッグ方法を
提供することにある。本発明の他の目的は、関数の再帰
呼出しに対して指定されたレベルの関数内のみで実行を
中断できるプログラムのデバッグ方法を提供することに
ある。本発明のさらに他の目的は、ブレイクポイントの
重要度に応じて、指定されたレベル値のブレイクポイン
トのみで実行を中断できるプログラムのデバッグ方法を
提供することにある。
【0006】
【課題を解決するための手段】上記目的を達成するた
め、本発明のプログラムのデバッグ方法は、各ブレイク
ポイントにレベル値を設定し、プログラムの構造に基づ
いて実行時に指定又は更新されるレベルとブレイクポイ
ントのレベル値とを比較し、ブレイクポイントにおいて
ブレイクするか否かのブレイク条件判定を行うことによ
ってプログラムの実行の中断をユーザが意図する、又は
ブレイクポイントの重要度に応じて行うようにした。
【0007】
【作用】本発明によれば、デバッグ対象プログラムのブ
レイク条件がブレイクポイントのレベルと実行時に指定
又は更新されるレベルを参照し、2つのレベルを比較し
た結果によりブレイクするか否かを決定するので、与え
られたブレイク条件を満たすブレイクポイントのみで実
行を中断させることが可能になる。
【0008】
【実施例】以下図面を用いて本発明の実施例について説
明する。図1は、本発明によるプログラムのデバッグ方
法の一実施例を実施する装置の構成を示す図である。装
置は中央処理装置1と入力手段2及びメモリ3からなっ
ている。入力手段2からの指示に従い、メモリ3上のオ
ブジェクトコード31、ソース情報テーブル32、ブレ
イクポイント表33、関数スタック34、現在レベルフ
ィールド35を用いて処理を行う。コマンド解析手段1
1は、入力手段2から入力されたコマンドを解析する。
入力手段2からブレイクポイント設定指示21が入力
されると、ブレイクポイント設定手段12は、ソース情
報テーブル32を参照して、ブレイクポイント表33に
ブレイクポイントが設定されるべき行番号とブレイクポ
イントの有効レベルとを設定する。
【0009】入力手段2より、レベル指示付き実行指示
22が入力されると、現在レベル更新手段13は、メモ
リ3の現在レベルフィールド35の値を更新する。その
後、命令実行手段14によって関数スタック34を更新
しながらソース情報テーブル32にあるプログラム命令
の実行が行われる。ブレイクポイントにおいてはブレイ
ク条件判定手段15の判定結果により、オブジェクトコ
ード31の実行を継続するか、またはブレイク手段16
によって、プログラム命令の実行を中断してユーザから
の指示入力を待つ。
【0010】ブレイクポイント設定指示21が中央処理
装置1に入力されると、ブレイクポイント設定手段12
は、ブレイクポイント表33への設定を行うと共に、ブ
レイクポイントに対応するオブジェクトコード31の命
令を退避し、その位置を割込み命令で置換する。命令実
行手段14によるプログラムの実行中に上記割込み命令
が発生すると、中央処理装置1は割込み処理を行う。本
実施例では、この割込み処理でブレイク条件判定手段1
5によりブレイク実行するか否かの判定を行う。ブレイ
クする条件を満たせば、ブレイク手段16によりプログ
ラムの実行を中断して停止し、ユーザの指示入力待ちの
状態となる。この後ユーザが継続実行を指示すれば、ブ
レイクポイントより再び実行を再開してオブジェクトコ
ードの実行を継続する。
【0011】ブレイクする条件を満たさないときは、ブ
レイクを行わず、プログラムの実行を継続する。ここ
で、実行を継続するとは、退避されているブレイクポイ
ントの命令を実行した後、割込み命令の次の命令から実
行を再開することである。以下の説明では上記の手順に
よる処理をモデル化し、各命令の実行前にそれが割込み
命令であるかどうかを検出できるものとして、ブレイク
ポイントかどうかを判定してから実行を行うという処理
手順によって記述する。
【0012】図2は、ソース情報テーブル32の例であ
る。テーブル32はデバッグ対象プログラムのソースプ
ログラムの各行に対する情報として、行番号32−1、
オブジェクトコード31のアドレス32−2及びレベル
値32−3を記録するフィールドをもつ。アドレス32
−2はソースプログラム上の各行に対応するオブジェク
トコード31のアドレスが設定される。レベル値32−
3は階層的なソースプログラムの階層に対応する値で、
コンパイル時に付加する。
【0013】図3は上記レベル値32−3を設定する方
法の一例を示すフローチャートで、C言語で記述された
ソースプログラム(図7)に対してコンパイル時にレベ
ル値を設定する場合の一例を示す。本例では’{’
と’}’によってレベル値を定めている。各行について
トークン(字句)を順に読み込み、’{’が現れたらレ
ベルカウンタの値に1を加算し(ステップ30
4)、’}’が現れたらレベルカウンタの値から1を減
算する(ステップ306)。読んでいるトークンが行頭
のものであれば、その行のレベル値としてその時点のレ
ベルカウンタの値を設定する(ステップ308)。
【0014】図4は、ブレイクポイント表33の一例を
示すものである。ブレイクポイント表33は行番号33
−1とレベル33−2の各フィールドを持つ。ブレイク
ポイントは次のようにして設定する。ユーザがブレイク
ポイント設定指示21を、例えば「 BREAK 10
」のように行なう。BREAKはブレイクポイント設
定コマンド21でパラメタ10は行番号10を表す。ブ
レイクポイント設定手段12はソース情報テーブル32
を参照して10行目に対応するアドレスの命令を退避
し、割込み命令で置換する。次に、ソース情報テーブル
32の10行目のレベル値を参照し、ブレイクポイント
表33に行番号として「10」、レベル値として「2」
を設定する。
【0015】現在レベルフィールド35は、プログラム
の実行が停止しているとき、そのブレイクポイントのレ
ベルが設定されるフィールドである。実行開始時には、
現在レベルに0が設定される。現在レベルとブレイクポ
イントレベルの値により、ブレイクするか否かを決定す
ることができる。
【0016】図5は、本発明によるプログラムのデバッ
グ方法で利用される実行コマンド指定の例を示す。「
CONTI L 」はプログラム実行継続コマンドで、
パラメータLはレベルによってブレイクポイントの有効
性を判定することを指示するオプションである。実行コ
マンド指定「 CONTI L 」があると、現在停止
(ブレイク)している点のレベルより大きいレベルを持
つブレイク点が発生したとき無視される。
【0017】図6は上記実行コマンド22「 CONT
I L 」を使った本発明によるプログラムのデバッグ
方法の処理手順を示すフローチャートである。レベルL
オプション付きの実行指示22が行なわれるとメモリ3
の現在レベルフィールド35に現在行のレベルを設定す
る(ステップ601)。レベル値は最初からの実行の場
合には1、継続実行の場合には現在実行が中断している
行のレベルとなる。ブレイクポイントであるか否かを調
べる(ステップ602)。ブレイクポイントでなければ
プログラム命令の実行を行う(ステップ604)。ブレ
イクポイントであればブレイク条件判定手段13はブレ
イク条件の判定を行う(ステップ603)。
【0018】ブレイク条件の判定は次のように行なう。
ソース情報テーブル31を参照してブレイクポイントの
アドレスから行番号を調べ、ブレイクポイント表33で
そのブレイクポイントのレベル値33−3を調べる。ブ
レイクポイントのレベルが現在レベル以下であればブレ
イクの条件を満たしているので、実行を中断してユーザ
の入力待ちの状態となる。現在レベルより大きいけれ
ば、命令の実行を行う(ステップ604)。このように
して実行が中断されるまで命令の実行を繰り返す。
【0019】図7はデバッグ対象プログラムをC言語で
表した例を示す。図7のプログラムを例にデバッグ実行
の様子を更に詳しく説明する。図7のプログラムはコン
パイルされ、図2のようにソース情報テーブル31が作
成される。ユーザの入力手段2によるブレイクポイント
設定指示21により図4のようにブレイクポイント表3
3が作成されメモリ3に記録される。ユーザが実行指示
22を行うと、ソース情報テーブル31に基づいてオブ
ジェクトコード31の実行が行われ9行目までを実行し
て10行目のブレイクポイントでブレイクする。
【0020】ここで、ユーザが入力手段2によってコマ
ンド CONTI L を入力する。10行目のレベル
は2であるから、メモリ3の現在レベルフィールド35
に現在レベル値2が設定される(601)。即ち、継続
実行の場合現在実行が中断されている行のレベルが現在
レベルフィールド35に設定される。命令の実行が継続
され、次の11行目に進む。11行目がブレイクポイン
トか否か判別され(602)、11行目がブレイクポイ
ントであるので11行目のブレイクポイントのレベルが
メモリ3の現在レベルフィールド35のレベルの比較に
よってブレイクが有効かどうか判定が行われる(60
3)。ブレイクポイント表33を参照すると11行目の
レベルは3で現在レベル2よりも大きいので、停止する
ことなくプログラムの実行を継続する(604)。その
後15行目まではブレイクポイントが設定されていない
ので、プログラムの実行が継続する。次に、前述と同様
に16行目がブレイクポイントに設定されているのでブ
レイク条件の判定が行われる(603)。16行目のレ
ベルは1、現在レベルは2でブレイクの条件を満たすの
で、実行を中断してユーザの入力待ちの状態となる。
【0021】上述のように本実施例によれば、一度設定
したブレイクポイントが不必要になったときに、それを
解除しないで無効とすることができる。必要となると思
われるところ全てにブレイクポイントを設定しておき、
まずレベル値の小さいものだけを有効にして実行を行
い、重点的に調べたい部分についてはレベル値の大きい
ところでもブレイクさせるという手順でデバッグ実行を
行う際に、効率的である。 上記実施例で16行目でブ
レイクした後、次に19行目でブレイクさせたいとす
る。16行目でブレイクした後、CONTI L で継
続実行を指示すると、17行目で関数f(x)の呼び出
しが行われ、27行目のレベル1のブレイクポイントで
ブレイクする。このように16行目と19行目の間には
現れない27行目でブレイクするということを防ぐため
には、次の実施例のように関数スタックを用いて関数呼
び出しに対処すればよい。
【0022】図8は本発明によるプログラムのデバッグ
方法の他の実施例の処理手順を示すフローチャートであ
る。本実施例は特に図1の関数スタック34を用いた点
に特徴を持つ。まず、メモリ3の現在レベルフィールド
35に、現在行のレベルと関数スタック34の先頭レベ
ルとの和を設定する(ステップ801)。スタックの先
頭レベルには実行開始時は0が設定されている。関数呼
出しと戻りの命令を前述のブレイクポイントと同様に割
込み命令で置換し、割込み処理で関数呼び出しあるいは
戻りであるかどうかを判定して(802、804)、判
定結果により以下のように処理を実行する。
【0023】関数呼出しの処理では(呼出し文のレベル
+スタックの先頭レベル)の値をスタック34に積む
(ステップ803)。この値が呼び出された関数内での
関数のレベルとなる。関数戻りの処理ではスタック34
から先頭レベルを取り出す(ステップ805)。このこ
とにより関数のレベルは呼出し前の値に戻る。ブレイク
ポイントにおけるブレイク条件の判定はステップ807
のように行う。すなわち、(ブレイクポイントのレベル
+スタックの先頭レベル)の値が現在レベルの値以下で
あるときにはブレイクし、そうでないときには実行を継
続する。
【0024】図7のプログラムを例に更に詳しく説明す
る。プログラム実行指示により実行を開始する。最初
に、関数mainの呼び出しが行われる。この時スタッ
ク34に0が積まれる。実行を進め16行目でブレイク
しているとする。ここで、レベル付き実行指示「 CO
NTI L 」を入力する。16行目のレベル1とスタ
ックの先頭レベル0との和1が現在レベフィールド35
に設定される。16行目の実行後17行目は関数f
(x)の呼び出しであるので、呼出し文である17行目
のレベル2とスタックの先頭レベル0との和2をスタッ
クに積む。関数fの実行に移り27行目でブレイク条件
の判定を行う。ブレイクポイント27行目のレベルは
1、スタックの先頭レベルは2、現在レベルは1でブレ
イクの条件を満たさないので実行を継続する。引数xの
値は2であるので29行目で再び関数fの呼び出しが起
こる。呼出し文のレベルは2であるのでスタックに4を
積む。再び27行目でブレイク条件の判定が行われ、条
件を満たさないので実行を継続する。29行目で0を引
数として関数fの呼び出しが行われる。
【0025】今度はスタックに6を積む。27行目でブ
レイク条件の判定を行ったのち、実行が継続され32行
目でf(0)の戻りが行われる。スタックから先頭レベル
6を取りだし、先頭レベルは4となる。このように実行
を続け、f(1)、f(2)の戻りにともなってスタックの
先頭レベルは4から2、0へと変化する。f(2)の戻り
が行われてmainの実行に戻り、19行目でブレイク
条件の判定を行う。ブレイクポイントのレベルは1、ス
タックの先頭レベルは0、現在レベルは1でブレイクの
条件を満たすので、実行を中断してユーザの入力待ちの
状態となる。
【0026】関数スタックの使用により再帰的に実行さ
れる文に対しても、どの地点でブレイクさせるかを指定
できるので、ユーザの意図通りにデバッグ処理を進める
ことができる。各文に対してレベルが付されていない場
合でも、上述の例で全文レベル0と考えることにより再
帰的に実行される文に対処することができる。この場合
には関数スタックのかわりにカウンタを使えば十分であ
る。カウンタを関数呼出しと戻りに伴って更新し、スタ
ックの先頭レベルの代わりにカウンタ値を用いて比較を
行うことにより、現在の点レベルより大きいレベル地点
でのブレイクを避けることなどが可能になる。
【0027】図9は本発明によるプログラムのデバッグ
方法の他の実施例を実施する装置の構成を示す図であ
る。前述の実施例は、コンパイラによりあらかじめ定め
られたレベル情報をもとにしてブレイク条件を判定する
ものであるが、本実施例は関数の再帰レベルとユーザが
指定したブレイクポイントの有効レベルとの関係により
ブレイク条件を判定するものである。中央処理装置4
は、入力手段5からの指示に従い、メモリ6上のオブジ
ェクトコード61及び各関数のブレイクポイント表62
を用いて処理を行う。ブレイクポイント設定手段42
は、入力手段5からのレベル付きブレイクポイント設定
指示51に従い、該当する関数のブレイクポイント表6
2にプログラムのアドレス62−1と有効レベル62−
2とを設定する。現在レベル更新手段43は、関数の呼
び出しや戻りに伴い、関数の現在レベルを更新する。ブ
レイク条件比較手段45は、実行中、ブレイクポイント
に対してそれが属している関数の現在再帰レベルとその
ブレイクポイントの有効再帰レベルとの比較を行う。
【0028】図10はブレイクポイント表62の1実施
例を示す。ブレイクポイント表62は、各関数ごとに関
数の現在レベルを設定する現在レベルフィールド62−
3、及び、各ブレイクポイントの行番号62−1と有効
レベル62−2を設定するフィールドをもつ。
【0029】図11は、図9の装置でデバッグ対象プロ
グラムの命令実行を行う場合のフローチャートである。
入力手段5からの実行指示によって、命令実行手段44
はオブジェクトコード61から命令を順次取り出し実行
していく。各関数の呼び出しや戻りの命令を割込み命令
で置換し、割込み処理で各関数の呼び出しや戻りに対し
てブレイクポイント表62のレベル値62−3を更新す
る処理を行う。関数呼び出しの地点では、呼び出された
関数のブレイクポイント表62の現在レベルフィールド
62−3の値に1を加算し(ステップ102)、関数戻
りの地点では、現在レベルフィールド62−3の値から
1を減算する(ステップ104)。
【0030】このように各関数の現在レベルを更新しな
がら、ブレイクポイントまで命令の実行を続ける。各命
令でブレイクポイントか否かをブレイクポイント表62
を参照して調べ(ステップ105)、ブレイクポイント
では、ブレイクポイント表62の有効レベルフィールド
62−2を参照する(ステップ106)。有効レベルの
設定がない場合には実行を中断して停止する。有効レベ
ルの設定がある場合にはその値を関数の現在レベルと比
較する(ステップ107)。現在レベルが有効レベル以
下であるときにはブレイクポイントは有効であるので実
行を中断して入力指示待ちになる。現在レベルが有効レ
ベルより大きいときにはブレイクポイントは無効となる
ので実行を継続する。
【0031】図6のプログラムを例にして実行の過程を
更に具体的に説明する。図9の装置を起動すると図6の
プログラムのオブジェクトコード61がロードされ、
関数mainとfに対してブレイクポイント表62(図
10)が作られる。各関数の現在レベルフィールド62
−3に0を設定する。ユーザはブレイクポイント設定コ
マンド51により、プログラムの31行目に有効レベル
2のブレイクポイントを設定する。ユーザが実行コマン
ドを入力すると、プログラム実行が開始される。ソース
プログラム1行目で関数mainの呼び出しが行われる
と、関数呼出しであるので(ステップ101)、関数m
ainの現在レベルに1が加算されて1となる(ステッ
プ102)。
【0032】関数mainの呼び出しを行った後、関数
mainの実行を行う。17行目で関数fの呼び出しが
2を引数として行われると、fの現在レベルは1となり
関数fの実行に移る。29行目で再びfが1を引数とし
て呼び出され、fの現在レベルは2となる。次に29行
目でfが0を引数として呼び出され、fの現在レベルは
3となる。今度は29行目の実行は行われず31行目の
ブレイクポイントでブレイク条件の判定が行われる。有
効レベルが2、現在レベルが3で、ブレイクの条件を満
たさないので実行を継続する。ここで関数fの戻りが行
われるので、関数fの現在レベルは1減算されて2とな
る。実行を継続し、31行目のブレイクポイントで再び
ブレイク条件の判定を行う。有効レベルが2、現在レベ
ルが2で、ブレイクの条件を満たし実行を中断してユー
ザ入力待ちとなる。ここでユーザが継続実行コマンドに
より実行の継続を指示すると、再び実行が継続されfの
現在レベル1の状態で31行目でブレイクする。再び継
続実行を指示すると関数fの戻り、関数mainの戻り
がそれぞれ順に行われ、すべての関数の現在レベルが0
の状態で実行が終了し、停止する。
【0033】図12は、本実施例におけるブレイクポイ
ント設定方法の一例を示している。BREAKはブレイ
クポイント設定コマンドで、その後にパラメータとして
行番号、有効レベルの順に指定する。図12において1
00、150、200、250はそれぞれ行番号を示し
ている。有効レベルの指定法には、符号無し、符号付き
の2通りがあり、有効レベル指定無しでブレイクポイン
トを設定することもできる。有効レベルを符号無しでl
のように指定すると、ブレイクポイント表62の有効レ
ベルフィールドに値lが設定され、再帰レベルが0から
lの間そのブレイクポイントは有効となる。有効レベル
を符号付きで指定すると、該当する関数の現在再帰レベ
ルフィールドの値を基準にして有効レベルを設定する。
有効レベルを+lのように指定すると、現在の再帰レベ
ルよりlレベル大きい再帰レベルまでブレイクポイント
を有効にすることを指定できる。ブレイクポイント表6
2には該当する関数の現在レベル値cにlを加算した値
c+lが設定され、そのブレイクポイントは再帰レベル
が0からc+lの間有効となる。有効レベルを−lのよ
うに指定すると、現在の再帰レベルよりlレベル浅い再
帰レベルまでブレイクポイントを有効にすることを指定
できる。ブレイクポイント表には該当する関数の現在レ
ベル値cからlを減算した値c−lが設定されそのブレ
イクポイントは再帰レベルが0からc−lの間有効とな
る。このような有効レベルの符号付き指定方法は、プロ
グラム実行の途中でブレイクポイントを設定するときに
便利である。行番号のみを指定し有効レベルを指定しな
い場合には、行番号だけがブレイクポイント表に設定さ
れ、そのブレイクポイントは再帰レベルに無関係に常に
有効である。本実施例では、各関数ごとに現在レベルを
持っているので、再帰呼出しを含む関数において現在実
行中のこの関数は何度目に呼ばれたものかを考えながら
デバッグを行なう際に効率的に作業を進めることができ
る。
【0034】図13は、本発明によるプログラムのデバ
ッグ方法の更に他の実施例の処理ステップを示すフロー
チャートである。前述のの実施例は、プログラムの構造
に基づいたレベルを用いるものであった。本実施例は、
各ブレイクポイントに対してユーザがレベルを設定して
おき、プログラムの実行時にユーザが有効としたいブレ
ークポイントのレベルを指示することによりブレイクポ
イントを判定する方法である。本実施例では、実行コマ
ンドのパラメタとして指定される有効レベルを記憶す
る、有効レベルフィールドをメモリ上に設ける。ブレイ
クポイント表は、各ブレイクポイントに対して行番号フ
ィールドと有効レベルフィールドとを有する。ユーザが
ブレイクポイント設定コマンドにより指定する行番号と
レベル値がブレイクポイント表に設定される。ユーザが
プログラム実行コマンドのパラメタとして有効レベルを
指定すると、プログラム実行コマンドで指定した値と上
記ブレイクポイント設定コマンドで指定したブレイクポ
イント表の有効レベルとの比較の結果により、ブレイク
するか否かを決定する。
【0035】図14は本実施例で行われるプログラム実
行コマンドの一例を示す。RUNはプログラム実行指示
コマンドで、パラメタlを指定すると、例えば、ブレイ
クポイントの有効レベル値がl以下のときだけ、プログ
ラムの実行を中断することを指定できる。図13のフロ
ーチャートに従い、本実施例の処理を説明する。まず、
図14のプログラム実行コマンドによって、実行コマン
ドのパラメタlをメモリ上にある有効レベルフィールド
に設定する(ステップ401)。プログラムの各行の実
行においてブレイクポイントであるか否かを調べる(ス
テップ402)。ブレイクポイントでなければ命令の実
行を行う(ステップ404)。
【0036】ブレイクポイントであればブレイク条件判
定手段はブレイク条件の判定を行う(ステップ40
3)。ブレイク条件の判定は次のように行なう。ソース
情報テーブルを参照してブレイクポイントのアドレスか
ら行番号を見つけ、ブレイクポイント表でそのブレイク
ポイントのレベル値を調べる。ブレイクポイントのレベ
ルが有効レベル(実行コマンドのパラメタ)以下であれ
ば、ブレイクの条件を満たしているので、実行を中断し
てユーザの指示入力待ちの状態となる。そうでないとき
は、プログラム命令の実行を行う(ステップ404)。
このようにして実行が中断されるまで命令の実行を繰り
返す。
【0037】図14のプログラム実行コマンド例では、
パラメタは2であるので有効レベルが1または2のブレ
イクポイントで実行を中断しユーザの指示入力待ちとな
る。本実施例では、ユーザが各ブレイクポイントの重要
度に応じて、レベルを指定することができる。重要なブ
レイクポイントに対してはレベル値を小さく設定してお
けば、一定の重要度を持つブレイクポイントだけを有効
にしてデバッグを行なうことができる。
【0038】
【発明の効果】本発明によれば、ブレイクポイントをレ
ベルによって有効とするかどうかを指定できる。また、
関数スタックの使用により再帰的に実行される文に対し
てもどの地点でブレイクさせるかを指定できる。このた
めユーザはレベルの指定により必要なブレイクポイント
だけで実行を中断することができ、効率的にデバッグを
行える。また本発明によれば、各関数ごとに現在レベル
を持つことによって、再帰呼出しを含む関数において現
在実行中のこの関数は何度目に呼ばれたものかを考えな
がらデバッグを行なう際に効率的に作業を進めることが
できる。さらに本発明によれば、ユーザが各ブレイクポ
イントの重要度に応じて、レベルを指定することができ
るので、一定の重要度を持つブレイクポイントだけを有
効にしてデバッグを行なうことができる。
【図面の簡単な説明】
【図1】本発明によるプログラムのデバッグ方法の一実
施例を実施する装置の構成を示す図である。
【図2】図1のソース情報テーブル32の内容を示す図
である。
【図3】図2のレベル値32−3を設定する方法の一例
を示すフローチャートである。
【図4】図1のブレイクポイント表33の内容を示す図
である。
【図5】図1の実施例で使用される実行コマンドの一例
である。
【図6】本発明における命令実行時の処理手順を示すフ
ローチャートである。
【図7】デバッグ対象ソースプログラムの一例を示す図
である。
【図8】本発明によるプログラムのデバッグ方法の他の
実施例の処理手順を示すフローチャートである。
【図9】本発明によるプログラムのデバッグ方法の他の
実施例を実施する装置の構成を示す図である。
【図10】図10のブレイクポイント表62の内容を示
す図である。
【図11】本発明によるプログラムのデバッグ方法の更
に他の実施例の処理手順を示すフローチャートである。
【図12】図11の実施例に使用されるブレイクポイン
ト設定コマンドの一例である。
【図13】本発明によるプログラムのデバッグ方法の更
に他の実施例の処理手順を示すフローチャートである。
【図14】図13の実施例で使用されるコマンドを示す
図である。
【符号の説明】
32・・・ソース情報テーブル、33・・・ブレイクポ
イント表、34・・・関数スタック、35・・・現在レ
ベルフィールド。

Claims (5)

    【特許請求の範囲】
  1. 【請求項1】 デバッグ対象プログラムにブレイクポイ
    ントを設定してプログラムのデバッグを行うプログラム
    のデバッグ方法であって、 階層的なソースプログラムの各文に階層に対応するレベ
    ル値を付してコンパイルする第1ステップと、上記ソー
    スプログラムの中でブレイクするブレイクポイントとレ
    ベル値との対応関係をテーブルに記憶する第2ステップ
    と、上記プログラムの命令実行時に上記ブレイクポイン
    トにおいて、上記テーブルに記憶されたレベルに基づい
    て、ブレイクするか実行を継続するかのブレイクポイン
    トの有効性を判定する第3ステップとを有し有効なブレ
    イクポイントを判断することを特徴とするプログラムの
    デバッグ方法。
  2. 【請求項2】 デバッグ対象プログラムにブレイクポイ
    ントを設定してプログラムのデバッグを行うプログラム
    のデバッグ方法であって、 関数の呼び出し及び戻りを含む階層的なソースプログラ
    ムの各文に階層に対応するレベル値を付してコンパイル
    する第1ステップと、上記ソースプログラムの中でブレ
    イクするブレイクポイントと上記レベル値との対応関係
    をテーブルに記憶しする第2ステップと、上記プログラ
    ムの命令実行時に関数の呼び出しに際しスタックに値を
    積み、戻りに際しスタックから値を取り出す第3ステッ
    プと、上記プログラムの命令実行時に上記ブレイクポイ
    ントにおいて、上記テーブルに記憶されたレベルとスタ
    ックの先頭の値に基づいて、ブレイクするか実行を継続
    するかのブレイクポイントの有効性を判定する第4ステ
    ップとを有し有効なブレイクポイントを自動的に判断す
    ることを特徴とするプログラムのデバッグ方法。
  3. 【請求項3】 デバッグ対象プログラムにブレイクポイ
    ントを設定してプログラムのデバッグを行うプログラム
    のデバッグ方法であって、 関数の呼び出し及び戻りを含む階層的なソースプログラ
    ムの各文に階層に対応するレベル値を付してコンパイル
    する第1ステップと、 プログラム命令実行時に関数の呼び出しと戻りに伴って
    カウンタの値を更新するステップを有し、 プログラム命令実行時にブレイクポイントにおいて、ブ
    レイク手段がカウンタの値に基づいて、ブレイクするか
    実行を継続するかの選択を行うステップを有することを
    特徴とするプログラムのデバッグ方法
  4. 【請求項4】 デバッグ対象プログラムにブレイクポイ
    ントを設定してプログラムのデバッグを行うプログラム
    のデバッグ方法であって、 上記デバッグ対象プログラムのブレイクポイントに任意
    のレベル値を設定するステップと、 プログラム命令実行時に関数の呼び出しと戻りに伴って
    各関数の現在レベル値を更新するステップを有し、 プログラム命令実行時にブレイクポイントにおいてブレ
    イクポイントのレベル値と上記ブレイクポイントの属す
    る関数の現在レベル値との比較によって、ブレイクする
    か実行を継続するかの選択を行うステップを有すること
    を特徴とするプログラムのデバッグ方法。
  5. 【請求項5】 デバッグ対象プログラムにブレイクポイ
    ントを設定してプログラムのデバッグを行うプログラム
    のデバッグ方法であって、 上記デバッグ対象プログラムのブレイクポイントに任意
    のレベル値を設定するステップと、 上記デバッグ対象プログラムの実行指示時に指定される
    有効レベル値を記憶するステップと、 上記デバッグ対象プログラムの命令実行時に、ブレイク
    ポイントにおいてブレイクポイントのレベル値と上記有
    効レベル値との比較によって、ブレイクするか実行を継
    続するかの選択を行うステップを有することを特徴とす
    るプログラムのデバッグ方法。
JP3241840A 1991-09-20 1991-09-20 プログラムのデバツグ方法 Pending JPH0581069A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP3241840A JPH0581069A (ja) 1991-09-20 1991-09-20 プログラムのデバツグ方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP3241840A JPH0581069A (ja) 1991-09-20 1991-09-20 プログラムのデバツグ方法

Publications (1)

Publication Number Publication Date
JPH0581069A true JPH0581069A (ja) 1993-04-02

Family

ID=17080285

Family Applications (1)

Application Number Title Priority Date Filing Date
JP3241840A Pending JPH0581069A (ja) 1991-09-20 1991-09-20 プログラムのデバツグ方法

Country Status (1)

Country Link
JP (1) JPH0581069A (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6681343B1 (en) 1999-08-24 2004-01-20 Nec Electronics Corporation Debugging device and method as well as storage medium
JP2005078309A (ja) * 2003-08-29 2005-03-24 Nec Corp データ処理システム
JP2006350676A (ja) * 2005-06-16 2006-12-28 Hitachi Software Eng Co Ltd 組込みシステムのプログラムデバッグ方法
JP2007004516A (ja) * 2005-06-24 2007-01-11 Hitachi Software Eng Co Ltd 組込みシステムのプログラムデバッグ方法
JP2007179567A (ja) * 2007-02-26 2007-07-12 Nec Corp データ処理システム
JP2009134355A (ja) * 2007-11-28 2009-06-18 Yokogawa Electric Corp 開発支援装置及び半導体試験装置

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6681343B1 (en) 1999-08-24 2004-01-20 Nec Electronics Corporation Debugging device and method as well as storage medium
JP2005078309A (ja) * 2003-08-29 2005-03-24 Nec Corp データ処理システム
US7647485B2 (en) 2003-08-29 2010-01-12 Nec Corporation Data processing system for debugging utilizing halts in a parallel device
JP2006350676A (ja) * 2005-06-16 2006-12-28 Hitachi Software Eng Co Ltd 組込みシステムのプログラムデバッグ方法
JP2007004516A (ja) * 2005-06-24 2007-01-11 Hitachi Software Eng Co Ltd 組込みシステムのプログラムデバッグ方法
JP2007179567A (ja) * 2007-02-26 2007-07-12 Nec Corp データ処理システム
JP2009134355A (ja) * 2007-11-28 2009-06-18 Yokogawa Electric Corp 開発支援装置及び半導体試験装置

Similar Documents

Publication Publication Date Title
US7028291B2 (en) Debugging method and debugging device
EP0595540A1 (en) Debugging/modifying of software in ROM
JPH0581069A (ja) プログラムのデバツグ方法
JP2752094B2 (ja) 論理型言語におけるバックトラック処理方式
JPS62113244A (ja) プログラムテスト装置
JPH0877021A (ja) 割込処理装置および方法
JP2002073347A (ja) 例外処理方法及びコンパイラ
JP2000076095A (ja) プログラムトレース装置およびプログラムトレース方法およびそのプログラムを記憶した記憶媒体
JP2642788B2 (ja) 実行監視点削減方式
JPS61180344A (ja) 高級言語のステツプ実行システム
JP3130421B2 (ja) プログラム解析方法および装置
JP3019330B2 (ja) コンパイル装置
JP2751423B2 (ja) プログラムデバッグ処理方式
JP3114686B2 (ja) プログラム・ディバグ方法
JPH0128414B2 (ja)
JPH044434A (ja) プログラムのトレース方法
JPH0573335A (ja) プログラムの自動インライン展開方式
JPH0635713A (ja) 論理型言語と他言語の相互呼び出し方式
JPH06290077A (ja) プログラム実行中断点設定方法
JPS63292338A (ja) 最適化プログラムデバツグ方式
JPH08263300A (ja) インライン展開方式
JPH05127945A (ja) プログラム実行状況解析方式
JPH04107605A (ja) 制御プログラム用言語処理装置
JPS6172339A (ja) プログラム実行表示制御方式
JPH04333146A (ja) デバッグにおけるプログラムの実行制御方式