JP2008217506A - プログラムデバッグ方法 - Google Patents

プログラムデバッグ方法 Download PDF

Info

Publication number
JP2008217506A
JP2008217506A JP2007055039A JP2007055039A JP2008217506A JP 2008217506 A JP2008217506 A JP 2008217506A JP 2007055039 A JP2007055039 A JP 2007055039A JP 2007055039 A JP2007055039 A JP 2007055039A JP 2008217506 A JP2008217506 A JP 2008217506A
Authority
JP
Japan
Prior art keywords
instruction
code
address
program
word
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.)
Pending
Application number
JP2007055039A
Other languages
English (en)
Inventor
Kazuo Nishikata
和夫 西片
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.)
NEC Electronics Corp
Original Assignee
NEC Electronics Corp
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 NEC Electronics Corp filed Critical NEC Electronics Corp
Priority to JP2007055039A priority Critical patent/JP2008217506A/ja
Publication of JP2008217506A publication Critical patent/JP2008217506A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】デバッグ割込を発生させたトリガ命令を特定する際に、割込の戻りアドレスから命令コードの実行順と逆方向に解析を行なうと、命令コードの語長が可変である場合に、トリガ命令を正しく特定できない場合がある。
【解決手段】本発明は、命令語長が可変の命令コードで記述されたプログラムのデバッグ方法であって、前記プログラム内の命令コードであって、トリガ命令に設定された命令コードが実行されたときに割り込みを発生し、前記割り込みを発生させた命令コードの次の命令コードのアドレスを戻りアドレスとし、ラベル指定がある命令コードが格納されたアドレスのうち、前記戻りアドレスよりも実行順序が早く、該戻りアドレスに直近のラベル指定がある命令コードが格納されたアドレスから、プログラムが実行される方向に命令コードの解析を行い、前記割り込みを発生させた命令コードを特定することを特徴とする
【選択図】図5

Description

本発明は、コンピュータを動作させるプログラムをデバッグする方法およびその方法に用いられる装置に関する。
近年、コンピュータが担う機能が高度化し、そのコンピュータの動作を記述するプログラムのコード数も増加の一途を辿っている。そのため、効率的にプログラムをデバッグする技術が益々重要になってきている。
このようなデバック技術として、効率的なデバッグを支援するデバッグシステムの一つが、特許文献1に開示されている。
特開2002−278791号公報
デバックシステムにおいては、デバッグ対象のプログラムを実行し、そのプログラム中の特定の命令をCPUが実行したときに、デバッグを行うための割り込み(以下、デバッグ割り込み、と呼ぶ)を発生させる場合がある。デバッグ割り込みを発生させる特定の命令を、以降、「トリガ命令」と呼ぶ。「トリガ命令」は、プログラマが、命令セットの中から任意の命令を選択し設定することができる。
デバッグ割り込みが発生したときに、その割り込みを発生させたトリガ命令が何であったのかが、直ちに特定できることが望まれている。
特に、トリガ命令として、複数の異なる命令を指定していた場合、デバッグ割り込みを発生させたトリガ命令が何であったのかを直ちに特定することができなかった。
本発明は、命令語長が可変の命令コードで記述されたプログラムのデバッグ方法であって、前記プログラム内の命令コードであって、トリガ命令に設定された命令コードが実行されたときに割り込みを発生し、前記割り込みを発生させた命令コードの次の命令コードのアドレスを戻りアドレスとし、ラベル指定がある命令コードが格納されたアドレスのうち、前記戻りアドレスよりも実行順序が早く、該戻りアドレスに直近のラベル指定がある命令コードが格納されたアドレスから、プログラムが実行される方向に命令コードの解析を行い、前記割り込みを発生させた命令コードを特定すること、を特徴とするプログラムデバッグ方法である。
本発明により、命令語長が可変の命令コードで記載されたプログラムの実行中にデバッグ割り込みが発生した場合に、そのデバッグ割り込みを発生させた命令コードを正しく特定することができる。
本発明によると、命令語長が可変の命令コードで記述されたプログラムをデバッグする際に、デバッグ割り込みを発生させたトリガ命令を正しく特定することができるので、デバッグを効率よく行なうことができる。
まず、デバッグ割り込みを発生させたトリガ命令を特定するための一つの方法を、図1および図2を用いて例示する。
アセンブラ言語で記述されたデバッグ対象のプログラム1、および、このプログラム1をアセンブルして生成された、機械語である命令コード22で記述された命令コード列2を図1に、アセンブラ言語とマシン語の対応表3を図2に示す。尚、対応表3では1ワード命令と2ワード命令のみ挙げているが、本発明は、命令語長が可変の命令コードで記述されたプログラムのデバッグに有効であるので、1ワードおよび2ワード以上の命令語長の命令コードで記述されたプログラムのデバッグに用いることができる。
対応表3に示すように、mov命令、st命令およびadd命令は2ワードの命令コードに変換され、push命令、nop命令は1ワードの命令コードに変換される。すなわち、命令コードは可変の命令語長を有する。
ここで、トリガ命令として、“st [r0+0],r1”が指定されているとする。命令コード列2をアドレス昇順(アドレスが小さい方から大きい方へ)に実行すると、アドレス1004がCPUで実行されたときにデバッグ割り込みが発生し、アドレス1006が割り込みの戻りアドレスとなる。
ここで例示する方法では、戻りアドレス1006からアドレス降順(アドレスが大きい方から小さい方へ)に命令コードを解析する。
すると、始めに、1005アドレスのコード“0000”が解析される。コード“0000”は、対応表3によると、nop命令の命令コードである場合も有るし、“st [r0+0],r1”命令の2ワード目である場合もある。従って、戻りアドレスである1006の一つ前の命令、すなわち、トリガ命令が、“st [r0+0],r1”命令であるのか、nop命令であるのかを直ちに判断することができない。
次に、本発明の実施の形態について説明する。この実施の形態では、図1に示したアセンブリ言語で記述されたプログラム1をデバッグする。プログラム1には、ラベル(Label0,Label1,Label2)が指定された命令が含まれている。尚、本実施の形態は、アセンブリ言語で記述されたプログラムで説明するが、本発明は、その他のプログラム言語(例えば、C言語など)のデバッグにも適用できる。
図3に示す本実施の形態に係るデバッグシステム100は、LSI30およびホストコンピュータ40から構成される。
LSI30は、CPU31、プログラムメモリ32、バス33、LSI31内に設けられたオンチップのデバッグ回路34、周辺回路35、JTAGバス36、外部端子36を有する。CPU31は、バス33を介して、プログラムメモリ32から命令コードを順次読み出し、実行する。デバッグ回路34は、JTAGバス36、外部端子37を介してホストコンピュータ40と接続されており、ホストコンピュータ40は、外部端子37およびJTAGバス33を介してデバッグ回路34を制御することができる。
ホストコンピュータ40は、ハードディスクドライブ等で構成されるデータベース50を備え、データベースには実行ファイル4およびアセンブラ言語とマシン語の対応表3が記憶されている。また、ホストコンピュータ40には、デバッグソフトウェアがインストールされており、プログラマはこのデバッグソフトウェアを操作してプログラムをデバッグする。
図4に示すように、実行ファイル4には、ヘッダ情報41、プログラム1をアセンブリした結果である命令コード列42、およびラベル情報43が含まれている。
ヘッダ情報41は、命令コード列42およびラベル情報43が、それぞれ、実行ファイル4中の何行目から何行目に記述されているのかを示す。例えば、本実施の形態の例における実行ファイル4では、「命令コード列は10行目から2000行目」、「ラベル情報は、2001行目から2020行目」といった情報が、ホストコンピュータ40が認識可能なフォーマットで記述されている。
命令コード列42は、LSI30内のプログラムメモリ32に格納され、CPU31により順次読み出されて実行される。命令コード列42は、ホストコンピュータ40からLSI30にダウンロードしてもよいし、ホストコンピュータ40以外からダウンロードしてもよい。尚、図1(b)は、命令コード列42がプログラムメモリ42中に格納された様子を模式的に示している。図1(b)中の一番左側の列21が、プログラムメモリ32のアドレスを示し、例えば、“f001”が1004番地に格納されていることを示す。
ラベル情報43は、ラベルが指定された命令の先頭コードがプログラムメモリ32中のどのアドレスに格納されているのかを示す情報である。本実施の形態の例では、「Label1が指定された命令の先頭コードはプログラムメモリの1000番地に格納されている。」や「Label2が指定された命令の先頭コードはプログラムメモリの1007番地に格納されている。」といった情報が、ホストコンピュータ40が認識可能なフォーマットで記述されている。
次に、本実施の形態において、デバッグ割り込みを発生させたトリガ命令を特定する手順について説明する。
CPU31は、プログラムの実行を開始し、プログラムメモリ32から命令コードを順次読み出して実行する。このとき、デバッグ回路34は、予め設定されているトリガ命令をCPU31が実行するかを監視する。例えば、デバッグ回路34は、トリガ命令の命令コードを記憶するレジスタREG1を有しており、このレジスタREG11に記憶されたコードと、CPU31がプログラムメモリ32から読み込んで実行したコードとを比較する。
CPU31がトリガ命令を実行したことが検出すると、デバッグ回路34は、CPU31に対してデバッグ割り込み信号INTDを送信する。本実施の形態では、“st [r0+0],r1”がトリガ命令として指定されているとすると、CPU31が“f001”および“0000”の2ワードを読み込んで実行したときに、デバッグ割り込みが発生する。
デバッグ割り込み信号INTDを受信したCPU31は、プログラムの実行を一旦ホールドし、トリガ命令の次の命令コードが格納されているプログラムメモリ32のアドレスを戻りアドレスとしてレジスタREG2に記憶する。本実施の形態では、アドレス1006が戻りアドレスとしてレジスタREG2に記憶される。
デバッグ割り込みの発生は、JTAGバス36、外部端子37を介してホストコンピュータ40に通知され、デバッグ処理が開始される。このデバッグ処理を、図5を用いて説明する。
デバッグ処理が開始されると(S100)、ホストコンピュータ40は、LSI30で発生した割り込みが、トリガ命令によるデバッグ割り込みか否かを判定する(S102)。これは、LSI30からホストコンピュータ40に通知される割り込みはデバッグ割り込みに限られていないからである。
ホストコンピュータ40は、LSI30で発生した割り込みがデバッグ割り込みであると判断すると、JTAGバス36を介してレジスタREG2から戻りアドレスを取得する(S104)。割り込みがデバッグ割り込みではない、その他の要因によるものであった場合には、その割り込み要因に応じた処理S103を行なって終了する。
次いで、ホストコンピュータ40は、データベース50に格納された実行ファイル4中のラベル情報43を参照して、ラベル指定がある命令コードが格納されたアドレスのうち、戻りアドレスよりも実行順序が先であり、かつ、戻りアドレスに直近のアドレスを最初の解析アドレスに設定する(S106)。
本実施の形態では、戻りアドレスが1006なので、最初の解析アドレスAADRは、“mov r0、0x1a”命令が格納されているアドレスである1000に設定される。
次いで、ホストコンピュータ40は、JTAGバス36を介して、ステップS106で検出された解析アドレス1000から昇順に、プログラムメモリ32からコードを1ワードずつ読み出す(S108)。本実施の形態の例では、まず、アドレス1000のコード“001a”が読み出される。
次いで、ホストコンピュータ40は、アセンブラ言語とマシン語の対応表3を用いて、S108で読み出したコードが、何ワード命令の先頭コードなのかを判定する。図5では、nワード命令(nは整数)の先頭コードであると判定するとして説明する。尚、如何なる命令コードであっても、先頭コードを調べれば、その命令長を判定することができるように、(1)ラベル情報は必ず各命令コードの先頭コードを示し、(2)命令コードの先頭コードを調べると、その命令コードの命令語長が判別できるように、アセンブラ言語と機械語との対応付けをする。
対応表3によると、今回読み出されたコード“001a”は2ワード命令の先頭コードであると判定することができる。すなわち、S110でn=2となる。
次いで、ホストコンピュータ40は、解析アドレスAADRを、S110で判定されたワード数nを解析アドレスAADRに加えた値が戻りアドレスに一致するかを判定する(S112)。
S112の判定においてNoの場合には、S113に進み、AADRをnインクリメントして、S108に戻る。一方、S112の判定においてYesの場合には、S114に進む。
現在の解析アドレスADDRは1000であるので、AADR+n=1000 +2=1002となり、戻りアドレス1006に一致しない。従って、S112でNoと判定され、S113において解析アドレスAADRが1002に設定されてS108に戻る。
2回目のS108において、プログラムメモリ32から解析アドレス1002のコード“001b”を読み出す。対応表3によると、コード“001b”は2ワード命令の先頭コードなので、S110においてn=2となる。すると、AADR+n=1002+2=1004なので、S112で再びNoと判定されて再度S108に戻る。
3回目のS108において、プログラムメモリ32から解析アドレス1004のコード“f001”を読み出す。対応表3によると、コード“f001”は2ワード命令の先頭コードなので、S110においてn=2となる。すると、AADR+n=1004+2=1006なので、今度はS112でYesと判定され、S114に進む。
S114で、ホストコンピュータ40は、解析アドレスAADRに、ワード長がnであるトリガ命令の先頭コードが格納されていると判定する。
次いで、ホストコンピュータ40は、解析アドレスAADRから、nコードをトリガ命令の命令コードとしてプログラムメモリ32から読み出す(S116)。トリガ命令の命令コードを読み込むには、解析アドレスを格納している変数AADRの値を用いずに、戻りアドレス前のnコードを読み込むこととしてもよい。
次いで、ホストコンピュータ40は、アセンブラ言語とマシン語の対応表3を用いてトリガ命令の命令コードを解析する(S118)。本実施の形態の例では、アドレス1004から2ワードのコード“f001”および“0000”が読み出され、これらのコードが命令“st [r0+0],r1”を表すことが特定できる。その後、デバッグ処理を終了する(S120)。
その後、さらにデバッグ作業を継続する場合には、ホストコンピュータ40は、JTAGバス36経由で、CPU31に対して、戻りアドレスからプログラムの実行を再開するよう指示する。一方、デバッグ作業を終了する場合には、例えば、デバッグ用ソフトウェアを介して、ホストコンピュータ40に接続されたモニタにデバッグ割り込みを発生させてトリガ命令が“st [r0+0],r1”であったことを表示して、デバッグを終了する。
上記実施の形態では、トリガ命令のみの特定を行なったが、第2の実施の形態として、S110において、図6に示すような、解析アドレスAADRに格納されたコードが何ワード命令の先頭コードなのかを示すリスト5を出力しておき、このリストに基づいて、戻りアドレスの前の複数の命令コードの特定を行うこととしても良い。リスト5には、一列目には解析アドレスが、二列目には一列目の各々の解析アドレスに何ワード命令の先頭コードが格納されているかを示す値が記述される。例えばリスト5の一行目は、アドレス1000に格納されているコードが2ワード命令の先頭コードであることを示している。
この第2の実施の形態では、ホストコンピュータ40は、リスト5から一行ずつ読み込み、一列目に示されるアドレスから二列目に示されたワード数分のコードをプログラムメモリ32から読み込み、対応表3を用いてこの読み込んだコードに対応する命令を特定することにより、戻りアドレス以前の複数の命令を特定することができる。
いずれの実施の形態でも、トリガ命令として、製品に実装されるプログラムの命令コードを使っており、デバック専用の命令を用いていないため、デバックの精度を向上させつつ、トリガ命令と割り込みとを容易に特定することができる。
アセンブリ言語で記述されたプログラムおよびそのプログラムをアセンブラして生成した命令コード列。 アセンブリ言語と機械語との対応表。 本発明の実施の形態に係るデバッグシステム。 本発明の実施の形態で使用する実行ファイルの例。 本発明の実施の形態のデバッグ方法の手順を説明するためのフローチャート。 本発明の第2の実施の形態で使用する、解析アドレスのそれぞれが何ワード命令の先頭コードなのかを示すリスト。
符号の説明
1:プログラム,2:命令コード列,3:アセンブリ言語と機械語との対応表,4:実行ファイル,5:解析アドレスのそれぞれが何ワード命令の先頭コードなのかを示すリスト,30:デバッグ対象のプログラムがインストールされたLSI,40:ホストコンピュータ,100:デバッグシステム

Claims (6)

  1. 命令語長が可変の命令コードで記述されたプログラムのデバッグ方法であって、
    前記プログラム内の命令コードであって、トリガ命令に設定された命令コードが実行されたときに割り込みを発生し、
    前記割り込みを発生させた命令コードの次の命令コードのアドレスを戻りアドレスとし、
    ラベル指定がある命令コードが格納されたアドレスのうち、前記戻りアドレスよりも実行順序が早く、該戻りアドレスに直近のラベル指定がある命令コードが格納されたアドレスから、プログラムが実行される方向に命令コードの解析を行い、前記割り込みを発生させた命令コードを特定すること、
    を特徴とするプログラムデバッグ方法。
  2. 前記命令コードの解析において、
    前記ラベル指定があるアドレスから、順次、1ワード分のコードを読み込み、
    当該読み込んだ1ワード分のコードが1ワード命令なのか、複数ワード命令の先頭のコードなのかを判定すること、
    を特徴とする請求項1のプログラムデバッグ方法。
  3. 前記命令コードの解析において、
    前記読み込んだ1ワード分のコードが、複数ワード命令の先頭コードである、と判定された場合に、当該複数ワード命令の命令語長が何ワード長なのかをさらに判定すること、
    を特徴とする請求項2に記述のプログラムデバッグ方法。
  4. 判定された前記命令語長に応じて、次にコードを読み込むアドレスを指定すること、
    を特徴とする請求項2もしくは請求項3に記述のプログラムデバッグ方法。
  5. 前記トリガ命令は、予め定められたメモリ領域にアクセスする命令であることを特徴とする請求項1に記述のプログラムデバッグ方法。
  6. 前記トリガ命令として複数の命令コードを設定することを特徴とする請求項1に記述のプログラムデバック方法。
JP2007055039A 2007-03-06 2007-03-06 プログラムデバッグ方法 Pending JP2008217506A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007055039A JP2008217506A (ja) 2007-03-06 2007-03-06 プログラムデバッグ方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007055039A JP2008217506A (ja) 2007-03-06 2007-03-06 プログラムデバッグ方法

Publications (1)

Publication Number Publication Date
JP2008217506A true JP2008217506A (ja) 2008-09-18

Family

ID=39837462

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007055039A Pending JP2008217506A (ja) 2007-03-06 2007-03-06 プログラムデバッグ方法

Country Status (1)

Country Link
JP (1) JP2008217506A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103440153A (zh) * 2013-09-04 2013-12-11 深圳市瑞彩电子技术有限公司 一种系统恢复的方法及装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103440153A (zh) * 2013-09-04 2013-12-11 深圳市瑞彩电子技术有限公司 一种系统恢复的方法及装置

Similar Documents

Publication Publication Date Title
JP4148527B2 (ja) 機能テスト・スクリプト生成装置
US10019240B2 (en) Method and apparatus for detecting code change
US9111033B2 (en) Compiling source code for debugging with user preferred snapshot locations
JP5523872B2 (ja) プログラムの動的分析方法及びその装置
US20090144705A1 (en) Debugging device and debugging method
EP1855205A1 (en) Debug supporting device, and program for causing computer to execute debug processing method
US9009678B2 (en) Software debugging with execution match determinations
EP2390786A1 (en) Information processor provided with configuration change function, system configuration change method, and system configuration change program
JP2004164554A (ja) プログラム実行監視装置および方法
EP2778629A1 (en) Method and device for code change detection
JP2008217506A (ja) プログラムデバッグ方法
JP5906789B2 (ja) メッセージ出力制御装置及びメッセージ出力制御方法
US7073096B2 (en) File path resolving debugger
US20050050524A1 (en) Generating software test information
US20150007139A1 (en) Optimizing error parsing in an integrated development environment
JP2009223714A (ja) 演算回路及び演算回路の異常解析方法
US20080133838A1 (en) Data processing device
JP2008269529A (ja) デバッグ支援装置
JP2007004516A (ja) 組込みシステムのプログラムデバッグ方法
JP2008204023A (ja) プログラマブルコントローラシステム、プログラマブルコントローラのデバッグ方法
JP2013080386A (ja) 情報処理装置、アドレス管理方法
US7281166B1 (en) User-customizable input error handling
JP2005182573A (ja) インサーキットエミュレータ装置
JP2007080118A (ja) デバッガ装置及びそのデバッガ装置を使用したデバッグ方法
JP2001344128A (ja) 逆アセンブル表示アドレスの設定方法および記録媒体