JP3098501B2 - ソースステップ実行方法およびその装置 - Google Patents

ソースステップ実行方法およびその装置

Info

Publication number
JP3098501B2
JP3098501B2 JP10323637A JP32363798A JP3098501B2 JP 3098501 B2 JP3098501 B2 JP 3098501B2 JP 10323637 A JP10323637 A JP 10323637A JP 32363798 A JP32363798 A JP 32363798A JP 3098501 B2 JP3098501 B2 JP 3098501B2
Authority
JP
Japan
Prior art keywords
execution
address
program
range
executed
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
Application number
JP10323637A
Other languages
English (en)
Other versions
JP2000148534A (ja
Inventor
邦夫 丹羽
Original Assignee
日本電気アイシーマイコンシステム株式会社
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 日本電気アイシーマイコンシステム株式会社 filed Critical 日本電気アイシーマイコンシステム株式会社
Priority to JP10323637A priority Critical patent/JP3098501B2/ja
Publication of JP2000148534A publication Critical patent/JP2000148534A/ja
Application granted granted Critical
Publication of JP3098501B2 publication Critical patent/JP3098501B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、プログラムのデバ
ックの技術に関し、特にソース(プログラム)ステップ実
行方法およびその装置に関するものである。
【0002】
【従来の技術】従来のソースステップ実行方式について
図面を参照して説明する。
【0003】従来のソースステップ実行方式の一例が、
特開昭61−213935号公報、特開昭61−80
342号公報に記載されている。
【0004】特開昭61−213935号公報に記載の
例(従来例1)は、図20に示すような、ソースコードの
行番号と、行の先頭アドレスと、次に実行すべき行の行
番号の3つを対応付けたデバッグ情報テーブルを使用
し、このような情報を含んだデバッグ情報テーブルをデ
バッグ情報記憶領域に読み込んで、ソースステップを実
行する。
【0005】図21は従来例1のソースステップ実行方
式のフローチャートである。
【0006】先ず、入力装置からソースステップ実行の
開始指示を受け取ると(ステップE1)、プログラムカ
ウンタに格納されているアドレスPを読み出し(ステッ
プE2)、デバッグ情報記憶領域を調べてアドレスPの
位置の行Lを求め(ステップE3)、デバッグ情報記憶
領域を調べて行Lの次に実行すべき行Mを求め(ステッ
プE4)、デバッグ情報記憶領域を調べて行Mの先頭ア
ドレスQを求める(ステップE5)。プログラム記憶領
域のアドレスQの命令を待避領域に待避し(ステップE
6)、プログラム記憶領域のアドレスQの命令をトラッ
プ命令に書き換える(ステップE7)。トラップ命令と
は、その命令を実行することにより特別な割り込み処理
ルーチンを起動させることができる命令である。
【0007】次に、プログラム記憶領域のアドレスPか
らプログラムを実行し(ステップE8)、トラップ命令
が実行されるまでプログラムを実行させる(ステップE
9、E10)。トラップ命令が実行されたら、待避領域
に待避しておいた命令をプログラム記憶領域のアドレス
Qに書き戻し(ステップE11)、出力装置にソースス
テップ実行の実行完了を通知する(ステップE12)。
【0008】特開昭61−80342号公報に記載の
例(従来例2)は、図22に示すような、ソースコードの
行番号と行の先頭アドレスの2つを対応付けたデバッグ
情報テーブルを使用し、このような情報を含んだデバッ
グ情報テーブルをデバッグ情報記憶領域に読み込んで、
ソースステップを実行する。
【0009】図23は従来例2のソースステップ実行方
式のフローチャートである。
【0010】先ず、入力装置からソースステップ実行の
開始指示を受け取ると(ステップF1)、プログラムカ
ウンタが指すアドレスの1命令を実行し(ステップF
2)、プログラムカウンタに格納されているアドレスP
を読み出し(ステップF3)、デバッグ情報記憶領域を
調べてアドレスPが先頭アドレスとなる行Lを探す(ス
テップF4)。アドレスPが先頭アドレスとなる行Lが
存在しなければ、次の行に移っていないと判断して処理
を繰り返し、またアドレスPが先頭アドレスとなる行L
が存在すれば、次の行に移ったと判断し、出力装置にソ
ースステップ実行の実行完了を通知する(ステップF
5、F6)。
【0011】しかし、これらの従来技術には、次のよう
な問題点があった。
【0012】第1の問題点は、ソースコードの1行内で
先頭アドレス以外に分岐するような繰り返し処理が行わ
れていると、各回の繰り返し毎にソースステップ実行を
停止させることができず、全ての繰り返しが終わった後
でようやくソースステップ実行が停止するということで
ある。
【0013】第2の問題点は、高度に最適化されたプロ
グラムコードを生成するコンパイラでは、繰り返し処理
をしているソースコードの複数行がひとまとまりのプロ
グラムコードとして生成されたり、場合によっては前後
の行も含めてひとまとまりのプログラムコードとして生
成されたりすることがあり、このような場合にはデバッ
グ情報がソースコードの各行毎にきれいに分離されず、
デバッグ情報の先頭アドレス以外に分岐するようになる
ため、第1の問題点と同様に、各回の繰り返し毎にソー
スステップ実行を停止させることができなくなるという
ことである。
【0014】その理由は、特開昭61−213935号
公報では、次に実行する行の先頭アドレスの命令をトラ
ップ命令に書き換えているだけなので、全ての繰り返し
が終わった後でようやく次の行の先頭アドレスの命令に
移るからである。また、特開昭61−80342号公
報でも、プログラムカウンタが指すアドレスが行の先頭
アドレスを指すようになるのは、全ての繰り返しが終わ
った後だからである。
【0015】例えば、図6や図9に例示すようなソース
コードは、C言語において文字列をコピーする時に良く
使われるが、このようなプログラムでは、問題のあるコ
ピー元を使用したためにコピー先が別の目的に使用され
ている記憶領域を上書きしてしまうという不具合を発生
させることが多い。このような場合、問題がコピー元の
どこにあるか、コピー先がどこで記憶領域を上書きして
しまうかを知りたいことが多い。しかしながら、既に説
明したように、従来の技術では、繰り返し処理が全て終
わるまでソースステップ実行が停止しないため、「どこ
が」や「どこで」といったことを知ることができなかっ
た。
【0016】図6、図9のソースコードをコンパイルし
た後のプログラムコードの一例を、それぞれ図7、図1
0に示す。
【0017】先ず、図7では、繰り返し処理の分岐が$
L205への分岐であるため、既に説明した第1の問題
が発生する。また、図10では、繰り返し処理の全体と
変数iへの代入部分がひとまとまりのコードとして生成
されており、繰り返し処理の分岐が$L213への分岐
であるため、既に説明した第2の問題が発生する。
【0018】また、従来のループ状態検知方式の一例
が、特開昭57−90767号公報に記載されている。
【0019】このループ状態検知方式(従来例3)は、図
24に示すように、プログラム制御により動作するデー
タ処理装置400と、キーボード等の入力装置101
と、ディスプレイ等の出力装置107とから構成されて
いる。
【0020】データ処理装置400は、デバッグ手段4
02と、プログラム記憶領408と、プログラム実行手
段409と、ループ判定手段421とを含む。ループ判
定手段421は、ループ判定ポイント422とループカ
ウンタ423を含む。
【0021】このような構成を有する従来のループ状態
検知方式は、次のように動作する。
【0022】いま、デバッグ手段402は、入力装置1
01からデバッグの開始指示を受け取ると、ループ判定
ポイント422にループ状態を検知するアドレスを設定
し、ループカウンタ423の値を初期化する。ループ判
定ポイント422は複数あってもよく、その場合にはル
ープを生じる恐れのある所などをオペレータが適宜選択
するが、各命令毎に設定すれば確実にループ検知ができ
る。次に、プログラム実行手段409で被検査プログラ
ムを実行する。プログラム実行手段409は、プログラ
ム記憶領域408に格納された被検査プログラムを実行
すると共に、ループ判定ポイント422に設定されたア
ドレスの命令が実行される度にループカウンタ423の
値をインクリメントする。デバッグ手段402は、ルー
プカウンタ423の値が所定数に達するとループ状態に
なったと判断し、出力装置107にループ状態となった
ことを通知する。
【0023】しかし、この従来技術には、次のような問
題点があった。
【0024】第1の問題点は、もともと被検査プログラ
ムの「だんまり」状態を検知することを目的としている
ため、ループ状態の検知にカウンタを使用しなければな
らず、検出回路(または記憶領域)が大きくなるという
ことである。被検査プログラムのソースコードの1行内
で繰り返し処理が行われることを検出する場合には、未
実行であるかどうかを記憶するフラグで充分であるが、
この従来技術では、ループカウンタ423の値が1に達
したかどうかを検出することになり、明らかに検出回路
(または記憶領域)の無駄である。
【0025】第2の問題点は、被検査プログラムの実行
開始時点からのループ判定ポイントのループカウントを
計数しているため、一度でもループ判定ポイントの命令
を実行してしまうとループカウンタ423の値が1に達
してしまい、被検査プログラムのソースコードの1行内
で行われる繰り返し処理に対して、各回の繰り返し毎に
ソースステップ実行を停止させるためにループ状態の検
知をやり直すことが煩雑であるということである。ルー
プ状態の検知をやり直すには、オペレータ自身がソース
ステップ実行毎に、ソースコードの1行の先頭アドレス
と最終アドレスを調べ、そのアドレス範囲にあるループ
判定ポイントを選択し、該当するループカウンタの値を
順次0に再初期化していかなければならず、余分な作業
時間を使ってしまいデバッグの能率向上を阻害してしま
う。
【0026】また、従来の実行履歴記憶方式の一例が、
特開昭64−88648号公報、特開昭62−2128
46号公報に記載されている。
【0027】これらの実行履歴記憶方式(従来例4,5)
は、図25に示すように、プログラム制御により動作す
るデータ処理装置500と、キーボード等の入力装置1
01と、ディスプレイ等の出力装置107とから構成さ
れている。
【0028】データ処理装置500は、デバッグ手段5
02と、被検査プログラムを格納するプログラム記憶領
域508と、プログラム実行手段509と、実行履歴記
憶領域511とを含む。
【0029】このような構成を有する従来の実行履歴記
憶方式は次のように動作する。
【0030】すなわち、デバッグ手段502は、入力装
置101からデバッグの開始指示を受け取ると、実行履
歴記憶領域511を初期化する。次に、プログラム実行
手段509で被検査プログラムを実行する。プログラム
実行手段509は、プログラム記憶領域508に格納さ
れた被検査プログラムを実行すると共に、実行履歴記憶
領域511にその実行履歴を記憶していく。被検査プロ
グラムの実行が完了すると、デバッグ手段502は、実
行履歴記憶領域511に記憶された実行履歴結果を出力
装置107に出力する。
【0031】先の特開昭64−88648号公報(従来
例4)では、実行履歴記憶領域511は、デバッグ開始
時に全ての記憶領域に0が書き込まれ、プログラム実行
時にはプログラム実行手段509から出力される実行ア
ドレスに対応した記憶領域に1が書き込まれるようにな
っている。
【0032】また、特開昭62−212864号公報
(従来例5)では、プログラム実行手段509は、被検査
プログラムを1命令ずつ実行し、実行アドレスの値を実
行履歴記憶領域511に順次蓄積していくようになって
いる。
【0033】しかし、これらの従来技術には、次のよう
な問題点があった。
【0034】第1の問題点は、被検査プログラムの実行
開始時点からの実行履歴を収集しているため、一度でも
命令を実行してしまうと実行履歴が「実行済み」となっ
てしまい、被検査プログラムのソースコードの1行内で
行われる繰り返し処理に対して、各回の繰り返し毎にソ
ースステップ実行を停止させるために「実行済み」の検
出をやり直すことが煩雑であるということである。「実
行済み」の検出をやり直すには、オペレータ自身がソー
スステップ実行毎に、ソースコードの1行の先頭アドレ
スと最終アドレスを調べ、そのアドレス範囲にある実行
履歴記憶領域511を「未実行」に再初期化していかな
ければならず、余分な作業時間を使ってしまいデバッグ
の能率向上を阻害してしまう。
【0035】第2の問題点は、もともと未実行箇所の検
出を目的としているため、実行済みの箇所を再実行しよ
うとした時に自動的にそれを検出して通知するという手
段がないことである。従って、被検査プログラムのソー
スコードの1行内で行われる繰り返し処理に対して、各
回の繰り返し毎にステップ実行を区切ろうとすると、個
々のステップ実行が完了する度にオペレータ自身が次に
実行するアドレスが実行済みかどうかを確認しなければ
ならず、余分な作業時間を使ってしまいデバッグの能率
向上を阻害してしまう。
【0036】従来の範囲指定ステップ実行方式の一例
が、特開昭59−30155号公報に記載されている。
【0037】この従来例6は、図26に示すように、入
力装置から実行下限アドレスと実行上限アドレスを受け
取り(ステップG1)、プログラムカウンタに実行下限
アドレスを格納し(ステップG2)、プログラムカウン
タが指すアドレスの1命令を実行し(ステップG3)、
実行後のプログラムカウンタの値を読み出す(ステップ
G4)。プログラムカウンタの値が実行下限アドレスと
実行上限アドレスの範囲内にあれば1命令毎の実行を繰
り返し(ステップG5)、範囲外になれば繰り返しを止
めて出力装置に範囲指定ステップ実行の実行完了を通知
する(ステップG6)。
【0038】しかし、この従来技術には、次のような問
題点があった。
【0039】第1の問題点は、ソースコードの1行内で
先頭アドレス以外に分岐する繰り返し処理が行われてい
ると、各回の繰り返し毎に範囲指定ステップ実行を停止
させることができず、全ての繰り返しが終わった後でよ
うやく範囲指定ステップ実行が停止するということであ
る。
【0040】第2の問題点は、ソースステップ実行とし
て利用する場合に、オペレータ自身が範囲指定ステップ
実行毎にソースコードの1行の先頭アドレスと最終アド
レスを調べ、そのアドレス範囲を指示しなければならな
いということである。そのため、余分な作業時間を使っ
てしまいデバッグの能率向上を阻害してしまう。
【0041】
【発明が解決しようとする課題】本発明の目的は、従来
技術の上記問題点に鑑み、繰り返し処理を有する被検査
プログラムをソースステップ実行によりソースデバッグ
する場合に、被検査プログラムのソースコードの1行内
で繰り返し処理が行われていても、各回の繰り返し毎に
ソースステップ実行を停止させることができるソースス
テップ実行方法およびその装置を提供することにある。
【0042】
【課題を解決するための手段】本発明のソースステップ
実行方法は、上記課題を解決するため、入力装置からソ
ースステップ実行の開始指示を受けてプログラムカウン
タに格納されているアドレスPを読み出し、デバッグ情
報検索手段でデバッグ情報記憶領域を調べ、アドレスP
がソースコードの行Nから生成されたプログラムコード
の先頭アドレスSと最終アドレスEの範囲内に含まれる
ような行Nを検索する工程、範囲指定実行履歴初期化手
段で、検索した行Nの先頭アドレスSと最終アドレスE
の範囲内の実行履歴記憶領域を未実行であることを示す
データで初期化する工程、プログラム実行手段は、プロ
グラム記憶領域からプログラムカウンタが指すアドレス
Pの1命令を読み込んで実行すると共に、アドレスPの
命令を実行したことを示すデータを実行履歴記憶領域に
書き込み、命令を実行した後の次に実行すべき命令のア
ドレスP’をプログラムカウンタに格納する工程、デバ
ッグ手段は、プログラムカウンタに格納されているアド
レスP’を読み出し、実行範囲検査手段でアドレスP’
が行Nの先頭アドレスSと最終アドレスEの範囲内であ
るか調べ、範囲内であれば、実行履歴検査手段でアドレ
スP’の実行履歴記憶領域のデータを調べ、未実行であ
れば、再びプログラム実行手段で1命令を実行し処理を
繰り返す工程、アドレスP’が範囲外であれば、行Nの
プログラムコードの範囲外に抜けたと判断し、出力装置
にソースステップ実行の実行完了を通知し、アドレス
P’が実行済みであれば、行Nのプログラムコードの範
囲内で繰り返し処理を実行しようとしていると判断し、
同様に出力装置にソースステップ実行の実行完了を通知
する工程、とから成るものである。また、そのためのソ
ースステップ実行装置である。
【0043】本発明によれば、被検査プログラムのソー
スコードの1行内で繰り返し処理が行われていても、各
回の繰り返し毎にソースステップ実行を停止させること
を可能にする。
【0044】
【発明の実施の形態】本発明の第1実施形態について図
面を参照して説明する。
【0045】図1は本発明における第1実施形態の構成
を示すブロック図、図3は第1実施形態のデバッグ情報
テーブルの構成を示す図である。
【0046】図1を参照すると、本発明のソースステッ
プ実行方式の第1実施形態は、プログラム制御により動
作するデータ処理装置100と、キーボード等の入力装
置101と、ディスプレイ等の出力装置107とから構
成されている。
【0047】データ処理装置100は、デバッグ手段1
02と、プログラム記憶領域108と、プログラム実行
手段109と、実行履歴記憶領域111と、デバッグ情
報記憶領域112とを含む。デバッグ手段102は、デ
バッグ情報検索手段103と、範囲指定実行履歴初期化
手段104と、実行範囲検査手段105と、実行履歴検
査手段106とを含む。また、プログラム実行手段10
9はプログラムカウンタ110を含む。
【0048】さらに、これらの手段は、それぞれ、概略
次のように動作する。
【0049】デバッグ手段102は、入力装置101か
らの入力を解析し、ソースステップ実行など指示された
処理を行い、結果を出力装置107に出力する。
【0050】プログラム記憶領域108とデバッグ情報
記憶領域112には、予め、それぞれ被検査プログラム
と被検査プログラムに対応するデバッグ情報テーブルが
格納されている。デバッグ情報テーブルには、図3に示
すように、被検査プログラムのソースコード(図示なし)
の各行番号302に対して、その行から生成されたプロ
グラムコードの先頭アドレス303が、一覧表の形で格
納されている。ここで、図3中の番号301は、単に説
明の都合上つけた番号であり、実際に格納されているわ
けではない。
【0051】なお、デバッグ情報テーブルの最後の部分
は特別になっており、アドレス部分にプログラムコード
の最終アドレス+1が格納される。この部分の行番号部
分は何でも良いが、通常の行番号と紛らわしくないよう
な値(例えば本来あり得ない0という値など)が格納さ
れる。これらは、デバッグ情報テーブルの検索を簡単に
するためである。
【0052】また、検索の都合上、デバッグ情報テーブ
ルのアドレス部分は必ず昇順になっていなければならな
いが、行番号部分は必ずしも昇順になっている必要はな
い。実際、ソースコードをコンパイルしてプログラムコ
ードを生成してみると、生成されたプログラムコードの
並び方がソースコードに記述された順番通りにならない
ことは良くあることである。
【0053】ソースコードが複数のソースファイルから
成り立っている場合には、行番号と一緒にソースファイ
ル名も格納される。また、行番号やソースファイル名や
アドレスは、そのままの形で格納されるとは限らない。
例えば、サブプログラム定義部の先頭からの相対行番号
であったり、ソースファイル名を示すインデックス番号
であったり、プログラムコード内のセグメントと呼ばれ
る単位の先頭からの相対アドレスであったりする。
【0054】デバッグ情報検索手段103は、デバッグ
情報記憶領域112に格納されたデバッグ情報テーブル
を検索し、指定されたアドレスのプログラムコードが生
成されたソースコードの行番号302と、そのソースコ
ードの行から生成されたプログラムコードの先頭アドレ
ス303と最終アドレスE(図4とともに後述する)を取
得する。
【0055】実行履歴記憶領域111は、被検査プログ
ラムの各命令が未実行か実行済みかを記憶する。例え
ば、未実行の状態を示すのにデータ”0”を割り当て、
実行済みの状態を示すのにデータ”1”を割り当て、こ
れら”0”または”1”により2つの状態を記憶する。
なお、実行履歴記憶領域111は、プログラム記憶領域
108と同じ大きさのアドレス空間を持つものとする。
すなわち、プログラム記憶領域108をアクセスする場
合のアドレス値と同じ値を用いて、実行履歴記憶領域1
11にアクセスできるものとする。
【0056】範囲指定実行履歴初期化手段104は、指
定されたアドレス範囲内の実行履歴記憶領域111を未
実行を示すデータ”0”で初期化する。
【0057】プログラム実行手段109は、プログラム
カウンタ110が指すアドレスの命令を実行する。実行
範囲検査手段105は、実行するアドレスが実行中の行
から生成されたプログラムコードの先頭アドレスと最終
アドレスの範囲内にあるかを調べる。実行履歴検査手段
106は、実行するアドレスが未実行であるか実行済み
であるかを調べる。
【0058】次に、本実施形態の全体の動作について図
面を参照して詳細に説明する。
【0059】図2は第1実施形態のソースステップ実行
のフローチャート、図4は第1実施形態のデバッグ情報
テーブル検索処理のフローチャート、図5は第1実施形
態の範囲指定実行履歴初期化処理のフローチャートであ
る。
【0060】デバッグ手段102は、入力装置101か
らソースステップ実行の開始指示を受け取ると、プログ
ラムカウンタ110に格納されているステップ実行対象
であるプログラムの現在のアドレスPを読み出す(ステ
ップA1)。
【0061】次に、デバッグ手段102は、デバッグ情
報検索手段103でデバッグ情報記憶領域112を調
べ、アドレスPがソースコードの行Nから生成されたプ
ログラムコードの先頭アドレスSと最終アドレスEの範
囲内に含まれるような行Nを検索する(ステップA
2)。
【0062】デバック情報テーブルの検索は、具体的に
は図4に示すように、先ず、デバッグ情報テーブルの番
号を示す変数Iを0で初期化する(ステップB1)。次
に、デバッグ情報記憶領域112から、デバッグ情報テ
ーブルのI番目のアドレス部分とI+1番目のアドレス
部分を読み出し、アドレスPが2つのアドレスの範囲内
に含まれるかどうか調べる(ステップB2)。範囲内に
含まれていなければ、変数Iをインクリメントする(ス
テップB3)。インクリメント後のIの値がデバッグ情
報テーブルの大きさZ(デバッグ情報テーブルの最後の
部分を除く)よりも大きい場合には、検索アドレスPは
ソースコードから生成されたプログラムコード外(例え
ばオペレーティングシステムやライブラリルーチン)を
指していることになるので、検索は失敗したものとする
(ステップB4)。なお、検索に失敗した場合には、デ
バッグ手段102は、出力装置107にソースステップ
実行の実行中止を通知する。
【0063】インクリメント後のIの値がデバッグ情報
テーブルの大きさZよりも小さければ、ステップB2に
戻って処理を繰り返す。ステップB2において、検索ア
ドレスPが2つのアドレスの範囲内に含まれていれば、
その時の行番号[I]が求める行Nであり、アドレス
[I]が先頭アドレスS、アドレス[I+1]−1が最
終アドレスEである(ステップB5)。先述の最終アド
レスEについては、このようにして取得する。
【0064】全体動作の説明に戻って、デバッグ手段1
02は、範囲指定実行履歴初期化手段104で、検索し
た行Nの先頭アドレスSと最終アドレスEの範囲内の実
行履歴記憶領域111を未実行であることを示すデータ
(例えば”0”)で初期化する(ステップA3)。
【0065】初期化は、図5に示すように、先ず、初期
化するアドレスを示す変数Vに先頭アドレスSを代入す
る(ステップC1)。次に、アドレスVの実行履歴記憶
領域に未実行であることを示すデータ(例えば”0”)
を書き込む(ステップC2)。そして、変数Vをインク
リメントする(ステップC3)。次に、変数Vが最終ア
ドレスEより小さいか調べる(ステップC4)。小さけ
ればステップC2に戻って初期化処理を繰り返す。大き
ければ初期化を終了する。
【0066】再び全体動作の説明に戻って、デバッグ手
段102は、プログラム実行手段109で1命令を実行
する(ステップA4)。プログラム実行手段109は、
プログラム記憶領域108からプログラムカウンタ11
0が指すアドレスPの1命令を読み込んで実行すると共
に、アドレスPの命令を実行したことを示すデータ(例
えば”1”)を実行履歴記憶領域111のアドレスPに
書き込む(ステップA5)。そして、命令を実行した後
のアドレス、すなわち、次に実行すべき命令のアドレス
P’をプログラムカウンタ110に格納する(ステップ
A6)。
【0067】次に、デバッグ手段102は、プログラム
カウンタ110に格納されている次のアドレスP’を読
み出し(ステップA7)、実行範囲検査手段105でア
ドレスP’が行Nの先頭アドレスSと最終アドレスEの
範囲内であるか調べ、アドレスP’が範囲外であれば、
行Nのプログラムコードの範囲外に抜けたと判断し、ソ
ースステップ実行を完了する(ステップA8)。
【0068】アドレスP’が範囲内であれば、実行履歴
検査手段106でアドレスP’の実行履歴記憶領域11
1のデータを調べ、アドレスP’が実行済みを示す”
1”であれば行Nのプログラムコードの範囲内で繰り返
し処理を実行しようとしていると判断し、ソースステッ
プ実行を完了する(ステップA9)。
【0069】アドレスP’が未実行を示す“0”であれ
ば、再びプログラム実行手段109で1命令を実行しソ
ースステップ処理を繰り返す(ステップA4〜A9)。
【0070】最後に、デバッグ手段102は、ソースス
テップ実行が完了したら出力装置107にソースステッ
プ実行の実行完了を通知する。
【0071】次に、これまでの動作について、具体例を
用いてさらに詳しく説明する。
【0072】図6はソースコードの一例を示す図であ
り、このソースコードでは、10行目でソースの1行内
において繰り返し処理が行われている。図7は図6のソ
ースコードをコンパイルした後のプログラムコードの一
例を示す図であり、このプログラムコードでは、$L2
05への分岐により繰り返し処理が行われている。
【0073】図8(A)は、これらと対応するデバッグ
情報テーブルの一例であり、繰り返し処理が行われてい
る箇所のデバッグ情報テーブルは、テーブルの5番目に
記述されており、行番号は10、アドレスは0000c
となっている。テーブルの6番目には、次の処理の行番
号とアドレスが記述されている。ここでは、行番号が1
3、アドレスが00021となっている。また、図8
(B)は、プログラムコードを実行して行った時の実行
履歴記憶領域111の変化を示したものである。いま、
被検査プログラムの先頭からソースステップ実行を順次
繰り返して行って、ソースコードの10行目に到達した
ところから説明を始める。
【0074】先ず、図2に示すステップA1で、プログ
ラムカウンタの値として0000cを得る。次に、ステ
ップA2で、アドレス0000cを含む行を検索する
と、アドレス0000cは5番目のアドレス(0000
c)と6番目のアドレス−1(00020)の範囲内に
含まれるので、先頭アドレス0000cと最終アドレス
00020を得る。また、同時に行番号10を得る。
【0075】次に、ステップA3で、アドレス0000
cからアドレス00020までの実行履歴記憶領域に”
0”を書き込む。次に、ステップA4でアドレス000
0cの命令”inc ecx”を実行し、ステップA5
で実行履歴記憶領域のアドレス0000cに”1”を書
き込み、ステップA6でプログラムカウンタの値が00
00dに変化する。
【0076】ステップA7でプログラムカウンタの値と
して0000dを得る。ステップA8で、アドレス00
00dと先頭アドレス0000cと最終アドレス000
20を比較すると、範囲内に含まれるのでステップA9
に移る。ステップA9で、実行履歴記憶領域のアドレス
0000dを読み出すと、未実行を示す”0”が読み出
されるのでステップA4に移る。このようにして、アド
レス0000cからアドレス0001dまでの命令を実
行し、それと共に実行履歴記憶領域のアドレス0000
cからアドレス0001dに”1”を書き込み、再びス
テップA4に移ったとする。
【0077】ステップA4でアドレス0001fの命
令”jne SHORT $L205”を実行し、ステ
ップA5で実行履歴記憶領域のアドレス0001fとア
ドレス00020に”1”を書き込み、ステップA6で
プログラムカウンタの値が00017に変化する。ステ
ップA7でプログラムカウンタの値として00017を
得る。ステップA8で、アドレス00017と先頭アド
レス0000cと最終アドレス00020を比較する
と、範囲内に含まれるのでステップA9に移る。ステッ
プA9で、実行履歴記憶領域のアドレス00017を読
み出すと、実行済みを示す”1”が読み出されるのでソ
ースステップ実行を完了する。
【0078】図9は別のソースコードの一例を示し、こ
のソースコードでは、4行目と5行目で繰り返し処理が
行われている。図10は、図9のソースコードをコンパ
イルした後のプログラムコードの一例である。このプロ
グラムコードでは、コンパイラのコード最適化機能によ
り4行目と5行目に加え3行目のソースコードまでがひ
とかたまりになって生成され、$L213への分岐によ
り繰り返し処理が行われている。
【0079】図11(A)は、これらと対応するデバッグ
情報テーブルの一例であり、図11(B)は、プログラム
コードを実行して行った時の実行履歴記憶領域111の
変化を示した図である。
【0080】繰り返し処理が行われている箇所のデバッ
グ情報テーブルは、テーブルの1番目に記述されてお
り、行番号は4、アドレスは00000となっている。
プログラムコードがひとかたまりになって生成されてい
るので、行番号3や行番号5は存在しない。テーブルの
2番目には、次の処理の行番号とアドレスが記述されて
いる。ここでは、行番号が7、アドレスが00021と
なっている。
【0081】この場合、ソースの1行内において繰り返
し処理が行われているわけではないが、デバッグ情報テ
ーブルとしてはソースの1行内において繰り返し処理が
行われているのと同じことになり、図7、8、9に対し
て説明した手順で各回の繰り返し毎にソースステップ実
行を完了させることができる。
【0082】次に、本発明の第1実施形態の変形態様に
ついて説明する。
【0083】本発明の第1実施形態では、実行履歴記憶
領域111は、プログラム記憶領域108と同じ大きさ
のアドレス空間を持つものとしたが、必ずしも同じ大き
さである必要はない。
【0084】プログラム記憶領域108には未使用領域
があることも多いので、実行履歴記憶領域111の大き
さをプログラム記憶領域108より小さくし、所定の手
段(例えばアドレスの上位ビット部分をアドレス変換テ
ーブルを使用して別のアドレスにアドレス変換する仮想
記憶方式等の手段)で、プログラム記憶領域108のア
ドレスを実行履歴記憶領域111のアドレスに変換する
ようにしても良い。あるいは、ソースプログラムの1行
は大きなサイズのプログラムコードにならない(4Kバ
イトを越えるようなことは通常あり得ない)ことを利用
し、実行履歴記憶領域111のサイズを例えば4Kバイ
ト程度に小さくして、アドレスの上位ビット部分(4K
バイト以上に相当する部分)を無視するようにしても良
い。この場合、ソースプログラムの1行のアドレス範囲
によっては実行履歴記憶領域111の上限アドレス(4
095番地)と下限アドレス(0番地)を跨ぐことがあ
るが、ソースプログラムの1行が4Kバイト以下に収ま
っている限り、実行履歴が重複してしまうことはないの
で問題ない。
【0085】また、実行履歴記憶領域111は、ソース
ステップ実行用に専用の記憶領域を用意しても良いが,
従来からある実行履歴測定用(カバレッジ測定用)の記
憶領域を流用しても良い。その場合には、従来の実行履
歴測定(カバレッジ測定)を同時に実施することはでき
なくなるが、オペレータが実行履歴測定機能を選択でき
るようにすれば良い。
【0086】また、実行履歴記憶領域111に対し、範
囲指定実行履歴初期化手段104は、先頭アドレスSか
ら最終アドレスEに向かってインクリメントしながら初
期化していったが、最終アドレスEから先頭アドレスS
に向かってデクリメントしながら初期化しても良い。
【0087】また、実行履歴記憶領域111には、実行
した各命令の全てのアドレスに実行済みを示すデータ
(例えば”1”)を書き込むようにしたが、各命令の先
頭アドレスにのみ”1”を書き込むようにしても良い。
すなわち、5バイトで1命令が構成されているような場
合でも、5バイトすべてに”1”を書き込む必要はな
く、先頭の1バイトにのみ”1”を書き込むようにして
も、命令が実行されたかどうかを判別することに支障は
ない。
【0088】また、実行範囲検査を先に行い実行履歴検
査を後で行ったが、これらの検査順序は逆でも良い。ま
た、ハードウェア的に検査を行う場合には、同時に検査
することもできる。
【0089】また、本発明の第1実施形態では、プログ
ラム停止位置からのソースステップ実行を想定している
ため、図2のステップA1でプログラムカウンタに格納
されたアドレスを読み出し、ステップA2で行Nを検索
していたが、オペレータが実行すべき行Nを直接指定し
たい場合もある。その場合、ステップA1、A2の代わ
りに、デバッグ情報テーブルから行Nの先頭アドレスS
と最終アドレスEを取得し、行Nの先頭アドレスSをプ
ログラムカウンタに格納してから、ステップA3以降を
実行すれば良い。
【0090】次に、本発明の第2実施形態について図面
を参照して説明する。
【0091】図12は本発明における第2実施形態の構
成を示すブロック図、図13は第2実施形態におけるプ
ログラム記憶回路の回路図、図14は第2実施形態にお
けるプログラム実行回路の回路図、図15は第2実施形
態における実行範囲検査回路の回路図、図16は第2実
施形態における実行履歴検査回路の回路図、図17は第
2実施形態における実行履歴記憶回路の回路図、図18
は第2実施形態における範囲指定実行履歴初期化回路の
回路図である。
【0092】本実施形態は、図12に示すように、図1
に示されたデータ処理装置100に含まれていた範囲指
定実行履歴初期化手段104と、実行範囲検査手段10
5と、実行履歴検査手段106と、プログラム記憶領域
108と、プログラム実行手段109と、実行履歴記憶
領域111とが、データ処理装置120に接続されたプ
ログラム検査装置200に含まれるプログラム記憶回路
201、プログラム実行回路202、実行範囲検査回路
204、実行履歴検査回路205、実行履歴記憶回路2
06、範囲指定実行履歴初期化回路207となっている
点で異なる。
【0093】これらの手段は、それぞれ、概略次のよう
に動作する。
【0094】プログラム記憶回路201は、図13に示
すように、被検査プログラムを格納したROM211を
有し、プログラム実行回路202からのフェッチ信号、
アドレス信号、リード信号を入力し、格納された被検査
プログラムをデータ信号に出力する。
【0095】プログラム実行回路202は、図14に示
すように、CPU221を有し、外部記憶回路アクセス
時にアドレス信号、リード信号、ライト信号を出力し、
外部記憶回路からデータ信号を入出力する。これらは、
プログラム記憶回路201をアクセスする場合に使用さ
れるだけでなく、図示されないデータ記憶回路のアクセ
スにも使用される。そこで、プログラム実行回路202
は、どちらの記憶回路をアクセスするのか区別するため
に、プログラム記憶回路201のアクセス時にはフェッ
チ信号を出力する。フェッチ信号は、本実施形態では、
CPU221が直接出力するものとするが、CPU22
1外部に論理回路を付加して生成しても良い。
【0096】また、プログラム実行回路202は、同期
を取るためのクロック信号を出力する。クロック信号
も、本実施形態では、CPU221が直接出力するもの
とするが、CPU221外部に論理回路を付加して生成
しても良い。その他、プログラム実行回路202は、実
行停止信号によりプログラム実行を停止することがで
き、停止期間中は停止通知信号を出力する。また、停止
期間中もアドレス信号を出力するものとし、このアドレ
ス信号をプログラムカウンタ信号として出力する。この
アドレスは、次に実行する命令のアドレスであり、すな
わち、プログラムカウンタに格納されたアドレスだから
である。
【0097】実行範囲検査回路204は、図15に示す
ように、実行下限アドレスを保持するラッチ241と、
実行下限アドレスと実行アドレスを比較するコンパレー
タ242と、実行上限アドレスを保持するラッチ243
と、実行上限アドレスと実行アドレスを比較するコンパ
レータ244とを有し、プログラム実行回路202から
出力されたアドレス信号が設定されたアドレス範囲外で
あった場合に、プログラム実行回路202を停止させる
範囲外停止信号を出力する。
【0098】実行履歴検査回路205は、図16に示す
ように、実行履歴記憶回路206から出力された実行履
歴出力信号が実行済みを示す信号であった場合に、プロ
グラム実行回路202を停止させる実行済み停止信号を
出力する。
【0099】実行履歴記憶回路206は、図17に示す
ように、実行履歴を記憶するRAM261を有し、実行
履歴を記憶する。また、範囲指定実行履歴初期化回路2
07からの信号とプログラム実行回路202からの信号
を切り替えるセレクタ262及びセレクタ263とを有
する。
【0100】範囲指定実行履歴初期化回路207は、図
18に示すように、初期化アドレスを初期化下限アドレ
スからインクリメントしていくカウンタ271と、初期
化上限アドレスをラッチするラッチ272と、初期化上
限アドレスと初期化アドレスを比較するコンパレータ2
73とを有し、実行履歴記憶回路206の初期化に必要
な信号を生成する。
【0101】次に、第2実施形態の全体の動作につい
て、図面を参照して詳細に説明する。
【0102】図19は第2実施形態のソースステップ実
行のフローチャートである。なお、図19のステップD
2で示される本実施形態におけるデバッグ情報検索手段
123とデバッグ情報記憶領域121に関する動作は、
図1に示した第1実施形態のデバッグ情報検索手段10
3とデバッグ情報記憶領域112の動作と同じであるの
で、その説明は省略する。
【0103】先ず、デバッグ手段122は、プログラム
実行回路202からプログラムカウンタ203に格納さ
れているアドレスPを読み出す(ステップD1)。
【0104】プログラム実行回路202は、図14に示
すように、実行停止信号によりプログラム実行を停止す
ることができ、停止期間中は停止通知信号を出力する。
また、停止期間中もアドレス信号を出力するものとし、
このアドレス信号をプログラムカウンタ信号として出力
する。このアドレスは、次に実行する命令のアドレスで
あり、すなわち、プログラムカウンタに格納されたアド
レスだからである。従って、デバッグ手段122は、実
行停止信号をONにし、停止通知信号がONになってい
るのを確認した後、プログラムカウンタ信号を読み出せ
ば良い。
【0105】次に、デバッグ手段122は、範囲指定実
行履歴初期化回路207で、検索した行Nの先頭アドレ
スSと最終アドレスEの範囲内に対して、実行履歴記憶
回路206の記憶内容を未実行であることを示すデータ
で初期化する(ステップD3)。先ず、デバッグ手段1
02は、図18に示すように、初期化設定アドレス信号
に行Nの先頭アドレスSを出力し、初期化下限アドレス
ラッチ信号をONにし、カウンタ271にラッチする。
次に、デバッグ手段122は、初期化設定アドレス信号
に行Nの最終アドレスEを出力し、初期化上限アドレス
ラッチ信号をONにし、ラッチ272にラッチする。
【0106】次に、デバッグ手段122は、初期化開始
信号をONにする。初期化開始信号は、ラッチ274で
クロック信号と同期を取られた後、ANDゲート276
とANDゲート277に入力される。ANDゲート27
6は、初期化アドレスを生成するカウンタ271へのク
ロック信号の供給を制御する役割を持ち、インバータ2
75の出力とラッチ274の出力が共にONの場合のみ
クロック信号をカウンタ271に供給する。インバータ
275の出力は、コンパレータ273の出力を反転した
ものであり、コンパレータ273は、初期化アドレスを
生成するカウンタ271の出力と、初期化上限アドレス
を保持するラッチ272の出力を比較し、初期化アドレ
スが初期化上限アドレスより大きくなった場合(C1>
C0の場合)に出力QをONにする。すなわち、インバ
ータ275の出力は、初期化アドレスが初期化上限アド
レスを越えるまでの間ONを出力する。従って、カウン
タ271は、初期化開始信号がONになると初期化開始
アドレスから初期化上限アドレスまで順次インクリメン
トされていく。カウンタ271の出力は、実行履歴記憶
回路206の記憶内容を書き換えるアドレスを指定する
初期化アドレス信号として、また、ANDゲート276
の出力は、実行履歴記憶回路206の記憶内容を書き換
えるタイミングを指定する初期化ライト信号として、そ
れぞれ実行履歴記憶回路206に出力される。
【0107】一方、ANDゲート277は、カウンタ2
71がカウント動作中であることを示す信号を生成する
ものであり、カウント動作中はONを出力する。AND
ゲート277の出力は、実行履歴記憶回路206が範囲
指定実行履歴初期化回路207の出力を受け付けるよう
に切り替えるための初期化選択信号として実行履歴記憶
回路206に出力される。なお、コンパレータ273の
出力は、カウント動作が終了すると(すなわち初期化動
作が終了すると)ONになるので、これを初期化終了信
号として出力する。デバッグ手段122は、初期化終了
信号がONになったことを確認した後、次の処理に移
る。このようにして、範囲指定実行履歴初期化回路20
7は、実行履歴記憶回路206の初期化に必要な信号を
生成するが、これらの信号により、実行履歴記憶回路2
06は、次のように動作する。
【0108】図17に示すように、セレクタは、入力S
がOFFの場合は入力D0の内容を出力Qに出力し、入
力SがONの場合は入力D1の内容を出力Qに出力す
る。従って、初期化選択信号がONの場合、範囲指定実
行履歴初期化回路207からの初期化アドレス信号がア
ドレス信号としてRAM261に入力され、範囲指定実
行履歴初期化回路207からの初期化ライト信号がライ
ト信号としてRAM261に入力される。なお、初期化
選択信号はインバータ264で反転された後、入力デー
タとしてRAM261に入力される。ここで、ONを”
1”とし、OFFを”0”とすると、”0”が入力デー
タとしてRAM261に入力される。
【0109】こうして、範囲指定実行履歴初期化回路2
07により、行Nの先頭アドレスSと最終アドレスEの
範囲内に対して、RAM261のデータが”0”に書き
換えられる。他方、初期化選択信号がOFFの場合、プ
ログラム実行回路202から出力されたアドレス信号
と、フェッチ信号とクロック信号をANDした信号が、
それぞれRAM261に入力される。フェッチ信号とク
ロック信号はANDゲート265でANDされ、RAM
261にライト信号として入力される。また、初期化選
択信号はインバータ264で反転され、”1”が入力デ
ータとしてRAM261に入力される。こうして、プロ
グラム実行回路202から出力されたアドレスに対し
て、RAM261のデータが”1”に書き換えられる。
同時に、プログラム実行回路202から出力されたアド
レスに対して、それまでRAM261に記憶されていた
データが、ラッチ266でクロック信号と同期を取られ
た後、実行履歴検査回路205に実行履歴出力信号とし
て出力される。
【0110】次に、デバッグ手段122は、実行履歴検
査回路205に対し、実行済み停止許可信号をONにす
る(ステップD4)。実行履歴検査回路205は、図1
6に示すように、実行済み停止許可信号と、実行履歴記
憶回路206から出力された実行履歴出力信号と、プロ
グラム実行回路202から出力されたフェッチ信号と、
クロック信号を、ANDゲート251でANDし、プロ
グラム実行回路202を停止させる実行済み停止信号を
出力する。実行済み停止許可信号をOFFにした場合、
実行履歴記憶回路206からの実行履歴出力信号が実行
済みを示す信号であっても、プログラム実行回路202
を停止させる実行済み停止信号はONにならない。従っ
て、実行済み停止許可信号を操作することで、従来のソ
ースステップ実行と本実施形態のソースステップ実行を
簡単に切り替えることができる。
【0111】次に、デバッグ手段102は、実行範囲検
査回路204に対し、行Nの先頭アドレスSと最終アド
レスEを、それぞれ実行下限アドレスと実行上限アドレ
スとして設定し、範囲外停止許可信号をONにする(ス
テップD5)。
【0112】デバッグ手段102は、図15に示すよう
に、範囲設定アドレス信号に行Nの先頭アドレスSを出
力し、実行下限アドレスラッチ信号をONにし、ラッチ
241にラッチする。次に、デバッグ手段102は、範
囲設定アドレス信号に行Nの最終アドレスEを出力し、
実行上限アドレスラッチ信号をONにし、ラッチ243
にラッチする。
【0113】次に、デバッグ手段102は、範囲外停止
許可信号をONにする。実行範囲検査回路204は、範
囲外停止許可信号と、コンパレータ242の出力とコン
パレータ244の出力をORしているORゲート245
の出力と、プログラム実行回路202から出力されたフ
ェッチ信号と、クロック信号を、ANDゲート246で
ANDし、プログラム実行回路202を停止させる範囲
外停止信号を出力する。コンパレータ242は、実行下
限アドレスを保持するラッチ241の出力と、プログラ
ム実行回路202から出力されたアドレス信号を比較
し、実行アドレスが実行下限アドレスより小さくなった
場合(C1>C0の場合)に出力QをONにする。逆
に、コンパレータ244は、実行上限アドレスを保持す
るラッチ243の出力と、プログラム実行回路202か
ら出力されたアドレス信号を比較し、実行アドレスが実
行上限アドレスより大きくなった場合(C1>C0の場
合)に出力QをONにする。
【0114】このようにして、実行範囲検査回路204
は、プログラム実行回路202から出力されたアドレス
信号が、行Nの先頭アドレスSと最終アドレスEの範囲
外になった場合に、プログラム実行回路202を停止さ
せる範囲外停止信号を出力する。なお、範囲外停止許可
信号をOFFにした場合、範囲外であっても、プログラ
ム実行回路202を停止させる範囲外停止信号はONに
ならない。従って、範囲外停止許可信号を操作すること
で、ソースステップ実行と通常のプログラム実行を簡単
に切り替えることができる。
【0115】次に、デバッグ手段122は、プログラム
実行回路202に対し、実行停止信号をOFFにする
(ステップD6)。図14に示すように、実行停止信号
は、実行範囲検査回路204から出力された範囲外停止
信号や、実行履歴検査回路205から出力された実行済
み停止信号と、ORゲート222でORされ、プログラ
ム実行回路202に出力される。デバッグ手段102
が、実行停止信号をOFFにする時点(すなわちソース
ステップ実行を開始する時点)では、範囲外停止信号も
実行済み停止信号も共にOFFであるため、ORゲート
222の出力もOFFになり、プログラム実行回路20
2は直ちに被検査プログラムの実行を開始する。
【0116】この後、デバッグ手段122は、プログラ
ム実行回路202から出力される停止通知信号を監視
し、停止通知信号がONになるのを待つ(ステップD
7)。被検査プログラムの実行アドレスが、行Nの先頭
アドレスSと最終アドレスEの範囲外になった場合や範
囲内であっても実行済みであった場合には、範囲外停止
信号や実行済み停止信号がONになるため、ORゲート
222の出力がONになり、プログラム実行回路202
は直ちにプログラム実行を停止する。デバッグ手段12
2は、プログラム実行回路202から出力される停止通
知信号を監視し、停止通知信号がOFFのままであれば
ステップD7に戻って停止通知信号がONになるのを待
ち、停止通知信号がONになっていればソースステップ
実行を完了する(ステップD8)。
【0117】本発明の第2実施形態の変形態様について
説明する。
【0118】本発明の第2実施形態も、実行履歴記憶回
路206は、プログラム記憶回路201と同じ大きさの
アドレス空間を持つものとしたが、必ずしも同じ大きさ
である必要はない。プログラム記憶回路201には未使
用領域があることも多いので、実行履歴記憶回路206
の大きさをプログラム記憶回路201より小さくし、前
述した実施形態の拡張同様、所定の手段で、プログラム
記憶回路201のアドレスを実行履歴記憶回路206の
アドレスに変換するようにしても良い。あるいは、前述
した実施形態の拡張同様、実行履歴記憶回路206のサ
イズを例えば4Kバイト程度に小さくして、アドレスの
上位ビット部分(4Kバイト以上に相当する部分)を無
視するようにしても良い。
【0119】また、実行履歴記憶回路206は、ソース
ステップ実行用に専用の記憶回路を用意しても良いが,
従来からある実行履歴測定用(カバレッジ測定用)の記
憶回路を流用しても良い。その場合には、従来の実行履
歴測定(カバレッジ測定)を同時に実施することはでき
なくなるが、オペレータが機能を選択できるようにすれ
ば良い。
【0120】また、実行履歴記憶回路206に対し、範
囲指定実行履歴初期化回路207は、初期化下限アドレ
スから初期化上限アドレスに向かってインクリメントし
ながら初期化していったが、初期化上限アドレスから初
期化下限アドレスに向かってデクリメントしながら初期
化しても良い。
【0121】また、実行履歴記憶回路206には、実行
した各命令の全てのアドレスに実行済みを示すデータ
(例えば”1”)を書き込むようにしたが、各命令の先
頭アドレスにのみ”1”を書き込むようにしても良い。
すなわち、5バイトで1命令が構成されているような場
合でも、5バイトすべてに”1”を書き込む必要はな
く、先頭の1バイトにのみ”1”を書き込むようにして
も、命令が実行されたかどうかを判別することに支障は
ない。
【0122】また、第2実施形態でも、プログラム停止
位置からのソースステップ実行を想定しているため、図
19のステップD1でプログラムカウンタに格納された
アドレスを読み出し、ステップD2で行Nを検索してい
たが、オペレータが実行すべき行Nを直接指定したい場
合もある。その場合、ステップD1、D2の代わりに、
デバッグ情報テーブルから行Nの先頭アドレスSと最終
アドレスEを取得し、行Nの先頭アドレスSをプログラ
ムカウンタに格納してから、ステップD3以降を実行す
れば良い。
【0123】
【発明の効果】以上説明したように、本発明によれば、
ソースステップ実行において、それぞれのソースステッ
プ実行の実行開始時点からの実行履歴を使って実行済み
かどうかを検査し、実行済みであればソースステップ実
行を完了するようになっているため、次のような効果を
得ることができる。
【0124】第1の効果は、被検査プログラムのソース
コードの1行内で繰り返し処理が行われていても、各回
の繰り返し毎にソースステップ実行を停止させることが
できることにある。
【0125】第2の効果は、高度に最適化されたプログ
ラムコードを生成するコンパイラにより、繰り返し処理
をしているソースコードの複数行がひとまとまりのプロ
グラムコードとして生成されたり、場合によっては前後
の行も含めてひとまとまりのプログラムコードとして生
成されたりする場合でも、各回の繰り返し毎にソースス
テップ実行を停止させることができることにある。
【0126】その結果、また、各回の繰り返し毎に被検
査プログラムの実行状況を確認することができ、デバッ
グの能率を向上させることができる効果がある。
【図面の簡単な説明】
【図1】本発明の第1実施形態の構成を示すブロック図
【図2】第1実施形態のソースステップ実行のフローチ
ャート
【図3】第1実施形態のデバッグ情報テーブルの構成
【図4】第1実施形態のデバッグ情報テーブル検索処理
のフローチャート
【図5】第1実施形態の範囲指定実行履歴初期化処理の
フローチャート
【図6】ソースコード例1
【図7】ソースコード例1をコンパイルしたプログラム
コード
【図8】(A)はソースコード例1のデバッグ情報テー
ブルの一例、(B)はプログラムコードを実行して行っ
た時の実行履歴記憶領域の変化を示した図
【図9】ソースコード例2
【図10】ソースコード例2をコンパイルしたプログラ
ムコード
【図11】(A)はソースコード例2のデバッグ情報テ
ーブルの一例、(B)はプログラムコードを実行して行
った時の実行履歴記憶領域の変化を示した図
【図12】本発明の第2実施形態の構成を示すブロック
【図13】第2実施形態におけるプログラム記憶回路の
回路図
【図14】第2実施形態におけるプログラム実行回路の
回路図
【図15】第2実施形態における実行範囲検査回路の回
路図
【図16】第2実施形態における実行履歴検査回路の回
路図
【図17】第2実施形態における実行履歴記憶回路の回
路図
【図18】第2実施形態における範囲指定実行履歴初期
化回路の回路図
【図19】第2実施形態のソースステップ実行のフロー
チャート
【図20】ソースステップ実行方式の従来例1のデバッ
グ情報テーブル
【図21】ソースステップ実行方式の従来例1のフロー
チャート
【図22】ソースステップ実行方式の従来例2のデバッ
グ情報テーブル
【図23】ソースステップ実行方式の従来例2のフロー
チャート
【図24】従来のループ状態検知方式の一構成を示すブ
ロック図
【図25】従来の実行履歴記憶方式の一構成を示すブロ
ック図
【図26】範囲指定ステップ実行方式の従来例のフロー
チャート
【符号の説明】
100 データ処理装置 101 入力装置 102 デバック手段 103 デバック情報検索手段 104 範囲指定実行履歴初期化手段 105 実行範囲検査手段 106 実行履歴検査手段 107 出力装置 108 プログラム記憶領域 109 プログラム実行手段 110 プログラムカウンタ 111 実行履歴記憶領域 112 デバック情報記憶領域 120 データ処理装置 121 デバック情報記憶領域 122 デバック手段 123 デバック情報検索手段 200 プログラム検査装置 201 プログラム記憶回路 202 プログラム実行回路 203 プログラムカウンタ 204 実行範囲検査回路 205 実行履歴検査回路 206 実行履歴記憶回路 207 範囲指定実行履歴初期化回路 211 ROM 221 CPU 241、243 ラッチ 242、244 コンパレータ 245 ORゲート 246 ANDゲート 251 ANDゲート 261 RAM 262、263 ラッチ 264 インバータ 265 ANDゲート 266 ラッチ 271 カウンタ 272 ラッチ 273 コンパレータ 274 ラッチ 275 インバータ 276、277 ANDゲート 400 データ処理装置 402 デバック装置 408 プログラム記憶領域 409 プログラム実行手段 421 ループ判定手段 422 ループ判定ポイント 423 ループカウンタ 500 データ処理装置 502 デバック手段 508 プログラム記憶領域 509 プログラム実行手段 511 実行履歴記憶領域
───────────────────────────────────────────────────── フロントページの続き (56)参考文献 特開 昭61−180342(JP,A) 特開 昭62−107345(JP,A) 特開 昭63−92034(JP,A) 特開 昭57−100544(JP,A) 特開 昭63−223928(JP,A) 特開 昭63−223931(JP,A) 特開 昭58−52760(JP,A) 特開 昭61−213935(JP,A) 特開 平9−319614(JP,A) 特開 平3−53347(JP,A) (58)調査した分野(Int.Cl.7,DB名) G06F 11/28 305

Claims (6)

    (57)【特許請求の範囲】
  1. 【請求項1】 入力装置からソースステップ実行の開始
    指示を受けてプログラムカウンタに格納されているアド
    レスPを読み出し、次いでデバッグ情報記憶領域を調
    べ、アドレスPがソースコードの行Nから生成されたプ
    ログラムコードの先頭アドレスSと最終アドレスEの範
    囲内に含まれるような行Nを検索する工程と、 検索した行Nの先頭アドレスSと最終アドレスEの範囲
    内の実行履歴記憶領域を未実行であることを示すデータ
    で初期化する工程と、 プログラム記憶領域からアドレスPの1命令を読み込ん
    で実行すると共に、アドレスPの命令を実行したことを
    示すデータを実行履歴記憶領域に書き込む工程と、 命令を実行した後の次に実行すべき命令のアドレスP’
    を取得し、次いでアドレスP’が行Nの先頭アドレスS
    と最終アドレスEの範囲内であるか調べ、範囲内であれ
    ば、アドレスP’の実行履歴記憶領域のデータを調べ、
    未実行であれば、再び1命令を実行し処理を繰り返す工
    程と、 アドレスP’が範囲外であれば、行Nのプログラムコー
    ドの範囲外に抜けたと判断し、出力装置にソースステッ
    プ実行の実行完了を通知し、またアドレスP’が実行済
    みであれば、行Nのプログラムコードの範囲内で繰り返
    し処理を実行しようとしていると判断し、同様に出力装
    置にソースステップ実行の実行完了を通知する工程とか
    ら成ることを特徴とするソースステップ実行方法。
  2. 【請求項2】 データ処理装置、入力装置及び出力装置
    とから成るソースステップ実行装置であって、 前記データ処理装置は、被検査プログラムを格納するプ
    ログラム記憶領域、デバック情報デーブルを格納するデ
    バック情報記憶領域、および被検査プログラムの各命令
    が未実行か実行済みかを記憶する実行履歴記憶領域を有
    するメモリ装置と、プログラムカウンタのアドレスに基
    づいて実行するプログラム実行手段と、デバック情報検
    索手段、指定されたアドレス範囲内の実行履歴記憶領域
    を未実行として初期化する範囲指定実行履歴初期化手
    段、実行するアドレスが実行中の行から生成されたプロ
    グラムコードの先頭アドレスと最終アドレスの範囲内に
    あるかを調べる実行範囲検査手段、前記実行履歴記憶領
    域のうちの実行するアドレスに対応したデータが実行済
    みを示すデータの場合には実行中の行から生成されたプ
    ログラムコードの範囲内で繰り返し処理を実行しようと
    していると判断し、前記出力装置にソースステップ実行
    の完了を通知する実行履歴検査手段を有するデバック手
    段を具有することを特徴とするソースステップ実行装
    置。
  3. 【請求項3】 入力装置からのソースステップ実行の開
    始指示を受けてプログラムカウンタに格納されているア
    ドレスPを読み出し、次いでデバッグ情報記憶領域を調
    べ、アドレスPがソースコードの行Nから生成されたプ
    ログラムコードの先頭アドレスSと最終アドレスEの範
    囲内に含まれるような行Nを検索する工程と、 検索した行Nの先頭アドレスSと最終アドレスEの範囲
    内に対して、実行履歴記憶回路の記憶内容を未実行であ
    ることを示すデータで初期化する工程と、前記実行履歴記憶回路のうちアドレスPに対応したデー
    タが実行済みを示すデータの場合には行Nのプログラム
    コードの範囲内で繰り返し処理を実行しようとしている
    と判断し、出力装置にソースステップ実行の完了を通知
    するための 実行履歴検査回路に対しプログラム実行回路
    への実行済み停止信号の出力を許可する実行済み停止許
    可信号をONにし、実行範囲検査回路に対し行Nの先頭
    アドレスSと最終アドレスEを、それぞれ実行下限アド
    レスと実行上限アドレスとして設定し、前記実行範囲検
    査回路に対しプログラム実行回路への範囲外停止信号の
    出力を許可する範囲外停止許可信号をONにする工程
    と、 プログラム実行回路に対し、実行停止信号をOFFに
    し、被検査プログラムの実行停止を解除する工程と、 プログラム実行回路から出力される停止通知信号を監視
    停止通知信号がOFFのままであれば監視を続けて
    停止通知信号がONになるのを待ち、停止通知信号がO
    Nになっていればソースステップ実行を完了する工程と
    から成ることを特徴とするソースステップ実行方法。
  4. 【請求項4】 データ処理装置、プログラム検査装置、
    入力装置及び出力装置とから成るソースステップ実行装
    置であって、 前記データ処理装置は、デバック情報検索手段と、デバ
    ック情報テーブルを保有するデバック情報記憶手段とを
    具有し、 前記プログラム検査装置は、被検査プログラムを格納す
    るプログラム記憶手段と、プログラムカウンタのアドレ
    スに基づいて実行するプログラム実行手段と、実行する
    アドレスが実行中の行から生成されたプログラムコード
    の先頭アドレスと最終アドレスの範囲内にあるかを調べ
    る実行範囲検査手段と、実行履歴を保有する実行履歴記
    憶手段と、前記実行履歴記憶手段のうちの実行するアド
    レスに対応したデータが実行済みを示すデータの場合に
    は実行中の行から生成されたプログラムコードの範囲内
    で繰り返し処理を実行しようとしていると判断し、前記
    出力装置にソースステップ実行の完了を通知する実行履
    歴検査手段と、指定されたアドレス範囲内の実行履歴記
    憶領域を未実行として初期化する範囲指定実行履歴初期
    化手段とを具有することを特徴とするソースステップ実
    行装置。
  5. 【請求項5】 実行履歴記憶領域がプログラム記憶領域
    のアドレスを変換して得られることを特徴とする請求項
    1または3に記載のソースステップ実行方法。
  6. 【請求項6】 実行履歴記憶領域がプログラム記憶領域
    のアドレスを変換して得られることを特徴とする請求項
    2または4に記載のソースステップ実行装置。
JP10323637A 1998-11-13 1998-11-13 ソースステップ実行方法およびその装置 Expired - Fee Related JP3098501B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP10323637A JP3098501B2 (ja) 1998-11-13 1998-11-13 ソースステップ実行方法およびその装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP10323637A JP3098501B2 (ja) 1998-11-13 1998-11-13 ソースステップ実行方法およびその装置

Publications (2)

Publication Number Publication Date
JP2000148534A JP2000148534A (ja) 2000-05-30
JP3098501B2 true JP3098501B2 (ja) 2000-10-16

Family

ID=18156955

Family Applications (1)

Application Number Title Priority Date Filing Date
JP10323637A Expired - Fee Related JP3098501B2 (ja) 1998-11-13 1998-11-13 ソースステップ実行方法およびその装置

Country Status (1)

Country Link
JP (1) JP3098501B2 (ja)

Also Published As

Publication number Publication date
JP2000148534A (ja) 2000-05-30

Similar Documents

Publication Publication Date Title
EP0785510B1 (en) Program debugging system for debugging a program having a graphical user interface
JP4094724B2 (ja) ソフトウェアをデバッグする際に例外を識別するための装置および方法
KR100695187B1 (ko) 단일 스텝 처리 방법 및 장치
US5819024A (en) Fault analysis system
EP3602307B1 (en) Enabling breakpoints on entire data structures
US6289264B1 (en) Debugging system for robot programs
JPH05165718A (ja) 処理システム
JP3098501B2 (ja) ソースステップ実行方法およびその装置
US6854109B2 (en) Tool for converting .MAP file formats
JP3461185B2 (ja) ロードモジュールへのソースコード行番号登録方法および装置
US20030225838A1 (en) Method and apparatus for implementing extended breakpoint notification
JP3130421B2 (ja) プログラム解析方法および装置
JP2001202272A (ja) デバッグの方法とこの方法を用いたデバッグ装置及びデバッグの方法を記録した記録媒体
JP3085309B2 (ja) デバッグシステム
JP2827724B2 (ja) プログラムデバッグ処理方法
KR950005523B1 (ko) 프로그램어블 로직 콘트롤러의 스텝 런 처리방법
JP2003015907A (ja) デバッグ装置、デバッグプログラム、およびプログラム記録媒体
JPH10240571A (ja) アドレストレース回路
JP2000057012A (ja) トレース装置
JPH07281924A (ja) トレース装置及びこれを備えたエミュレータ
JPH11184728A (ja) デバッグ処理方法ならびに装置及び同方法がプログラムされ記録される記録媒体
JP2002189613A (ja) ソフトウェア開発支援装置、ソフトウェア開発支援方法及びソフトウェア開発支援プログラムを記録したコンピュータ読み取り可能な記録媒体
JPH04367902A (ja) プログラマブルコントローラ
JPH06324919A (ja) 性能評価方法
JPS6270947A (ja) デバグ割込み制御方式

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees