(57)【要約】【課題】デバッグのための事前準備を簡略化してデバッグ作業の効率を向上させること。【解決手段】デバッグ装置は、デバッグコマンドを埋め込んだプログラムを実行し、デバッグコマンドによりプログラムの実行を中断する場合には、デバッグコマンドを示す第１の情報およびプログラムの中断を示す第２の情報を出力するエミュレータと、第２の情報を受けると、第１の情報が示すデバッグコマンドをエミュレータから読み出して、読み出したデバッグコマンドを実行し、実行結果を戻り値としてエミュレータに出力するとともに、プログラムの実行を再開するようにエミュレータに指示するデバッガと、を備える。【選択図】図１
2012242904.tif 000002
【特許請求の範囲】
【請求項１】
半導体集積回路のプログラムを検証するエミュレータおよびデバッガを備え、
前記エミュレータは、デバッグコマンドを埋め込んだ前記プログラムを実行するプログラム実行部と、
前記デバッガと前記エミュレータの相互から制御される記憶部と、
前記記憶部を参照して前記プログラムの中断を制御するデバッグコマンドブレーク制御部と、を備え、
前記デバッガは、前記エミュレータから通知された中断指示を検出するデバッグコマンドブレーク検出部と、
前記記憶部に格納された情報に基づいてデバッグコマンドを前記エミュレータから読み出すデバッグコマンド文字列読み出し部と、
前記デバッグコマンドブレーク制御部からの中断指示により前記エミュレータが中断中に前記デバッガが前記デバッグコマンドを実行するための制御を行うデバッグコマンド実行部と、
中断されたプログラムの再開を前記エミュレータに通知する復帰制御部と、を備えることを特徴とするデバッグ装置。
【請求項２】
前記エミュレータで実行するプログラム内にデバッグコマンドを埋め込み、該プログラム上から前記記憶部および前記デバッグコマンドブレーク制御部を経由して前記デバッガにプログラムの中断を通知し、前記デバッガは前記通知を前記デバッグコマンドブレーク検出部で検出し、中断中である場合には、前記デバッグコマンド文字列読み出し部が前記記憶部に格納された情報を基にデバッグコマンドを前記エミュレータから読み出し、読み出したデバッグコマンドを前記デバッグコマンド実行部で実行し、前記復帰制御部により前記エミュレータにプログラムの実行を再開させることを特徴とする、請求項１に記載のデバッグ装置。
【請求項３】
前記記憶部は、前記デバッグコマンドブレーク制御部にプログラムが中断したかを通知するデバッグコマンドブレーク因子部と、
中断中にデバッガが実行するデバッグコマンド情報を格納する文字列情報部と、
プログラム復帰時に前記エミュレータにデバッグコマンドの実行結果を伝えるための戻り値部と、を備えることを特徴とする、請求項１または２に記載のデバッグ装置。
【請求項４】
デバッグコマンドを埋め込んだプログラムを実行し、該デバッグコマンドにより該プログラムの実行を中断する場合には、該デバッグコマンドを示す第１の情報および該プログラムの中断を示す第２の情報を出力するエミュレータと、
前記第２の情報を受けると、前記第１の情報が示すデバッグコマンドを前記エミュレータから読み出して、読み出したデバッグコマンドを実行し、実行結果を戻り値として前記エミュレータに出力するとともに、前記プログラムの実行を再開するように前記エミュレータに指示するデバッガと、を備えることを特徴とするデバッグ装置。
【請求項５】
エミュレータが、デバッグコマンドを埋め込んだプログラムを実行する工程と、
前記デバッグコマンドにより前記プログラムの実行を中断する場合には、前記デバッグコマンドを示す第１の情報および前記プログラムの中断を示す第２の情報を出力する工程と、を含み、
デバッガが、前記第２の情報を受けると、前記第１の情報が示すデバッグコマンドを前記エミュレータから読み出す工程と、
読み出したデバッグコマンドを実行し、実行結果を戻り値として前記エミュレータに出力する工程と、
前記プログラムの実行を再開するように前記エミュレータに指示する工程と、を含むことを特徴とするデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバッグ装置およびデバッグ方法に関し、特に、プログラムのデバッグを行うデバッグ装置およびデバッグ方法に関する。
【背景技術】
【０００２】
近年、半導体集積回路（以下「ＬＳＩ」という。）を検証（以下「デバッグ」という。）する際には、デバッグ対象の回路（以下「ユーザ回路」という。）と、ユーザ回路を制御して内部観測をするデバッグ制御ユニットとを、エミュレーションするための装置（以下「エミュレータ」という。）であるＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）等に実装してデバッグが行われる。デバッグ対象となるＬＳＩ規模の増加に伴い、ＬＳＩと比較して低速なエミュレータ上でＬＳＩと同一の検証を行うには、数時間から数日という長い時間をかけて検証を行なう必要があり、デバッグ時間も増加してきている。したがって、デバッグ作業を効率良く行なうための実行環境が望まれている。
【０００３】
特許文献１において、デバッガによりプログラムの中断点を自動的に設定可能とするプログラムデバッグ方式およびデバッガが記載されている。
【０００４】
図５は、特許文献１に記載されたデバッガの機能構成図である。デバッガ２１は、デバッグ情報読み取り、格納機能２２、および、実行コマンド文指定、中断点設定機能２３を、従来機能２４を持つデバッガに新たに付加することにより実現される。図５に示した構成においては、プログラムから読み取ったデバッグ情報を一旦格納する。なお、デバッガを起動する度に、プログラムからデバッグ情報を読み取るようにしてもよい。この場合には、デバッグ情報読み取り、格納機能２２は、情報の格納機能を含まない。
【０００５】
ユーザ３０１の指示により、デバッガ２１がプログラムシステム１００を参照し、その中に含まれるデバッグコマンド文、および、それが位置する行番号を読み取り、デバッグ情報ファイル３０２に格納する。
【０００６】
ユーザ３０１は、プログラムシステム１００に記述したすべてのデバッグコマンド文の内、各時に実行させるデバッグコマンド文を、プログラムシステム１００に含まれるモジュール名、プロシジャ名により指定する。デバッガ２１は、デバッグ情報ファイル３０２から、指定された範囲内に含まれるすべてのデバッグコマンド文およびそれが位置する行番号を読み取り、ロードモジュール４０１に対して、中断点を設定する。従来機能２４は、中断点の行番号、および、中断時に実行するデバッグコマンド文の指定をユーザ３０１から受け、ロードモジュール４０１に対して中断点を設定する機能を含む。この機能を利用することにより、中断点の設定が行われる。
【０００７】
図６は、特許文献１におけるデバッグ対象のプログラムを示す。図６を参照すると、プログラムシステム１００の構成、プロシジャ例１０３、および、プログラム中に記述されるデバッグコマンド文を含む行１１２の一例が、図示されている。図６に示すように、プログラムシステム１００はモジュール１０１と呼ばれるコンパイル単位から成り、モジュール１０１は、さらに、プロシジャ１０２と呼ばれる処理単位から成る。なお、図６に示したプログラムシステム１００の構成は説明の便宜上採用したものに過ぎず、本発明はかかる構成を有するプログラムシステムに限定されない。
【０００８】
プロシジャ例１０３を参照すると、プログラム中には、プログラム本体１１１の合間に、デバッグコマンド文を含む行１１２が挿入されている。デバッグコマンド文を含む行１１２は、コンパイラに対してコメント行であることを示す記号１２１として一対の「／＊」、「＊／」と、デバッガに対してデバッグコマンド文であることを示す記号１２２として一対の「；；」、「；；」と、デバッグコマンド文１２３とを含む。この記法により、デバッグコマンド文を含む行１１２は、コンパイラによって無視され、ロードモジュール４０１に影響を及ぼさない。
【０００９】
図７は、特許文献１におけるデバッグ情報ファイル３０２の構成図である。図７を参照すると、デバッグ情報ファイル３０２は、図６に示したモジュール１０１を単位として生成される。デバッグ情報ファイル３０２は、プログラムが修正される度に、すなわちコンパイルを契機として更新する必要がある。なぜなら、コンパイルはモジュールを単位として行われるからである。なお、デバッグコマンド文１２３とは関係のない僅かな修正をプログラムに対して行った場合にも、デバッグ情報ファイル３０２を更新する必要がある。なぜなら、デバッグコマンド文１２３とは関係のない箇所へステートメントを１行挿入または削除した場合であっても、デバッグコマンド文１２３の位置する行番号がずれてしまうからである。
【００１０】
デバッグ情報ファイル３０２は、対応するモジュール名５０１と、ファイル全体の長さ表示５０２と、該モジュールに含まれるすべてのプロシジャに対するプロシジャ名５０３と、プロシジャに対する長さ表示５０４と、該プロシジャに含まれるすべてのデバッグコマンド文の位置する行番号５０５およびデバッグコマンド文５０６と、を含む。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開平５−２５０２１３号公報（第１頁〜第１４頁、図１〜図５）
【発明の概要】
【発明が解決しようとする課題】
【００１２】
以下の分析は、本発明者によってなされたものである。
【００１３】
特許文献１に記載されたデバッガでは、プログラムを実行する前に、専用の読み取りコマンド（ｒｅａｄコマンド）により、プログラムシステム１００から読み取りコマンドで指定された（または全部の）モジュール毎の情報を読み取ってデバッグ情報ファイル３０２を作成し、プログラム実行前に、専用の設定コマンド（ｓｅｔコマンド）により、デバッグ情報ファイル３０２から中断点（以下「ブレークポイント」という。）を含めたデバッグ情報をデバッガ２１に設定する。したがって、デバッグのための事前準備が煩雑となる。
【００１４】
そこで、デバッグのための事前準備を簡略化してデバッグ作業の効率を向上させることが課題となる。
【課題を解決するための手段】
【００１５】
本発明の第１の視点に係るデバッグ装置は、
半導体集積回路のプログラムを検証するエミュレータおよびデバッガを備え、
前記エミュレータは、デバッグコマンドを埋め込んだ前記プログラムを実行するプログラム実行部と、
前記デバッガと前記エミュレータの相互から制御される記憶部と、
前記記憶部を参照して前記プログラムの中断を制御するデバッグコマンドブレーク制御部と、を備え、
前記デバッガは、前記エミュレータから通知された中断指示を検出するデバッグコマンドブレーク検出部と、
前記記憶部に格納された情報に基づいてデバッグコマンドを前記エミュレータから読み出すデバッグコマンド文字列読み出し部と、
前記デバッグコマンドブレーク制御部からの中断指示により前記エミュレータが中断中に前記デバッガが前記デバッグコマンドを実行するための制御を行うデバッグコマンド実行部と、
中断されたプログラムの再開を前記エミュレータに通知する復帰制御部と、を備える。
【００１６】
本発明の第２の視点に係るデバッグ装置は、
デバッグコマンドを埋め込んだプログラムを実行し、該デバッグコマンドにより該プログラムの実行を中断する場合には、該デバッグコマンドを示す第１の情報および該プログラムの中断を示す第２の情報を出力するエミュレータと、
前記第２の情報を受けると、前記第１の情報が示すデバッグコマンドを前記エミュレータから読み出して、読み出したデバッグコマンドを実行し、実行結果を戻り値として前記エミュレータに出力するとともに、前記プログラムの実行を再開するように前記エミュレータに指示するデバッガと、を備える。
【００１７】
本発明の第３の視点に係るデバッグ方法は、
エミュレータが、デバッグコマンドを埋め込んだプログラムを実行する工程と、
前記デバッグコマンドにより該プログラムの実行を中断する場合には、前記デバッグコマンドを示す第１の情報および前記プログラムの中断を示す第２の情報を出力する工程と、を含み、
デバッガは、前記第２の情報を受けると、前記第１の情報が示すデバッグコマンドを前記エミュレータから読み出す工程と、
読み出したデバッグコマンドを実行し、実行結果を戻り値として前記エミュレータに出力する工程と、
前記プログラムの実行を再開するように前記エミュレータに指示する工程と、を含む。
【発明の効果】
【００１８】
本発明に係るデバッグ装置およびデバッグ方法によると、デバッグのための事前準備が簡略化され、デバッグ作業の効率を向上することができる。
【図面の簡単な説明】
【００１９】
【図１】実施形態に係るデバッグ装置の構成を一例として示すブロック図である。
【図２】実施形態におけるプログラムの記述を一例として示す図である。
【図３】実施形態に係るデバッグ装置の動作を一例として示すフローチャートである。
【図４】実施形態に係るデバッグ装置の動作を説明するための図である。
【図５】特許文献１に記載されたデバッガの構成を示す図である。
【図６】特許文献１におけるデバッグ対象プログラムを示す図である。
【図７】特許文献１におけるデバッグ情報ファイルの構成を示す図である。
【発明を実施するための形態】
【００２０】
はじめに、本発明の概要について説明する。なお、この概要に付記する図面参照符号は、専ら理解を助けるための例示であり、本発明を図示の態様に限定することを意図するものではない。
【００２１】
図１を参照すると、デバッグ装置（１）は、デバッグコマンドを埋め込んだプログラムを実行し、デバッグコマンドによりプログラムの実行を中断する場合には、デバッグコマンドを示す第１の情報（例えば、文字列ポインタ７）およびプログラムの中断を示す第２の情報（例えば、デバッグコマンドブレーク因子）を出力するエミュレータ（２）と、第２の情報（６）を受けると、第１の情報（７）が示すデバッグコマンドをエミュレータ（２）から読み出して、読み出したデバッグコマンドを実行し、実行結果を戻り値（８）としてエミュレータ（２）に出力するとともに、プログラムの実行を再開するようにエミュレータ（２）に指示するデバッガ（３０）と、を備える。
【００２２】
また、エミュレータ（２）は、第１の情報（７）、第２の情報（６）、および、戻り値（８）の少なくともいずれかを保持する記憶部（例えば、レジスタ９）を備えていてもよい。さらに、エミュレータ（２）は、第１の情報（７）として、デバッグコマンドの文字列へのポインタを出力するようにしてもよい。
【００２３】
図１を参照すると、デバッグ装置（１）は、半導体集積回路のプログラムを検証するエミュレータ（２）およびデバッガ（３０）を備え、エミュレータ（２）は、デバッグコマンドを埋め込んだプログラムを実行するプログラム実行部（例えばＣＰＵ３）と、デバッガ（３０）とエミュレータ（２）の相互から制御される記憶部（例えばレジスタ９）と、記憶部（９）を参照してプログラムの中断を制御するデバッグコマンドブレーク制御部（５）と、を備え、デバッガ（３０）は、エミュレータ（２）から通知された中断指示を検出するデバッグコマンドブレーク検出部（３１）と、記憶部（９）に格納された情報に基づいてデバッグコマンドをエミュレータ（２）から読み出すデバッグコマンド文字列読み出し部（３２）と、デバッグコマンドブレーク制御部（５）からの中断指示によりエミュレータ（２）が中断中にデバッガ（３０）がデバッグコマンドを実行するための制御を行うデバッグコマンド実行部（３４）と、中断されたプログラムの再開をエミュレータ（２）に通知する復帰制御部（３５）と、を備えていてもよい。
【００２４】
また、エミュレータ（２）で実行するプログラム内にデバッグコマンドを埋め込み、プログラム上から記憶部（９）およびデバッグコマンドブレーク制御部（５）を経由してデバッガ（３０）にプログラムの中断を通知し、デバッガ（３０）は該通知をデバッグコマンドブレーク検出部（３１）で検出し、中断中である場合には、デバッグコマンド文字列読み出し部（３２）が記憶部（９）に格納された情報を基にデバッグコマンドをエミュレータ（２）から読み出し、読み出したデバッグ用コマンドをデバッグコマンド実行部（３４）で実行し、復帰制御部（３５）によりエミュレータ（２）にプログラムの実行を再開させるようにしてもよい。
【００２５】
さらに、記憶部（９）は、デバッグコマンドブレーク制御部（５）にプログラムが中断したかを通知するデバッグコマンドブレーク因子部（デバッグコマンドブレーク因子６）と、中断中にデバッガ（３０）が実行するデバッグコマンド情報を格納する文字列情報部（文字列ポインタ７）と、プログラム復帰時にエミュレータ（２）にデバッグコマンドの実行結果を伝えるための戻り値部（戻り値８）と、を備えることが好ましい。また、戻り値部（８）は、実行結果を記憶するとともに、エミュレータ（２）が復帰制御部（３５）の指示に応じて再開するプログラムに、実行結果を渡すようにしてもよい。
【００２６】
図３を参照すると、本発明のデバッグ方法は、エミュレータが、デバッグコマンドを埋め込んだプログラムを実行する工程（ステップＳ５、Ｓ６）と、デバッグコマンドによりプログラムの実行を中断する場合には、デバッグコマンドを示す第１の情報およびプログラムの中断を示す第２の情報を出力する工程（ステップＳ７、Ｓ８）と、を含み、デバッガが、第２の情報を受けると（ステップＳ１０のＹｅｓ）、第１の情報が示すデバッグコマンドをエミュレータから読み出す工程（ステップＳ１１）と、読み出したデバッグコマンドを実行し、実行結果を戻り値として前記エミュレータに出力する工程（ステップＳ１２、Ｓ１３）と、プログラムの実行を再開するようにエミュレータに指示する工程（ステップＳ１４）と、を含む。
【００２７】
また、上記のデバッグ方法において、エミュレータが、第１の情報として、デバッグコマンドの文字列へのポインタを出力してもよい。
【００２８】
また、デバッグ方法は、エミュレータとデバッガを用いて半導体集積回路のプログラムを検証するデバッグ方法であって、エミュレータが、デバッグマンドを埋め込んだプログラムを実行する工程（ステップＳ５）と、プログラム上から記憶部を経由して、デバッガにプログラムの中断を通知する工程（ステップＳ８、Ｓ９）と、デバッガが、前記通知を検出する工程（ステップＳ１０）と、中断中である場合には（ステップＳ１０のＹｅｓ）、エミュレータの記憶部に格納した情報に基づいてデバッグコマンドをエミュレータから読み出す工程（ステップＳ１１）と、読み出したデバッグコマンドを実行する工程（ステップＳ１２）と、中断されたプログラムの再開をエミュレータに通知する工程（ステップＳ１４）と、を含んでいてもよい。さらに、デバッグ方法は、デバッガが、デバッグコマンドを実行して得られた実行結果をエミュレータに記録する工程（ステップＳ１３）を含んでいてもよい。
【００２９】
本発明に係るデバッグ装置およびデバッグ方法では、プログラム中からデバッガへデバッグコマンドの情報を通知することにより、プログラムからデバッグ情報（デバッグコマンドが記述されているモジュール名、プロシジャ名、行番号など）を抽出するｒｅａｄコマンド処理と、デバッグ情報を元にブレークポイントとデバッグコマンドを設定するｓｅｔコマンド処理という事前準備が不要となり、デバッグ作業の効率が向上する。
【００３０】
（実施形態）
実施形態に係るデバッグ装置について、図面を参照して説明する。図１は、本実施形態のデバッグ装置の構成を一例として示すブロック図である。図１を参照すると、デバッグ装置１は、プログラムをエミュレーションするエミュレータ２と、プログラムをデバッグするときの情報表示や設定を制御するデバッガ３０とを備えている。
【００３１】
エミュレータ２は、プログラムを実行するＣＰＵ３と、ユーザ回路である周辺回路４と、ＰＣブレークなどが発生したときと同様に、エミュレータ２内のＣＰＵ３や周辺回路４を停止させるデバッグコマンドブレークを制御するデバッグコマンドブレーク制御部５と、各種データを設定・保持するレジスタ９と、プログラムを格納するＲＡＭ、Ｆｌａｓｈ  ＲＯＭ等のメモリ（非図示）とを備えている。
【００３２】
レジスタ９は、デバッグコマンドブレークの要因を格納するデバッグコマンドブレーク因子６と、デバッグコマンドの文字列のポインタを格納する文字列ポインタ７と、デバッグコマンド実行時の結果を格納する戻り値８とを保持する。レジスタ９は、ＣＰＵ３からデバッグコマンドブレーク因子６が書き込まれる（本実施形態では、例えば「１」が書き込まれるものとする。）。すると、デバッグコマンドブレーク制御部５は、デバッグコマンドブレーク発生の通知をデバッグコマンドブレーク検出部３１に出力する。また、レジスタ９は、ＣＰＵ３からデバッグコマンドの文字列のポインタを文字列ポインタ７として入力し、デバッグコマンド文字列読み出し部３２へ出力する。さらに、レジスタは、復帰制御部３５からデバッグコマンドの実行結果を戻り値８として入力し、ＣＰＵ３へ出力する。
【００３３】
デバッガ３０は、デバッグコマンドブレークを検出するデバッグコマンドブレーク検出部３１と、デバッグコマンドの文字列をメモリ（レジスタ９）から読み出すデバッグコマンド文字列読み出し部３２と、デバッグコマンドを実行するデバッグコマンド実行部３４と、デバッグコマンドブレークを解除する復帰制御部３５とを備えている。デバッグコマンド実行部３４は、図５に示した従来機能２４に相当する。
【００３４】
プログラム５０は、コンパイル後にデバッガ３０を経由してエミュレータ２のＣＰＵ３にロードされて、ＣＰＵ３によって実行される。
【００３５】
ＣＰＵ３は、レジスタ９の戻り値８を入力とし、レジスタ９のデバッグコマンドブレーク因子６にブレーク要因を出力し、レジスタ９の文字列ポインタ７を出力する。
【００３６】
周辺回路４は、デバッグコマンド実行部３４から動作開始の通知を入力し、動作結果をデバッグコマンド実行部３４へ出力する。
【００３７】
デバッグコマンドブレーク制御部５は、レジスタ９のデバッグコマンドブレーク因子６からのデバッグコマンドブレークの発生と、復帰制御部３５からのデバッグコマンドブレークの解除とを入力とし、デバッグコマンドブレーク発生の通知をデバッグコマンドブレーク検出部３１へ出力する。
【００３８】
デバッグコマンドブレーク検出部３１は、デバッグコマンドブレーク制御部５からのデバッグコマンドブレーク発生の通知を入力とし、デバッグコマンドブレーク発生の通知をデバッグコマンド文字列読み出し部３２へ出力する。
【００３９】
デバッグコマンド文字列読み出し部３２は、デバッグコマンドブレーク検出部３１からのデバッグコマンドブレークの発生の通知と、レジスタ９からの文字列ポインタ７とを入力とし、デバッグコマンドの文字列をデバッグコマンド実行部３４へ出力する。
【００４０】
デバッグコマンド実行部３４は、周辺回路４からの動作結果と、デバッグコマンド文字列読み出し部３２からのデバッグコマンドの文字列とを入力とし、動作開始の通知を周辺回路４へ出力し、デバッグコマンドの実行結果を復帰制御部３５へ出力する。
【００４１】
復帰制御部３５は、デバッグコマンド実行部３４からのデバッグコマンドの実行結果を入力とし、デバッグコマンドブレークの解除通知をデバッグコマンドブレーク制御部５へ出力し、デバッグコマンドの実行結果をレジスタ９の戻り値８へ出力する。
【００４２】
図２は、本実施形態におけるプログラムの記述例であり、図１のプログラム５０の詳細な構成を示す。図２を参照すると、プログラム５０は、メインルーチン５１と、メインルーチン５１から呼び出されるデバッグコマンド関数５２とを含む。
【００４３】
メインルーチン５１として、デバッグコマンド関数５２を呼び出す例が記述されている。実際にデバッグコマンド関数５２を呼び出す行は、６行目の「ｄａｔａ＝ｄｅｂｕｇ＿ｃｏｍｍａｎｄ（“ｇｅｔ＿ｓｉｇ  ＩＮＴ０”）；」である。引き数の”ｇｅｔ＿ｓｉｇ  ＩＮＴ０”は、デバッガ３０がデバッグ機能として用意しているデバッグコマンドの一例であり、周辺回路４の中にある端子ＩＮＴ０の値をリードして値を返すデバッグコマンド（非図示）である。
【００４４】
デバッグコマンド関数５２は、引き数として送られたデバッグコマンドをデバッガ３０に通知する関数である。
【００４５】
図３は、本実施形態のデバッグ装置１の動作を一例として示すフローチャートである。図３を参照して、図１および図２の動作を説明する。
【００４６】
プログラム作成者は、図２のメインルーチン５１に示すように、ＩＮＴ０の値をリードしたい行にデバッグコマンド関数を記述する（ステップＳ１）。
【００４７】
プログラム作成者は、例えば、ＣソースまたはＣライブラリで作成されるデバッグコマンド関数５２とメインルーチン５１を一緒にコンパイルして、ロードモジュールを作成する（ステップＳ２）。
【００４８】
ロードモジュールを作成すると、デバッガ３０を起動して、コンパイラで作成したロードモジュールを、デバッガ３０を経由してエミュレータ２のＣＰＵ３にロードする（ステップＳ３）。
【００４９】
デバッガ３０は、ロードしたプログラム５０を実行する（ステップＳ４）。
【００５０】
エミュレータ２のＣＰＵ３は、デバッガ３０のプログラム実行にあわせてエミュレーションを開始する（ステップＳ５）。
【００５１】
エミュレータ２において、ステップＳ５でプログラム実行が開始されて、ステップＳ１で記述したデバッグコマンド関数を呼び出すための記述行まで進むと、メインルーチン５１からデバッグコマンド関数５２が呼び出され、デバッグコマンド関数５２が開始される（ステップＳ６）。
【００５２】
デバッグコマンド関数５２は、メインルーチン５１からデバッグコマンド関数５２への引き数として送られたデバッグコマンドの文字列へのポインタを文字列ポインタ７に書き込む（ステップＳ７）。本実施形態では、デバッグコマンド関数５２の「ｃｈａｒ  ＊ｂｕｆ」が文字列ポインタ７に書き込まれるポインタとなる。
【００５３】
ＣＰＵ３は、デバッグコマンド関数５２の処理でデバッグコマンドブレーク因子６に１を書き込む（ステップＳ８）。すると、レジスタ９は、デバッグコマンドブレーク制御部５にＰＣブレークなどが発生したときと同様に、エミュレータ２のＣＰＵ３や周辺回路４を停止させるデバッグコマンドブレークの発生を、デバッグコマンドブレーク制御部５へ通知する。
【００５４】
デバッグコマンドブレーク制御部５は、デバッグコマンドブレーク因子６からの通知により、デバッグコマンドブレークを発生させ（ステップＳ９）、デバッガ３０のデバッグコマンドブレーク検出部３１に通知する。
【００５５】
デバッグコマンドブレーク検出部３１は、エミュレータ２から通知されたブレークがデバッグコマンドブレークか否かを判定する（ステップＳ１０）。デバッグコマンドブレークでない場合には（ステップＳ１０のＮｏ）、従来技術と同様に、従来機能２４の処理を行う（ステップＳ１７）。
【００５６】
一方、デバッグコマンドブレークの場合には（ステップＳ１０のＹｅｓ）、デバッグコマンドブレークが発生したことをデバッグコマンド文字列読み出し部３２へ通知する。
【００５７】
デバッグコマンド文字列読み出し部３２は、デバッグコマンドブレーク検出部３１からデバッグコマンドブレーク発生の通知を受け取ると、エミュレータ２のレジスタ９の文字列ポインタ７からデバッグコマンドの文字列のポインタをリードし、ポインタが示すメモリからデバッグコマンドの文字列を読み出し、読み出したデバッグコマンドの文字列をデバッグコマンド実行部３４に出力する（ステップＳ１１）。
【００５８】
デバッグコマンド実行部３４は、デバッグコマンド文字列読み出し部３２が読み出したデバッグコマンドを実行する（ステップＳ１２）。図２のメインルーチン５１に示すデバッグコマンドが”ｇｅｔ＿ｓｉｇ  ＩＮＴ０”であるため、デバッグコマンド実行部３４は、エミュレータ２の周辺回路４から端子ＩＮＴ０の値をリードし、復帰制御部３５にリードした値を出力する。
【００５９】
復帰制御部３５は、デバッグコマンド実行部３４でリードした値をエミュレータ２のレジスタ９の戻り値８に書き込む（ステップＳ１３）。
【００６０】
復帰制御部３５は、デバッグコマンドブレークの解除をエミュレータ２のデバッグコマンドブレーク制御部５に通知する（ステップＳ１４）。
【００６１】
デバッグコマンドブレーク制御部５は、デバッガ３０の復帰制御部３５からのデバッグコマンドブレークの解除を受けて、ステップＳ９で発生させたデバッグコマンドブレークを解除する（ステップＳ１５）。
【００６２】
ＣＰＵ３は、レジスタ９内の戻り値８をリードし、デバッグコマンド関数５２の戻り値としてメインルーチン５１へ返す（ステップＳ１６）。さらに、ＣＰＵ３は、ステップＳ５に戻り、プログラム５０を続けて実行する。
【００６３】
図４は、本実施形態のデバッグ装置１の動作メカニズムを説明するための図である。図４を参照して、図１〜３の動作を説明する。
【００６４】
図４を参照すると、プログラム１５０は、メインルーチン１５１と、メインルーチン１５１から呼び出されるデバッグコマンド関数１５２とを含む。メインルーチン１５１において、デバッグコマンド関数１５２を呼び出す例が記述されている。
【００６５】
プログラム１５０の実行が開始されると（図３のステップＳ４、ステップＳ５）、０ｘ１０４４番地にて、デバッグコマンド関数１５２が呼び出される（ステップＳ６）。ここで、０ｘで始まる数値は、１６進数を示す。
【００６６】
デバッグコマンド関数１５２に渡される引き数は、デバッガ３０にて実行されるデバッグコマンドを示す文字列が格納されているメモリのアドレス（「文字列のポインタ」という。）を示す。文字列のポインタは、プログラム１５０のデバッグコマンド関数１５２の０ｘ２０１８番地に記載されたｂｕｆ１として、レジスタ９の文字列ポインタ７（デバッグコマンド関数１５２内のｐｔという変数）に書き込まれる（ステップＳ７）。本実施形態では、レジスタ９を用いて制御しているが、メモリ等を用いるようにしてもよい。
【００６７】
デバッグコマンド関数１５２の０ｘ２０３８番地にて、デバッグコマンドブレーク因子（デバッグコマンド関数１５２内のｂｒという変数）に１を書き込む（ステップＳ８）。０ｘ２０２Ａから始まるｗｈｉｌｅ文はｂｒへの書き込みが終了するまで次の行へ進まないための処理であるため、プログラム実行中のＣＰＵ３は実行を中断（ブレーク）する（ステップＳ９）。
【００６８】
デバッガ３０は、文字列ポインタ７に格納されたアドレスから、デバッグコマンド文字列を読み出して（ステップＳ１１）、デバッグコマンドを実行する（ステップＳ１２）。リード関係のコマンドの場合には、実行結果をレジスタ９の戻り値８（デバッグコマンド関数１５２内のｐｄａｔａという変数）に値を返す（ステップＳ１３）。
【００６９】
エミュレータ２は、ブレークした次の命令から再度実行を開始する（ステップＳ５）。
【００７０】
エミュレータ２において、プログラム実行が再開されると、０ｘ１０ＡＣ番地が次のデバッグコマンド関数１５２を呼び出しているアドレスであり、上記のステップＳ７〜ステップＳ１２と同様の動作によってデバッグコマンドが実行される。
【００７１】
０ｘ１０ＡＣ番地のデバッグコマンド関数の引き数に記載されているデバッグコマンドである（“ｐｕｔ＿ｓｉｇ  ＩＮＴ１  ％ｄ”，ｄａｔａ)は、０ｘ１０４４番地で実行された“ｇｅｔ＿ｓｉｇ  ＩＮＴ０”の戻り値が代入されているｄａｔａの値をＩＮＴ１に書き込むというライト系のコマンドである。ライト系のデバッグコマンドは実行結果として値を返さない。したがって、レジスタ９内の戻り値８へ、前回行ったデバッグコマンドの実行結果と同一の値または初期値を書きこむ（ステップＳ１３）。
【００７２】
本実施形態に係るデバッグ装置によると、以下の効果がもたらされる。
【００７３】
本実施形態では、プログラム５０の中からデバッグコマンドの情報をデバッガ３０へ通知する。したがって、プログラム５０からデバッグ情報（デバッグコマンドが記述されているモジュール名、プロシジャ名、行番号など）を抽出するｒｅａｄコマンド処理と、デバッグ情報を元にブレークポイントとデバッグコマンドを設定するｓｅｔコマンド処理とを、事前準備として行う必要がなくなる。
【００７４】
また、本実施形態では、プログラム５０で実行したデバッグコマンド関数５２の戻り値としてデバッグコマンドの実行結果を受け取る。これにより、検証作業を自動化でき、デバッグ作業を効率良く行なうことができる。
【００７５】
さらに、本実施形態では、プログラム５０内のデバッグコマンド関数５２からのデバッグコマンドブレーク因子６への書き込みによりデバッグコマンドブレークを発生させる。このとき、エミュレータ２内で消費するブレークポイントは１個であり、ブレークリソースを最小限に抑えることができる。
【００７６】
なお、上記の特許文献等の先行技術文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素の多様な組み合わせないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【００７７】
１    デバッグ装置
２    エミュレータ
３    ＣＰＵ
４    周辺回路
５    デバッグコマンドブレーク制御部
６    デバッグコマンドブレーク因子
７    文字列ポインタ
８    戻り値
９    レジスタ
２１    デバッガ
２２    デバッグ情報読み取り、格納機能
２３    実行コマンド文指定、中断点設定機能
２４    従来機能
３０    デバッガ
３１    デバッグコマンドブレーク検出部
３２    デバッグコマンド文字列読み出し部
３４    デバッグコマンド実行部
３５    復帰制御部
５０、１５０    プログラム
５１、１５１    メインルーチン
５２、１５２    デバッグコマンド関数
１００    プログラムシステム
１０１    モジュール
１０２    プロシジャ
１０３    プロシジャ例
１１１    プログラム本体
１１２    デバッグコマンド文を含む行
１２１    コメント行であることを示す記号
１２２    デバッグコマンド文であることを示す記号
１２３    デバッグコマンド文
３０１    ユーザ
３０２    デバッグ情報ファイル
４０１    ロードモジュール
５０１    モジュール名
５０２    ファイル全体の長さ表示
５０３    プロシジャ名
５０４    プロシジャに対する長さ表示
５０５    行番号
５０６    デバッグコマンド文
【図１】
2012242904.tif 000003
【図２】
2012242904.tif 000004
【図３】
2012242904.tif 000005
【図４】
2012242904.tif 000006
【図５】
2012242904.tif 000007
【図６】
2012242904.tif 000008
【図７】
2012242904.tif 000009