JP5526725B2 - ハードウェアブレークポイントを用いたデバッグ方法、デバッグ処理プログラム及びデバッグ装置 - Google Patents

ハードウェアブレークポイントを用いたデバッグ方法、デバッグ処理プログラム及びデバッグ装置 Download PDF

Info

Publication number
JP5526725B2
JP5526725B2 JP2009264451A JP2009264451A JP5526725B2 JP 5526725 B2 JP5526725 B2 JP 5526725B2 JP 2009264451 A JP2009264451 A JP 2009264451A JP 2009264451 A JP2009264451 A JP 2009264451A JP 5526725 B2 JP5526725 B2 JP 5526725B2
Authority
JP
Japan
Prior art keywords
hardware
breakpoint
hardware breakpoint
debugging
break
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
JP2009264451A
Other languages
English (en)
Other versions
JP2011108124A (ja
Inventor
真治 水津
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2009264451A priority Critical patent/JP5526725B2/ja
Priority to US12/950,429 priority patent/US20110126175A1/en
Publication of JP2011108124A publication Critical patent/JP2011108124A/ja
Application granted granted Critical
Publication of JP5526725B2 publication Critical patent/JP5526725B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、CPUで実行するソフトウェアプログラムのデバッグを行なうためのデバッグ方法、デバッグ処理プログラム及びデバッグ装置に関する。
ソフトウェアプログラムのデバッグ手段の一つとして、デバッガによってブレークポイントを設定する方法が存在する。ブレークポイントには一般にソフトウェアブレークポイントとハードウェアブレークポイントがある。
ソフトウェアブレークポイントは、止めたいブレークポイントの所でブレーク専用の命令語をユーザープログラム上の命令と置き換えて、プログラム処理がそのポイントを通過する時にブレークさせる。これに対して、ハードウェアブレークポイントは、デバッグ対象のソフトウェアプログラムを実行させるCPU等が持っているハードウェアコンパレータにブレークポイントを設定し、そこを通過する時にブレークさせる。
従って、例えばプログラムがROM等の書き換え不可能なメモリ上に配置されている場合、プログラムメモリを書き換えることが必要なソフトウェアブレークポイントは使用できず、ハードウェアブレークポイントを使用する。しかし、実際のCPUにおいて、一度に設定可能なハードウェアブレークポイントの個数は1〜2個程度しかない場合がある。
特許文献1には、ハードウェアブレークポイント設定時に、ハードウェアブレークポイントが全て使用中である場合に使用中のブレークポイントを保留にできるか否かを判定し、保留可能なものがあれば保留に変更設定し、要求ブレークポイントを新規設定等する発明が開示されている。
また、特許文献2には、ブレークポイントを設定したいプログラムアドレスを含むROM領域に格納されているプログラムをRAM領域にコピーし、所望の命令コードをブレークコードに書き換えて実行し、これをキャッシュメモリに書き込む発明が開示されている。
特開2001−67246号公報 特開2000−267885号公報
現状のCPU等においてはハードウェアブレークポイントとして設定可能な個数に限りがあるため、ROMに格納されたプログラムのデバッグといったように、デバッグ目的によってはハードウェアブレークポイントの設定数が足りず、不便な場合がある。
特許文献1に開示されている発明では、ハードウェアブレークポイント設定時に保留可能なブレークポイントがない場合には、新たにブレークポイントを設定することができない。また、特許文献2に開示されている発明では、ROM領域に格納されているプログラムをコピーするためのRAM領域を必要とし、かつ、キャッシュメモリを使用することが前提となっている。
本発明では、簡便な方法により、ソフトウェアブレークポイントのように設定個数を気にせずにハードウェアブレークポイントを設定し、ソフトウェアのデバッグを行なえるようにすることを課題とする。
上記の課題を解決するために、本発明に係るデバッグ方法は、CPU及びCPUから読み書き可能な記憶手段を有する情報処理装置上で実行するソフトウェアプログラムをハードウェアブレークを用いてデバッグする方法であって、前記記憶手段に格納され、複数のハードウェアブレークポイントを記録するためのハードウェアブレークポイントテーブルに、ハードウェアブレークポイントの設定を行なうハードウェアブレークポイントテーブル設定ステップと、前記ハードウェアブレークポイントテーブルに格納されたハードウェアブレークポイントと、デバッグ対象のプログラムを実行しているCPUのプログラムカウンタの値とに基づいて、次に設定すべきハードウェアブレークポイントを決定するハードウェアブレークポイント決定ステップと、前記ハードウェアブレークポイント決定ステップにより決定した、次に設定すべきハードウェアブレークポイントを、前記情報処理装置内部に設けられた、ハードウェアブレークポイントを設定するためのハードウェアブレーク設定レジスタに格納するためのハードウェアブレークポイント切換えステップと、ソフトウェアプログラムの実行開始後、CPUのプログラムカウンタの値が前記ハードウェアブレーク設定レジスタに格納された値と一致することによりハードウェアブレーク割込みが発生した場合に、発生したハードウェアブレーク割込みに対する処理を行なうハードウェアブレーク割込みハンドラが、前記ハードウェアブレーク割込みが発生したCPUのプログラムカウンタの値が前記ハードウェアブレークポイントテーブルに設定されているか否かを判定し、前記ハードウェアブレーク割込みが発生したCPUのプログラムカウンタの値が前記ハードウェアブレークポイントテーブルに設定されていれば、ハードウェアブレークによるデバッグ処理を行なうステップと、を有する。
本発明では、ハードウェアブレーク設定レジスタの個数に制限されることなくハードウェアブレークポイントを設定することができ、プログラムを効率的にデバッグすることが可能となる。
本発明の実施例に係る実施環境の例を示した図である。 本発明の実施例に係るシステム構成例を示した図である。 本発明の実施例に係るデバッガ処理を示した図である。 本発明の実施例に係るデバッガ処理(続き)を示した図である。 本発明の実施例に係るハードウェアブレークポイントテーブル設定処理を示した図である。 本発明の実施例に係るハードウェアブレークポイントテーブルの設定例を示した図である。 本発明の実施例に係るハードウェアブレークポイント切換え処理を示した図である。 本発明の実施例に係るハードウェアブレークポイントテーブル削除処理を示した図である。 本発明の実施例に係るハードウェアブレーク割込みハンドラの処理例を示した図である。 本発明の実施例に係るハードウェアブレーク割込み以外の割込みハンドラの処理例を示した図である。 本発明の実施例の動作を説明するためのプログラム例を示した図である。
以下、本発明の実施の形態について説明する。
図1は、本発明の実施例における実施環境の例を示した図である。図1の実施環境の例は、デバッグ対象装置1と、デバッグ対象装置1とデバッガ用通信インターフェース11で接続され、デバッグ対象装置1上で実行するソフトウェアプログラムのデバッグを行なうための操作を受け付けるデバッグ操作用端末5とを有する。図1中、デバッグ対象装置1は、CPU2、メモリ3、及びデバッガ用通信インターフェース回路4を有する。また、デバッグ操作用端末5は、CPU6、メモリ7、及び、デバッガ用通信インターフェース回路8を有し、ディスプレイ9やキーボード10を介してデバッガ処理に関するユーザーからの指示を受け付ける。デバッガ用通信インターフェース回路4及び8は、LANまたはシリアルインターフェース等により構成することが可能であり、その他の通信インターフェースを用いても良い。
図2は、図1のデバッグ対象装置1を用いてソフトウェアプログラムのデバッグを行なう際に、デバッグ対象装置1のCPU2と、CPU2で実行されるデバッグを行なうための処理プログラムとの関係を示した図である。図2中、CPU2は、実行しようとしているプログラム命令のメモリアドレスを記憶するプログラムカウンタ21、ハードウェアブレークの設定を行なうためのハードウェアブレーク設定レジスタ22、23を有する。ここで、ハードウェアブレーク設定レジスタ22、23は、CPU2のハードウェアブレーク制御回路(不図示)におけるハードウェアブレーク割り込み等の制御に用いられる。
また、後述のハードウェアブレークポイントの決定規則の条件を満たすハードウェアブレークポイントをハードウェアブレーク設定レジスタに設定するためには、ハードウェアブレーク設定レジスタの数は2以上であることが望ましい。
図2におけるハードウェアブレークポイントテーブル35は、デバッグ対象装置1内にあるメモリ3等に格納される。ここで、ハードウェアブレークポイントテーブル35には、ハードウェアブレークポイントを設定したいハードウェアブレークポイントアドレス等の情報が格納される。図2におけるハードウェアブレーク割込みハンドラ31、デバッガ処理32、ハードウェアブレークポイント切換え処理33、ハードウェアブレークポイントテーブル設定処理34等の処理を行なうプログラムは、前記メモリ3等に格納され、CPU2により実行される。
CPU2においてプログラムが実行されているときに、例えばプログラムカウンタの値がハードウェアブレーク設定レジスタ22又は23に設定された値に一致すると、前記ハードウェアブレーク制御回路がCPU2の割り込み処理部(不図示)に対してハードウェアブレーク割り込みを発生させる。ハードウェアブレーク割込みが発生すると、ハードウェアブレーク割り込みハンドラ31が呼び出される。このハードウェアブレーク割り込みハンドラ31は、プログラムカウンタ21の値と、ハードウェアブレークポイントテーブル35に格納された情報を参照して、デバッガ処理32またはハードウェアブレークポイント切換え処理33を呼び出す。具体的には、ハードウェアブレーク割込みが発生した際のプログラムカウンタ21の値がハードウェアブレークポイントテーブル35に格納されたハードウェアブレークポイントアドレスの値に一致した場合にはデバッガ処理32が呼び出され、その他の場合にはハードウェアブレークポイント切換え処理33が呼び出される。
デバッガ処理32は、前記デバッグ操作用端末5を介してユーザーから与えられるデバッグコマンドの指示に応じたデバッグ処理を行い、その後、ハードウェアブレークポイント切換え処理33又はハードウェアブレークポイントテーブル設定処理34を呼び出す。具体的には、デバッガ処理32においてユーザーからブレークポイント設定コマンドが入力された場合にはハードウェアブレークポイントテーブル設定処理34が呼び出され、その他の場合にはハードウェアブレークポイント切換え処理33が呼び出される。
ハードウェアブレークポイントテーブル設定処理34は、後述の所定の条件により、ハードウェアブレークポイントテーブル35を設定する。その後、ハードウェアブレークポイント切換え処理33が呼び出される。ハードウェアブレークポイント切換え処理33は、プログラムカウンタ21の値及びハードウェアブレークポイントテーブル35に設定された値を参照して、次に設定すべき1つ又は2つのハードウェアブレークポイントをハードウェアブレーク設定レジスタ22、23のいずれか又はそれぞれに設定する。
図3及び図4は、本実施例に係るデバッガ処理を示した図である。図3及び図4の各図を合わせてデバッガ処理全体のフローチャートを示す。図3の(50)及び(51)は、図4の(50)及び(51)に対応するものである。
デバッグ実施者がデバッグ操作用端末5のデバッガ操作画面からデバッガコマンドを入力すると、デバッガ用通信インターフェースを経由してデバッガコマンドがCPU2に送られ、デバッグ対象装置1のCPU2で実行されるデバッガ処理プログラムルーチンが起動され、デバッガコマンドの処理が行われる。各デバッガコマンドの処理フローについて図3及び図4を用いて説明する。
デバッグ操作用端末5及びデバッグ対象装置1の電源を入れてデバッグ操作用端末5で実行されるデバッグ操作用プログラム及びデバッグ対象装置1で実行されるデバッガ処理を起動すると、図3のステップS100のデバッガ初期化処理により、ハードウェアブレークポイントテーブルの初期化等が行なわれる。そして、デバッグ実施者がデバッガのコマンドをデバッグ操作用端末5から入力するまで、ステップ101及びステップ102によりデバッガのコマンド入力待ち状態となる。ステップS100におけるデバッガ初期化処理は、第1回目のデバッガ起動時に実行されるものであるが、他の処理、例えば図9に示すハードウェアブレーク割込みハンドラ等からデバッガ処理が呼び出された場合には、ステップS100の処理を省略することができる。
デバッグ実施者がデバッガのコマンドをデバッグ操作用端末5から入力すると(S101 YES)、入力されたコマンドに対応した処理がデバッガ処理から呼び出される。具体的には、デバッガ処理のステップS101〜S111において入力されたコマンドの内容を判定し、入力されたコマンドに応じてステップS112〜S122の対応する処理が呼び出される。以下、詳細を説明する。
具体的には、デバッガのコマンド入力としてハードウェアブレークポイント設定コマンドが入力された場合(S102 YES)、デバッガ処理はステップS113で後述の図5に示すハードウェアブレークポイントテーブル設定処理を呼び出す。
デバッガのコマンド入力としてハードウェアブレークポイント削除コマンドが入力された場合(S103 YES)、デバッガ処理はステップS114で後述の図8に示すハードウェアブレークポイントテーブル削除処理を呼び出す。
デバッガのコマンド入力としてハードウェアブレークポイント表示コマンドが入力された場合(S104 YES)、デバッガ処理はステップS115でハードウェアブレークポイント表示処理を呼び出す。ハードウェアブレークポイント表示処理は、ブレークポイントテーブルに存在するブレークポイント一覧をデバッガ画面に出力する。
デバッガのコマンド入力としてプログラム実行コマンドが入力された場合(S105 YES)、デバッガ処理は、ステップS116によりデバッグ対象装置1におけるプログラム実行を開始する。
デバッガのコマンド入力としてステップ実行コマンドが入力された場合(S106 YES)、デバッガ処理は、ステップS117によりデバッグ対象装置1におけるプログラムのステップ実行を行なう。
デバッガのコマンド入力としてレジスタ表示コマンドが入力された場合(S107 YES)、デバッガ処理はステップS118でレジスタ表示処理を呼び出す。レジスタ表示処理は、コマンドで指定されたレジスタの内容をデバッガ画面に表示する。
デバッガのコマンド入力としてレジスタ設定コマンドが入力された場合(S108 YES)、デバッガ処理はステップS119でレジスタ設定処理を呼び出す。レジスタ設定処理は、コマンドで指定されたレジスタにコマンドで指定された値を設定する。
デバッガのコマンド入力としてメモリ表示コマンドが入力された場合(S109 YES)、デバッガ処理はステップS120でメモリ表示処理を呼び出す。メモリ表示処理は、コマンドで指定されたアドレスのメモリの内容をデバッガ画面に表示する。
デバッガのコマンド入力としてメモリ設定コマンドが入力された場合(S110 YES)、デバッガ処理はステップS121でメモリ設定処理を呼び出す。メモリ設定処理は、コマンドで指定されたアドレスのメモリにコマンドで指定された内容を設定する。
デバッガのコマンド入力としてデバッガ終了コマンドが入力された場合(S111 YES)、デバッガ処理はステップS123でデバッガ終了処理を実行後、デバッガ処理を抜ける。
デバッガのコマンド入力として上記いずれのコマンドでもないコマンドが入力された場合(S111 NO)、デバッガ処理はステップS122でコマンドエラーメッセージをデバッグ操作用端末5のデバッガ操作画面に表示する。尚、本実施例では、デバッガ処理として図3及び図4の各種処理(S113〜S122)が示されているが、その他の処理をデバッガ処理に含めても良い。
図5は、図3におけるステップS113に係るハードウェアブレークポイントテーブル設定処理の内容を示した図である。デバッガのコマンド入力としてハードウェアブレークポイント設定コマンドが入力された場合、デバッガ処理は図5に示すハードウェアブレークポイントテーブル設定処理を呼び出す。ハードウェアブレークポイントテーブルは、設定されたハードウェアブレークポイントの管理情報等を有し、デバッグ対象装置のメモリ等に格納される。
図5のステップS130においてデバッガからハードウェアブレークポイント設定コマンドが入力されると、ステップS131ではハードウェアブレークポイントテーブルに空きがあるかどうかを判定する。ハードウェアブレークポイントテーブルに空きがあれば(S131 YES)、ステップS132で、デバッガのコマンドで指定されたハードウェアブレークポイントが既にハードウェアブレークポイントテーブルに設定済みかどうかを判定する。指定されたハードウェアブレークポイントが未設定であれば(S132 NO)、ステップS133で、指定されたブレークポイントアドレス、および設定時刻をハードウェアブレークポイントテーブルに設定する。
ステップS133でハードウェアブレークポイントが設定されると、ステップS134で、ハードウェアブレークポイント切換え処理を呼び出し、ハードウェアブレークポイントの更新を行なう。具体的には、ハードウェアブレークポイント切換え処理は、プログラムカウンタの値及びハードウェアブレークポイントテーブルに設定された値を参照して、次に設定すべきハードウェアブレークポイントをハードウェアブレーク設定レジスタに設定する。
ステップS131においてハードウェアブレークポイントテーブルに空きが無いと判定した場合や、ステップS132において、指定されたハードウェアブレークポイントが既に設定済みであると判定した場合には、ステップS135のブレークポイント設定エラー処理が行なわれる。ステップS135のエラー処理では、デバッグ操作用端末6に接続されたディスプレイ9にエラー情報を表示する等してエラー状態をデバッグ実施者に伝える。デバッグ実施者は、ステップS135のエラー処理が示すエラー内容に応じて次にどう処理するかを決定する。
図6は、本実施例に係るハードウェアブレークポイントテーブルの設定例を示した図である。ハードウェアブレークポイントを設定できるハードウェアブレークポイントテーブル35のエントリ数は、図6に示すハードウェアブレークポイントテーブルの設定例における表の2行目以降の行数として得られる。尚、ハードウェアブレークポイントのエントリ数は、ハードウェアブレークポイントテーブルを格納するメモリ等の格納領域が許す限り、図6に示す例よりも大きな数のエントリ数にすることができる。
図5のステップS133においてハードウェアブレークポイントテーブルのブレークポイントアドレスに0以外のブレークポイントアドレス(BP1〜BP4)を設定すると、ハードウェアブレークポイントテーブルのエントリは「使用中」の状態となる。ここで、ブレークポイントアドレスに「0」が設定されているハードウェアブレークポイントテーブルのエントリは「未使用」の状態となる。ハードウェアブレークポイントアドレスの設定をする際、合わせて、ハードウェアブレークポイント設定時刻がハードウェアブレークポイントテーブルに設定され、ハードウェアブレークポイントの通過回数及び最終通過時刻がクリアされる。ハードウェアブレークポイントの設定時刻、通過回数、および最終通過時刻は、デバッグ実施者がハードウェアブレークポイント一覧を表示する場合等に表示して、デバッグ時の参考情報とすることができる。尚、ブレークポイントの通過回数が「0」であれば、ブレークポイントの最終通過時刻は「未設定」となる。
図7は、本実施例に係るハードウェアブレークポイント切換え処理を示した図である。ハードウェアブレークポイント切換え処理は、ステップS140でデバッガが起動されている状態か否かを判定し、デバッガが起動されている場合(S140 YES)には、ステップS141によりCPUに設定すべきハードウェアブレークポイントを決定する。
ステップS141は、以下の規則に従ってCPUに設定すべきハードウェアブレークポイントを決定する。
(規則1)ハードウェアブレークポイントテーブルに設定された各ハードウェアブレークポイントのうち、現在のプログラムカウンタに近いものから順番にハードウェアブレークポイントをCPUに設定する。
(規則2)ただし、現在のプログラムカウンタに近いハードウェアブレークポイントよりプログラムカウンタに近い位置に分岐命令又はサブルーチン復帰命令が存在する場合、その分岐命令又はサブルーチン復帰命令の分岐先アドレスにハードウェアブレークポイントを設定する。
(規則3)規則2における分岐命令又はサブルーチン復帰命令が条件分岐命令の場合、分岐先アドレスに加えて、分岐命令の次の命令が置かれているアドレスにもハードウェアブレークポイントを設定する。
ステップS142では、上記ステップS141により決定されたCPUに設定するハードウェアブレークポイントを、デバッグ対象装置1に係るCPU2のハードウェアブレーク設定レジスタ22、23に設定する。
なお、デバッガが起動されていない状態、例えば、図4のステップS111でデバッガ終了コマンドを受け付けて(S111 YES)デバッガが終了した後にデバッガの処理であるハードウェアブレークポイント切換え処理が実行されるとソフトウェアプログラムが誤動作するおそれがある。そのため、図7に示すようにデバッガが起動されていない場合には(S140 NO)、ハードウェアブレークポイント切換え処理を実行しないようにするのが望ましい。
図8は、図3におけるハードウェアブレークポイントテーブル削除処理(ステップS114)を示した図である。デバッガにおいて、ハードウェアブレークポイント削除コマンドが入力された場合、デバッガ処理ルーチンは、図3のステップS114ハードウェアブレークポイントテーブル削除処理(図8)を呼び出す。
ハードウェアブレークポイントテーブル削除コマンドが指定されると、図8のステップS151で、指定されたハードウェアブレークポイントが、前記ハードウェアブレークポイントテーブルに存在するかどうかを確認する。そして、指定されたハードウェアブレークポイントが存在する場合(S151 YES)、ステップS152で、削除指定されたハードウェアブレークポイントテーブルのエントリのブレークポイントアドレスに0を設定し、エントリを「未使用」状態にする。
ハードウェアブレークポイントテーブル削除処理は、S152でのハードウェアブレークポイントテーブルの削除後、ステップS153でハードウェアブレークポイント切換え処理(図7)を呼び出し、ハードウェアブレーク設定レジスタ22、23の更新を行う。
ステップS151で指定されたハードウェアブレークポイントが存在しないと判定した場合、ステップS154のブレークポイント削除エラー処理を呼び出す。ステップS154は、デバッグ操作用端末5に接続されたディスプレイ9等を通してデバッグ実施者にエラー内容を通知する。
デバッガ処理においてプログラム実行コマンドが入力された場合(図3のS105 YES)又はステップ実行コマンドが入力された場合(図3のS106 YES)、デバッグ対象装置1でのプログラム実行コマンド処理(図3のS116)又はステップ実行コマンド処理(図3のS117)によるプログラムの実行が開始される。プログラムの実行開始後、プログラムカウンタがハードウェアブレーク設定レジスタ22、23に設定されたハードウェアブレークポイントに到達した場合、ハードウェアブレーク割込みが発生する。ハードウェアブレーク割込みが発生すると、ハードウェアブレーク割込みハンドラが呼び出される。
図9は、本実施例に係るハードウェアブレーク割込みハンドラの処理例を示した図である。図9に示すハードウェアブレーク割込みハンドラは、ステップS160でハードウェアブレーク割込みの要因を刈り取る。すなわち、割込み発生の原因への対処を実施し、割込みハンドラの処理を抜けた時に、また同じ割込みが発生しないようにするための処理を行なう。具体的には、ステップS160では、発生した割込みに対応する割込みステータスレジスタの割込み要因に対応するビットをクリアする等の処理を行なう。
そして、ステップS161でハードウェアブレークが発生したアドレスがハードウェアブレークポイントテーブルに登録されていると判断すれば(S161 YES)、ステップS162でハードウェアブレークによるデバッガ処理が呼び出される。
ステップS162のデバッガ処理では、デバッグ実施者から指示されたデバッガコマンドに応じて、図4のステップS118〜S121に示すレジスタやメモリ内容の表示や書き換え等を行ないながら、ソフトウェアプログラムのデバッグが行なわれる。デバッガ処理が終わると、ステップS163でハードウェアブレークポイント設定切換え処理(図7)が呼び出され、次に設定すべきハードウェアブレークポイントの設定が行なわれる。
ステップS161でハードウェアブレークが発生したアドレスがハードウェアブレークポイントテーブルに登録されていないと判断した場合(S161 NO)にはステップS163が呼び出され、ハードウェアブレーク設定レジスタの更新が行われる。
図10は、ハードウェアブレーク割込み以外の割込みが発生した場合の割込みハンドラの処理例について示した図である。ハードウェアブレーク割込み以外の割込みが発生した場合、プログラムがハードウェアブレーク割込み以外の割込みに対応した割込みハンドラに分岐する。その際、分岐先のハードウェアブレーク割込み以外の割込みに対応した割込みハンドラについてもハードウェアブレーク設定をしようとする場合には、ハードウェアブレークポイントの再設定が必要となる。従って、図10における割込みハンドラの最初のステップS170においてハードウェアブレークポイント切換え処理が呼び出され、ハードウェアブレーク設定レジスタの更新が行なわれる。その後、ステップS171で割込み要因が発生していると確認された場合には、ステップS172で割込み要因に対応する割込み処理が行なわれる。
図11は、本実施例の動作を説明するためのプログラム例を示した図である。以下、図11のプログラム命令の例を用いて、本実施例に係るハードウェアブレークポイントの設定の切換え例について説明する。
最初に図11で用いられている表記について説明する。図11のプログラム命令の例において、r0〜r6はレジスタを表し、例えば「r2←r5」という記述は、r2レジスタにr5レジスタの内容を格納することを指すものとする。また、アドレスADR1にある「call」はサブルーチンコール命令を表し、「call ADR9」はADR9に分岐することを指すものとする。アドレスADR3にある「cmp r4,0」はr4レジスタに格納された値と0を比較する命令を指すものとする。アドレスADR4の「jle」は条件分岐命令を表すものとし、「jle ADR7」は、直前のcmp命令の結果を受けて、r4=0であればADR7に分岐することを指すものとする。アドレスADR6の「jump」は無条件分岐命令を表すものとし、「jump ADR2」は無条件にADR2に分岐することを指すものとする。アドレスADR8の「ret」は無条件サブルーチン復帰命令を指すものとする。
図11において、CPUに設定可能なハードウェアブレークポイントの個数は2個であるものとし、ハードウェアブレークポイントテーブルに登録する最初のブレークポイントアドレスは、B1、B2およびB3であるものとする。
以下、初期プログラムカウンタ(PC)の値がADR0であるものとして、図11を用いて本実施例に係るハードウェアブレークポイントの設定の切換え例について説明する。
まず、前述の通りハードウェアブレークポイントテーブルには、ブレークポイントアドレスとしてB1、B2及びB3を設定するので、最初、デバッガ処理でハードウェアブレークポイント設定コマンドが入力され(図3のS102 YES)、ハードウェアブレークポイント設定処理(図3のS113)が呼び出される。ハードウェアブレークポイント設定処理では、ハードウェアブレークポイントテーブルにブレークポイントアドレスB1、B2、B3を登録した後、ハードウェアブレークポイント切換え処理が呼び出される(図5のS134)。ハードウェアブレークポイント切換え処理により、CPU2のハードウェアブレークポイントは、プログラムカウンタが位置するADR0に最も近いブレークポイントアドレスB1に設定される。すなわち、ハードウェアブレーク設定レジスタ22又は23にブレークポイントアドレスB1が設定される。
次に、デバッガのプログラム実行コマンドが入力されると(図3のS105 YES)、デバッグ対象のプログラムの実行が開始され、図11におけるアドレスADR0にあるプログラム命令から順にCPU2で実行される。
プログラムカウンタ(PC)が図11におけるアドレスB1に到達すると、ハードウェアブレーク割込みが発生し、デバッガのブレークポイント処理からデバッガのコマンド処理に制御が移される(図9のステップS160〜S162)。
再度デバッガのプログラム実行コマンドが入力されると(図3のS105 YES)、プログラムに制御が移る前に、ブレークポイント設定切換え処理が実行される(図9のステップS163)。ここで、この時点でのプログラムカウンタが指す図11におけるアドレスB1と次のブレークポイントのアドレスB2との間のアドレスADR1に分岐命令があるため、ブレークポイント設定切換え処理はアドレスADR1の無条件サブルーチンコール命令の分岐先であるアドレスADR9をCPUハードウェアブレークポイントとして設定する。すなわち、CPU2のハードウェアブレーク設定レジスタ22又は23にADR9が設定される。その後、プログラムに制御が移される。
ADR1の無条件サブルーチンコール命令を実行し、プログラムカウンタがADR9に到達すると、ハードウェアブレーク設定レジスタにADR9が設定されているので、再度ハードウェアブレーク割込みが発生する。しかし、ADR9はハードウェアブレークポイントテーブルに登録されていないため、デバッガに制御は移らず、ブレークポイント切換え処理が呼び出される(図9のステップS161、S163)。そして、ブレークポイント切換え処理は、その時点でプログラムカウンタが指す図10におけるアドレスADR9に一番近いブレークポイントアドレスであるアドレスB3を次のCPUハードウェアブレークポイントとして設定する。
プログラムカウンタが図10のアドレスB3に到達すると、再度ハードウェアブレーク割込みが発生する。前述の通り、B3はハードウェアブレークポイントテーブルに設定されているので、デバッガのブレークポイント処理からデバッガのコマンド処理に制御が移される(図9のステップS161、S162)。
再度デバッガのプログラム実行コマンドが入力されると、プログラムに制御が移る前に、ブレークポイント切換え処理が実行される(図9のステップS163)。ここで、この時点でのプログラムカウンタが指す図10のアドレスB3の直後のADR10に復帰命令があるので、ブレークポイント切換え処理はADR10の無条件サブルーチン復帰命令の復帰先であるADR2をCPUハードウェアブレークポイントとして設定する。そして、その後、プログラムに制御が移される。
図10におけるアドレスADR10の無条件サブルーチン復帰命令を実行してプログラムカウンタがADR2に到達するとブレークポイント割込みが発生するが、ADR2はハードウェアブレークポイントテーブルに登録されていないため、デバッガに制御は移らず、ハードウェアブレークポイント切換え処理が呼ばれる(図9のステップS163)。ハードウェアブレークポイント切換え処理は、ADR4の条件分岐命令の分岐先であるADR7、及び条件分岐命令の次の命令のアドレスであるADR5をCPUハードウェアブレークポイントとして設定する。
プログラムカウンタが図10におけるアドレスADR4に到達し、条件分岐命令を実行し分岐した場合、プログラムカウンタはアドレスADR7に到達し、ブレークポイント割込みが発生する。しかし、アドレスADR7はハードウェアブレークポイントテーブルに登録されていないため、デバッガに制御は移らず、ブレークポイント切換え処理が呼ばれる(図9のステップS163)。そして、ハードウェアブレークポイント切換え処理は、CPUハードウェアブレークポイントとしてその時点でのプログラムカウンタが示す図10におけるアドレスADR7の直近のアドレスB2を次のハードウェアブレークポイントとして設定する。
プログラムカウンタが図10におけるアドレスADR4に到達し、条件分岐命令を実行し分岐しなかった場合、プログラムカウンタはアドレスADR5に到達する。ここで、アドレスADR5にもハードウェアブレークポイントの設定がされているのでブレークポイント割込みが発生する。しかし、ADR5はハードウェアブレークポイントテーブルには登録されていないため、デバッガに制御は移らず、ハードウェアブレークポイント切換え処理が呼ばれる(図9のステップS163)。この時点でのプログラムカウンタが位置する図10におけるアドレスADR5と次のハードウェアブレークポイント設定されたアドレスB2との間のアドレスADR6に分岐命令があるので、ハードウェアブレークポイント切換え処理は、アドレスADR6の無条件分岐命令の分岐先であるアドレスADR2を次のCPUハードウェアブレークポイントとして設定する。
以下、同様のステップによりソフトウェアプログラムのデバッグ処理が行なわれていく。
本発明はCPUで実行するソフトウェアプログラムのデバッグに利用することができる。
1 デバッグ対象装置
2 デバッグ対象装置内のCPU
3 デバッグ対象装置内のメモリ
4 デバッグ対象装置内のデバッガ用通信インターフェース回路
5 デバッグ操作用端末
6 デバッグ操作用端末内のCPU
7 デバッグ操作用端末内のメモリ
8 デバッグ操作用端末内のデバッガ用通信インターフェース回路
9 ディスプレイ
10 キーボード
11 デバッガ用通信インターフェース

Claims (5)

  1. CPU及びCPUから読み書き可能な記憶手段を有する情報処理装置上で実行するソフトウェアプログラムをハードウェアブレークを用いてデバッグする方法であって、
    前記記憶手段に格納され、複数のハードウェアブレークポイントを記録するためのハードウェアブレークポイントテーブルに、ハードウェアブレークポイントの設定を行なうハードウェアブレークポイントテーブル設定ステップと、
    前記ハードウェアブレークポイントテーブルに格納されたハードウェアブレークポイントと、デバッグ対象のプログラムを実行しているCPUのプログラムカウンタの値とに基づいて、次に設定すべきハードウェアブレークポイントを決定するハードウェアブレークポイント決定ステップと、
    前記ハードウェアブレークポイント決定ステップにより決定した、次に設定すべきハードウェアブレークポイントを、前記情報処理装置内部に設けられた、ハードウェアブレークポイントを設定するためのハードウェアブレーク設定レジスタに格納するためのハードウェアブレークポイント切換えステップと、
    ソフトウェアプログラムの実行開始後、CPUのプログラムカウンタの値が前記ハードウェアブレーク設定レジスタに格納された値と一致することによりハードウェアブレーク割込みが発生した場合に、発生したハードウェアブレーク割込みに対する処理を行なうハードウェアブレーク割込みハンドラが、前記ハードウェアブレーク割込みが発生したCPUのプログラムカウンタの値が前記ハードウェアブレークポイントテーブルに設定されているか否かを判定し、前記ハードウェアブレーク割込みが発生したCPUのプログラムカウンタの値が前記ハードウェアブレークポイントテーブルに設定されていれば、ハードウェアブレークによるデバッグ処理を行なうステップと、を備え
    前記ハードウェアブレークポイント決定ステップは、現在のプログラムカウンタが示す命令アドレスと、現在のプログラムカウンタが示す命令アドレス以降の命令アドレスであって、前記ハードウェアブレークポイントテーブルに設定された各ブレークポイントのうち、現在のプログラムカウンタの値に直近のブレークポイントアドレスとの間に分岐命令が存在しない場合には、当該直近のブレークポイントアドレスから順に次に設定すべきハードウェアブレークポイントを決定し、
    現在のプログラムカウンタが示す命令アドレスと、前記直近のブレークポイントアドレスとの間に分岐命令が存在する場合には、当該分岐命令の分岐先アドレスを次に設定すべきハードウェアブレークポイントとして決定することを特徴とするソフトウェアプログラムのデバッグ方法。
  2. 請求項1記載のソフトウェアプログラムのデバッグ方法であって、
    CPUに割込みが発生した場合に、前記ハードウェアブレークポイント決定ステップにより次に設定すべきハードウェアブレークポイントを決定し、
    前記ハードウェアブレークポイント決定ステップにより決定した次に設定すべきハードウェアブレークポイントを前記ハードウェアブレーク設定レジスタに格納するハードウェアブレークポイント切換えステップを実行することを特徴とするソフトウェアプログラムのデバッグ方法。
  3. 請求項1記載のソフトウェアプログラムのデバッグ方法であって、
    プログラムのデバッグ処理においてハードウェアブレークポイントを切り換える必要が生じた場合に、前記ハードウェアブレークポイント決定ステップにより次に設定すべきハードウェアブレークポイントを決定し、
    前記ハードウェアブレークポイント決定ステップにより決定した次に設定すべきハードウェアブレークポイントを前記ハードウェアブレーク設定レジスタに格納するハードウェアブレークポイント切換えステップを実行することを特徴とするソフトウェアプログラムのデバッグ方法。
  4. 請求項1記載のソフトウェアプログラムのデバッグ方法であって、
    前記分岐命令が条件分岐命令であった場合には、当該条件分岐命令の分岐先アドレスに加えて、当該条件分岐命令の次の命令のアドレスについてもハードウェアブレークポイントを設定することを特徴とするソフトウェアプログラムのデバッグ方法。
  5. CPU及びCPUから読み書き可能な記憶手段を有する情報処理装置上で実行するソフトウェアプログラムをハードウェアブレークを用いてデバッグするためのデバッグ処理プログラムであって、
    前記記憶手段に格納され、複数のハードウェアブレークポイントを記録するためのハードウェアブレークポイントテーブルに、ハードウェアブレークポイントの設定を行なうハードウェアブレークポイントテーブル設定ステップと、
    前記ハードウェアブレークポイントテーブルに格納されたハードウェアブレークポイントと、デバッグ対象のプログラムを実行しているCPUのプログラムカウンタの値とに基づいて、次に設定すべきハードウェアブレークポイントを決定するハードウェアブレークポイント決定ステップと、
    前記ハードウェアブレークポイント決定ステップにより決定した、次に設定すべきハードウェアブレークポイントを、前記情報処理装置の内部に設けられた、ハードウェアブレークポイントを設定するためのハードウェアブレーク設定レジスタに格納するためのハードウェアブレークポイント切換えステップと、
    ソフトウェアプログラムの実行開始後、CPUのプログラムカウンタの値が前記ハードウェアブレーク設定レジスタに格納された値と一致することによりハードウェアブレーク割込みが発生した場合に、発生したハードウェアブレーク割込みに対する処理を行なうハードウェアブレーク割込みハンドラが、前記ハードウェアブレーク割込みが発生したCPUのプログラムカウンタの値が前記ハードウェアブレークポイントテーブルに設定されているか否かを判定し、前記ハードウェアブレーク割込みが発生したCPUのプログラムカウンタの値が前記ハードウェアブレークポイントテーブルに設定されていれば、ハードウェアブレークによるデバッグ処理を行なうステップと、を備え、
    前記ハードウェアブレークポイント決定ステップは、現在のプログラムカウンタが示す命令アドレスと、現在のプログラムカウンタが示す命令アドレス以降の命令アドレスであって、前記ハードウェアブレークポイントテーブルに設定された各ブレークポイントのうち、現在のプログラムカウンタの値に直近のブレークポイントアドレスとの間に分岐命令が存在しない場合には、当該直近のブレークポイントアドレスから順に次に設定すべきハードウェアブレークポイントを決定し、
    現在のプログラムカウンタが示す命令アドレスと、前記直近のブレークポイントアドレスとの間に分岐命令が存在する場合には、当該分岐命令の分岐先アドレスを次に設定すべきハードウェアブレークポイントとして決定すること、
    をCPUに実行させることを特徴とするソフトウェアプログラムのデバッグ処理プログラム。
JP2009264451A 2009-11-20 2009-11-20 ハードウェアブレークポイントを用いたデバッグ方法、デバッグ処理プログラム及びデバッグ装置 Expired - Fee Related JP5526725B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2009264451A JP5526725B2 (ja) 2009-11-20 2009-11-20 ハードウェアブレークポイントを用いたデバッグ方法、デバッグ処理プログラム及びデバッグ装置
US12/950,429 US20110126175A1 (en) 2009-11-20 2010-11-19 Debugging method and debugging device using hardware breakpoints

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009264451A JP5526725B2 (ja) 2009-11-20 2009-11-20 ハードウェアブレークポイントを用いたデバッグ方法、デバッグ処理プログラム及びデバッグ装置

Publications (2)

Publication Number Publication Date
JP2011108124A JP2011108124A (ja) 2011-06-02
JP5526725B2 true JP5526725B2 (ja) 2014-06-18

Family

ID=44063041

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009264451A Expired - Fee Related JP5526725B2 (ja) 2009-11-20 2009-11-20 ハードウェアブレークポイントを用いたデバッグ方法、デバッグ処理プログラム及びデバッグ装置

Country Status (2)

Country Link
US (1) US20110126175A1 (ja)
JP (1) JP5526725B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9639451B2 (en) * 2010-01-25 2017-05-02 Nxp Usa, Inc. Debugger system, method and computer program product for utilizing hardware breakpoints for debugging instructions
CN104461806A (zh) * 2013-09-16 2015-03-25 中兴通讯股份有限公司 一种数据断点监控方法、装置及调试器
JP2018128767A (ja) * 2017-02-07 2018-08-16 ルネサスエレクトロニクス株式会社 デバッグシステム及び半導体装置
US10235272B2 (en) * 2017-03-06 2019-03-19 Xilinx, Inc. Debugging system and method
KR102462864B1 (ko) * 2017-12-22 2022-11-07 한국전자통신연구원 멀티 코어를 이용한 동적 바이너리 인스트루멘테이션 장치 및 방법
US10621067B1 (en) * 2018-02-05 2020-04-14 Xilinx, Inc. Data unit breakpointing circuits and methods

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4080650A (en) * 1976-07-28 1978-03-21 Bell Telephone Laboratories, Incorporated Facilitating return from an on-line debugging program to a target program breakpoint
JP2653412B2 (ja) * 1992-09-22 1997-09-17 工業技術院長 ブレークポイント設定方法
US5664159A (en) * 1994-03-08 1997-09-02 Exponential Technology, Inc. Method for emulating multiple debug breakpoints by page partitioning using a single breakpoint register
US6681280B1 (en) * 1998-10-29 2004-01-20 Fujitsu Limited Interrupt control apparatus and method separately holding respective operation information of a processor preceding a normal or a break interrupt
JP4187371B2 (ja) * 1999-11-30 2008-11-26 富士通株式会社 割込制御装置および方法
US8103496B1 (en) * 2000-10-26 2012-01-24 Cypress Semicondutor Corporation Breakpoint control in an in-circuit emulation system
US20030074650A1 (en) * 2001-10-17 2003-04-17 Tankut Akgul Debugger operating system for embedded systems
US7225431B2 (en) * 2002-10-24 2007-05-29 International Business Machines Corporation Method and apparatus for setting breakpoints when debugging integrated executables in a heterogeneous architecture
US7299456B2 (en) * 2003-09-18 2007-11-20 International Business Machines Corporation Run into function
US20060200807A1 (en) * 2005-03-03 2006-09-07 International Business Machines Corporation Breakpoint timers
US20070168994A1 (en) * 2005-11-03 2007-07-19 International Business Machines Corporation Debugging a computer program in a distributed debugger

Also Published As

Publication number Publication date
US20110126175A1 (en) 2011-05-26
JP2011108124A (ja) 2011-06-02

Similar Documents

Publication Publication Date Title
JP5526725B2 (ja) ハードウェアブレークポイントを用いたデバッグ方法、デバッグ処理プログラム及びデバッグ装置
US9176737B2 (en) Controlling the execution of adjacent instructions that are dependent upon a same data condition
US7836430B2 (en) Reversing execution of instructions in a debugger
KR102003663B1 (ko) 디버그 예외 생성 제어
US7620802B2 (en) Instruction execution device, debugging method, debugging device, and debugging program
US9009678B2 (en) Software debugging with execution match determinations
CN111868684A (zh) 为芯片打补丁的方法及芯片
JP2021527248A (ja) 予測ミス回復の待ち時間を短縮するための偶発的な分岐予測の格納
JP6846405B2 (ja) 条件付きロードの抑制
JP3764405B2 (ja) デバッグ装置及びデバッグ方法
JP2010102454A (ja) 情報処理装置、情報処理プログラム
JP2012083798A (ja) 解析方法、解析装置及び解析プログラム
JP2006221606A (ja) データプロセッサ
JP2008140124A (ja) データ処理装置
KR102584039B1 (ko) 콘텍스트 데이터 관리
WO2024069730A1 (ja) デバッグ装置及びデバッグ方法
JP2007213396A (ja) デバッグシステム、オペレーションシステム、デバッグ方法、プログラム
JP2000122892A (ja) エミュレータ装置
JP2004318658A (ja) デバッグ制御装置及びその制御方法
JP2007041887A (ja) デバッグ装置、そのメモリアクセス方法およびメモリアクセス方法を実現するプログラム
WO2007048988A1 (en) A data processing apparatus and method for handling procedure call instructions
JP2008146310A (ja) プログラムデバッグ装置、プログラムデバッグ方法、及びプログラム
JP2002196950A (ja) デバッグシステム
JPH0822401A (ja) プログラム実行中断方法およびデバッギング装置
JP2006268472A (ja) フラッシュメモリ上のプログラムデバッグ方法及びデバッグシステム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120815

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130911

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131008

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131202

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140318

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140331

R150 Certificate of patent or registration of utility model

Ref document number: 5526725

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees