(57)【特許請求の範囲】
【請求項１】
識別子により識別された複数のプログラムコードを格納する第１の記憶装置と、
複数のバンクを有し、前記バンクの各々は、少なくとも１つの記憶領域を有し、この記憶領域に前記第１の記憶装置に格納された前記複数のプログラムコードのうち、実行されるプログラムコードが格納される第２の記憶装置と、
前記第２の記憶装置の少なくとも１つの前記記憶領域に格納される前記プログラムコードのそれぞれの前記識別子を変数領域名に対応して記憶する変数領域と、
入力されたコマンドにより指定されたアドレスにおいて、前記コマンドにより設定された識別子が、前記コマンドによって設定された変数領域名により示された前記変数領域に記憶された識別子と一致した場合、複数のプログラムコードのうち対応するプログラムコードの実行をブレークさせる制御部と
を具備することを特徴とするデバッグ装置。
【請求項２】
前記複数のプログラムコードは、少なくとも１つの前記プログラムコードからなるタスクに含まれ、前記識別子は、前記タスクの識別子と、タスク内のプログラムコードの識別子を含むことを特徴とする請求項１記載のデバッグ装置。
【請求項３】
前記変数領域に格納された識別子は、前記制御部が制御プログラムのカーネル又はタスク管理プログラムを用いて更新することを特徴とする請求項２記載のデバッグ装置。
【請求項４】
前記第１の記憶装置に記憶されたプログラムコードを前記第２の記憶装置に転送するＤＭＡコントローラをさらに具備することを特徴とする請求項２記載のデバッグ装置。
【請求項５】
前記変数領域に格納された識別子は、前記プログラムコードをデバッグするデバッガを記憶した前記制御部が参照することを特徴とする請求項２記載のデバッグ装置。
【請求項６】
前記変数領域の識別子は、前記プログラムコードの実行を試すシミュレータを記憶した前記制御部が直接参照することを特徴とする請求項２記載のデバッグ装置。
【請求項７】
識別子により識別された複数のプログラムコードを格納する第１の記憶装置と、
複数のバンクを有し、前記バンクの各々は、少なくとも１つの記憶領域を有し、この記憶領域に前記第１の記憶装置に格納された前記複数のプログラムコードのうち、実行されるプログラムコードが格納される第２の記憶装置と、
前記第２の記憶装置の少なくとも１つの前記記憶領域に格納される前記プログラムコードのそれぞれの前記識別子を変数領域名に対応して記憶する変数領域と、
入力されたコマンドにより設定されたアドレスにおいて、前記コマンドにより設定された識別子、及び変数領域名と前記変数領域に前記変数領域名に対応して記憶された識別子とを比較する制御部と、
ＤＭＡコントローラとを具備するデバッグ装置によるデバッグ方法であって、
前記ＤＭＡコントローラにより、前記第１の記憶装置に記憶された複数のプログラムコードのうちから実行すべきプログラムコードを前記第２の記憶装置の前記複数のバンクに設定された少なくとも１つの前記記憶領域のうちの１つに転送するとき、前記制御部により、前記記憶領域に転送されるプログラムコードの前記識別子を変数領域名に対応して設けられた複数の前記変数領域のうちの１つに記憶させ、
前記制御部は、プログラム・カウンタの出力値と入力された前記コマンドにより設定されたアドレスとを比較し、
前記比較の結果、プログラム・カウンタの出力値と前記コマンドにより設定されたアドレスが一致するとともに、前記コマンドに設定された前記変数領域を示す識別子が、前記コマンドによって設定された変数領域名により示された前記変数領域に記憶された識別子と一致した場合、前記プログラムコードの実行をブレークさせることを特徴とするデバッグ方法。
【請求項８】
前記制御部は、前記第１の記憶装置から前記第２の記憶装置にプログラムコードを転送する前に、前記第１の記憶装置に記憶された各プログラムコードに前記識別子を設定することを特徴とする請求項７記載のデバッグ方法。
【請求項９】
前記変数領域の識別子は、前記制御部が制御プログラムのカーネル又はタスク管理プログラムを用いて更新することを特徴とする請求項７記載のデバッグ方法。
【請求項１０】
前記変数領域の識別子は、前記ＤＭＡコントローラがプログラムコードの転送に対応して更新することを特徴とする請求項７記載のデバッグ方法。
【請求項１１】
プログラムコード及び各プログラムコードに対応する識別子は、ソースプログラムからデバッガを記憶した制御部が生成することを特徴とする請求項７又記載のデバッグ方法。
【請求項１２】
プログラムコード及び各プログラムコードに対応する識別子は、ソースプログラムからコンパイラが生成することを特徴とする請求項７記載のデバッグ方法。
【請求項１３】
前記制御部は、前記プログラム・カウンタの出力値と入力された前記コマンドに設定されたアドレスとを比較する前に、ディスプレイ上にソースプログラム、及び前記コマンドの生成を促すアイコンを表示し、
前記アイコンの操作に応じて、前記ディスプレイ上に表示されたソースプログラムの指定された部分に対応するアドレス、及び前記識別子に基づき前記コマンド又は前記コマンドに相当する情報を生成することを特徴とする請求項７記載のデバッグ方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えばシステムＬＳＩの設計開発に利用される開発環境(development environment)に係り、特に、システムＬＳＩの設計開発環境のデバッグ装置及びデバッグ方法に関する。
【０００２】
【従来の技術】
マルチメディア応用のように、リアルタイム処理が必要な応用がある。リアルタイム処理を可能とするためには、キャッシュのリフィルによるオーバーヘッドを避ける必要がある。このため、マルチメディア応用に使用されるプロセッサは、命令キャッシュの他に命令メモリ（以下、ＩＭＥＭと称す）を搭載しているものがある。
【０００３】
図１２に示すように、主記憶は、例えばシンクロナスＤＲＡＭ（ＳＤＲＡＭ）により構成されている。この主記憶は、例えば２５６Ｍビット程度の大きな容量を有している。また、ＩＭＥＭは、例えば数十ｋビット程度の容量の単なるＲＡＭであり、１命令サイクルで命令を取り出すことができ、高速動作が可能とされている。
【０００４】
主記憶内には、複数の命令からなるプログラムコード（以下、単にコードと呼ぶ）が格納されている。この主記憶内の複数のコードは、ＩＭＥＭのオーバーレイ領域に転送され、ＩＭＥＭにおいて実行される。すなわち、ＩＭＥＭは前述したように小容量のメモリである。このため、プログラム全体をＩＭＥＭのオーバーレイ領域に記憶することは困難となっている。したがって、プログラムを複数のコードに分割し、このコードをプログラムの実行に従ってオーバーレイ領域に転送して実行するようにしている。このため、オーバーレイ領域に記憶されているコードは、コードが転送される度に最新のコードに置き換えられる。
【０００５】
例えば図１２において、主記憶内にコード１とコード２が有り、コード１を実行する時、それがＩＭＥＭのオーバーレイ領域にコピーされる。また、コード２が実行される時、それがＩＭＥＭのオーバーレイ領域にコピーされる。このため、コード１はコード２にオーバーレイされる。したがって、ＩＭＥＭ上のアドレスＡには、コード１の命令１が置かれている場合も有れば、コード２の命令２が置かれていることもある。ＩＭＥＭの内容は、異なる複数のタスクによって置き換えられたり、同一タスクによっても置き換えられたりする。
【０００６】
【発明が解決しようとする課題】
ところで、プログラムをデバッグする際、最も良く用いるデバッグ手段としてブレーク・ポイントがある。これは、実行がそのアドレスに至ろうとする時に実行を止める方法である。ところが、ＩＭＥＭ上で複数のコードがオーバーレイされている場合、設定したブレーク命令が実行されなかったり、間違ってブレーク命令が実行される場合がある。プログラムの実行としては、シミュレータによる実行と実デバイスによる実行があり、ブレーク命令が機能しないケースも以下のように様々有る。
【０００７】
（１）シミュレータで実行している場合
通常、ブレーク・ポイントの実行時のアドレスは、シミュレータの内部領域に保存され、プログラム・カウンタ（ＰＣ）の値が、保存したブレーク・ポイントのアドレスと一致した時にブレークされる。しかし、前述したようにＩＭＥＭ上には複数のコードが置き換えられる。このため、ブレークしたいアドレス以外のアドレスでブレークされることとなり、間違ってブレークされることがある。例えば、図１２のコード１の命令１でブレークさせることにする。その場合、シミュレータはアドレスＡ（これを命令１の実行アドレスと言う）を保存する。しかし、コード１より先にコード２が実行されると、命令１のアドレスＡには命令２が置き換えられている。このため、コード２の命令２でブレークされてしまう。つまり、意図しないところで、間違ってブレークが発生することとなる。
【０００８】
（２）実デバイスで実行している場合
実デバイスのブレーク手段としては、ハード・ブレークとソフト・ブレークの２種類が有る。ハード・ブレークの動作は、前述したシミュレータの場合と類似している。すなわち、ブレーク・ポイントの実行時のアドレスがハードウェア、例えばアドレス・ブレーク・レジスタに保存される。プログラム・カウンタ（ＰＣ）の値がアドレス・ブレーク・レジスタに保存されたアドレスと一致した場合、ブレークされる。この場合、シミュレータの場合と同様に、間違ってブレークが発生することがある。
【０００９】
一方、図１３は、ソフト・ブレークの例を示している。ソフト・ブレークの場合、例えばプログラムを書き換えることによりブレークを発生させる。例えば図１３（ａ）に示す命令１にてブレークさせる場合、先ず、図１３（ｂ）に示すように、命令１がデバッグ・モニタ領域に退避され、図１３（ｃ）に示すように、命令１の代わりにｄｂｒｅａｋ命令（デバッグ割込を発生する命令）が設定される。すなわち、命令１からｄｂｒｅａｋ命令にプログラムが書き換えられる。この後、ｄｂｒｅａｋ命令が実行されると、以後の命令実行が中断され、デバッグ・ハンドラ又はモニタに制御が移る。この後、デバッグ・ハンドラ又はモニタにより、命令１が元のアドレスに戻される。しかし、ＩＭＥＭ上で複数のコードがオーバーレイされている場合、上記ソフト・ブレークが実行されない場合が有る。
【００１０】
例えば図１４（ａ）に示すように、ＩＭＥＭに格納されているコード１の命令１でブレークさせる場合を考える。この場合、図１４（ｂ）に示すように、ＩＭＥＭのアドレスＡに有る命令１がｄｂｒｅａｋ命令に置き換えられる。しかし、その後、図１４（ｃ）に示すように、コード１がコード２にオーバーレイされると、前記ｄｂｒｅａｋ命令は命令２に置き換わってしまう。この後、図１４（ｄ）に示すように、再度コード１がコード２にオーバーレイされた場合、ＩＭＥＭ上のコード１のアドレスＡにｄｂｒｅａｋ命令は無くなってしまう。このため、プログラム・カウンタの出力値がアドレスＡに至ると、命令１が実行されてしまいブレークされないこととなる。
【００１１】
このように、従来のデバッガは、意図したアドレスでブレークさせることができず、間違ったアドレスでブレークすることがあり、効率良くプログラムをデバッグすることが困難であった。
【００１２】
本発明は、上記課題を解決するためになされたものであり、その目的とするところは、プログラムコードがオーバーレイされる場合において、ブレークさせるべきアドレスにおいて確実にブレークさせることができるとともに、間違ったアドレスでブレークすることを防止でき、効率良くプログラムをデバッグすることが可能なデバッグ装置及びデバッグ方法を提供しようとするものである。
【００１３】
【課題を解決するための手段】
本発明のデバッグ装置の態様は、識別子により識別された複数のプログラムコードを格納する第１の記憶装置と、複数のバンクを有し、前記バンクの各々は、少なくとも１つの記憶領域を有し、この記憶領域に前記第１の記憶装置に格納された前記複数のプログラムコードのうち、実行されるプログラムコードが格納される第２の記憶装置と、前記第２の記憶装置の少なくとも１つの前記記憶領域に格納される前記プログラムコードのそれぞれの前記識別子を変数領域名に対応して記憶する変数領域と、入力されたコマンドにより指定されたアドレスにおいて、前記コマンドにより設定された識別子が、前記コマンドによって設定された変数領域名により示された前記変数領域に記憶された識別子と一致した場合、複数のプログラムコードのうち対応するプログラムコードの実行をブレークさせる制御部とを具備している。
【００１４】
本発明のデバッグ方法の態様は、識別子により識別された複数のプログラムコードを格納する第１の記憶装置と、複数のバンクを有し、前記バンクの各々は、少なくとも１つの記憶領域を有し、この記憶領域に前記第１の記憶装置に格納された前記複数のプログラムコードのうち、実行されるプログラムコードが格納される第２の記憶装置と、前記第２の記憶装置の少なくとも１つの前記記憶領域に格納される前記プログラムコードのそれぞれの前記識別子を変数領域名に対応して記憶する変数領域と、入力されたコマンドにより設定されたアドレスにおいて、前記コマンドにより設定された識別子、及び変数領域名と前記変数領域に前記変数領域名に対応して記憶された識別子とを比較する制御部と、ＤＭＡコントローラとを具備するデバッグ装置によるデバッグ方法であって、前記ＤＭＡコントローラにより、前記第１の記憶装置に記憶された複数のプログラムコードのうちから実行すべきプログラムコードを前記第２の記憶装置の前記複数のバンクに設定された少なくとも１つの前記記憶領域のうちの１つに転送するとき、前記制御部により、前記記憶領域に転送されるプログラムコードの前記識別子を変数領域名に対応して設けられた複数の前記変数領域のうちの１つに記憶させ、前記制御部は、プログラム・カウンタの出力値と入力された前記コマンドにより設定されたアドレスとを比較し、前記比較の結果、プログラム・カウンタの出力値と前記コマンドにより設定されたアドレスが一致した場合、前記コマンドに設定された前記変数領域を示す識別子が、前記コマンドによって設定された変数領域名により示された前記変数領域に記憶された識別子と一致した場合、前記プログラムコードの実行をブレークさせる。
【００１７】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照して説明する。
【００１８】
（第１の実施形態）
図１は、第１の実施形態に適用されるデバッグ装置の全体構成の一例を示している。基板１には、プロセッサのチップ２が配置されている。このチップ２は、ＪＴＡＧ（Joint Test Action Group）ポート３を介してＪＴＡＧコントローラ４に接続されている。このＪＴＡＧコントローラ４は、パーソナルコンピュータ（又はワークステーション）５に接続されている。このパーソナルコンピュータ５にはチップ２に組み込まれるプログラムのデバッグを制御するデバッガ６、及びプログラムをシミュレートするシミュレータ７が記憶されている。
【００１９】
図２は、前記チップ２に収容されているプロセッサの概略構成を示している。ＣＰＵ１１は命令メモリとしてのＩＭＥＭ１２を内蔵している。ＣＰＵ１１はバス１３に接続されている。バス１３には、ＳＤＲＡＭＣ（ＳＤＲＡＭコントローラ）１４を介して主記憶としてのＳＤＲＡＭ１５が接続されている。このＳＤＲＡＭ１５は例えば２５６Ｍビット程度の大きな容量を有しており、例えばチップ２の外部に配置されている。さらに、バス１３には、前記ＩＭＥＭ１２をＳＤＲＡＭ１５との間でデータの転送を制御するＤＭＡＣ（ＤＭＡコントローラ）１６が接続されている。前記ＩＭＥＭ１２は、例えば１命令サイクルで命令を取り出すことができる例えば数十ｋビット程度の容量を有する高速なＲＡＭにより構成されている。
【００２０】
次に、図３、４を参照して図１、図２の具体的な構成について説明する。尚、図３、４において、図１、２と同一部分には同一符号を付す。
【００２１】
先ず、図３を用いて、オーバーレイされるコードについて説明する。本実施形態において、オーバーレイされるコードは、２種類のアドレスを有している。図３に示すように、コードが実行される前は比較的低速なメモリ、本実施形態では、ＳＤＲＡＭに置かれている。この時のアドレスを配置アドレスと呼ぶ。図３において、アドレス１は配置アドレスを示している。このコード１は、実行時にＩＭＥＭに格納される。この時のアドレスをコード１の実行アドレスという。図３に示すアドレスＡは、コード１における命令１の実行アドレスの例である。この実施形態では、１つのコードが複数の実行アドレスを持たない。つまり、ＩＭＥＭの別の実行アドレスに格納されないと仮定する。
【００２２】
図４は、図１、図２の構成を具体的に示している。ＳＤＲＡＭ１５には制御プログラムとしてのＯＳ（Operating System）と複数のタスク１、タスク２、…のコードが格納されている。一方、ＩＭＥＭ１２は、例えば２つのバンクに分割されている。バンク１には、ＯＳのうちの常駐部がコピーされている。さらに、ＩＭＥＭ１２は、例えば４つのオーバーレイ領域１、２、３、４を有している。オーバーレイ領域及びタスクの数は任意であり、少なくとも１つあればよい。オーバーレイ領域１、２はバンク１に配置され、オーバーレイ領域３、４は、バンク２に配置されている。これらオーバーレイ領域毎に、各タスクのコードが置き換えられる。
【００２３】
前記ＳＤＡＲＭ１５内のタスク１のコードは、コード１−１、コード１−２−１〜コード１−４−２に分けられている。各コードは、実行前にＩＭＥＭ１２の対応するオーバーレイ領域にコピーされる。すなわち、コード１−１はオーバーレイ領域１にコピーされ、コード１−２−１と１−２−２はオーバーレイ領域２にコピーされる。また、コード１−３はオーバーレイ領域３にコピーされ、コード１−４−１と１−４−２はオーバーレイ領域４にコピーされる。つまり、オーバーレイ領域２は、コード１−２−１と１−２−２に共有され、オーバーレイ領域４は、コード１−４−１と１−４−２に共有される。各タスクのコードは、例えばプログラマにより予め設定される。
【００２４】
各コードは、識別子としてのＩＤを有している。このＩＤは、例えば１６ビット長であり、先頭の８ビットにはタスクの識別子が記録され、残りの８ビットにはタスク内でユニークな識別子が記録されている。例えば、コード１−１のＩＤは０ｘ０１０１であり、コード１−２−１のＩＤは０ｘ０１０２である。各コードのＩＤは、言語ツールにより設定される。
【００２５】
また、各オーバーレイ領域に対応して、変数領域ＯＶＲ１、２、３、４が設けられている。すなわち、変数領域ＯＶＲ１、２、３、４は、それぞれオーバーレイ領域１、２、３、４に対応している。この変数領域ＯＶＲ１、２、３、４は、どのコードがＩＭＥＭ１２のどのオーバーレイ領域にコピーされているかを示している。例えばコード１−１がオーバーレイ領域１にコピーされている場合、変数領域ＯＶＲ１には、コード１−１のＩＤ０ｘ０１０１が格納される。この変数領域ＯＶＲ１―４は、例えばデバッガ、シミュレータ、ＯＳ、タスクのどれからも参照可能とされている。前記ＩＤ、及び変数領域ＯＶＲ１−４は、例えばＳＤＲＡＭ１５内に記憶されている。
【００２６】
本実施形態において、変数領域ＯＶＲ１、２、３、４は、オペレーティングシステムの中核を構成し、ＩＭＥＭ１２に常駐されるカーネル又はタスク管理プログラムにより、先ず更新される。例えば現在タスク２が実行されている状態において、カーネルがタスク２から、タスク１を切り替える場合、カーネルが先ず変数領域ＯＶＲ１を０ｘ０１０１に変更する。この後、ＳＤＲＡＭ１５のコード１−１をＩＭＥＭ１２のオーバーレイ領域１にコピーする。この後、タスク１は、例えばコード１−３をオーバーレイ領域３にコピーする。この場合、先ず、変数領域ＯＶＲ３が０ｘ０１０４に変更される。この後、ＤＭＡＣ１６が起動され、コード１−３がオーバーレイ領域３にコピーされる。オーバーレイ領域１とオーバーレイ領域３は、異なるバンクに配置されている。このため、コード１−１の実行とコード１−３のＤＭＡによる転送は並行に実行される。なお、各コードは、プログラムの構成単位としてのセクションを構成しているものとする。
【００２７】
次に、ブレーク・ポイントの設定方法について説明する。ブレーク・ポイントは、デバッガ６を起動した状態で、パーソナルコンピュータ（又はワークステーション）５の例えばキーボードより入力される。すなわち、ブレーク・ポイントは、キーボードより入力されたブレーク・コマンドにより設定される。
【００２８】
図５は、ブレーク・コマンドの入力形式を示している。図５に示すブレーク・コマンドにおいて、“dbg>break”の後にブレークしたい実行アドレス、オーバーレイ領域を示す変数領域名とＩＤを指定する。図５に示す例の場合、実行アドレスがアドレスＡ、変数領域名がＯＶＲ１、ＩＤが０ｘ０１０１である。この記述の意味は、プログラム・カウンタの出力値が実行アドレスＡと一致した場合、変数領域名により指定されたオーバーレイ領域１に、ＩＤにより定められたコードがある場合にブレークすることを表している。
【００２９】
図６は、図４に示すシミュレータ７でデバッグする場合の動作を示している。シミュレータ７で実行する場合、デバッガ６からシミュレータ７に、前記ブレーク条件（実行アドレス、変数領域名、ＩＤ）が供給される。シミュレータ７はこのブレーク条件を保持する。シミュレータは命令を実行しながら、先ず、シミュレータが有するプログラム・カウンタ（ＰＣ）の値と実行アドレスとを比較する（ＳＴ１）。これらが一致した場合、設定した変数領域名と実際の変数同士が一致しているか、及び設定したＩＤと実際のＩＤ同士が一致するかを比較する（ＳＴ２）。すなわち、例えば図５に示す例において、変数領域ＯＶＲ１の値がコード１−１のＩＤ（０ｘ０１０１）に等しいかどうかを比較する。これらが一致した場合、ブレークする（ＳＴ３）。
【００３１】
尚、変数領域名とＩＤはデバッガ６が保持しても良い。また、シミュレータが直接変数領域ＯＶＲ１−４を参照する構成とすることも可能である。
【００３２】
さらに、上記説明では、先ず、プログラム・カウンタ（ＰＣ）の値と実行アドレスとを比較し、これらが一致した場合、設定した変数領域名と実際の変数同士が一致しているか、及び設定したＩＤと実際のＩＤ同士が一致するかを比較している。しかし、この比較順序を逆としてもよい。すなわち、先ず、設定した変数領域名と実際の変数同士が一致しているか、及び設定したＩＤと実際のＩＤ同士が一致するかを比較し、これらが一致した場合、プログラム・カウンタ（ＰＣ）の値と実行アドレスとを比較してもよい。
【００３３】
次に、図７、図８を参照して実デバイスでデバッグする場合の動作について説明する。
【００３４】
図７は、本実施例におけるデバッガ用オブジェクトを示している。図７に示すように、デバッガ用実行プログラムにおいて、各セクション（コード）は、セクションの先頭に対応する配置アドレスと実行アドレスをデバッグ情報として有している。前記配置アドレスはセクションがＳＤＲＡＭ１５に記憶されているときのセクションの先頭アドレスを示している。前記実行アドレスはセクションがＩＭＥＭ１２に記憶されているときのセクションの先頭アドレスを示している。ユーザにより、図５に示すブレーク条件が入力されると、先ず、図８（ａ）に示すＩＭＥＭ１２のアドレスＡに有る命令１がデバッガ６の図示せぬモニタ領域に退避される。すなわち、ブレーク・コマンドのブレークしたい実行アドレスに基づいてＩＭＥＭ１２のアドレスＡに有る命令１がデバッガ６の図示せぬモニタ領域に退避される。
【００３５】
この後、図８（ｂ）に示すように、アドレスＡにブレーク命令としてのｄｂｒｅａｋ命令が書き込まれる。これとともに、ＳＤＲＡＭ１５に記憶されているコード１の命令１がｄｂｒｅａｋ命令により上書きされる。
【００３６】
ＳＤＲＡＭ１５における命令１の配置アドレスは、次のようにして求められる。デバッガはブレーク・コマンドの実行アドレスに基づき、その実行アドレスが属するコードのデバッガ用オブジェクトを取得する。このデバッガ用オブジェクトよりセクションの先頭の配置アドレスを知る。この配置アドレスにセクション内における配置アドレスから命令１までのオフセット（相対アドレス）を加えることにより、ＳＤＲＡＭ１５におけるアドレス１を得ることができる。
【００３７】
このように、ＩＭＥＭ１２の実行アドレスとＳＤＲＡＭ１５の配置アドレスの両方にｄｂｒｅａｋ命令が書き込まれている。このため、ＩＭＥＭ１２のコード１が別のコードにより置き換えられ、ｄｂｒｅａｋ命令が別の命令により上書きされた場合においても、コード１が実行される時、ＳＤＲＡＭ１５からＩＭＥＭ１２にコード１が再度コピーされる。この結果、ｄｂｒｅａｋ命令もＩＭＥＭ上に再度コピーされる。したがって、ＩＭＥＭ１２において、ｄｂｒｅａｋ命令が消えることがないため、アドレスＡにおいて確実にブレークできる。
【００３８】
上記第１の実施形態によれば、各コードにＩＤを設定し、ＩＭＥＭ１２のオーバーレイ領域にコピーされているコードを変数領域ＯＶＲ１−４に記憶されたコードＩＤにより管理している。さらに、ブレーク・ポイントを設定するブレーク・コマンドは、ブレークさせる実行アドレスに対応して、変数領域名、ＩＤを有している。したがって、シミュレータでデバッグする場合、ＩＭＥＭ１２にコピーされているコードが別のコードにより置き換えられた場合、ブレーク・コマンドに設定された変数領域名及びＩＤと、変数領域の変数領域名及びＩＤとが不一致となる。このため、ブレークされない。また、ブレーク・コマンドに設定されたコードを実行する場合、対応するコードは、ＳＤＲＡＭ１５からＩＭＥＭ１２にコピーされる。このとき、変数領域の変数領域名とＩＤは、ブレーク・コマンドに設定されたそれと一致する。したがって、コードがオーバーレイされている場合においても、設定したアドレスにおいて確実にブレークできる。
【００３９】
また、実デバイスによりデバッグするとき、ＩＭＥＭ１２に記憶されたコードの実行アドレスと、ＳＤＲＡＭ１５に記憶されている同一のコードの配置アドレスの両方にブレーク命令を書き込んでいる。このため、ＩＭＥＭ１２に記憶されたコードが別のコードにより置き換えられた場合においても、ブレーク命令を消失することがない。したがって、ブレーク命令を設定したアドレスにおいて確実にブレークさせることができる。
【００４０】
さらに、変数領域は、複数の領域を有している。このため、デバッグ領域が複数個設定されている場合においても、確実に所要のアドレスでブレークできる。
【００４１】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。
【００４２】
前記第１の実施形態は、カーネルとタスクが変数領域ＯＶＲ１−４の内容を更新するとした。これに対して、第２の実施形態は、ＤＭＡＣ（ＤＭＡコントローラ）１６が、変数領域ＯＶＲ１−４の内容を更新する。このような構成とすることにより、ユーザが変数領域ＯＶＲ１−４の更新を考慮しなくてすむようになる。
【００４３】
この場合、ＤＭＡＣ１６のハードウェアが、変数領域ＯＶＲ１−４の内容を更新する方法と、ＤＭＡＣ１６を起動させるための関数を設け、この関数によりソフトウェアによって変数領域ＯＶＲ１−４の内容を更新する方法が有る。
【００４４】
また、シミュレータに、変数領域ＯＶＲ１−４の内容を更新する機能を持たせることも考えられる。しかし、この場合、実デバイスでブレークさせることはできない。
【００４５】
上記第２の実施形態によれば、ＤＭＡＣ１６により変数領域ＯＶＲ１−４の内容を更新することにより、ユーザはユーザが設定したオーバーレイを実行する際、変数領域ＯＶＲ１−４を変更する必要がない。このため、ユーザの負担を軽減することができる。
【００４６】
（第３の実施形態）
図９（ａ）（ｂ）は、本発明の第３の実施形態を示している。
【００４７】
図９（ａ）に示すように、例えばデバッガが、ソースプログラムからコード及び各コードに対応するＩＤを有するテーブルを生成するようにしてもよい。このような構成とした場合、ユーザはブレーク・コマンドを入力するだけでよく、一層、ユーザの負担を軽減できる。
【００４８】
また、図９（ｂ）に示すように、例えばコンパイラが、ソースプログラムからコード及び各コードに対応するＩＤを有するテーブルを生成するようにしてもよい。このような構成とした場合も上記と同様に、ユーザはブレーク・コマンドを入力するだけでよく、ユーザの負担を軽減できる。
【００４９】
（第４の実施形態）
上記第１乃至第３の実施形態において、ブレーク・コマンドは、キーボードから入力した。しかし、これに限定されるものではない。
【００５０】
図１０は、本発明の第４の実施形態を示すものであり、ＧＵＩ（Graphics User Interface）を用いてブレーク・コマンドを入力する例を示している。パーソナルコンピュータやワークステーションのディスプレイ３１には、例えばデバッガ６のソース・ウィンドウ３２が表示されている。このソース・ウィンドウ３２には、Ｃ言語又は、アセンブラ言語により記載されたソースプログラムが表示されている。このソースプログラムは、例えば配置アドレス又は実行アドレスと、命令とにより構成されている。配置アドレスを表示するか、実行アドレスを表示するかは、ユーザにより任意に設定可能とされている。
【００５１】
また、配置アドレスを表示したソースプログラムと、実行アドレスを表示したソースプログラムとを別々のウィンドウに表示することができる。例えば図１０に示すウィンドウ３２１は、配置アドレスを含むソースプログラムを示し、ウィンドウ３２２は、実行アドレスを含むソースプログラムを示している。さらに、ウィンドウ３２１とウィンドウ３２２のいずれか一方を表示すること、ウィンドウ３２１とウィンドウ３２２の両方を同時に表示することが可能とされている。また、どのオーバーレイ領域のソースプログラムを表示するかも選択可能とされている。
【００５２】
ソース・ウィンドウ３２の近傍には、デバッガ６の動作を指示する複数のアイコン３３、３４、３５が表示されている。このうち、アイコン３５は、ブレーク・コマンドの生成を促すアイコンである。
【００５３】
図１１は、デバッガ６の概略動作を示している。図１０に示す表示状態において、ソース・ウィンドウ３２１又は３２２に表示されているソースプログラムの所要の行にカーソル３６を移動し、アイコン３５をクリックすると（ＳＴ１１）、図５に示すブレーク・コマンドが自動的に生成される。すなわち、デバッガ６は、図７に示すデバッガ用実行プログラムのデバッグ情報から実行アドレス、変数領域名、ＩＤを求め（ＳＴ１２）、これらから前記ブレーク・コマンドを生成する（ＳＴ１３）。この時、ソース・ウィンドウが配置アドレスを表示している場合、デバッグ情報から実行アドレスが取得され、ブレーク・コマンドに組み込まれる。なお、この実施形態は、前記ブレーク・コマンドそのものを生成する場合に限らず、前記ブレーク・コマンドに相当する情報を生成してもよい。
【００５４】
上記第４の実施形態によれば、ユーザは、ディスプレイ３１に表示されたソースプログラムの所要の行にカーソルを移動し、ブレーク・コマンド生成用のアイコン３５をクリックすればよい。したがって、ユーザは、変数領域名及びＩＤを認識している必要がないため、操作性を一層向上できる。
【００５５】
その他、本発明の要旨を変えない範囲において種々変形実施可能なことは勿論である。
【００５６】
【発明の効果】
以上、詳述したように本発明によれば、プログラムコードがオーバーレイされる場合において、ブレークさせるべきアドレスにおいて確実にブレークさせることができるとともに、間違ったアドレスでブレークすることを防止でき、効率良くプログラムをデバッグすることが可能なデバッグ装置及びデバッグ方法を提供できる。
【図面の簡単な説明】
【図１】本発明の第１の実施形態に適用されるデバッグ装置の一例を示す構成図。
【図２】図１の一部を示す構成図。
【図３】オーバーレイされるコードを説明するために示す図。
【図４】図１、図２の構成を具体的に示す構成図。
【図５】ブレーク・コマンドの入力形式を示す図。
【図６】シミュレータでデバッグする場合の動作を示すフローチャート。
【図７】本実施例におけるデバッガ用オブジェクトを示す図。
【図８】図８（ａ）、図８（ｂ）は、実デバイスでデバッグする場合の動作を説明するために示す図。
【図９】図９（ａ）、図９（ｂ）は、本発明の第３の実施形態を示すものであり、コード及びＩＤの生成方法の他の例を説明するために示す図。
【図１０】本発明の第４の実施形態を示すものであり、ＧＵＩを用いてブレーク・コマンドを入力する例を示す図。
【図１１】図１０の動作を示すフローチャート。
【図１２】従来のデバッガの動作を示す図。
【図１３】図１３（ａ）乃至図１３（ｃ）は、従来のソフト・ブレークの例を示す図。
【図１４】図１４（ａ）乃至図１４（ｄ）は、従来のデバッガの動作を示す図。
【符号の説明】
２…チップ、
５…パーソナルコンピュータ（又はワークステーション）、
６…デバッガ、
１１…ＣＰＵ、
１２…ＩＭＥＭ（命令メモリ）、
１３…バス、
１４…ＳＤＭＡＣ（ＳＤＲＡＭコントローラ）、
１５…ＳＤＲＡＭ（主記憶）、
１６…ＤＭＡＣ（ＤＭＡコントローラ）、
ＩＤ…識別子、
１−１、１−２−１〜１−４−２…コード、
ＯＶＲ１、２、３、４…変数領域。
【図１】
0003764405.tif 000002
【図２】
0003764405.tif 000003
【図３】
0003764405.tif 000004
【図４】
0003764405.tif 000005
【図５】
0003764405.tif 000006
【図６】
0003764405.tif 000007
【図７】
0003764405.tif 000008
【図８】
0003764405.tif 000009
【図９】
0003764405.tif 000010
【図１０】
0003764405.tif 000011
【図１１】
0003764405.tif 000012
【図１２】
0003764405.tif 000013
【図１３】
0003764405.tif 000014
【図１４】
0003764405.tif 000015