JPH096647A - 逆実行デバッグシステム - Google Patents
逆実行デバッグシステムInfo
- Publication number
- JPH096647A JPH096647A JP7178295A JP17829595A JPH096647A JP H096647 A JPH096647 A JP H096647A JP 7178295 A JP7178295 A JP 7178295A JP 17829595 A JP17829595 A JP 17829595A JP H096647 A JPH096647 A JP H096647A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- program
- execution
- trace
- memory
- 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.)
- Granted
Links
- 230000015654 memory Effects 0.000 claims abstract description 66
- 238000006243 chemical reaction Methods 0.000 claims abstract description 16
- 238000012545 processing Methods 0.000 claims description 7
- 238000000034 method Methods 0.000 claims description 6
- 230000008569 process Effects 0.000 claims description 3
- 230000007257 malfunction Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 3
- 238000011156 evaluation Methods 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 238000005259 measurement Methods 0.000 description 2
- 238000007796 conventional method Methods 0.000 description 1
- 239000013256 coordination polymer Substances 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
Landscapes
- Debugging And Monitoring (AREA)
Abstract
(57)【要約】
【目的】 プログラムのデバッグ作業を容易にする。
【構成】 デバッグの際は、レジスタやメモリへの書き
込み命令の直前に、書き込む領域に格納されているデー
タをトレースメモリに退避する命令を挿入したデバッグ
用プログラムをコンパイラ1によりコンパイルする。そ
して、このデバッグ用プログラムをユーザ実行ファイル
2に格納して実行することにより、デバッグを進める。
デバッグ用プログラムを実行すると、バグが存在すると
きはその影響により実行が停止する。トレースメモリ3
a、3bには、実行が停止した位置のアドレス及びその
時のレジスタ及びメモリの内容が格納されている。そし
て、命令変換ツール4により、デバッグ用プログラムを
レジスタ及びメモリのデータに対し、逆の操作を行う命
令列に変換する。この命令列を1ステップずつ実行する
ことにより、実行が停止した位置から逆方向にトレース
することができる。
込み命令の直前に、書き込む領域に格納されているデー
タをトレースメモリに退避する命令を挿入したデバッグ
用プログラムをコンパイラ1によりコンパイルする。そ
して、このデバッグ用プログラムをユーザ実行ファイル
2に格納して実行することにより、デバッグを進める。
デバッグ用プログラムを実行すると、バグが存在すると
きはその影響により実行が停止する。トレースメモリ3
a、3bには、実行が停止した位置のアドレス及びその
時のレジスタ及びメモリの内容が格納されている。そし
て、命令変換ツール4により、デバッグ用プログラムを
レジスタ及びメモリのデータに対し、逆の操作を行う命
令列に変換する。この命令列を1ステップずつ実行する
ことにより、実行が停止した位置から逆方向にトレース
することができる。
Description
【0001】
【産業上の利用分野】本発明は、マイクロコンピュータ
上で動作するプログラムのデバッグや評価を行う際に使
用する逆実行デバッグシステムに関するものである。
上で動作するプログラムのデバッグや評価を行う際に使
用する逆実行デバッグシステムに関するものである。
【0002】
【従来の技術】一般に、プログラムのデバッグや評価の
際は、マイクロコンピュ―タ上で実際にプログラムを動
作させ、その動作のトレースを行う。このような動作ト
レースでは、従来、各種のツール等を使用し、以下のよ
うな作業を行っていた。例えば、プログラムのあるアド
レスにおいて、プログラムの動作を停止させたり、通過
を確認したいときにはプログラムの途中にブレークポイ
ントを設定していた。また、ブレークポイントから数命
令のトレースを行いたい時にはステップ命令を使用し、
1ステップずつ命令を実行していた。これらの機能で確
認できないトレース情報、例えば、特定の命令の実行頻
度の測定、メモリのあるアドレスのアクセス回数の測定
などは、プログラム自身、あるいはデバッグ評価ツール
に、カウンタやフラグなどの仕掛けを組み込むようにし
ていた。
際は、マイクロコンピュ―タ上で実際にプログラムを動
作させ、その動作のトレースを行う。このような動作ト
レースでは、従来、各種のツール等を使用し、以下のよ
うな作業を行っていた。例えば、プログラムのあるアド
レスにおいて、プログラムの動作を停止させたり、通過
を確認したいときにはプログラムの途中にブレークポイ
ントを設定していた。また、ブレークポイントから数命
令のトレースを行いたい時にはステップ命令を使用し、
1ステップずつ命令を実行していた。これらの機能で確
認できないトレース情報、例えば、特定の命令の実行頻
度の測定、メモリのあるアドレスのアクセス回数の測定
などは、プログラム自身、あるいはデバッグ評価ツール
に、カウンタやフラグなどの仕掛けを組み込むようにし
ていた。
【0003】また、ICE(In Circuit Emulator) など
の高機能なデバッグ評価ツールでは、マイクロコンピュ
ータの信号ピンの履歴を一定量トレースメモリに保持し
ておくことができる。そして、これらの信号ピンの履歴
からより多くのトレース情報を得ることができる。この
トレース情報を解析することにより実行命令の履歴、デ
ータアクセスの状況を知ることができた。これらの従来
技術は、いずれも、プログラムをプログラムエントリか
ら実行し、実行時に必要な情報を得るものであった。
の高機能なデバッグ評価ツールでは、マイクロコンピュ
ータの信号ピンの履歴を一定量トレースメモリに保持し
ておくことができる。そして、これらの信号ピンの履歴
からより多くのトレース情報を得ることができる。この
トレース情報を解析することにより実行命令の履歴、デ
ータアクセスの状況を知ることができた。これらの従来
技術は、いずれも、プログラムをプログラムエントリか
ら実行し、実行時に必要な情報を得るものであった。
【0004】
【発明が解決しようとする課題】しかしながら、上述し
た従来の技術には、次のような課題があった。第1に、
プログラムの動作トレースを行う場合に、一度通過して
しまった部分を再現するには、もう一度プログラムエン
トリから実行し直さなければならないので、効率的でな
い。このような状況は、プログラムのデバッグ時に頻繁
に起こる。これは、プログラムのバグが誤動作として表
面に現れるのが、バグ箇所を通過してから一定時間経っ
てからの場合が多いからである。この場合、誤動作した
時点から、少しずつ前の状況を把握していくために何度
もブレークポイントをかけ直して、プログラムをプログ
ラムエントリから再実行する必要があった。
た従来の技術には、次のような課題があった。第1に、
プログラムの動作トレースを行う場合に、一度通過して
しまった部分を再現するには、もう一度プログラムエン
トリから実行し直さなければならないので、効率的でな
い。このような状況は、プログラムのデバッグ時に頻繁
に起こる。これは、プログラムのバグが誤動作として表
面に現れるのが、バグ箇所を通過してから一定時間経っ
てからの場合が多いからである。この場合、誤動作した
時点から、少しずつ前の状況を把握していくために何度
もブレークポイントをかけ直して、プログラムをプログ
ラムエントリから再実行する必要があった。
【0005】第2に、通常、プログラムの実行は、入力
データの内容やその入力タイミングによって異なるもの
であり、一度起きた事象を再現できない場合が多い。従
って、何らかの原因で誤動作が発生した場合に、その誤
動作を再現できず、デバッグできない場合が多いし、評
価する際にも、一度実行したプログラム処理を再現する
ことができない場合が多かった。第3に、ICEを使用
した場合でも、マイクロコンピュータの信号ピンの履歴
を参照して、プログラムの実行を追跡するのは非常に難
しい作業であった。第4に、ICEを使用した場合で
も、実行の特定の箇所でのレジスタやメモリの値を完全
に再現するのは事実上不可能であった。これは、プログ
ラム実行中に上書きされる、レジスタやメモリの値を知
るには、プログラムの実行開始時からの全履歴を保持し
なければならないからである。
データの内容やその入力タイミングによって異なるもの
であり、一度起きた事象を再現できない場合が多い。従
って、何らかの原因で誤動作が発生した場合に、その誤
動作を再現できず、デバッグできない場合が多いし、評
価する際にも、一度実行したプログラム処理を再現する
ことができない場合が多かった。第3に、ICEを使用
した場合でも、マイクロコンピュータの信号ピンの履歴
を参照して、プログラムの実行を追跡するのは非常に難
しい作業であった。第4に、ICEを使用した場合で
も、実行の特定の箇所でのレジスタやメモリの値を完全
に再現するのは事実上不可能であった。これは、プログ
ラム実行中に上書きされる、レジスタやメモリの値を知
るには、プログラムの実行開始時からの全履歴を保持し
なければならないからである。
【0006】
【課題を解決するための手段】本発明の逆実行デバッグ
システムは、上述した課題を解決するため、以下の点を
特徴とするものである。 (1)1.ユーザソースファイルに格納されたプログラム
を基にして、以下のトレース用プログラムを生成するた
めのコンパイラを備える。即ち、このコンパイラは、ま
ず、プログラム中からレジスタやメモリ等の記憶手段内
のデータを書き換える各書き込み命令を検出する。そし
て、それらの書き込み命令の実行時の直前の記憶手段内
のデータを退避するための退避命令を、当該書き込み命
令の直前に追加する。これらの退避命令は、ストア命
令、又はロード命令とストア命令の組み合わせである。
これらの退避命令を追加したものをトレース用プログラ
ムとする。
システムは、上述した課題を解決するため、以下の点を
特徴とするものである。 (1)1.ユーザソースファイルに格納されたプログラム
を基にして、以下のトレース用プログラムを生成するた
めのコンパイラを備える。即ち、このコンパイラは、ま
ず、プログラム中からレジスタやメモリ等の記憶手段内
のデータを書き換える各書き込み命令を検出する。そし
て、それらの書き込み命令の実行時の直前の記憶手段内
のデータを退避するための退避命令を、当該書き込み命
令の直前に追加する。これらの退避命令は、ストア命
令、又はロード命令とストア命令の組み合わせである。
これらの退避命令を追加したものをトレース用プログラ
ムとする。
【0007】2.当該コンパイラにより生成されたトレー
ス用プログラムを格納するユーザ実行ファイルを備え
る。 3.当該ユーザ実行ファイルに格納されたトレース用プロ
グラム中の退避命令の実行により退避されるデータ及び
当該トレース用プログラムの実行過程の命令アドレス履
歴をそれぞれ格納するトレースメモリを備える。 4.トレース用プログラムの実行停止時に、ユーザ実行フ
ァイルに格納されたトレース用プログラムを基にして、
以下の逆実行プログラムを生成するための命令変換ツー
ルを備える。即ち、この命令変換ツールは、トレース用
プログラム中の各命令をトレースメモリに格納されてい
る最新の命令アドレスの命令から順次逆のデータ処理を
行う命令に変換し、これを逆実行プログラムとする。
ス用プログラムを格納するユーザ実行ファイルを備え
る。 3.当該ユーザ実行ファイルに格納されたトレース用プロ
グラム中の退避命令の実行により退避されるデータ及び
当該トレース用プログラムの実行過程の命令アドレス履
歴をそれぞれ格納するトレースメモリを備える。 4.トレース用プログラムの実行停止時に、ユーザ実行フ
ァイルに格納されたトレース用プログラムを基にして、
以下の逆実行プログラムを生成するための命令変換ツー
ルを備える。即ち、この命令変換ツールは、トレース用
プログラム中の各命令をトレースメモリに格納されてい
る最新の命令アドレスの命令から順次逆のデータ処理を
行う命令に変換し、これを逆実行プログラムとする。
【0008】(2)(1)において、命令変換ツール
は、以下を特徴とする。 1.トレース用プログラム中の各ロード命令をストア命令
に変換する。 2.トレース用プログラム中の各ストア命令をロード命令
に変換する。 3.トレースメモリにデータを退避する際のアドレスを更
新する各命令を1つ前のアドレスに戻す命令に変換す
る。 4.上記以外の命令は無視する。
は、以下を特徴とする。 1.トレース用プログラム中の各ロード命令をストア命令
に変換する。 2.トレース用プログラム中の各ストア命令をロード命令
に変換する。 3.トレースメモリにデータを退避する際のアドレスを更
新する各命令を1つ前のアドレスに戻す命令に変換す
る。 4.上記以外の命令は無視する。
【0009】
【作用】デバッグの際は、レジスタやメモリへの書き込
み命令の直前に、書き込む領域に格納されているデータ
をトレースメモリに退避する命令を挿入したデバッグ用
プログラムをコンパイラによりコンパイルする。そし
て、このデバッグ用プログラムをユーザ実行ファイルに
格納して実行することにより、デバッグを進める。デバ
ッグ用プログラムを実行すると、バグが存在するときは
その影響により実行が停止する。トレースメモリには、
実行が停止した位置のアドレス及びその時のレジスタ及
びメモリの内容が格納されている。そして、命令変換ツ
ールにより、デバッグ用プログラムをレジスタ及びメモ
リのデータに対し、逆の操作を行う命令列に変換する。
この結果、この命令列を1ステップずつ実行することに
より、実行が停止した位置から逆方向に実行動作を戻す
動作をトレースすることができる。
み命令の直前に、書き込む領域に格納されているデータ
をトレースメモリに退避する命令を挿入したデバッグ用
プログラムをコンパイラによりコンパイルする。そし
て、このデバッグ用プログラムをユーザ実行ファイルに
格納して実行することにより、デバッグを進める。デバ
ッグ用プログラムを実行すると、バグが存在するときは
その影響により実行が停止する。トレースメモリには、
実行が停止した位置のアドレス及びその時のレジスタ及
びメモリの内容が格納されている。そして、命令変換ツ
ールにより、デバッグ用プログラムをレジスタ及びメモ
リのデータに対し、逆の操作を行う命令列に変換する。
この結果、この命令列を1ステップずつ実行することに
より、実行が停止した位置から逆方向に実行動作を戻す
動作をトレースすることができる。
【0010】
【実施例】以下、本発明の実施例を図面を参照して詳細
に説明する。図1は、本発明の逆実行デバッグシステム
の一実施例のブロック図である。この図lは、ターゲッ
トシステム上のマイクロプロセッサ(以下、MPUと略
称する)で動作するユーザプログラムをホスト上からデ
バッグするデバッガと、コンパイラおよび命令変換ツー
ルを含むシステムの全体構成を示す。図1において、ホ
スト100では、メモリ103と、ハードディスク10
5と、中央演算装置101(以下、CPUと略称する)
と、CRT106と、ターゲットとのI/F部104と
が内部バス102によって接続されている。また、CP
U101には、ユーザが入力を行うキーボード107
と、マウス108とが接続されている。
に説明する。図1は、本発明の逆実行デバッグシステム
の一実施例のブロック図である。この図lは、ターゲッ
トシステム上のマイクロプロセッサ(以下、MPUと略
称する)で動作するユーザプログラムをホスト上からデ
バッグするデバッガと、コンパイラおよび命令変換ツー
ルを含むシステムの全体構成を示す。図1において、ホ
スト100では、メモリ103と、ハードディスク10
5と、中央演算装置101(以下、CPUと略称する)
と、CRT106と、ターゲットとのI/F部104と
が内部バス102によって接続されている。また、CP
U101には、ユーザが入力を行うキーボード107
と、マウス108とが接続されている。
【0011】ホスト100上のハードディスク105に
は、ホスト100のCPU101上で動作するプログラ
ムであるコンパイラ1と、デバッガ110と、命令変換
ツール4、およびターゲット上のMPU301上で動作
するユーザプログラムのソースファイル112と、それ
をコンパイラ1でコンパイルして生成されるユーザ実行
ファイル2が格納される。ターゲットシステム300
は、デバッグモニタ309が書き込まれたR0M30
4、メモリ305、ユーザ実行ファイル2を動作させる
MPU301、ユーザ実行ファイル2の実行履歴を格納
するトレースメモリ3aとトレースメモリ3b、および
メモリ管理ユニット310(以下、MMUと略称する)
を搭載する。ターゲットシステム300のI/F部30
3はデバッガインタフェース200を通じてホスト10
0のI/F部104と接続されている。
は、ホスト100のCPU101上で動作するプログラ
ムであるコンパイラ1と、デバッガ110と、命令変換
ツール4、およびターゲット上のMPU301上で動作
するユーザプログラムのソースファイル112と、それ
をコンパイラ1でコンパイルして生成されるユーザ実行
ファイル2が格納される。ターゲットシステム300
は、デバッグモニタ309が書き込まれたR0M30
4、メモリ305、ユーザ実行ファイル2を動作させる
MPU301、ユーザ実行ファイル2の実行履歴を格納
するトレースメモリ3aとトレースメモリ3b、および
メモリ管理ユニット310(以下、MMUと略称する)
を搭載する。ターゲットシステム300のI/F部30
3はデバッガインタフェース200を通じてホスト10
0のI/F部104と接続されている。
【0012】MPU301と、ROM304と、メモリ
305と、トレースメモリ3aと、トレースメモリ3b
と、I/F部303とは、ターゲットシステム300の
内部バス302によって接続されている。トレースメモ
リ3bは、命令アドレストレース回路308を通じてM
PU301と接続されている。これにより、命令アドレ
ストレース回路308により、トレースメモリ3bにM
PU301の実行命令アドレス履歴が保持される。
305と、トレースメモリ3aと、トレースメモリ3b
と、I/F部303とは、ターゲットシステム300の
内部バス302によって接続されている。トレースメモ
リ3bは、命令アドレストレース回路308を通じてM
PU301と接続されている。これにより、命令アドレ
ストレース回路308により、トレースメモリ3bにM
PU301の実行命令アドレス履歴が保持される。
【0013】この場合、命令アドレストレース回路30
8は、実行命令アドレス履歴を保持するのにトレースメ
モリ3bをループ状に使用する。すなわち、トレースメ
モリ3bの最終番地まで使用してしまったら、再び先頭
番地から履歴を保持する。このようにして、常に、プロ
グラム停止時の前の実行命令アドレス履歴を、トレース
メモリ3bの容量分保持することができる。プログラム
停止時の実行命令アドレスを保持するトレースメモリ3
bのアドレスは、図2に示すように、トレースメモリ3
bのアドレスレジスタ311に保持される。
8は、実行命令アドレス履歴を保持するのにトレースメ
モリ3bをループ状に使用する。すなわち、トレースメ
モリ3bの最終番地まで使用してしまったら、再び先頭
番地から履歴を保持する。このようにして、常に、プロ
グラム停止時の前の実行命令アドレス履歴を、トレース
メモリ3bの容量分保持することができる。プログラム
停止時の実行命令アドレスを保持するトレースメモリ3
bのアドレスは、図2に示すように、トレースメモリ3
bのアドレスレジスタ311に保持される。
【0014】デバッガ110は、キーボード107また
はマウス108からコマンドを入力し、その結果をCR
T106に表示する。また、デバッガ110は、ユーザ
のプログラムロードコマンドによりユーザ実行ファイル
2を読み出し、デバッガインタフェース200を通じて
デバッグモニタ309と通信することにより、ターゲッ
トシステム300上のメモリ305にロードする。そし
て、デバッガインタフェース200を通じてデバッグモ
ニタ309と通信することにより、ユーザコマンドを実
行する。
はマウス108からコマンドを入力し、その結果をCR
T106に表示する。また、デバッガ110は、ユーザ
のプログラムロードコマンドによりユーザ実行ファイル
2を読み出し、デバッガインタフェース200を通じて
デバッグモニタ309と通信することにより、ターゲッ
トシステム300上のメモリ305にロードする。そし
て、デバッガインタフェース200を通じてデバッグモ
ニタ309と通信することにより、ユーザコマンドを実
行する。
【0015】次に、上述したシステムの動作を説明す
る。コンパイラ1は、マイクロコンピュータ上で動作す
るユーザ実行ファイル2が実行時に値を書き込む、レジ
スタ、メモリなどの記憶手段の書き込み前の値を退避す
る命令をオペレータの選択により追加することができ
る。以下、この動作の詳細を説明する。例えば、次のよ
うなレジスタ加算命令を定義する。 add %r1,%r2,%r3 この命令は、%r1の値と%r2の値を加えて%r3に
格納する命令である。ここに、%r1などはMPU30
1の内部にあるレジスタを示す。この命令は、レジスタ
への書き込みを伴う命令である。
る。コンパイラ1は、マイクロコンピュータ上で動作す
るユーザ実行ファイル2が実行時に値を書き込む、レジ
スタ、メモリなどの記憶手段の書き込み前の値を退避す
る命令をオペレータの選択により追加することができ
る。以下、この動作の詳細を説明する。例えば、次のよ
うなレジスタ加算命令を定義する。 add %r1,%r2,%r3 この命令は、%r1の値と%r2の値を加えて%r3に
格納する命令である。ここに、%r1などはMPU30
1の内部にあるレジスタを示す。この命令は、レジスタ
への書き込みを伴う命令である。
【0016】また、次のような命令を定義する。 sw %r1,[%r2] この命令は、%r1の値を%r2の値のメモリアドレス
へストアする命令であり、メモリ305ヘの書き込みを
伴う命令である。コンパイラ1は、ユーザの選択に応じ
て、このような命令の直前に、書き込まれる記憶手段の
前の値をトレースメモリ3aに退避する命令を追加す
る。例えば、ユーザソースファイル112のコンパイル
時、ユーザが「退避命令の追加」を選択しなかった場合
には、コンパイラ1が、以下の命令列を生成するとす
る。
へストアする命令であり、メモリ305ヘの書き込みを
伴う命令である。コンパイラ1は、ユーザの選択に応じ
て、このような命令の直前に、書き込まれる記憶手段の
前の値をトレースメモリ3aに退避する命令を追加す
る。例えば、ユーザソースファイル112のコンパイル
時、ユーザが「退避命令の追加」を選択しなかった場合
には、コンパイラ1が、以下の命令列を生成するとす
る。
【0017】 (a1) add %r1,%r2,%r3 (a2) sw %r1,[%r2] 一方、ユーザが「退避命令の追加」を選択した場合、コ
ンパイラ1は、「退避命令の追加」を選択しなかった場
合に加えて図3に示す処理を行う。その結果、以下の命
令列を出力する。 (b1) sw %r3,[%wr1] (b2) add %wr1,4,%wr1 (b3) add %r1,%r2,%r3 (b4) lw [%r2],%wr2 (b5) sw %wr2,[%wr1] (b6) add %wr1,4,%wr1 (b7) sw %r1,[%r2]
ンパイラ1は、「退避命令の追加」を選択しなかった場
合に加えて図3に示す処理を行う。その結果、以下の命
令列を出力する。 (b1) sw %r3,[%wr1] (b2) add %wr1,4,%wr1 (b3) add %r1,%r2,%r3 (b4) lw [%r2],%wr2 (b5) sw %wr2,[%wr1] (b6) add %wr1,4,%wr1 (b7) sw %r1,[%r2]
【0018】ここに、%wr1,%wr2は、ユーザプ
ログラムが使用することのないワークレジスタである。
“lw [%r2],%wr2”は、%r2の値の
メモリアドレスの内容を%wr2にロードする命令であ
る。また、%wr1は、常にトレースメモリ3aのアド
レスを指しており、MMU310により、最終番地アド
レスからさらにインクリメントすると先頭番地を指すよ
うにされている。
ログラムが使用することのないワークレジスタである。
“lw [%r2],%wr2”は、%r2の値の
メモリアドレスの内容を%wr2にロードする命令であ
る。また、%wr1は、常にトレースメモリ3aのアド
レスを指しており、MMU310により、最終番地アド
レスからさらにインクリメントすると先頭番地を指すよ
うにされている。
【0019】上記の場合、コンパイラ1は、(a1)に
当たる(b3)の命令を決定し、この命令がレジスタ%
r3への書き込みを伴う命令なので、書き込まれるレジ
スタ値をトレースメモリ3aに退避する命令(bl)
と、退避するアドレスを更新する命令(b2)を加え
る。同様に、(a2)に当たる(b7)の命令を決定
し、この命令がメモリへの書き込みを伴う命令なので、
書き込まれるメモリ値をトレースメモリ3aに退避する
命令(b4),(b5)と、退避するアドレスを更新す
る命令(b6)を加える。以上のようにして、マイクロ
コンピュータ上で動作するプログラムが実行時に値を書
き込む、レジスタ、メモリなどの記憶手段の書き込み前
の値を退避する命令を選択的に追加することができる。
即ち、ユーザのオプション指定により、退避命令を追加
することができる。
当たる(b3)の命令を決定し、この命令がレジスタ%
r3への書き込みを伴う命令なので、書き込まれるレジ
スタ値をトレースメモリ3aに退避する命令(bl)
と、退避するアドレスを更新する命令(b2)を加え
る。同様に、(a2)に当たる(b7)の命令を決定
し、この命令がメモリへの書き込みを伴う命令なので、
書き込まれるメモリ値をトレースメモリ3aに退避する
命令(b4),(b5)と、退避するアドレスを更新す
る命令(b6)を加える。以上のようにして、マイクロ
コンピュータ上で動作するプログラムが実行時に値を書
き込む、レジスタ、メモリなどの記憶手段の書き込み前
の値を退避する命令を選択的に追加することができる。
即ち、ユーザのオプション指定により、退避命令を追加
することができる。
【0020】次に、逆実行によるデバッグ作業について
説明する。命令変換ツール4は、コンパイラ1で、「退
避命令の追加」を選択してコンパイルしたユーザ実行フ
ァイル2とともに使用する。命令変換ツール4は、ユー
ザ実行ファイル2の実行後に、トレースメモリ3bに格
納された実行命令履歴と、トレースメモリ3aに退避さ
れた、レジスタ、メモリなどの記憶手段の書き込み前の
値を使用して、ユーザ実行ファイル2の停止時点から開
始して、ユーザ実行ファイル2の逆動作を実行するユー
ザ実行ファイルを自動的に生成する。以下、この処理の
詳細を説明する。ユーザソースファイル112をコンパ
イラ1によって「退避命令の追加」を行うようにコンパ
イルした結果、以下の命令列を含むユーザ実行ファイル
2が生成されたとする。
説明する。命令変換ツール4は、コンパイラ1で、「退
避命令の追加」を選択してコンパイルしたユーザ実行フ
ァイル2とともに使用する。命令変換ツール4は、ユー
ザ実行ファイル2の実行後に、トレースメモリ3bに格
納された実行命令履歴と、トレースメモリ3aに退避さ
れた、レジスタ、メモリなどの記憶手段の書き込み前の
値を使用して、ユーザ実行ファイル2の停止時点から開
始して、ユーザ実行ファイル2の逆動作を実行するユー
ザ実行ファイルを自動的に生成する。以下、この処理の
詳細を説明する。ユーザソースファイル112をコンパ
イラ1によって「退避命令の追加」を行うようにコンパ
イルした結果、以下の命令列を含むユーザ実行ファイル
2が生成されたとする。
【0021】 (c1) 0x0fc sw %r1,[%r2] (c2) 0x100 b label ・・・ label: (c3) 0x200 sw %r5,[%wr1] (c4) 0x204 add %wr1,4,%wr1 (c5) 0x208 add %r3,%r4,%r5 (c6) 0x20c lw [%r7],%wr2 (c7) 0x210 sw %wr2,[%wr1] (c8) 0x214 add %wr1,4,%wr1 (c9) 0x218 sw %r6,[%r7]
【0022】ここに、0xfc,0x100などは命令
のアドレスであり、”b label”は、ラベルla
belへの分岐命令である。このユーザ実行ファイル2
を実行した結果、MPU301が命令アドレス0x21
8で停止して、その時点でのターゲットシステム300
のトレースメモリ3a、トレースメモリ3bの内容が以
下のようであったとする。 トレースメモリ3aの内容 (d1) 0x12345678 (d2) 0x98765432
のアドレスであり、”b label”は、ラベルla
belへの分岐命令である。このユーザ実行ファイル2
を実行した結果、MPU301が命令アドレス0x21
8で停止して、その時点でのターゲットシステム300
のトレースメモリ3a、トレースメモリ3bの内容が以
下のようであったとする。 トレースメモリ3aの内容 (d1) 0x12345678 (d2) 0x98765432
【0023】 トレースメモリ3bの内容 (e1) 0xfc (e2) 0x100 (e3) 0x200 (e4) 0x204 (e5) 0x208 (e6) 0x20c (e7) 0x210 (e8) 0x214 (e9) 0x218
【0024】ここに、%wr1は(d2)を指し、トレ
ースメモリ3bのアドレスレジスタ311は(e9)を
指しているとする。トレースメモリ3aとトレースメモ
リ3bの内容はデバッガ110によってハードディスク
105に格納することができる。命令変換ツール4は、
ハードディスク105に格納されたトレースメモリ3a
とトレースメモリ3bの内容、およびユーザ実行ファイ
ル2を使用して、図4のアルゴリズムに従ってユーザ実
行ファイル2の逆実行プログラムを生成する。図4の例
の場合、以下の逆実行プログラムを生成する。ここに、
逆実行プログラムというのは、ユーザプログラムを動作
させた場合のレジスタ、メモリなどの記憶手段の状態遷
移と逆の状態遷移を生じさせるプログラムという意味で
ある。
ースメモリ3bのアドレスレジスタ311は(e9)を
指しているとする。トレースメモリ3aとトレースメモ
リ3bの内容はデバッガ110によってハードディスク
105に格納することができる。命令変換ツール4は、
ハードディスク105に格納されたトレースメモリ3a
とトレースメモリ3bの内容、およびユーザ実行ファイ
ル2を使用して、図4のアルゴリズムに従ってユーザ実
行ファイル2の逆実行プログラムを生成する。図4の例
の場合、以下の逆実行プログラムを生成する。ここに、
逆実行プログラムというのは、ユーザプログラムを動作
させた場合のレジスタ、メモリなどの記憶手段の状態遷
移と逆の状態遷移を生じさせるプログラムという意味で
ある。
【0025】 (f1) lw [%r7],%r6 (f2) sub %wr1,4,%wr1 (f3) lw [%wr1],%wr2 (f4) sw %wr2,[%r7] (f5) sub %wr1,4,%wr1 (f6) lw [%wr1],%r5 (f7) lw [%r2],%r1
【0026】この生成過程を図4を参照して説明する。
まず、ステップS41で(e9)より(c9)の命令を
読み出すと、これはストア命令なので、その逆のロード
命令(f1)が生成される(ステップS42、S4
3)。次に、ステップS44、S41で(e8)より
(c8)の命令を読み出すと、これは退避するアドレス
を更新する命令なので、退避アドレスを1つ戻す命令
(f2)が生成される(ステップS46)。次に、(e
7)より(c7)の命令を読みだし、これがストア命令
なので、その逆のロード命令(f3)が生成される。こ
のようにして生成されたものが上記の逆実行プログラム
である。この逆実行プログラムにより、メモリ305と
トレースメモリ3aの内容を、ユーザプログラム実行停
止時の状態にしておいて、この逆実行プログラムをロー
ドして動作させれば、レジスタ、メモリなどの記憶手段
の状態遷移を逆に実行させることができる。
まず、ステップS41で(e9)より(c9)の命令を
読み出すと、これはストア命令なので、その逆のロード
命令(f1)が生成される(ステップS42、S4
3)。次に、ステップS44、S41で(e8)より
(c8)の命令を読み出すと、これは退避するアドレス
を更新する命令なので、退避アドレスを1つ戻す命令
(f2)が生成される(ステップS46)。次に、(e
7)より(c7)の命令を読みだし、これがストア命令
なので、その逆のロード命令(f3)が生成される。こ
のようにして生成されたものが上記の逆実行プログラム
である。この逆実行プログラムにより、メモリ305と
トレースメモリ3aの内容を、ユーザプログラム実行停
止時の状態にしておいて、この逆実行プログラムをロー
ドして動作させれば、レジスタ、メモリなどの記憶手段
の状態遷移を逆に実行させることができる。
【0027】以上のようにして、コンパイラ1と、命令
変換ツール4を使用して、ユーザプログラムの停止時か
ら逆動作をする逆実行プログラムを生成することがで
き、この逆実行プログラムを使用して、プログラムの逆
トレースを行うことができる。プログラムの逆トレース
は、従来行われていなかった方法であり、これによって
画期的なデバッグツールが提供される。即ち、一度実行
したプログラムの特定の箇所でのレジスタ、メモリの値
の再現が可能であり、しかも、プログラムの実行、停
止、レジスタ、メモリ値の参照を繰り返して逆トレース
することができる。これにより、バグの原因を捜し出す
ことが容易となり、デバッグが効率的となる。
変換ツール4を使用して、ユーザプログラムの停止時か
ら逆動作をする逆実行プログラムを生成することがで
き、この逆実行プログラムを使用して、プログラムの逆
トレースを行うことができる。プログラムの逆トレース
は、従来行われていなかった方法であり、これによって
画期的なデバッグツールが提供される。即ち、一度実行
したプログラムの特定の箇所でのレジスタ、メモリの値
の再現が可能であり、しかも、プログラムの実行、停
止、レジスタ、メモリ値の参照を繰り返して逆トレース
することができる。これにより、バグの原因を捜し出す
ことが容易となり、デバッグが効率的となる。
【0028】尚、本発明は上述した実施例に限定される
ものではなく、種々の変形が可能であることはもちろん
である。例えば、上述した実施例では、ハードウェアと
密接な機械命令の場合について説明したが、本発明を高
級言語のプログラムのデバッグに応用することも可能で
ある。
ものではなく、種々の変形が可能であることはもちろん
である。例えば、上述した実施例では、ハードウェアと
密接な機械命令の場合について説明したが、本発明を高
級言語のプログラムのデバッグに応用することも可能で
ある。
【0029】
【発明の効果】以上説明したように、本発明の逆実行デ
バッグシステムによれば、所定の命令変換により逆実行
プログラムを生成して実行するようにしたので、次のよ
うな効果がある。即ち、プログラムの動作トレースを行
う場合に、一度通過してしまった部分を再現する際に、
もう一度プログラムエントリから実行し直す必要がな
く、効率的なデバッグ作業を行うことができる。即ち、
何度もブレークポイントをかけ直さなくても、誤動作し
た時点から、1ステップずつ前の状況を把握していくこ
とができる。また、入力データの内容やその入力タイミ
ングによってプログラムの実行内容が異なるような場合
でも、過去に起きた事象を再現することが可能となる。
従って、何らかの原因で誤動作が発生した場合に、その
誤動作を確実に再現することができる。
バッグシステムによれば、所定の命令変換により逆実行
プログラムを生成して実行するようにしたので、次のよ
うな効果がある。即ち、プログラムの動作トレースを行
う場合に、一度通過してしまった部分を再現する際に、
もう一度プログラムエントリから実行し直す必要がな
く、効率的なデバッグ作業を行うことができる。即ち、
何度もブレークポイントをかけ直さなくても、誤動作し
た時点から、1ステップずつ前の状況を把握していくこ
とができる。また、入力データの内容やその入力タイミ
ングによってプログラムの実行内容が異なるような場合
でも、過去に起きた事象を再現することが可能となる。
従って、何らかの原因で誤動作が発生した場合に、その
誤動作を確実に再現することができる。
【図1】本発明の逆実行デバッグシステムの一実施例の
ブロック図である。
ブロック図である。
【図2】トレースメモリの構成の説明図である。
【図3】退避命令を追加する処理手順を説明するフロー
チャートである。
チャートである。
【図4】命令変換ツールの処理手順を説明するフローチ
ャートである。
ャートである。
1 コンパイラ 2 ユーザ実行ファイル 3a、3b トレースメモリ 4 命令変換ツール
Claims (2)
- 【請求項1】 ユーザソースファイルに格納されたプロ
グラム中の各書き込み命令の実行時の直前の記憶手段内
のデータを退避するための退避命令を、当該書き込み命
令の直前に追加したトレース用プログラムを生成するコ
ンパイラと、 当該コンパイラにより生成されたトレース用プログラム
を格納するユーザ実行ファイルと、 当該ユーザ実行ファイルに格納されたトレース用プログ
ラム中の前記退避命令の実行により退避されるデータ及
び当該トレース用プログラムの実行過程の命令アドレス
履歴をそれぞれ格納するトレースメモリと、 前記トレース用プログラムの実行停止時に、前記トレー
ス用プログラム中の各命令を前記トレースメモリに格納
されている最新の命令アドレスの命令から順次逆のデー
タ処理を行う命令に変換した逆実行プログラムを生成す
る命令変換ツールとを備えたことを特徴とする逆実行デ
バッグシステム。 - 【請求項2】 前記命令変換ツールは、前記トレース用
プログラム中の各ロード命令をストア命令に変換し、各
ストア命令をロード命令に変換し、前記トレースメモリ
に退避するアドレスを更新する各命令を1つ前のアドレ
スに戻す命令に変換し、これら以外の命令は無視するこ
とを特徴とする請求項1記載の逆実行デバッグシステ
ム。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP17829595A JP3379675B2 (ja) | 1995-06-21 | 1995-06-21 | 逆実行デバッグシステム |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP17829595A JP3379675B2 (ja) | 1995-06-21 | 1995-06-21 | 逆実行デバッグシステム |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH096647A true JPH096647A (ja) | 1997-01-10 |
| JP3379675B2 JP3379675B2 (ja) | 2003-02-24 |
Family
ID=16045980
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP17829595A Expired - Fee Related JP3379675B2 (ja) | 1995-06-21 | 1995-06-21 | 逆実行デバッグシステム |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP3379675B2 (ja) |
Cited By (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2000235510A (ja) * | 1999-02-15 | 2000-08-29 | Hitachi Ltd | プロセッサおよびそのためのコンパイルプログラム記録媒体 |
| JP2003122595A (ja) * | 2001-10-11 | 2003-04-25 | Mitsubishi Electric Corp | ソフトウェア障害解析方法及び装置 |
| JP2004062858A (ja) * | 2002-07-29 | 2004-02-26 | Arm Ltd | データ処理装置内のアプリケーション・コードのコンパイル |
| JP2009110375A (ja) * | 2007-10-31 | 2009-05-21 | Nec Corp | 計算機及び障害再現方法並びにプログラム |
| JP2017130068A (ja) * | 2016-01-20 | 2017-07-27 | 富士電機株式会社 | プログラマブルコントローラシステム、その開発支援装置、ターゲット装置 |
| JP2019537782A (ja) * | 2016-10-11 | 2019-12-26 | グリーン ヒルズ ソフトウェア, エルエルシーGreen Hills Software, Llc | 垂直統合インストルメント化およびトレース再構成のためのシステム、方法およびデバイス |
| JP2022154258A (ja) * | 2021-03-30 | 2022-10-13 | 富士通株式会社 | 不正箇所特定プログラム、不正箇所特定装置、及び不正箇所特定方法 |
-
1995
- 1995-06-21 JP JP17829595A patent/JP3379675B2/ja not_active Expired - Fee Related
Cited By (11)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2000235510A (ja) * | 1999-02-15 | 2000-08-29 | Hitachi Ltd | プロセッサおよびそのためのコンパイルプログラム記録媒体 |
| JP2003122595A (ja) * | 2001-10-11 | 2003-04-25 | Mitsubishi Electric Corp | ソフトウェア障害解析方法及び装置 |
| JP2004062858A (ja) * | 2002-07-29 | 2004-02-26 | Arm Ltd | データ処理装置内のアプリケーション・コードのコンパイル |
| JP2009110375A (ja) * | 2007-10-31 | 2009-05-21 | Nec Corp | 計算機及び障害再現方法並びにプログラム |
| JP2017130068A (ja) * | 2016-01-20 | 2017-07-27 | 富士電機株式会社 | プログラマブルコントローラシステム、その開発支援装置、ターゲット装置 |
| JP2019537782A (ja) * | 2016-10-11 | 2019-12-26 | グリーン ヒルズ ソフトウェア, エルエルシーGreen Hills Software, Llc | 垂直統合インストルメント化およびトレース再構成のためのシステム、方法およびデバイス |
| US11243871B2 (en) | 2016-10-11 | 2022-02-08 | Green Hills Software Llc | Systems, methods, and devices for vertically integrated instrumentation and trace reconstruction |
| US11609840B2 (en) | 2016-10-11 | 2023-03-21 | Green Hills Software Llc | Systems, methods, and devices for vertically integrated instrumentation and trace reconstruction |
| US12001316B2 (en) | 2016-10-11 | 2024-06-04 | Green Hills Software Llc | Systems, methods, and devices for vertically integrated instrumentation and trace reconstruction |
| US12346238B2 (en) | 2016-10-11 | 2025-07-01 | Green Hills Software Llc | Systems, methods, and devices for vertically integrated instrumentation and trace reconstruction |
| JP2022154258A (ja) * | 2021-03-30 | 2022-10-13 | 富士通株式会社 | 不正箇所特定プログラム、不正箇所特定装置、及び不正箇所特定方法 |
Also Published As
| Publication number | Publication date |
|---|---|
| JP3379675B2 (ja) | 2003-02-24 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US8261130B2 (en) | Program code trace signature | |
| US5870607A (en) | Method and apparatus for selective replay of computer programs | |
| CN101446918B (zh) | 一种实现用户态调试器调试单个函数的方法及系统 | |
| US8266608B2 (en) | Post-compile instrumentation of object code for generating execution trace data | |
| US5313387A (en) | Re-execution of edit-compile-run cycles for changed lines of source code, with storage of associated data in buffers | |
| US7533246B2 (en) | Application program execution enhancing instruction set generation for coprocessor and code conversion with marking for function call translation | |
| US6240545B1 (en) | Setting instance breakpoints in object oriented computer programs | |
| US8448152B2 (en) | High-level language, architecture-independent probe program compiler | |
| JP2004062858A (ja) | データ処理装置内のアプリケーション・コードのコンパイル | |
| JPH0778751B2 (ja) | バイアスされた疑似ランダム・テスト・パターンを動的に生成する方法 | |
| WO2005111801A2 (en) | Apparatus and method for improving emulation speed of high-level languages in on-chip emulation systems | |
| US20130125096A1 (en) | Systems and Methods for Dynamic Collection of Probe Call Sites | |
| KR20110070468A (ko) | 인스트루먼테이션 실행 장치 및 방법 | |
| US7676774B2 (en) | System LSI verification system and system LSI verification method | |
| JP3379675B2 (ja) | 逆実行デバッグシステム | |
| JP4503203B2 (ja) | 情報処理装置を評価するためのテストプログラムを作成する方法、装置、およびそのための処理を記述したプログラム | |
| JP2715988B2 (ja) | プログラムシミュレータ装置及びプログラムデバッグ方法 | |
| Al-Sharif et al. | The use of dynamic temporal assertions for debugging | |
| JP2002268918A (ja) | 試験システム及び試験方法及び試験プログラム及び試験プログラムを記録した計算機で読み取り可能な記録媒体 | |
| Rozhon | Capturing & Modifying GPU Binaries in User-mode | |
| JP4479738B2 (ja) | プログラマブルコントローラ | |
| JPH05108404A (ja) | デバツガシステム | |
| JP2004213540A (ja) | 半導体記憶装置およびソフトウェア開発装置 | |
| JP2003050717A (ja) | プログラムトレース装置及び方法 | |
| JP2002189613A (ja) | ソフトウェア開発支援装置、ソフトウェア開発支援方法及びソフトウェア開発支援プログラムを記録したコンピュータ読み取り可能な記録媒体 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081213 Year of fee payment: 6 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091213 Year of fee payment: 7 |
|
| LAPS | Cancellation because of no payment of annual fees |