(57)【要約】【課題】デバッグ割込を発生させたトリガ命令を特定する際に、割込の戻りアドレスから命令コードの実行順と逆方向に解析を行なうと、命令コードの語長が可変である場合に、トリガ命令を正しく特定できない場合がある。【解決手段】本発明は、命令語長が可変の命令コードで記述されたプログラムのデバッグ方法であって、前記プログラム内の命令コードであって、トリガ命令に設定された命令コードが実行されたときに割り込みを発生し、前記割り込みを発生させた命令コードの次の命令コードのアドレスを戻りアドレスとし、ラベル指定がある命令コードが格納されたアドレスのうち、前記戻りアドレスよりも実行順序が早く、該戻りアドレスに直近のラベル指定がある命令コードが格納されたアドレスから、プログラムが実行される方向に命令コードの解析を行い、前記割り込みを発生させた命令コードを特定することを特徴とする【選択図】図５
2008217506.tif 000002
【特許請求の範囲】
【請求項１】
命令語長が可変の命令コードで記述されたプログラムのデバッグ方法であって、
前記プログラム内の命令コードであって、トリガ命令に設定された命令コードが実行されたときに割り込みを発生し、
前記割り込みを発生させた命令コードの次の命令コードのアドレスを戻りアドレスとし、
ラベル指定がある命令コードが格納されたアドレスのうち、前記戻りアドレスよりも実行順序が早く、該戻りアドレスに直近のラベル指定がある命令コードが格納されたアドレスから、プログラムが実行される方向に命令コードの解析を行い、前記割り込みを発生させた命令コードを特定すること、
を特徴とするプログラムデバッグ方法。
【請求項２】
前記命令コードの解析において、
前記ラベル指定があるアドレスから、順次、１ワード分のコードを読み込み、
当該読み込んだ１ワード分のコードが１ワード命令なのか、複数ワード命令の先頭のコードなのかを判定すること、
を特徴とする請求項１のプログラムデバッグ方法。
【請求項３】
前記命令コードの解析において、
前記読み込んだ１ワード分のコードが、複数ワード命令の先頭コードである、と判定された場合に、当該複数ワード命令の命令語長が何ワード長なのかをさらに判定すること、
を特徴とする請求項２に記述のプログラムデバッグ方法。
【請求項４】
判定された前記命令語長に応じて、次にコードを読み込むアドレスを指定すること、
を特徴とする請求項２もしくは請求項３に記述のプログラムデバッグ方法。
【請求項５】
前記トリガ命令は、予め定められたメモリ領域にアクセスする命令であることを特徴とする請求項１に記述のプログラムデバッグ方法。
【請求項６】
前記トリガ命令として複数の命令コードを設定することを特徴とする請求項１に記述のプログラムデバック方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータを動作させるプログラムをデバッグする方法およびその方法に用いられる装置に関する。
【背景技術】
【０００２】
近年、コンピュータが担う機能が高度化し、そのコンピュータの動作を記述するプログラムのコード数も増加の一途を辿っている。そのため、効率的にプログラムをデバッグする技術が益々重要になってきている。
【０００３】
このようなデバック技術として、効率的なデバッグを支援するデバッグシステムの一つが、特許文献１に開示されている。
【０００４】
【特許文献１】特開２００２−２７８７９１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
デバックシステムにおいては、デバッグ対象のプログラムを実行し、そのプログラム中の特定の命令をCPUが実行したときに、デバッグを行うための割り込み（以下、デバッグ割り込み、と呼ぶ）を発生させる場合がある。デバッグ割り込みを発生させる特定の命令を、以降、「トリガ命令」と呼ぶ。「トリガ命令」は、プログラマが、命令セットの中から任意の命令を選択し設定することができる。
【０００６】
デバッグ割り込みが発生したときに、その割り込みを発生させたトリガ命令が何であったのかが、直ちに特定できることが望まれている。
【０００７】
特に、トリガ命令として、複数の異なる命令を指定していた場合、デバッグ割り込みを発生させたトリガ命令が何であったのかを直ちに特定することができなかった。
【課題を解決するための手段】
【０００８】
本発明は、命令語長が可変の命令コードで記述されたプログラムのデバッグ方法であって、前記プログラム内の命令コードであって、トリガ命令に設定された命令コードが実行されたときに割り込みを発生し、前記割り込みを発生させた命令コードの次の命令コードのアドレスを戻りアドレスとし、ラベル指定がある命令コードが格納されたアドレスのうち、前記戻りアドレスよりも実行順序が早く、該戻りアドレスに直近のラベル指定がある命令コードが格納されたアドレスから、プログラムが実行される方向に命令コードの解析を行い、前記割り込みを発生させた命令コードを特定すること、を特徴とするプログラムデバッグ方法である。
【０００９】
本発明により、命令語長が可変の命令コードで記載されたプログラムの実行中にデバッグ割り込みが発生した場合に、そのデバッグ割り込みを発生させた命令コードを正しく特定することができる。
【発明の効果】
【００１０】
本発明によると、命令語長が可変の命令コードで記述されたプログラムをデバッグする際に、デバッグ割り込みを発生させたトリガ命令を正しく特定することができるので、デバッグを効率よく行なうことができる。
【発明を実施するための最良の形態】
【００１１】
まず、デバッグ割り込みを発生させたトリガ命令を特定するための一つの方法を、図１および図２を用いて例示する。
【００１２】
アセンブラ言語で記述されたデバッグ対象のプログラム１、および、このプログラム１をアセンブルして生成された、機械語である命令コード２２で記述された命令コード列２を図１に、アセンブラ言語とマシン語の対応表３を図２に示す。尚、対応表３では１ワード命令と２ワード命令のみ挙げているが、本発明は、命令語長が可変の命令コードで記述されたプログラムのデバッグに有効であるので、１ワードおよび２ワード以上の命令語長の命令コードで記述されたプログラムのデバッグに用いることができる。
【００１３】
対応表３に示すように、ｍｏｖ命令、ｓｔ命令およびａｄｄ命令は２ワードの命令コードに変換され、ｐｕｓｈ命令、ｎｏｐ命令は１ワードの命令コードに変換される。すなわち、命令コードは可変の命令語長を有する。
【００１４】
ここで、トリガ命令として、“ｓｔ  ［ｒ０＋０］，ｒ１”が指定されているとする。命令コード列２をアドレス昇順（アドレスが小さい方から大きい方へ）に実行すると、アドレス１００４がＣＰＵで実行されたときにデバッグ割り込みが発生し、アドレス１００６が割り込みの戻りアドレスとなる。
【００１５】
ここで例示する方法では、戻りアドレス１００６からアドレス降順（アドレスが大きい方から小さい方へ）に命令コードを解析する。
【００１６】
すると、始めに、１００５アドレスのコード“００００”が解析される。コード“００００”は、対応表３によると、ｎｏｐ命令の命令コードである場合も有るし、“ｓｔ  ［ｒ０＋０］，ｒ１”命令の２ワード目である場合もある。従って、戻りアドレスである１００６の一つ前の命令、すなわち、トリガ命令が、“ｓｔ  ［ｒ０+０］，ｒ１”命令であるのか、ｎｏｐ命令であるのかを直ちに判断することができない。
【００１７】
次に、本発明の実施の形態について説明する。この実施の形態では、図１に示したアセンブリ言語で記述されたプログラム１をデバッグする。プログラム１には、ラベル（Ｌａｂｅｌ０，Ｌａｂｅｌ１，Ｌａｂｅｌ２）が指定された命令が含まれている。尚、本実施の形態は、アセンブリ言語で記述されたプログラムで説明するが、本発明は、その他のプログラム言語（例えば、Ｃ言語など）のデバッグにも適用できる。
【００１８】
図３に示す本実施の形態に係るデバッグシステム１００は、ＬＳＩ３０およびホストコンピュータ４０から構成される。
【００１９】
ＬＳＩ３０は、ＣＰＵ３１、プログラムメモリ３２、バス３３、ＬＳＩ３１内に設けられたオンチップのデバッグ回路３４、周辺回路３５、ＪＴＡＧバス３６、外部端子３６を有する。ＣＰＵ３１は、バス３３を介して、プログラムメモリ３２から命令コードを順次読み出し、実行する。デバッグ回路３４は、ＪＴＡＧバス３６、外部端子３７を介してホストコンピュータ４０と接続されており、ホストコンピュータ４０は、外部端子３７およびＪＴＡＧバス３３を介してデバッグ回路３４を制御することができる。
【００２０】
ホストコンピュータ４０は、ハードディスクドライブ等で構成されるデータベース５０を備え、データベースには実行ファイル４およびアセンブラ言語とマシン語の対応表３が記憶されている。また、ホストコンピュータ４０には、デバッグソフトウェアがインストールされており、プログラマはこのデバッグソフトウェアを操作してプログラムをデバッグする。
【００２１】
図4に示すように、実行ファイル４には、ヘッダ情報４１、プログラム１をアセンブリした結果である命令コード列４２、およびラベル情報４３が含まれている。
【００２２】
ヘッダ情報４１は、命令コード列４２およびラベル情報４３が、それぞれ、実行ファイル４中の何行目から何行目に記述されているのかを示す。例えば、本実施の形態の例における実行ファイル４では、「命令コード列は１０行目から２０００行目」、「ラベル情報は、２００１行目から２０２０行目」といった情報が、ホストコンピュータ４０が認識可能なフォーマットで記述されている。
【００２３】
命令コード列４２は、ＬＳＩ３０内のプログラムメモリ３２に格納され、ＣＰＵ３１により順次読み出されて実行される。命令コード列４２は、ホストコンピュータ４０からＬＳＩ３０にダウンロードしてもよいし、ホストコンピュータ４０以外からダウンロードしてもよい。尚、図１（ｂ）は、命令コード列４２がプログラムメモリ４２中に格納された様子を模式的に示している。図１（ｂ）中の一番左側の列２１が、プログラムメモリ３２のアドレスを示し、例えば、“ｆ００１”が１００４番地に格納されていることを示す。
【００２４】
ラベル情報４３は、ラベルが指定された命令の先頭コードがプログラムメモリ３２中のどのアドレスに格納されているのかを示す情報である。本実施の形態の例では、「Ｌａｂｅｌ１が指定された命令の先頭コードはプログラムメモリの１０００番地に格納されている。」や「Ｌａｂｅｌ２が指定された命令の先頭コードはプログラムメモリの１００７番地に格納されている。」といった情報が、ホストコンピュータ４０が認識可能なフォーマットで記述されている。
【００２５】
次に、本実施の形態において、デバッグ割り込みを発生させたトリガ命令を特定する手順について説明する。
【００２６】
ＣＰＵ３１は、プログラムの実行を開始し、プログラムメモリ３２から命令コードを順次読み出して実行する。このとき、デバッグ回路３４は、予め設定されているトリガ命令をＣＰＵ３１が実行するかを監視する。例えば、デバッグ回路３４は、トリガ命令の命令コードを記憶するレジスタＲＥＧ１を有しており、このレジスタＲＥＧ１１に記憶されたコードと、ＣＰＵ３１がプログラムメモリ３２から読み込んで実行したコードとを比較する。
【００２７】
ＣＰＵ３１がトリガ命令を実行したことが検出すると、デバッグ回路３４は、ＣＰＵ３１に対してデバッグ割り込み信号ＩＮＴＤを送信する。本実施の形態では、“ｓｔ  ［ｒ０＋０］，ｒ１”がトリガ命令として指定されているとすると、ＣＰＵ３１が“ｆ００１”および“００００”の２ワードを読み込んで実行したときに、デバッグ割り込みが発生する。
【００２８】
デバッグ割り込み信号ＩＮＴＤを受信したＣＰＵ３１は、プログラムの実行を一旦ホールドし、トリガ命令の次の命令コードが格納されているプログラムメモリ３２のアドレスを戻りアドレスとしてレジスタＲＥＧ２に記憶する。本実施の形態では、アドレス１００６が戻りアドレスとしてレジスタＲＥＧ２に記憶される。
【００２９】
デバッグ割り込みの発生は、ＪＴＡＧバス３６、外部端子３７を介してホストコンピュータ４０に通知され、デバッグ処理が開始される。このデバッグ処理を、図５を用いて説明する。
【００３０】
デバッグ処理が開始されると（Ｓ１００）、ホストコンピュータ４０は、ＬＳＩ３０で発生した割り込みが、トリガ命令によるデバッグ割り込みか否かを判定する（Ｓ１０２）。これは、ＬＳＩ３０からホストコンピュータ４０に通知される割り込みはデバッグ割り込みに限られていないからである。
【００３１】
ホストコンピュータ４０は、ＬＳＩ３０で発生した割り込みがデバッグ割り込みであると判断すると、ＪＴＡＧバス３６を介してレジスタＲＥＧ２から戻りアドレスを取得する（Ｓ１０４）。割り込みがデバッグ割り込みではない、その他の要因によるものであった場合には、その割り込み要因に応じた処理Ｓ１０３を行なって終了する。
【００３２】
次いで、ホストコンピュータ４０は、データベース５０に格納された実行ファイル４中のラベル情報４３を参照して、ラベル指定がある命令コードが格納されたアドレスのうち、戻りアドレスよりも実行順序が先であり、かつ、戻りアドレスに直近のアドレスを最初の解析アドレスに設定する（Ｓ１０６）。
【００３３】
本実施の形態では、戻りアドレスが１００６なので、最初の解析アドレスＡＡＤＲは、“ｍｏｖ  ｒ０、０ｘ１ａ”命令が格納されているアドレスである１０００に設定される。
【００３４】
次いで、ホストコンピュータ４０は、ＪＴＡＧバス３６を介して、ステップＳ１０６で検出された解析アドレス１０００から昇順に、プログラムメモリ３２からコードを１ワードずつ読み出す（Ｓ１０８）。本実施の形態の例では、まず、アドレス１０００のコード“００１ａ”が読み出される。
【００３５】
次いで、ホストコンピュータ４０は、アセンブラ言語とマシン語の対応表３を用いて、Ｓ１０８で読み出したコードが、何ワード命令の先頭コードなのかを判定する。図５では、ｎワード命令（ｎは整数）の先頭コードであると判定するとして説明する。尚、如何なる命令コードであっても、先頭コードを調べれば、その命令長を判定することができるように、（１）ラベル情報は必ず各命令コードの先頭コードを示し、（２）命令コードの先頭コードを調べると、その命令コードの命令語長が判別できるように、アセンブラ言語と機械語との対応付けをする。
【００３６】
対応表３によると、今回読み出されたコード“００１ａ”は２ワード命令の先頭コードであると判定することができる。すなわち、Ｓ１１０でｎ＝２となる。
【００３７】
次いで、ホストコンピュータ４０は、解析アドレスＡＡＤＲを、Ｓ１１０で判定されたワード数ｎを解析アドレスＡＡＤＲに加えた値が戻りアドレスに一致するかを判定する（Ｓ１１２）。
【００３８】
Ｓ１１２の判定においてＮｏの場合には、Ｓ１１３に進み、ＡＡＤＲをｎインクリメントして、Ｓ１０８に戻る。一方、Ｓ１１２の判定においてＹｅｓの場合には、Ｓ１１４に進む。
【００３９】
現在の解析アドレスＡＤＤＲは１０００であるので、ＡＡＤＲ+ｎ＝１０００  +２＝１００２となり、戻りアドレス１００６に一致しない。従って、Ｓ１１２でＮｏと判定され、Ｓ１１３において解析アドレスＡＡＤＲが１００２に設定されてＳ１０８に戻る。
【００４０】
２回目のＳ１０８において、プログラムメモリ３２から解析アドレス１００２のコード“００１ｂ”を読み出す。対応表３によると、コード“００１ｂ”は２ワード命令の先頭コードなので、Ｓ１１０においてｎ＝２となる。すると、ＡＡＤＲ+ｎ＝１００２+２＝１００４なので、Ｓ１１２で再びＮｏと判定されて再度Ｓ１０８に戻る。
【００４１】
３回目のＳ１０８において、プログラムメモリ３２から解析アドレス１００４のコード“ｆ００１”を読み出す。対応表３によると、コード“ｆ００１”は２ワード命令の先頭コードなので、Ｓ１１０においてｎ＝２となる。すると、ＡＡＤＲ+ｎ＝１００４+２＝１００６なので、今度はＳ１１２でＹｅｓと判定され、Ｓ１１４に進む。
【００４２】
Ｓ１１４で、ホストコンピュータ４０は、解析アドレスＡＡＤＲに、ワード長がｎであるトリガ命令の先頭コードが格納されていると判定する。
【００４３】
次いで、ホストコンピュータ４０は、解析アドレスＡＡＤＲから、ｎコードをトリガ命令の命令コードとしてプログラムメモリ３２から読み出す（Ｓ１１６）。トリガ命令の命令コードを読み込むには、解析アドレスを格納している変数ＡＡＤＲの値を用いずに、戻りアドレス前のｎコードを読み込むこととしてもよい。
【００４４】
次いで、ホストコンピュータ４０は、アセンブラ言語とマシン語の対応表３を用いてトリガ命令の命令コードを解析する（Ｓ１１８）。本実施の形態の例では、アドレス１００４から２ワードのコード“ｆ００１”および“００００”が読み出され、これらのコードが命令“ｓｔ  ［ｒ０＋０］，ｒ１”を表すことが特定できる。その後、デバッグ処理を終了する（Ｓ１２０）。
【００４５】
その後、さらにデバッグ作業を継続する場合には、ホストコンピュータ４０は、ＪＴＡＧバス３６経由で、ＣＰＵ３１に対して、戻りアドレスからプログラムの実行を再開するよう指示する。一方、デバッグ作業を終了する場合には、例えば、デバッグ用ソフトウェアを介して、ホストコンピュータ４０に接続されたモニタにデバッグ割り込みを発生させてトリガ命令が“ｓｔ  ［ｒ０＋０］，ｒ１”であったことを表示して、デバッグを終了する。
【００４６】
上記実施の形態では、トリガ命令のみの特定を行なったが、第2の実施の形態として、Ｓ１１０において、図６に示すような、解析アドレスＡＡＤＲに格納されたコードが何ワード命令の先頭コードなのかを示すリスト５を出力しておき、このリストに基づいて、戻りアドレスの前の複数の命令コードの特定を行うこととしても良い。リスト５には、一列目には解析アドレスが、二列目には一列目の各々の解析アドレスに何ワード命令の先頭コードが格納されているかを示す値が記述される。例えばリスト５の一行目は、アドレス１０００に格納されているコードが２ワード命令の先頭コードであることを示している。
【００４７】
この第2の実施の形態では、ホストコンピュータ４０は、リスト５から一行ずつ読み込み、一列目に示されるアドレスから二列目に示されたワード数分のコードをプログラムメモリ３２から読み込み、対応表３を用いてこの読み込んだコードに対応する命令を特定することにより、戻りアドレス以前の複数の命令を特定することができる。
【００４８】
いずれの実施の形態でも、トリガ命令として、製品に実装されるプログラムの命令コードを使っており、デバック専用の命令を用いていないため、デバックの精度を向上させつつ、トリガ命令と割り込みとを容易に特定することができる。
【図面の簡単な説明】
【００４９】
【図１】アセンブリ言語で記述されたプログラムおよびそのプログラムをアセンブラして生成した命令コード列。
【図２】アセンブリ言語と機械語との対応表。
【図３】本発明の実施の形態に係るデバッグシステム。
【図４】本発明の実施の形態で使用する実行ファイルの例。
【図５】本発明の実施の形態のデバッグ方法の手順を説明するためのフローチャート。
【図６】本発明の第2の実施の形態で使用する、解析アドレスのそれぞれが何ワード命令の先頭コードなのかを示すリスト。
【符号の説明】
【００５０】
１：プログラム，２：命令コード列，３：アセンブリ言語と機械語との対応表，４：実行ファイル，５：解析アドレスのそれぞれが何ワード命令の先頭コードなのかを示すリスト，３０：デバッグ対象のプログラムがインストールされたＬＳＩ，４０：ホストコンピュータ，１００：デバッグシステム
【図１】
2008217506.tif 000003
【図２】
2008217506.tif 000004
【図３】
2008217506.tif 000005
【図４】
2008217506.tif 000006
【図５】
2008217506.tif 000007
【図６】
2008217506.tif 000008