JPH11224209A - デバッグ方法 - Google Patents
デバッグ方法Info
- Publication number
- JPH11224209A JPH11224209A JP10025841A JP2584198A JPH11224209A JP H11224209 A JPH11224209 A JP H11224209A JP 10025841 A JP10025841 A JP 10025841A JP 2584198 A JP2584198 A JP 2584198A JP H11224209 A JPH11224209 A JP H11224209A
- Authority
- JP
- Japan
- Prior art keywords
- address
- instruction
- area
- break
- user program
- 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)
Abstract
(57)【要約】
【課題】 ブレーク処理用の専用ハードウェアが必要と
なったり、ユーザプログラムで自番地ブレークが発生す
る可能性のある部分全てにNOP命令を書き込む必要が
あったりする。 【解決手段】 ステップ実行あるいはブレークアドレス
付き実行の開始前に、ユーザプログラム領域2の第1の
ブレークアドレスに書かれているBBC命令をモニタワ
ーク領域9の領域10にコピーして、その相対ジャンプ
先のオフセット値を調整し、モニタワーク領域の領域1
1に第2のブレークアドレスへのJMP命令を、領域1
2に第1のブレークアドレスへのJMP命令を設定し、
ユーザプログラム領域の第1および第2のブレークアド
レスのオペコードをBRK命令に書き替える。
なったり、ユーザプログラムで自番地ブレークが発生す
る可能性のある部分全てにNOP命令を書き込む必要が
あったりする。 【解決手段】 ステップ実行あるいはブレークアドレス
付き実行の開始前に、ユーザプログラム領域2の第1の
ブレークアドレスに書かれているBBC命令をモニタワ
ーク領域9の領域10にコピーして、その相対ジャンプ
先のオフセット値を調整し、モニタワーク領域の領域1
1に第2のブレークアドレスへのJMP命令を、領域1
2に第1のブレークアドレスへのJMP命令を設定し、
ユーザプログラム領域の第1および第2のブレークアド
レスのオペコードをBRK命令に書き替える。
Description
【0001】
【発明の属する技術分野】この発明は、自番地への条件
分岐や無限ループのデバッグ方法に関し、特にそのスタ
ートアドレスとブレークアドレスが同一番地である命令
を実行した場合にのみ実行後ブレークさせることができ
る、ステップ実行およびブレークアドレス付き実行のソ
フトウェアブレーク処理に関するものである。
分岐や無限ループのデバッグ方法に関し、特にそのスタ
ートアドレスとブレークアドレスが同一番地である命令
を実行した場合にのみ実行後ブレークさせることができ
る、ステップ実行およびブレークアドレス付き実行のソ
フトウェアブレーク処理に関するものである。
【0002】
【従来の技術】プログラムのデバッグを実行するモニタ
デバッガでは、一般的にハードウェアブレークはなく、
ブレークさせるアドレスの命令をソフトウェア割り込み
命令に書き替えることでソフトウェアブレーク処理を実
現させるいわゆる実行前ブレークである。
デバッガでは、一般的にハードウェアブレークはなく、
ブレークさせるアドレスの命令をソフトウェア割り込み
命令に書き替えることでソフトウェアブレーク処理を実
現させるいわゆる実行前ブレークである。
【0003】図5はそのようなモニタデバッガにおける
シングルステップ動作を説明するためのサンプルリスト
を示す説明図であり、図6はそのサンプルリストのメモ
リイメージを示す説明図である。図5に示すように、4
000H番地からステップ実行をする場合、図5の命令
1はBBC命令(判断分岐命令)なので、ラベル“LO
OP”に分岐する可能性がある。この場合、スタートア
ドレスとブレークアドレスが一致するため、いわゆる自
番地ジャンプになる。この時4000H番地からステッ
プ実行を行うと、まずモニタプログラムの処理として、
図6に示すユーザプログラム領域2の4000H番地の
領域3に格納されているオペコード(BBC命令のオペ
コード“17H”)と、4003H番地の領域4に格納
されているオペコード(LDA命令のオペコード“A9
H”)をモニタプログラムのワーク領域(以下、モニタ
ワーク領域という)に退避する。
シングルステップ動作を説明するためのサンプルリスト
を示す説明図であり、図6はそのサンプルリストのメモ
リイメージを示す説明図である。図5に示すように、4
000H番地からステップ実行をする場合、図5の命令
1はBBC命令(判断分岐命令)なので、ラベル“LO
OP”に分岐する可能性がある。この場合、スタートア
ドレスとブレークアドレスが一致するため、いわゆる自
番地ジャンプになる。この時4000H番地からステッ
プ実行を行うと、まずモニタプログラムの処理として、
図6に示すユーザプログラム領域2の4000H番地の
領域3に格納されているオペコード(BBC命令のオペ
コード“17H”)と、4003H番地の領域4に格納
されているオペコード(LDA命令のオペコード“A9
H”)をモニタプログラムのワーク領域(以下、モニタ
ワーク領域という)に退避する。
【0004】その後、当該モニタワーク領域に退避され
たオペコードが格納されていたブレークアドレスの領
域、すなわち4000H番地の領域3と4003H番地
の領域4とにBRK命令(ソフトウェア割り込み命令)
をそれぞれ挿入して4000H番地から実行を開始す
る。まず4000H番地の命令をフェッチすると、そこ
にはBRK命令が存在しているため、結果的にユーザプ
ログラムを実行せずにモニタプログラムに復帰してしま
う。
たオペコードが格納されていたブレークアドレスの領
域、すなわち4000H番地の領域3と4003H番地
の領域4とにBRK命令(ソフトウェア割り込み命令)
をそれぞれ挿入して4000H番地から実行を開始す
る。まず4000H番地の命令をフェッチすると、そこ
にはBRK命令が存在しているため、結果的にユーザプ
ログラムを実行せずにモニタプログラムに復帰してしま
う。
【0005】この動作により以下のような現象が発生す
る。すなわち、図5に示すようなBBC命令により指定
ビットの変化が起きるまでループさせるような処理部分
をステップ実行させた場合、図6に示したユーザプログ
ラム領域2の領域3および領域4をBRK命令に書き替
えているため、結果的にプログラムカウンタがユーザプ
ログラム領域2の領域4に到達しないことになる。した
がって、指定されたビットが実際には変化していたとし
ても、BBC命令は実行されずにモニタプログラムに復
帰してしまう。このことによりループ処理から復帰する
ことができず、モニタデバッガ上では無限ループの状態
になってしまう。
る。すなわち、図5に示すようなBBC命令により指定
ビットの変化が起きるまでループさせるような処理部分
をステップ実行させた場合、図6に示したユーザプログ
ラム領域2の領域3および領域4をBRK命令に書き替
えているため、結果的にプログラムカウンタがユーザプ
ログラム領域2の領域4に到達しないことになる。した
がって、指定されたビットが実際には変化していたとし
ても、BBC命令は実行されずにモニタプログラムに復
帰してしまう。このことによりループ処理から復帰する
ことができず、モニタデバッガ上では無限ループの状態
になってしまう。
【0006】従来、このような無限ループの状態になっ
てしまうという現象は、以下に説明する手法を用いるこ
とによって回避していた。すなわち、第1の手法は、ブ
レーク回路を使用し、ブレークアドレスとMCU(マイ
クロコンピュータユニット)のアドレスバス上のデータ
とが一致した場合に、ハードウェアによって強制的にブ
レーク命令(ソフトウェア割り込み)、またはデバッガ
専用割り込み(DBC割り込み等)をフェッチさせてブ
レーク(ユーザプログラムからデバッガヘ復帰)するも
のである。この方法はいわゆる実行後ブレークと呼ばれ
るもので、主にエミュレータデバッガで用いられてい
る。この方法では、エミュレータ本体内のMCUがブレ
ークアドレスに到達し、ブレーク回路によって強制的に
ブレーク命令を実行するまでの間にBBC命令を実行し
てしまうため、スタートアドレスと同一の番地にブレー
クポイントを設定した場合でも、「命令が実行されずに
モニタプログラムに復帰してしまう」という現象は発生
しない。
てしまうという現象は、以下に説明する手法を用いるこ
とによって回避していた。すなわち、第1の手法は、ブ
レーク回路を使用し、ブレークアドレスとMCU(マイ
クロコンピュータユニット)のアドレスバス上のデータ
とが一致した場合に、ハードウェアによって強制的にブ
レーク命令(ソフトウェア割り込み)、またはデバッガ
専用割り込み(DBC割り込み等)をフェッチさせてブ
レーク(ユーザプログラムからデバッガヘ復帰)するも
のである。この方法はいわゆる実行後ブレークと呼ばれ
るもので、主にエミュレータデバッガで用いられてい
る。この方法では、エミュレータ本体内のMCUがブレ
ークアドレスに到達し、ブレーク回路によって強制的に
ブレーク命令を実行するまでの間にBBC命令を実行し
てしまうため、スタートアドレスと同一の番地にブレー
クポイントを設定した場合でも、「命令が実行されずに
モニタプログラムに復帰してしまう」という現象は発生
しない。
【0007】また、第2の手法は、ユーザのソースプロ
グラム(ユーザプログラム)そのものを変更し、スター
トアドレスとブレークアドレスを異なったアドレスにす
るものである。具体的な方法としては、図5に示すサン
プルリストを図7のように変更する。つまり、図7に示
すように分岐先のラベル“LOOP”とBBC命令1の
間にNOP命令5を挿入することによって、スタートア
ドレスとブレークアドレスとを異なるアドレスにする。
これにより、図8に示すユーザプログラム領域2の40
00H番地の領域3の代わりに3FFFH番地の領域6
がBRK命令に書き替えられることになるため、400
0H番地のBBC命令を実行したあと3FFFH番地に
分岐し、その時点でBRK命令を実行してモニタプログ
ラムに復帰する。
グラム(ユーザプログラム)そのものを変更し、スター
トアドレスとブレークアドレスを異なったアドレスにす
るものである。具体的な方法としては、図5に示すサン
プルリストを図7のように変更する。つまり、図7に示
すように分岐先のラベル“LOOP”とBBC命令1の
間にNOP命令5を挿入することによって、スタートア
ドレスとブレークアドレスとを異なるアドレスにする。
これにより、図8に示すユーザプログラム領域2の40
00H番地の領域3の代わりに3FFFH番地の領域6
がBRK命令に書き替えられることになるため、400
0H番地のBBC命令を実行したあと3FFFH番地に
分岐し、その時点でBRK命令を実行してモニタプログ
ラムに復帰する。
【0008】なお、このような従来のデバッグ方法に関
連する記載のある文献としては、例えば特開平2−28
4236号公報、特開平4−88438号公報、特開平
5−241889、特開平7−44419号公報などが
ある。上記特開平2−284236号公報はステップ実
行そのものの実現に関するものであり、特開平4−88
438号公報および特開平5−241889号公報はB
BC命令をステップ実行する場合の2ヶ所のブレークポ
イントを判定する方法を開示したものである。また、特
開平7−44419号公報はハードウェアでユーザが使
用するメモリ空間を限定せずにデバッグさせるためのモ
ニタ空間の使用について開示したものである。
連する記載のある文献としては、例えば特開平2−28
4236号公報、特開平4−88438号公報、特開平
5−241889、特開平7−44419号公報などが
ある。上記特開平2−284236号公報はステップ実
行そのものの実現に関するものであり、特開平4−88
438号公報および特開平5−241889号公報はB
BC命令をステップ実行する場合の2ヶ所のブレークポ
イントを判定する方法を開示したものである。また、特
開平7−44419号公報はハードウェアでユーザが使
用するメモリ空間を限定せずにデバッグさせるためのモ
ニタ空間の使用について開示したものである。
【0009】
【発明が解決しようとする課題】従来のデバッグ方法は
以上のように構成されているので、第1の手法で無限ル
ープ状態となるのを回避する場合には、ブレークさせる
ための専用ハードウェアが必要となるため、デバッグシ
ステムの部品点数およびコストが増大するという課題が
あった。本来、モニタデバッガを使用したデバッグシス
テムでは「小型、低価格で基本的なデバッグ環境を提供
すること」が目的となるため、ブレーク処理専用のハー
ドウェアは組み込まないのが一般的である。
以上のように構成されているので、第1の手法で無限ル
ープ状態となるのを回避する場合には、ブレークさせる
ための専用ハードウェアが必要となるため、デバッグシ
ステムの部品点数およびコストが増大するという課題が
あった。本来、モニタデバッガを使用したデバッグシス
テムでは「小型、低価格で基本的なデバッグ環境を提供
すること」が目的となるため、ブレーク処理専用のハー
ドウェアは組み込まないのが一般的である。
【0010】また、第2の手法で無限ループ状態となる
のを回避する場合には、ユーザのソースプログラムで自
番地ブレークが発生する可能性のある部分全てに、直接
NOP命令5を書き込む必要があるため、書き込みの手
間がかかり、書き込んだNOP命令5の分だけオブジェ
クトが増加してしまうといった課題があった。なお、デ
バッグ時のみユーザのソースプログラムにNOP命令5
を挿入し、ROM化時に挿入したNOP命令5を削除す
る方法も考えられるが、この方法だと、デバッグ時のプ
ログラムとROM化時のプログラムが異なり、NOP命
令5の書き込み/削除という本来のプログラムには全く
関係のない余分な作業を必要とするなどの問題があっ
た。
のを回避する場合には、ユーザのソースプログラムで自
番地ブレークが発生する可能性のある部分全てに、直接
NOP命令5を書き込む必要があるため、書き込みの手
間がかかり、書き込んだNOP命令5の分だけオブジェ
クトが増加してしまうといった課題があった。なお、デ
バッグ時のみユーザのソースプログラムにNOP命令5
を挿入し、ROM化時に挿入したNOP命令5を削除す
る方法も考えられるが、この方法だと、デバッグ時のプ
ログラムとROM化時のプログラムが異なり、NOP命
令5の書き込み/削除という本来のプログラムには全く
関係のない余分な作業を必要とするなどの問題があっ
た。
【0011】この発明は上記のような課題を解決するた
めになされたもので、ブレーク処理専用のハードウェア
を使用せず、かつNOP命令の挿入も必要とせずに、ス
タートアドレスとブレークアドレスが同一番地である命
令を実行した場合にのみ実行後ブレークさせるデバッグ
方法を得ることを目的とする。
めになされたもので、ブレーク処理専用のハードウェア
を使用せず、かつNOP命令の挿入も必要とせずに、ス
タートアドレスとブレークアドレスが同一番地である命
令を実行した場合にのみ実行後ブレークさせるデバッグ
方法を得ることを目的とする。
【0012】
【課題を解決するための手段】この発明に係るデバッグ
方法は、ステップ実行あるいはブレークアドレス付き実
行をする際に、スタートアドレスに書かれているBBC
命令を、スタートアドレスとブレークアドレスが同一で
あった場合にのみモニタワーク領域で実行させ、ユーザ
プログラムに復帰するようにしたものである。
方法は、ステップ実行あるいはブレークアドレス付き実
行をする際に、スタートアドレスに書かれているBBC
命令を、スタートアドレスとブレークアドレスが同一で
あった場合にのみモニタワーク領域で実行させ、ユーザ
プログラムに復帰するようにしたものである。
【0013】この発明に係るデバッグ方法は、第1のブ
レークアドレスに書かれているBBC命令を、ステップ
実行あるいはブレークアドレス付き実行の開始前にモニ
タワーク領域にコピーして、このBBC命令の相対ジャ
ンプ先のオフセット値を調整し、第2のブレークアドレ
スへの絶対ジャンプ命令をモニタワーク領域の次の領域
に、第1のブレークアドレスへの絶対ジャンプ命令をさ
らにその次の領域に設定し、第1および第2のブレーク
アドレスのオペコードをBRK命令に書き替えるように
したものである。
レークアドレスに書かれているBBC命令を、ステップ
実行あるいはブレークアドレス付き実行の開始前にモニ
タワーク領域にコピーして、このBBC命令の相対ジャ
ンプ先のオフセット値を調整し、第2のブレークアドレ
スへの絶対ジャンプ命令をモニタワーク領域の次の領域
に、第1のブレークアドレスへの絶対ジャンプ命令をさ
らにその次の領域に設定し、第1および第2のブレーク
アドレスのオペコードをBRK命令に書き替えるように
したものである。
【0014】
【発明の実施の形態】以下、この発明の実施の一形態を
説明する。 実施の形態1.図1はこの発明の実施の形態1によるデ
バッグ方法における、自番地ブレーク時のステップ実行
の動作を示した説明図である。図において、2はユーザ
プログラムが格納されるユーザプログラム領域、3はそ
の第1のブレークアドレス(4000H番地)の領域、
4は第2のブレークアドレス(4003H番地)の領域
であり、7は当該ユーザプログラム領域2の領域3に格
納された命令(BBC命令)のオペランドが格納されて
いる領域である。なお、上記ユーザプログラム領域2と
その領域3および4は、図6に同一符号を付して示した
部分と同一の部分である。
説明する。 実施の形態1.図1はこの発明の実施の形態1によるデ
バッグ方法における、自番地ブレーク時のステップ実行
の動作を示した説明図である。図において、2はユーザ
プログラムが格納されるユーザプログラム領域、3はそ
の第1のブレークアドレス(4000H番地)の領域、
4は第2のブレークアドレス(4003H番地)の領域
であり、7は当該ユーザプログラム領域2の領域3に格
納された命令(BBC命令)のオペランドが格納されて
いる領域である。なお、上記ユーザプログラム領域2と
その領域3および4は、図6に同一符号を付して示した
部分と同一の部分である。
【0015】8はユーザプログラム領域2の領域3や領
域4に挿入されたBRK命令によって処理がユーザプロ
グラムより復帰するモニタプログラムであり、9はこの
モニタプログラム8によって使用されるモニタワーク領
域(モニタプログラムのワーク領域)である。なお、こ
のモニタワーク領域9はRAM上に配置される。10は
このモニタワーク領域9上に設けられた、ユーザプログ
ラムのBBC命令部が退避される領域であり、11は同
じくユーザプログラムのBBC命令部の次に実行される
LDA命令へ分岐させるためのJMP命令(絶対ジャン
プ命令)が設定される領域、12は同じくユーザプログ
ラムのBBC命令が相対ジャンプするアドレスへ分岐さ
せるためのJMP命令が設定される領域である。
域4に挿入されたBRK命令によって処理がユーザプロ
グラムより復帰するモニタプログラムであり、9はこの
モニタプログラム8によって使用されるモニタワーク領
域(モニタプログラムのワーク領域)である。なお、こ
のモニタワーク領域9はRAM上に配置される。10は
このモニタワーク領域9上に設けられた、ユーザプログ
ラムのBBC命令部が退避される領域であり、11は同
じくユーザプログラムのBBC命令部の次に実行される
LDA命令へ分岐させるためのJMP命令(絶対ジャン
プ命令)が設定される領域、12は同じくユーザプログ
ラムのBBC命令が相対ジャンプするアドレスへ分岐さ
せるためのJMP命令が設定される領域である。
【0016】次に動作について説明する。ここで、図2
はこの発明の実施の形態1におけるモニタプログラム8
のステップ実行処理の手順を示すフローチャートであ
り、図3は同じくユーザプログラムのステップ実行時の
動作の手順を示すフローチャートである。また、図4は
この発明の実施の形態1による処理の流れを示す概念図
であり、この実施の形態1によるステップ実行およびブ
レークアドレス付き実行を二点鎖線で、従来のステップ
実行およびブレークアドレス付き実行を一点鎖線で対比
させて示している。
はこの発明の実施の形態1におけるモニタプログラム8
のステップ実行処理の手順を示すフローチャートであ
り、図3は同じくユーザプログラムのステップ実行時の
動作の手順を示すフローチャートである。また、図4は
この発明の実施の形態1による処理の流れを示す概念図
であり、この実施の形態1によるステップ実行およびブ
レークアドレス付き実行を二点鎖線で、従来のステップ
実行およびブレークアドレス付き実行を一点鎖線で対比
させて示している。
【0017】モニタデバッガからの指示によってユーザ
プログラム実行前処理が開始されると、モニタプログラ
ム8は図5に示す命令1をステップ実行するに際して、
スタートアドレスとブレークアドレスが同一か否かをス
テップST1において判定する。その結果、スタートア
ドレスとブレークアドレスが同一であった場合、ステッ
プST2に分岐してスタートアドレス上の命令がBBC
命令であるか否かを判定する。その判定方法としては、
スタートアドレス上の機械語(オペコード部)がMCU
の保有するBBC命令の何れか一つと一致するか否かで
行い、一致するものがなかった場合はBBC命令ではな
いと判断する。
プログラム実行前処理が開始されると、モニタプログラ
ム8は図5に示す命令1をステップ実行するに際して、
スタートアドレスとブレークアドレスが同一か否かをス
テップST1において判定する。その結果、スタートア
ドレスとブレークアドレスが同一であった場合、ステッ
プST2に分岐してスタートアドレス上の命令がBBC
命令であるか否かを判定する。その判定方法としては、
スタートアドレス上の機械語(オペコード部)がMCU
の保有するBBC命令の何れか一つと一致するか否かで
行い、一致するものがなかった場合はBBC命令ではな
いと判断する。
【0018】BBC命令ではないと判定された場合には
ステップST3に進み、スタートアドレス上の機械語か
ら何バイト命令であるかをモニタROM上のデータテー
ブルより検索し、そのバイト数分だけユーザプログラム
領域2からモニタワーク領域9にコピーする。仮にスタ
ートアドレスが4000H番地で、そのアドレスに3バ
イト命令が存在する場合は、ユーザプログラム領域2の
4000H番地〜4002H番地までの3バイトの機械
語をモニタワーク領域3にコピーする。次にステップS
T4において、モニタワーク領域3上の当該機械語のコ
ピー領域の先頭アドレスに前記バイト数を加算した番地
に、ユーザプログラムが次に実行する命令のアドレスへ
分岐するためのJMP命令を設定する。
ステップST3に進み、スタートアドレス上の機械語か
ら何バイト命令であるかをモニタROM上のデータテー
ブルより検索し、そのバイト数分だけユーザプログラム
領域2からモニタワーク領域9にコピーする。仮にスタ
ートアドレスが4000H番地で、そのアドレスに3バ
イト命令が存在する場合は、ユーザプログラム領域2の
4000H番地〜4002H番地までの3バイトの機械
語をモニタワーク領域3にコピーする。次にステップS
T4において、モニタワーク領域3上の当該機械語のコ
ピー領域の先頭アドレスに前記バイト数を加算した番地
に、ユーザプログラムが次に実行する命令のアドレスへ
分岐するためのJMP命令を設定する。
【0019】一方、ステップST2の判定にてBBC命
令であると判断された場合には、処理をステップST5
に進めて、そのBBC命令が何バイトの命令であるかを
判定する。具体的には、そのBBC命令が2バイト命令
であるか3バイト命令であるかの判定を行う。なお、こ
の判定方法もステップST3の場合と同様であり、BB
C命令の機械語から何バイト命令であるかをモニタRO
M上のデータテーブルより検索することによって行う。
よって、図2に符号13を付して破線で囲んだ処理フロ
ー部分が、BBC命令のステップ実行をするための前処
理となる。以下にその前処理について述べる。
令であると判断された場合には、処理をステップST5
に進めて、そのBBC命令が何バイトの命令であるかを
判定する。具体的には、そのBBC命令が2バイト命令
であるか3バイト命令であるかの判定を行う。なお、こ
の判定方法もステップST3の場合と同様であり、BB
C命令の機械語から何バイト命令であるかをモニタRO
M上のデータテーブルより検索することによって行う。
よって、図2に符号13を付して破線で囲んだ処理フロ
ー部分が、BBC命令のステップ実行をするための前処
理となる。以下にその前処理について述べる。
【0020】図6に示した例によれば、ユーザプログラ
ム領域2の領域3に格納されているユーザプログラム上
のBBC命令は3バイト命令であるので、処理はステッ
プST5からステップST6に進み、そのスタートアド
レスから3バイトを図1に示すモニタワーク領域9の領
域10にコピーする。すなわち、ユーザプログラム領域
2の領域3に格納されているBBC命令のオペコード
と、それに続く2バイトのオペランドが、モニタワーク
領域9の領域10にコピーされる。その際、ステップS
T7において、ユーザプログラム領域2の領域7(オペ
ランド部)の相対ジャンプのオフセット値を“3”に書
き替えてからコピーする。
ム領域2の領域3に格納されているユーザプログラム上
のBBC命令は3バイト命令であるので、処理はステッ
プST5からステップST6に進み、そのスタートアド
レスから3バイトを図1に示すモニタワーク領域9の領
域10にコピーする。すなわち、ユーザプログラム領域
2の領域3に格納されているBBC命令のオペコード
と、それに続く2バイトのオペランドが、モニタワーク
領域9の領域10にコピーされる。その際、ステップS
T7において、ユーザプログラム領域2の領域7(オペ
ランド部)の相対ジャンプのオフセット値を“3”に書
き替えてからコピーする。
【0021】次にステップST8に進み、モニタワーク
領域9のコピー領域先頭アドレス047CH番地に
“3”を加えた047FH番地以下の3バイトの領域、
すなわち領域11に、第2のブレークアドレスであるユ
ーザプログラム上のBBC命令の次に実行するLDA命
令のアドレス(4003H番地)ヘ分岐させるためのJ
MP命令を設定する。その後ステップST9において、
モニタワーク領域9のコピー領域先頭アドレス047C
H番地に“6”を加えた0482H番地以下の3バイト
の領域、すなわち領域12に、第1のブレークアドレス
であるユーザプログラム上のBBC命令が相対ジャンプ
するアドレス(4000H番地)へ分岐させるためのJ
MP命令を設定する。
領域9のコピー領域先頭アドレス047CH番地に
“3”を加えた047FH番地以下の3バイトの領域、
すなわち領域11に、第2のブレークアドレスであるユ
ーザプログラム上のBBC命令の次に実行するLDA命
令のアドレス(4003H番地)ヘ分岐させるためのJ
MP命令を設定する。その後ステップST9において、
モニタワーク領域9のコピー領域先頭アドレス047C
H番地に“6”を加えた0482H番地以下の3バイト
の領域、すなわち領域12に、第1のブレークアドレス
であるユーザプログラム上のBBC命令が相対ジャンプ
するアドレス(4000H番地)へ分岐させるためのJ
MP命令を設定する。
【0022】一方、ユーザプログラム上のBBC命令が
2バイト命令であれば、処理はステップST5からステ
ップST10に分岐して、そのスタートアドレスから2
バイト分をモニタワーク領域9にコピーする。その際、
ステップST11にて領域7の相対ジャンプのオフセッ
ト値を書き替えてコピーする。その後ステップST12
に進み、モニタワーク領域9のコピー領域先頭アドレス
に“2”を加えた番地以下の3バイトの領域に、ユーザ
プログラム上の第2のブレークアドレスに分岐させるた
めのJMP命令を設定する。次にステップST13にお
いて、モニタワーク領域9のコピー領域先頭アドレスに
“5”を加えた番地以下の3バイトの領域に、ユーザプ
ログラム上の第1のブレークアドレスに分岐させるため
のJMP命令を設定する。
2バイト命令であれば、処理はステップST5からステ
ップST10に分岐して、そのスタートアドレスから2
バイト分をモニタワーク領域9にコピーする。その際、
ステップST11にて領域7の相対ジャンプのオフセッ
ト値を書き替えてコピーする。その後ステップST12
に進み、モニタワーク領域9のコピー領域先頭アドレス
に“2”を加えた番地以下の3バイトの領域に、ユーザ
プログラム上の第2のブレークアドレスに分岐させるた
めのJMP命令を設定する。次にステップST13にお
いて、モニタワーク領域9のコピー領域先頭アドレスに
“5”を加えた番地以下の3バイトの領域に、ユーザプ
ログラム上の第1のブレークアドレスに分岐させるため
のJMP命令を設定する。
【0023】ステップST4、ステップST9、あるい
はステップST13によるJMP命令の設定が終了する
と処理をステップST14に進め、ユーザプログラム領
域2上の第1のブレークアドレスの領域3および第2の
ブレークアドレスの領域4のオペコードをBRK命令に
書き替える。次にステップST15にて各レジスタの復
帰を行った後、ステップST16においてジャンプ命令
により、モニタワーク領域9の先頭アドレス(047C
H番地)に分岐させる。したがって、モニタプログラム
8はユーザプログラム領域2の4000H番地からの実
行ではなく、モニタワーク領域9の047CH番地から
実行を行う。
はステップST13によるJMP命令の設定が終了する
と処理をステップST14に進め、ユーザプログラム領
域2上の第1のブレークアドレスの領域3および第2の
ブレークアドレスの領域4のオペコードをBRK命令に
書き替える。次にステップST15にて各レジスタの復
帰を行った後、ステップST16においてジャンプ命令
により、モニタワーク領域9の先頭アドレス(047C
H番地)に分岐させる。したがって、モニタプログラム
8はユーザプログラム領域2の4000H番地からの実
行ではなく、モニタワーク領域9の047CH番地から
実行を行う。
【0024】なお、ステップST1において、スタート
アドレスとブレークアドレスが異なると判定された場合
には、処理はステップST17に分岐し、ステップST
17でブレークアドレスのオペコードをBRK命令に書
き替え、ステップST18で各レジスタの復帰を行った
後、ステップST19でスタートアドレスに間接ジャン
プする。
アドレスとブレークアドレスが異なると判定された場合
には、処理はステップST17に分岐し、ステップST
17でブレークアドレスのオペコードをBRK命令に書
き替え、ステップST18で各レジスタの復帰を行った
後、ステップST19でスタートアドレスに間接ジャン
プする。
【0025】上記ステップST16におけるモニタワー
ク領域9への間接ジャンプが行われた後、ユーザプログ
ラムのステップ実行が開始される。これによって、図5
に示された命令1の実行後にブレークする、いわゆる実
行後ブレークとなる。すなわち、ユーザプログラムのス
テップ実行が開始されると、図3に示すように、まずス
テップST21において、BBC命令が“真”であるか
否かの判定を行う。なお、この判定は40H番地のビッ
ト0が“0”か否かによって判定する。すなわち、40
H番地のビット0=“0”であればBBC命令は
“真”、40H番地のビット0=“1”であればBBC
命令は“偽”と判定する。判定の結果、BBC命令が
“真”であれば処理をステップST22に進め、BBC
命令が“偽”であれば処理をステップST23に進め
る。
ク領域9への間接ジャンプが行われた後、ユーザプログ
ラムのステップ実行が開始される。これによって、図5
に示された命令1の実行後にブレークする、いわゆる実
行後ブレークとなる。すなわち、ユーザプログラムのス
テップ実行が開始されると、図3に示すように、まずス
テップST21において、BBC命令が“真”であるか
否かの判定を行う。なお、この判定は40H番地のビッ
ト0が“0”か否かによって判定する。すなわち、40
H番地のビット0=“0”であればBBC命令は
“真”、40H番地のビット0=“1”であればBBC
命令は“偽”と判定する。判定の結果、BBC命令が
“真”であれば処理をステップST22に進め、BBC
命令が“偽”であれば処理をステップST23に進め
る。
【0026】ステップST22では、第1のブレークア
ドレス(=スタートアドレス)へ分岐させるためのJM
P命令が設定されている、モニタワーク領域9の領域1
2のアドレス(0482H番地)に相対ジャンプする。
次にステップST24において、この領域12に設定さ
れたJMP命令にしたがって、ユーザプログラム領域2
の第1のブレークアドレスである4000H番地(自番
地)に絶対ジャンプする。また、ステップST23で
は、ユーザプログラム領域2の第2のブレークアドレス
である、BBC命令の次に実行するLDA命令が設定さ
れているアドレス(4003H番地)に絶対ジャンプす
る。ステップST24あるいはステップST23にて第
1あるいは第2のブレークアドレスに分岐した後、処理
をステップST25に進め、図2のステップST14で
書き替えられたBRK命令を実行することによってモニ
タプログラム8に復帰する。
ドレス(=スタートアドレス)へ分岐させるためのJM
P命令が設定されている、モニタワーク領域9の領域1
2のアドレス(0482H番地)に相対ジャンプする。
次にステップST24において、この領域12に設定さ
れたJMP命令にしたがって、ユーザプログラム領域2
の第1のブレークアドレスである4000H番地(自番
地)に絶対ジャンプする。また、ステップST23で
は、ユーザプログラム領域2の第2のブレークアドレス
である、BBC命令の次に実行するLDA命令が設定さ
れているアドレス(4003H番地)に絶対ジャンプす
る。ステップST24あるいはステップST23にて第
1あるいは第2のブレークアドレスに分岐した後、処理
をステップST25に進め、図2のステップST14で
書き替えられたBRK命令を実行することによってモニ
タプログラム8に復帰する。
【0027】したがって、図4に示すように、従来のデ
バッグ方法では、モニタプログラム領域のステップ実行
開始ポイント(アドレスa)から、一点鎖線で示す経路
でユーザプログラム領域のブレークアドレス(=スター
トアドレス)(アドレスb)に直接ジャンプしていたも
のが、この実施の形態1によるデバッグ方法によれば、
二点鎖線で示す経路に沿って、モニタプログラム領域の
ステップ実行開始ポイントからモニタワーク領域の先頭
アドレスにジャンプし、アドレスbの命令のみをこのモ
ニタワーク領域で実行して、当該アドレスbの命令実行
後にブレークアドレスにジャンプしている。その後、こ
のブレークアドレスに挿入されているBRK命令によっ
て、モニタプログラムに復帰する。
バッグ方法では、モニタプログラム領域のステップ実行
開始ポイント(アドレスa)から、一点鎖線で示す経路
でユーザプログラム領域のブレークアドレス(=スター
トアドレス)(アドレスb)に直接ジャンプしていたも
のが、この実施の形態1によるデバッグ方法によれば、
二点鎖線で示す経路に沿って、モニタプログラム領域の
ステップ実行開始ポイントからモニタワーク領域の先頭
アドレスにジャンプし、アドレスbの命令のみをこのモ
ニタワーク領域で実行して、当該アドレスbの命令実行
後にブレークアドレスにジャンプしている。その後、こ
のブレークアドレスに挿入されているBRK命令によっ
て、モニタプログラムに復帰する。
【0028】このように、スタートアドレスとブレーク
アドレスが同一の命令に対するステップ実行およびブレ
ークアドレス付き実行については、実行後ブレークとな
るため、ユーザプログラム中の自番地にジャンプする可
能性のある箇所にNOP命令を挿入しなくても、実行の
対象となる命令を実行してからブレークすることが可能
となって、自番地へジャンプする命令を実行した場合
に、無限ループに入ってしまう現象を回避することがで
きる。
アドレスが同一の命令に対するステップ実行およびブレ
ークアドレス付き実行については、実行後ブレークとな
るため、ユーザプログラム中の自番地にジャンプする可
能性のある箇所にNOP命令を挿入しなくても、実行の
対象となる命令を実行してからブレークすることが可能
となって、自番地へジャンプする命令を実行した場合
に、無限ループに入ってしまう現象を回避することがで
きる。
【0029】
【発明の効果】以上のように、この発明によれば、ステ
ップ実行およびブレークアドレス付き実行をする際、モ
ニタプログラムによりスタートアドレスとブレークアド
レスが同一の場合にのみ、スタートアドレスに書かれて
いる判断分岐命令をワーク領域で実行させてユーザプロ
グラムに復帰するように構成したので、ブレーク処理専
用のハードウェアを使用せず、かつユーザプログラム中
の自番地にジャンプする可能性のある全ての部分にNO
P命令を挿入することなしに、スタートアドレスとブレ
ークアドレスが同一番地である命令を実行した場合にの
み実行後ブレークさせることが可能となり、自番地へジ
ャンプする命令をステップ実行あるいはブレークアドレ
ス付き実行をした場合に、無限ループに入ってしまう現
象を回避することができるため、デバッグシステムの部
品点数およびコストが増大するのを抑制でき、またNO
P命令を書き込むための手間が省けるとともに、NOP
命令分のオブジェクトの増加を防止できるデバッグ方法
が得られる効果がある。
ップ実行およびブレークアドレス付き実行をする際、モ
ニタプログラムによりスタートアドレスとブレークアド
レスが同一の場合にのみ、スタートアドレスに書かれて
いる判断分岐命令をワーク領域で実行させてユーザプロ
グラムに復帰するように構成したので、ブレーク処理専
用のハードウェアを使用せず、かつユーザプログラム中
の自番地にジャンプする可能性のある全ての部分にNO
P命令を挿入することなしに、スタートアドレスとブレ
ークアドレスが同一番地である命令を実行した場合にの
み実行後ブレークさせることが可能となり、自番地へジ
ャンプする命令をステップ実行あるいはブレークアドレ
ス付き実行をした場合に、無限ループに入ってしまう現
象を回避することができるため、デバッグシステムの部
品点数およびコストが増大するのを抑制でき、またNO
P命令を書き込むための手間が省けるとともに、NOP
命令分のオブジェクトの増加を防止できるデバッグ方法
が得られる効果がある。
【図1】 この発明の実施の形態1によるデバッグ方法
の、自番地ブレーク時のステップ実行の動作を示した説
明図である。
の、自番地ブレーク時のステップ実行の動作を示した説
明図である。
【図2】 実施の形態1におけるモニタプログラムのス
テップ実行処理の手順を示すフローチャートである。
テップ実行処理の手順を示すフローチャートである。
【図3】 実施の形態1におけるユーザプログラムのス
テップ実行時の動作の手順を示すフローチャートであ
る。
テップ実行時の動作の手順を示すフローチャートであ
る。
【図4】 実施の形態1における処理の流れを示す概念
図である。
図である。
【図5】 この発明および従来のデバッグ方法における
シングルステップ動作を説明するためのサンプルリスト
を示す説明図である。
シングルステップ動作を説明するためのサンプルリスト
を示す説明図である。
【図6】 図5に示したサンプルリストのメモリイメー
ジを示す説明図である。
ジを示す説明図である。
【図7】 従来のデバッグ方法にて、無限ループ状態に
なってしまう現象を回避する際のサンプルリストを示す
説明図である。
なってしまう現象を回避する際のサンプルリストを示す
説明図である。
【図8】 図7に示したサンプルリストのメモリイメー
ジを示す説明図である。
ジを示す説明図である。
2 ユーザプログラム領域、8 モニタプログラム、9
モニタワーク領域(モニタプログラムのワーク領
域)、10,11,12 領域。
モニタワーク領域(モニタプログラムのワーク領
域)、10,11,12 領域。
Claims (2)
- 【請求項1】 ステップ実行あるいはブレークアドレス
付き実行をする際の自番地への判断分岐命令のデバッグ
方法において、 モニタプログラムによりスタートアドレスとブレークア
ドレスが同一であった場合にのみ、前記スタートアドレ
スに書かれている前記判断分岐命令を前記モニタプログ
ラムのワーク領域で実行させ、ユーザプログラムに復帰
することを特徴とするデバッグ方法。 - 【請求項2】 ステップ実行あるいはブレークアドレス
付き実行を開始する前に、ユーザプログラム領域の第1
のブレークアドレスに書かれている判断分岐命令をモニ
タプログラムのワーク領域にコピーし、 前記判断分岐命令の相対ジャンプ先のオフセット値を調
整し、 前記モニタプログラムのワーク領域の、前記判断分岐命
令がコピーされた領域の次の領域に、ユーザプログラム
が前記判断分岐命令の次に実行する命令が格納されてい
る、前記ユーザプログラム領域の第2のブレークアドレ
スに分岐する絶対ジャンプ命令を設定し、 前記モニタプログラムのワーク領域の、前記第2のブレ
ークアドレスへの絶対ジャンプ命令が設定された領域の
次の領域に、前記ユーザプログラム領域の第1のブレー
クアドレスに分岐する絶対ジャンプ命令を設定し、 前記ユーザプログラム領域の第1のブレークアドレスお
よび第2のブレークアドレスの命令のオペコードを、ソ
フトウェア割り込み命令に書き替えることを特徴とする
請求項1記載のデバッグ方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP10025841A JPH11224209A (ja) | 1998-02-06 | 1998-02-06 | デバッグ方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP10025841A JPH11224209A (ja) | 1998-02-06 | 1998-02-06 | デバッグ方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH11224209A true JPH11224209A (ja) | 1999-08-17 |
Family
ID=12177088
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP10025841A Pending JPH11224209A (ja) | 1998-02-06 | 1998-02-06 | デバッグ方法 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH11224209A (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2007241728A (ja) * | 2006-03-09 | 2007-09-20 | Fuji Electric Fa Components & Systems Co Ltd | コントローラ支援装置およびプログラマブルコントローラ |
-
1998
- 1998-02-06 JP JP10025841A patent/JPH11224209A/ja active Pending
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2007241728A (ja) * | 2006-03-09 | 2007-09-20 | Fuji Electric Fa Components & Systems Co Ltd | コントローラ支援装置およびプログラマブルコントローラ |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5715440A (en) | Branch instruction executing device for tracing branch instruments based on instruction type | |
| US6591378B1 (en) | Debug controller in a data processor and method therefor | |
| US20010005882A1 (en) | Circuit and method for initiating exception routines using implicit exception checking | |
| KR20010014095A (ko) | 어드레스되는 구성요소의 스펙큘레이션의 실패를 검출하기위한 메모리 제어기 | |
| JP2001504957A (ja) | 先進のプロセッサにおけるメモリ・データ・エリアシング方法および装置 | |
| KR20010014094A (ko) | 개선된 마이크로프로세서 | |
| US20140344621A1 (en) | Diagnosing code using single step execution | |
| EP0227117A2 (en) | Program skip operation control system | |
| US6189093B1 (en) | System for initiating exception routine in response to memory access exception by storing exception information and exception bit within architectured register | |
| US7620802B2 (en) | Instruction execution device, debugging method, debugging device, and debugging program | |
| US5301285A (en) | Data processor having two instruction registers connected in cascade and two instruction decoders | |
| JP2001519955A (ja) | 先進のプロセッサのための変換メモリ保護装置 | |
| JP3234815B2 (ja) | ブランチ・ヒストリ・テーブル・ディセーブルによるミリモード制御方法 | |
| JPS6250934A (ja) | 処理装置の割込制御方式 | |
| JPH11224209A (ja) | デバッグ方法 | |
| US5212779A (en) | System for guarantee reexecution after interruption by conditionally used store buffer if microinstruction being executed is a memory write and last microinstruction | |
| JPH06103109A (ja) | データプロセッサ、及びこれを用いるデバッグ装置 | |
| US7441109B2 (en) | Computer system with a debug facility for a pipelined processor using predicated execution | |
| US6772372B2 (en) | System and method for monitoring unaligned memory accesses | |
| EP0569987A1 (en) | Microprocessor incorporating cache memory enabling efficient debugging | |
| JP2002535749A (ja) | 複数の命令ソースからの命令を実行するプロセッサおよび方法 | |
| JP2646957B2 (ja) | キャッシュ内蔵マイクロプロセッサ及びそのトレースシステム | |
| JPH1011315A (ja) | インサーキットエミュレータ装置およびインサーキットエミュレーション方法 | |
| JP3716635B2 (ja) | 情報処理装置、及びその割込み制御方法 | |
| JPH0728669A (ja) | マイクロプロセッサ |