(57)【要約】【課題】  オーバーレイ方式のプログラムのデバッグにおいて、どのオーバーレイモジュールを実行したときのデバッグ結果であるかを直ちに判別できるデバッガを提供する。【解決手段】  デバッガ１は、シンボル情報解析部１１がデバッグ装置から入力されたオーバーレイモジュールの識別値に対応するシンボル情報をオブジェクトコード格納部１００から読み出し、ソースコード解析部１２がこのシンボル情報に対するソースコードをソースコード格納部２００から読み出し、表示データ出力部１３がこの読み出されたソースコードを表示データとして出力する。【選択図】  図３
2005165964.tif 000002
【特許請求の範囲】
【請求項１】
デバッグ実行中のデバッグ対象メモリから読み取られた識別値に基づいて前記デバッグ対象メモリにロードされているオーバーレイモジュールのソースコードを表示することを特徴とするデバッガ。
【請求項２】
デバッグのイベントのトレース履歴と、オーバーレイモジュールの識別値の変化履歴とに基づいて、デバッグの実行履歴に併せてデバッグ対象メモリのオーバーレイエリアに書き込まれたプログラムのソースコードを表示することを特徴とするデバッガ。
【請求項３】
ターゲットＣＰＵと、デバッグ対象メモリをデバッグ対象とするデバッグ装置であって、
前記デバッグ対象メモリにロードされているオーバーレイモジュールの識別値を読み取ってデバッガへ出力することを特徴とするデバッグ装置。
【請求項４】
ターゲットＣＰＵと、デバッグ対象メモリをデバッグ対象とするデバッグ装置であって、
前記ターゲットＣＰＵからの指示によりイベントを生成しイベントステータスを出力するイベント生成部と、
前記ターゲットＣＰＵから出力されるプログラムカウンタの値と、前記イベント生成部から出力されるイベントステータスとを組み合わせてイベントの実行履歴を記憶する実行履歴記憶部と、
前記デバッグ対象メモリを読み出してロードされているオーバーレイモジュールの識別値を読み取って出力する識別値判別部と、
前記識別値の変化を検出するたびに識別値変化履歴データを出力する識別値変化履歴生成部と、
前記識別値変化履歴生成部から出力される前記識別値変化履歴データを記憶する識別値記憶部と
を有し、
前記実行履歴記憶部に記憶された前記実行履歴と、前記識別値記憶部に記憶された前記識別値変化履歴データとをデバッガへ出力することを特徴とするデバッグ装置。
【請求項５】
さらに、前記識別値判別部から出力された前記識別値と前記ターゲットＣＰＵから出力されるプログラムカウンタの値が入力されて、それぞれの値が予め設定された値と一致したときに前記ターゲットＣＰＵへのブレーク要求信号を出力するブレーク要求部と
を有することを特徴とする請求項４に記載のデバッグ装置。
【請求項６】
前記イベント生成部が出力する前記イベントステータスに前記オーバーレイモジュールの前記識別値が変化したことを示すステータスが含まれることを特徴とする請求項4または５に記載のデバッグ装置。
【請求項７】
マイクロコンピュータのメインメモリのオーバーレイエリアにロードされるオーバーレイモジュールであって、
モジュール相互を識別するための識別値を有することを特徴とするオーバーレイモジュール。
【請求項８】
前記識別値が記載されるアドレスが総てのモジュールで共通であることを特徴とする請求項７に記載のオーバーレイモジュール。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバッガ、デバッグ装置およびオーバーレイモジュールに関し、特にデバッグ実行中のモジュールのソースコードの表示を行なうことのできるデバッガ、デバッグ装置およびオーバーレイモジュールに関する。
【背景技術】
【０００２】
マイクロコンピュータ応用製品のプログラムの開発にあたっては、そのデバッグのためにデバッグ装置が用いられる。このデバッグ装置により、プログラム搭載対象のターゲットＣＰＵのエミュレーションが実行される。また、このエミュレーション実行の制御およびデバッグ結果を解析するソフトウェアとしてデバッガがある。
【０００３】
エミュレーションを実行するエミュレータには、エミュレーションメモリやデバッグ機能回路などが含まれ、デバッグ機能回路としては、イベント回路、トレース回路、ブレーク回路などが用いられている。（例えば、特許文献１参照。）。
【０００４】
一方、マイクロコンピュータの応用分野の一つとして、システム機器等に組み込んで用いる組み込みマイコンがある。一般に、組み込みマイコンは、チップサイズの制約等からメモリ容量が少ない。
【０００５】
そこで、限られたメモリ容量を効率よく使いメモリ容量以上のプログラムを実行する手段として、メインプログラム以外の部分を複数のプログラムモジュールに分割し、このプラグラムモジュールを入れ替えて実行するオーバーレイ方式が用いられることがある。このとき、上記複数のプログラムモジュールのそれぞれはオーバーレイモジュールと呼ばれる。また、オーバーレイモジュールが読み込まれるメモリ領域はオーバーレイエリアと呼ばれる。すなわち、メモリ領域の中の一定のアドレス範囲がオーバーレイエリアとして使用される。
【０００６】
従来、このようなオーバーレイ方式のプログラムにおいても、そのデバッグには上述のようなデバッグ装置が用いられていた。
【０００７】
このようなデバッグ装置を用いて、デバッガでデバッグ結果の解析を行うと、その結果はメモリのアドレスと共に表示される。このアドレスをもとに、ユーザはプログラムのどの部分のデバッグ結果が表示されているかを知ることができる。
【特許文献１】特開平１０−２０７７３７号公報  （第３ページ、図１）
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述のオーバーレイ方式のプログラムでは、同じアドレスであってもオーバーレイエリアでは異なるオーバーレイモジュールが入れ替わりながら実行されているため、デバッガで表示されるアドレスからだけでは、どのオーバーレイモジュールを実行したときのデバッグ結果であるかが即座にはわからないという問題があった。
【０００９】
そこで、本発明の目的は、オーバーレイ方式のプログラムのデバッグにおいて、どのオーバーレイモジュールを実行したときのデバッグ結果であるかを直ちに知ることのできるデバッガ、このデバッガの使用に適したデバッグ装置およびオーバーレイモジュールを提供することにある。
【課題を解決するための手段】
【００１０】
本発明の一態様によれば、デバッグ実行中のデバッグ対象メモリから読み取られた識別値に基づいて前記デバッグ対象メモリにロードされているオーバーレイモジュールのソースコードを表示することを特徴とするデバッガが提供される。
【００１１】
また、本発明の別の一態様によれば、デバッグのイベントのトレース履歴と、オーバーレイモジュールの識別値の変化履歴とに基づいて、デバッグの実行履歴に併せてデバッグ対象メモリのオーバーレイエリアで実行されたプログラムのソースコードを表示することを特徴とするデバッガが提供される。
【００１２】
さらに、本発明の一態様によれば、ターゲットＣＰＵと、デバッグ対象メモリを備えるデバッグ装置であって、前記デバッグ対象メモリにロードされているオーバーレイモジュールの識別値を読み取ってデバッガへ出力することを特徴とするデバッグ装置が提供される。
【００１３】
また、本発明の別の一態様によれば、ターゲットＣＰＵと、デバッグ対象メモリを備えるデバッグ装置であって、前記ターゲットＣＰＵからの指示によりイベントを生成しイベントステータスを出力するイベント生成部と、前記ターゲットＣＰＵから出力されるプログラムカウンタの値と、前記イベント生成部から出力されるイベントステータスとを組み合わせてイベントの実行履歴を記憶する実行履歴記憶部と、前記デバッグ対象メモリを読み出してロードされているオーバーレイモジュールの識別値を読み取って出力する識別値判別部と、前記識別値の変化を検出するたびに識別値変化履歴データを出力する識別値変化履歴生成部と、前記識別値変化履歴生成部から出力される前記識別値変化履歴データを記憶する識別値記憶部とを有し、前記実行履歴記憶部に記憶された前記実行履歴と、前記識別値記憶部に記憶された前記識別値変化履歴データとをデバッガへ出力することを特徴とするデバッグ装置が提供される。
【００１４】
さらに、本発明の一態様によれば、マイクロコンピュータのメインメモリのオーバーレイエリアにロードされるオーバーレイモジュールであって、モジュール相互を識別するための識別値を有することを特徴とするオーバーレイモジュールが提供される。
【発明の効果】
【００１５】
本発明によれば、デバッグ装置におけるデバッグの実行履歴に併せてオーバーレイエリアで実行されたプログラムのソースコードをデバッガで表示することができる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施例を図面を参照して説明する。
【実施例１】
【００１７】
図１は、本発明の実施例１に係るオーバーレイモジュールの例を示す図である。オーバーレイ方式のプログラムのオブジェクトコードは、共通に使用されるメインモジュールと必要に応じて使い分けられるｎ個のオーバーレイモジュールから構成される。
【００１８】
このｎ個のオーバーレイモジュールには、それぞれ識別値が付与されており、この識別値により、それぞれのオーバーレイモジュールは相互に他と区別される。識別値としては、例えば、１からｎまでの正の整数が与えられる。
【００１９】
デバッグにおいては、メインモジュールはデバッグ装置のデバッグ対象メモリのメインモジュールエリアにロードされ、オーバーレイモジュールは、ｎ個のうちのいずれか１個がオーバーレイモジュールエリアにロードされる。
【００２０】
このとき、オーバーレイモジュールの識別値は、オーバーレイモジュールエリアの予め定められた特定のアドレスにロードされる。
【００２１】
上述したメインモジュールとオーバーレイモジュールのオブジェクトコードは、プログラムのソースコードをコンパイラ／リンカによりコンパイルを実行することで得られる。このとき、コンパイラ／リンカは、ソースコードのシンボルとオブジェクトコード上のアドレスとの対応関係を記したシンボル情報を併せて出力する。
【００２２】
したがって、ｎ個のオーバーレイモジュールに対して、ｎ個のオブジェクトコードを生成した場合、シンボル情報もｎ個出力される。これらは、１組ずつペアにして保存される。
【００２３】
図２に、このオブジェクトコードとシンボル情報の関係を示す。
【００２４】
図２（ａ）は、ｎ個のオーバーレイモジュールごとにコンパイルしたときのオブジェクトコードとそれぞれのオブジェクトコードのシンボル情報の組み合わせを示す図である。ここで、オーバーレイモジュールの識別値を１からｎとし、それぞれの識別値に対応してオーバーレイモジュールをオーバーレイモジュール１からオーバーレイモジュールｎと表わすこととする。
【００２５】
また、メインモジュールとオーバーレイモジュール１〜ｎをそれぞれ組み合わせてコンパイルしたときに得られるオブジェクトコードを、オブジェクトコード１〜オブジェクトコードｎと表わし、それぞれのオブジェクトコードに対応するシンボル情報をシンボル情報１〜シンボル情報ｎと表わす。
【００２６】
これらのオブジェクトコード１〜ｎとシンボル情報１〜ｎは、図２（ａ）に示すように、１組ずつペアになって生成される。
【００２７】
図２（ｂ）に、シンボル情報の例を示す。シンボル情報には、シンボルとそのアドレスが１対になって記されている。
【００２８】
このシンボルは、図２（ｃ）に示すように、それぞれがソースコードに記述されているシンボルに対応している。
【００２９】
図３は、上述の識別値を有するオーバーレイモジュールを用いたプログラムのデバッグに使用するデバッガの第１の実施例を示すブロック図である。
【００３０】
デバッガ１は、シンボル情報解析部１１と、ソースコード解析部１２と、表示データ出力部１３とからなる。
【００３１】
シンボル情報解析部１１へは、図２（ａ）に示したｎ組のペアのオブジェクトコード１〜ｎとシンボル情報１〜ｎを格納したオブジェクトコード格納部１００からシンボル情報が入力される。さらに、シンボル情報解析部１１へは、デバッグ装置のデバッグ対象メモリのオーバーレイエリアにロードされたオーバーレイモジュールの識別値がデバッグ装置（図示せず）から入力される。また、ソースコード解析部１２へは、ソースコード格納部２００からソースコードが入力される。
【００３２】
シンボル情報解析部１１は、デバッグ装置（図示せず）からの識別値が入力されると、オブジェクトコード格納部１００から、識別値に対応する番号（１〜ｎ）のシンボル情報を読み出し、ソースコード解析部１２へ出力する。
【００３３】
ソースコード解析部１２は、シンボル情報解析部１１から送られたシンボル情報に記載されたシンボルに対応する部分のソースコードをソースコード格納部２００から読み出し、表示データ生成部１３へ出力する。
【００３４】
表示データ出力部１３は、ソースコード解析部１２から出力されたソースコードを表示データとして表示装置（図示せず）へ出力する。
【００３５】
このような本実施例のデバッガによれば、デバッグ実行中のオーバーレイモジュールに対応したソースコードを表示することができる。
【実施例２】
【００３６】
図４は、本発明の第２の実施例に係るデバッガの構成の例を示すブロック図である。本実施例のデバッガにおいても、デバッグ対象のプログラムのオーバーレイモジュールは、図１に示すような識別値を有するものとする。
【００３７】
本実施例のデバッガ２の構成も、基本的には実施例１のデバッガ１と同じであり、シンボル情報解析部２１と、ソースコード解析部２２と、表示データ出力部２３とからなる。また、実施例１のデバッガ１と同じく、オブジェクトコード格納部１００からシンボル情報が入力され、ソースコード格納部からソースコードが入力される。
【００３８】
本実施例のデバッガ２が実施例１のデバッガ１と異なる点は、デバッグ装置から識別値変化履歴と実行履歴が入力される点である。
【００３９】
識別値変化履歴とは、デバッグ装置のデバッグ対象メモリのオーバーレイエリアにロードされたオーバーレイモジュールが入れ替わる度に識別値を記録し、その変化履歴を保存したものである。また、実行履歴とは、デバッグ中に生起されたイベントのステータスをトレースしたもので、その中にオーバーレイモジュールが入れ替わったことを示すステータスも記されている。
【００４０】
シンボル情報解析部２１は、入力された識別値変化履歴に基づいて、オーバーレイモジュールの識別値が変化する度に、オブジェクトコード格納部１００から、識別値に対応する番号（１〜ｎ）のシンボル情報を読み出し、ソースコード解析部１２へ出力する。
【００４１】
ソースコード解析部２２は、入力された実行履歴の中のオーバーレイモジュールが入れ替わったことを示すステータスが記された箇所に、シンボル情報解析部２１から送られたシンボル情報に基づいて、その入れ替わったオーバーレイモジュールの識別値に対応するシンボルに相当する部分のソースコードをソースコード格納部２００から読み出して書き込む。
【００４２】
表示データ出力部２３は、ソースコード解析部２２から出力されたオーバーレイモジュール部分のソースコードが書き込まれた実行履歴を表示データとして表示装置（図示せず）へ出力する。
【００４３】
図５は、デバッガ２を用いるのに適したデバッグ装置の実施例の構成を示すブロック図である。
【００４４】
デバッグ装置３は、モジュール識別値判定部３１、イベント実行部３２、識別値変化履歴生成部３３、識別値変化履歴メモリ３４、トレース情報生成部３５およびトレースメモリ３６を有し、ターゲットＣＰＵ３００とデバッグ対象メモリ４００を対象にデバッグを行う装置である。
【００４５】
ここで、デバッグ対象メモリ４００へは、デバッグに先立って、オブジェクトコード格納部１００からオブジェクトコードがロードされているものとする。また、ロードされるオブジェクトコードとしては、オーバーレイモジュールの選択によりオブジェクトコード１〜オブジェクトコードｎの中の１つが選択されているものとする。
【００４６】
モジュール識別値判定部３１は、デバッグ対象メモリ４００のオーバーレイモジュールエリアの中の識別値が書き込まれたアドレスを読み出し、現在ロードされているオーバーレイモジュールの識別値を判定し、その識別値を出力する。
【００４７】
イベント実行部３２は、ターゲットＣＰＵ３００からの命令によりイベントを実行する。また、モジュール識別値判定部３１から識別値が入力されて識別値が変化したことを示すステータス情報を出力する。
【００４８】
識別値変化履歴生成部３３は、イベント実行部３２から識別値が変化する度に出力されるステータス情報に基づいて、識別値が変化する度にアドレスカウンタの値を１つずつ進めるアドレスカウンタを有している。識別値変化履歴生成部３３は、モジュール識別値判定部３１から入力される識別値とアドレスカウンタから出力されるアドレス値を識別値変化履歴メモリ３４へ出力する。
【００４９】
識別値変化履歴メモリ３４は、識別値変化履歴生成部３３から入力されたアドレス値に従って識別値変化履歴生成部３３から入力された識別値を順次記憶する。識別値変化履歴メモリ３５を読み出すことにより識別値変化履歴が出力される。
【００５０】
トレース情報生成部３５は、ターゲットＣＰＵ３００から入力されるＰＣ値（プログラムカウンタ値）とイベント実行部３２から入力されるステータス情報に基づいて、イベント実行部３２で実行されるイベントをトレースするためのトレース情報を生成する。このトレース情報の一つがオーバーレイモジュールの識別値が変化したときに生成される。
【００５１】
トレースメモリ３６は、トレース情報生成部３５から出力されるトレース情報をＰＣ値が変化する度に記憶する。トレースメモリ３６を読み出すことによりデバッグ装置におけるイベントの実行履歴が出力される。
【００５２】
図６は、デバッグ装置３から出力される実行履歴と識別値変化履歴の例を示す。
【００５３】
図６（ａ）は、実行履歴の例である。オーバーレイモジュールの識別値が変化すると、そのことを示すステータス情報ＳＴＳ＿ＯＮがそのときのＰＣ値とともに記録される。
【００５４】
図６（ｂ）は、識別値変化履歴の例である。オーバーレイモジュールの識別値が変化することを示すステータス情報ＳＴＳ＿ＯＮが出力される度に、そのときの識別値が記録される。
【００５５】
図７は、デバッガ２から出力される表示データの例を示す図である。ここでは、図６（ａ）に示した実行履歴と図６（ｂ）に示した識別値変化履歴に基づいて、オーバーレイモジュールが入れ替わったときに、そのモジュールのソースコードを表示するようにしたプログラムの実行履歴を表示する例を示している。
【００５６】
このような本実施例のデバッグ装置とデバッガによれば、デバッグ装置に記憶されたイベントの実行履歴と識別値変化履歴に基づいて、オーバーレイエリアで実行されたプログラムのソースコードをデバッガで表示することができる。
【実施例３】
【００５７】
図８は、本発明の第３の実施例に係るデバッガの構成の例を示すブロック図である。本実施例のデバッグ装置４は、実施例２のデバッグ装置２にブレーク要求部４７を付加し、ターゲットＣＰＵ３５０へプログラムの実行停止を要求できるようにしたものである。そこで、図８において図５と同一の部分には図５と同一の符号を付し、ここではその詳細な説明を省略する。
【００５８】
ブレーク要求部４７は、プログラムの実行中に、モジュール識別値判定部３１から入力されるオーバーレイモジュールの識別値とターゲットＣＰＵ３５０から入力されるＰＣ値を監視している。その値が、ユーザが指定した特定のオーバーレイモジュール識別値と特定のブレークポイントのアドレスに一致すると、ブレーク要求部４７は、ターゲットＣＰＵ３５０へプログラムの実行停止を要求する。これを受けて、ターゲットＣＰＵ３５０はプログラムの実行を停止する。
【００５９】
このとき、識別値変化履歴メモリ３５にはプログラムの実行が停止するまでのオーバーレイモジュールの識別値の変化履歴が記憶されており、トレースメモリ３６にはイベントの実行履歴が記憶されている。
【００６０】
このような本実施例のデバッグ装置によれば、ユーザが指定する特定のオーバーレイモジュールの特定のアドレスでプログラムの実行を自動的に停止することができる。また、停止するまでのプログラムの実行履歴をオーバーレイモジュールのソースコードとともに表示することができる。
【図面の簡単な説明】
【００６１】
【図１】本発明の実施例１に係るオーバーレイモジュールの例を示す図。
【図２】本発明の実施例１に係るオーバーレイモジュールのオブジェクトコードとシンボル情報の関係を示す図。
【図３】本発明の実施例１に係るデバッガの構成の例を示すブロック図。
【図４】本発明の実施例２に係るデバッガの構成の例を示すブロック図。
【図５】本発明の実施例２に係るデバッグ装置の構成の例を示すブロック図。
【図６】本発明の実施例２に係るデバッグ装置から出力される実行履歴の例と識別値変化履歴の例を示す図。
【図７】本発明の実施例２に係るデバッガから出力される表示データの例を示す図。
【図８】本発明の実施例３に係るデバッグ装置の構成の例を示すブロック図。
【符号の説明】
【００６２】
１、２  デバッガ
３、４  デバッグ装置
１１、２１  シンボル情報解析部
１２、２２  ソースコード解析部
１３、２３  表示データ出力部
３１  モジュール識別値判定部
３２  イベント実行部
３３  識別値変化履歴生成部
３４  識別値変化履歴メモリ
３５  トレース情報生成部
３６  トレースメモリ
４７  ブレーク要求部
１００  オブジェクトコード格納部
２００  ソースコード格納部
３００、３５０  ターゲットＣＰＵ
４００  デバッグ対象メモリ
【図１】
2005165964.tif 000003
【図２】
2005165964.tif 000004
【図３】
2005165964.tif 000005
【図４】
2005165964.tif 000006
【図５】
2005165964.tif 000007
【図６】
2005165964.tif 000008
【図７】
2005165964.tif 000009
【図８】
2005165964.tif 000010