(57)【要約】【課題】デバッガ毎のコマンド仕様に影響されず、ターゲットシステムの実行速度も低下することのないデバッグが可能とする。【解決手段】デバッグデータを表す書き込みソースプログラム内のシンボルと出力タイミングに対して、デバッグデータを記憶するターゲットシステム内の記憶装置のアドレスと、オリジナルソースプログラムをターゲットシステムが実行可能なように変換したオブジェクトプログラムを実行してデバッグデータが記憶される際のプログラムカウンターのカウント値を対応付けるシンボルテーブルを出力する。カウント値でアドレスの記憶装置からデバッグデータを読み出すイベントを、ターゲットシステムが、オブジェクトプログラムの実行の際に実行可能な状態に記憶する。【選択図】図１
2007179221.tif 000002
【特許請求の範囲】
【請求項１】
オリジナルソースプログラム内に、イベント毎に、デバッグデータを出力するためのデバッグプリント文を、前記オリジナルソースプログラムの実行において前記デバッグデータを出力可能な出力タイミングで実行できるように書き込んだ書き込みソースプログラムを生成するプリント文書き込み部と、
前記イベント毎の前記プリント文と前記出力タイミングを前記書き込みソースプログラムから抽出するイベント抽出部と、
前記イベント毎に、前記デバッグデータを表す前記書き込みソースプログラム内のシンボルと前記出力タイミングに対して、前記デバッグデータを記憶するターゲットシステム内の記憶装置のアドレスと、前記オリジナルソースプログラムを前記ターゲットシステムが実行可能なように変換したオブジェクトプログラムを実行して前記デバッグデータが記憶される際のプログラムカウンターのカウント値を対応付けるシンボルテーブルを出力するシンボル情報解析部と、
前記イベント毎に前記カウント値で前記アドレスの前記記憶装置からデバッグデータを読み出すイベントを、前記ターゲットシステムが、前記オブジェクトプログラムの実行の際に実行可能な状態に記憶するイベント情報記憶部を有することを特徴とするデバッガ。
【請求項２】
前記イベント毎の識別子と関係付けられたデバッグデータを前記ターゲットシステムから入力し、前記イベント毎に前記デバッグデータを出力するデバッグ出力部をさらに有することを特徴とする請求項１に記載のデバッガ。
【請求項３】
オペレータに前記オリジナルソースプログラムを表示して、前記デバッグプリント文の入力と前記出力タイミングの指定を促す入出力部をさらに有することを特徴とする請求項１または請求項２に記載のデバッガ。
【請求項４】
前記入出力部が、前記オリジナルソースプログラムを表示するソースウィンドウを開き、前記オペレータが表示された前記オリジナルソースプログラムを参照しながら前記デバッグプリント文を記述可能で、前記出力タイミングを指定可能なポップアップウィンドウを開くことを特徴とする請求項３に記載のデバッガ。
【請求項５】
前記出力タイミングの指定では、前記オペレータが前記デバッグプリント文を挿入したい前記オリジナルソースプログラムの実行ステップの行間を指定して、前記ポップアップウィンドウを開くことを特徴とする請求項４に記載のデバッガ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースプログラムのデバッグを行うデバッガに関するものである。
【背景技術】
【０００２】
従来、デバッグ対象のソースプログラムにデバッグ用プリント（printf）文を埋め込んでデバッグすることがよく行われている（例えば、特許文献１参照。）。デバッグが終了しても、デバッグ用プリント文を取り除くとソースプログラムの挙動が変化してしまうため、ソースプログラムにデバッグ用プリント文を含めたまま製品を出荷しなければならないことである。このような出荷を回避するため、ソースプログラムにプリント文を埋め込んだかのように、デバッガコマンドを組み合わせたバッチ処理を行うという方法も用いられている。しかし、このバッチ処理による方法も以下のような問題があった。まず、デバッガ毎にコマンド仕様が異なるため、バッチファイルを記述すること自体が煩雑である。また、バッチファイルを記述する場合、個々のデバッガコマンド毎にデバッガとターゲットシステムで通信が行われるため、ターゲットシステムの実行速度が低下する。
【特許文献１】特開平９−１９８２７７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
本発明は、デバッガ毎のコマンド仕様に影響されず、ターゲットシステムの実行速度も低下することのないデバッグが可能なデバッガを提供する。
【課題を解決するための手段】
【０００４】
本願発明の一態様によれば、オリジナルソースプログラム内に、イベント毎に、デバッグデータを出力するためのデバッグプリント文を、オリジナルソースプログラムの実行においてデバッグデータを出力可能な出力タイミングで実行できるように書き込んだ書き込みソースプログラムを生成するプリント文書き込み部と、イベント毎のプリント文と出力タイミングを書き込みソースプログラムから抽出するイベント抽出部と、イベント毎に、デバッグデータを表す書き込みソースプログラム内のシンボルと出力タイミングに対して、デバッグデータを記憶するターゲットシステム内の記憶装置のアドレスと、オリジナルソースプログラムをターゲットシステムが実行可能なように変換したオブジェクトプログラムを実行してデバッグデータが記憶される際のプログラムカウンターのカウント値を対応付けるシンボルテーブルを出力するシンボル情報解析部と、イベント毎にカウント値でアドレスの記憶装置からデバッグデータを読み出すイベントを、ターゲットシステムが、オブジェクトプログラムの実行の際に実行可能な状態に記憶するイベント情報記憶部を有するデバッガが提供される。
【発明の効果】
【０００５】
本発明の一態様に係るデバッガによれば、デバッガ毎のコマンド仕様に影響されず、ターゲットシステムの実行速度も低下することのないデバッグが可能なデバッガを提供できる。
【発明を実施するための最良の形態】
【０００６】
次に、図面を参照して、本発明の実施の形態について説明する。なお、以下では本発明の実施形態を図面に基づいて説明するが、図解のためだけであり、本発明はそれらの図面に限定されるものではない。以下の図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。また、図面は模式的なものであり、厚みと平面寸法との関係、各層の厚みの比率等は現実のものとは異なることに留意すべきである。
【実施例１】
【０００７】
図１に示すように、実施例１に係るデバッガ１は、ターゲットシステムであるシミュレータ８にオリジナルソースプログラムｄ２を実行させながら、オリジナルソースプログラムｄ２のデバッグをすることができる。
【０００８】
デバッガ１は、入出力部２、プリント文書き込み部３、イベント抽出部４、シンボル情報解析部６、イベント情報変換部７、書き込みソースプログラム記憶部１２、オブジェクトプログラム記憶部１３、オリジナルイベント情報記憶部１４、シンボルテーブル記憶部１５と変換イベント情報記憶部１６を有している。また、デバッガ１は、コンパイラ５とオリジナルソースプログラム記憶部１１を含んでいてもよい。
【０００９】
シミュレータ８は、通常のシミュレーション機能部の他にデバッグ機能部９を有している。デバッグ機能部９は、イベント検出部２１、データ取得部２２、デバッグ出力部２３と出力情報記憶部１７を有している。
【００１０】
プリント文書き込み部３は、オリジナルソースプログラムｄ２内に、イベント毎に、デバッグデータｄ８を出力するためのデバッグプリント文ｄ１を、オリジナルソースプログラムｄ２の実行においてデバッグデータｄ８を出力可能な出力タイミングで実行できるように書き込んだ書き込みソースプログラムｄ３を生成する。
【００１１】
イベント抽出部４は、イベント毎のプリント文ｄ１と出力タイミングを書き込みソースプログラムｄ３から抽出する。
【００１２】
シンボル情報解析部６は、イベント毎に、デバッグデータｄ８を表す書き込みソースプログラムｄ３内のシンボルと出力タイミングに対して、デバッグデータｄ８を記憶するターゲットシステム８内の記憶装置のアドレスと、オリジナルソースプログラムｄ２をターゲットシステム８が実行可能なように変換したオブジェクトプログラムｄ５を実行してデバッグデータｄ８が記憶される際のプログラムカウンターのカウント値を対応付けるシンボルテーブルｄ７を出力する。
【００１３】
変換イベント情報記憶部１６は、イベント毎にプログラムカウンターのカウント値で記憶されたアドレスの記憶装置からデバッグデータを読み出すイベントを、ターゲットシステム８が、オブジェクトプログラムｄ５の実行の際に読み出して実行可能な状態に記憶する。
【００１４】
入出力部２は、オペレータにオリジナルソースプログラムｄ２を表示して、デバッグプリント文ｄ１の入力と出力タイミングの指定を促す。
【００１５】
入出力部２が、オリジナルソースプログラムｄ２を表示するソースウィンドウを開き、オペレータが表示されたオリジナルソースプログラムｄ２を参照しながらデバッグプリント文を記述可能で、出力タイミングを指定可能なポップアップウィンドウを開く。
【００１６】
出力タイミングの指定は、オペレータがデバッグプリント文ｄ１を挿入したいオリジナルソースプログラムｄ２の実行ステップの行間を指定して、ポップアップウィンドウを開く。
【００１７】
コンパイラ５は、オリジナルソースプログラムｄ２を、ターゲットシステム８が実行可能なオブジェクトプログラムｄ５に変換する。
【００１８】
イベント情報変換部７は、イベントイネーブル信号に応じて、オリジナルイベント情報ｄ４と、シンボルテーブルｄ７に基づいて、イベント毎にアドレスとカウント値を有する変換イベント情報ｄ６を生成する。イベント情報変換部７は、変換イベント情報ｄ６をターゲットシステム８が読み出し可能な状態において記憶する。イベントイネーブル信号は、ターゲットシステム８がオブジェクトプログラムｄ５を実行する時に、変換イベント情報ｄ６に基づいたイベントの実行の有効、無効を指定する。
【００１９】
ターゲットシステム８は、オブジェクトプログラムｄ５と、変換イベント情報ｄ６に記載されたイベントを実行する。
【００２０】
イベント検出部２１は、変換イベント情報ｄ６に基づき、出力タイミングを検出条件として設定する。イベント検出部２１は、常に設定された検出条件の成否をモニタする。イベント検出部２１は検出条件が成立するイベントを検出する。イベント検出部２１は、変換イベント情報ｄ６に基づき、イベント毎にターゲットシステム８の状態が変化したことを表すデバッグデータｄ８を検出する。イベント検出部２１は、検出条件が成立するイベントを検出する。
【００２１】
データ取得部２２は、変換イベント情報ｄ６に基づき、出力対象を取得条件として設定する。データ取得部２２は、イベント検出時に出力対象のデバッグデータｄ８を格納場所からサイズ分loadする。Loadする際に、符号拡張が必要な場合には、符号拡張した形でloadする。データ取得部２２は、変換イベント情報ｄ６に基づき、検出したデバッグデータｄ８を取得し記憶する。
【００２２】
デバッグ出力部２３は、変換イベント情報ｄ６に基づき、出力メッセージ、出力形式、出力対象を出力条件として設定する。デバッグ出力部２３は、変換イベント情報ｄ６に基づき、指定した出力方法で取得したデバッグデータｄ８を出力する。デバッグ出力部ｄ８は、データ取得部２２でloadしたデバッグデータｄ８を、指定された出力形式に従って出力する。
【００２３】
オリジナルソースプログラム記憶部１１は、オリジナルソースプログラムｄ２を記憶している。書き込みソースプログラム記憶部１２は、書き込みソースプログラムｄ３を記憶している。オブジェクトプログラム記憶部１３は、オブジェクトプログラムｄ５を記憶している。オリジナルイベント情報記憶部１４は、オリジナルイベント情報ｄ４を記憶している。シンボルテーブル記憶部１５は、シンボルテーブルｄ７を記憶している。変換イベント情報記憶部１６は、変換イベント情報ｄ６を記憶している。出力情報記憶部１７は、出力情報であるデバッグデータｄ８を記憶している。
【００２４】
デバッガ１は、コンピュータであってもよく、コンピュータにプログラムに書かれた手順を実行させることにより、デバッガ１を実現させてもよい。
【００２５】
デバッガ１をもちいた実施例１に係るデバッグ方法を説明する。
【００２６】
まず、図２に示すように、ステップＳ１で、コンパイラ５は、オリジナルソースプログラムｄ２をコンパイルしてオブジェクトプログラムｄ５に変換する。図４に示すように、オリジナルソースプログラムｄ２は、Ｃ言語のような高級言語で記載されている。実施例１の場合は再コンパイル、再ダウンロードの必要がない。
【００２７】
ステップＳ２で、入出力部２は、デバッガ１のオペレータにオリジナルソースプログラムｄ２を表示して、イベント毎にデバッグプリント文ｄ１の入力と、デバッグプリント文ｄ１を実行して出力するシンボルの出力タイミングの指定を促す。出力してほしい情報を出力するためのデバッグプリント文ｄ１をprintf形式で指定する。複数のデバッグプリント文ｄ１は、それぞれイベントとして、複数指定可能であり、指定の仕方もさまざまなものがある。
【００２８】
ステップＳ３で、オペレータは、デバッグプリント文ｄ１を入力し、出力タイミングを指定する。例えば、出力タイミングの指定は、シンボルの識別子の指定と、出力タイミングの際にシンボルが達する条件値の指定により行われる。この他にも、出力タイミングとして指定可能なタイミングとしては、以下のタイミングが考えられる。
【００２９】
（タイミング１）プログラムカウンター値(PC値)が指定した値になったタイミング。
【００３０】
（タイミング２）メモリへアクセスするタイミング。
【００３１】
（タイミング２−１）読み出し（read）でアクセスするタイミング、さらに、read時のデータのmaskを取った値を指定してもよい。
【００３２】
（タイミング２−２）書き出し（write）でアクセスするタイミング、さらに、write時のデータのmaskを取った値を指定してもよい。
【００３３】
（タイミング２−３）read/writeどちらかでアクセスするタイミング、さらに、read/write時のデータのmaskを取った値を指定してもよい。
【００３４】
（タイミング３）レジスタへアクセスするタイミング。
【００３５】
（タイミング３−１）読み出し（read）でアクセスするタイミング、さらに、read時のデータのmaskを取った値を指定してもよい。
【００３６】
（タイミング３−２）書き出し（write）でアクセスするタイミング、さらに、write時のデータのmaskを取った値を指定してもよい。
【００３７】
（タイミング３−３）read/writeどちらかでアクセスするタイミング、さらに、read/write時のデータのmaskを取った値を指定してもよい。
【００３８】
（タイミング４）(タイミング１，２，３)それぞれに対して、成立回数が指定した値になったタイミング。
【００３９】
なお、ステップＳ２とＳ３は、図３のフローチャートでさらに詳細に説明する。
【００４０】
ステップＳ１１で、入出力部２が、図５に示すように、入出力部２のディスプレイ画面３１上に、オリジナルソースプログラムｄ２を表示するソースウィンドウ３２を開く。また、ディスプレイ画面３１上に、デバッガコマンドを表示するデバッグウィンドウ３３を開く。
【００４１】
ステップＳ１２で、オペレータが、デバッグプリント文ｄ１を配置したいステップ行間にポインタ３４を移動させ、マウスクリックする。
【００４２】
ステップＳ１３で、入出力部２が、図６に示すように、ポインタ３４の位置にポップアップウィンドウ３５を開く。
【００４３】
ステップＳ１４で、オペレータが、ポップアップウィンドウ３５中に、デバッグプリント文ｄ１を記述する。デバッグプリント文ｄ１のシンタックスはC言語と同じにする。
【００４４】
次に、図２のステップＳ４で、プリント文書き込み部３は、図７に示すように、オリジナルソースプログラムｄ２の１２行と１３行のステップ行間にデバッグプリント文ｄ１を挿入した書き込みソースプログラムｄ３を生成する。この挿入箇所は出力タイミングに対応する。プリント文書き込み部３は、オリジナルソースプログラムｄ２内に出力タイミングに基づいてデバッグプリント文ｄ１を書き込んだ書き込みソースプログラムｄ３を生成する。図８に示すように、生成された書き込みソースプログラムｄ３は、デバッグプリント文ｄ１と出力タイミングを有するデバッグ情報を含んだターゲットプログラムであると考えることができる。
【００４５】
ステップＳ５で、イベント抽出部４は、イベント毎のプリント文ｄ１と出力タイミングからなるオリジナルイベント情報ｄ４を書き込みソースプログラムｄ３から抽出する。図８に示すように、抽出されたオリジナルイベント情報ｄ４は、イベント毎に、出力タイミングとデバッグプリント文から構成されている。具体的には、図９に示すように、オリジナルイベント情報ｄ４は、printf形式で指定された出力形式printf(“i = %d, j = %d\n”, i, j);と出力タイミング、ステップ行１２行と１３行の間で出力する指定からなるシンボルｉ、ｊの情報を有する。プリント文ｄ１は、オリジナルソースプログラムｄ２を実行した場合に検出するべきターゲットシステム８の状態の変化を表すデバッグデータｄ８の出力およびデバッグデータｄ８の出力方法を、ターゲットシステム８に実行させることができる命令文である。
【００４６】
ステップＳ６で、シンボル情報解析部６は、オリジナルイベント情報ｄ４と、書き込みソースプログラムｄ３と、オブジェクトプログラムｄ５をロードする。図１０に示すように、シンボル情報解析部６は、イベントｅ１毎に、デバッグデータｄ８を表す書き込みソースプログラムｄ３内のシンボルｉ、ｊとそのシンボルｉ、ｊの存在する出力タイミング（ステップ行数１２と１３の間）に対して、デバッグデータｄ８を記憶するターゲットシステム８内の記憶装置のアドレスｒ５、ｒ６と、オブジェクトプログラムｄ５を実行してデバッグデータｄ８がアドレスｒ５、ｒ６の記憶装置に記憶される際のプログラムカウンターのカウント値８０００００を対応付けるシンボルテーブルｄ７を出力する。シンボル情報解析部６は、デバッグプリント文ｄ１とデバッグプリント文ｄ１を挿入したステップ行数から、オブジェクトプログラムｄ５を実行してデバッグデータｄ８が記憶される際のプログラムカウンターのカウント値８０００００を解読する。
【００４７】
ステップＳ７で、入出力部２は、イベントイネーブル信号の入力をオペレータに促す。
【００４８】
ステップＳ８で、オペレータは、促しに応じ、イベントイネーブル信号を入力する。入出力部２は、入力されたイベントイネーブル信号をイベント情報変換部７に送信する。イベント情報変換部７は、イベントイネーブル信号を受信する。
【００４９】
ステップＳ９で、イベント情報変換部７は、イベントイネーブル信号に応じて、変換イベント情報ｄ６を生成する。ターゲットシステム８は、変換イベント情報ｄ６で特定されるイベントを実行することができる。そして、イベント情報変更部７は、シンボルテーブルｄ７とオリジナルイベント情報ｄ４から、ターゲットシステム８が実行可能な出力タイミング、出力メッセージ、出力対象と出力形式を生成する。変換イベント情報ｄ６は、図８に示すように、ターゲットシステム８がデバッグデータｄ８の出力に際し実行可能な出力タイミング、出力メッセージ、出力対象と出力形式から構成される。出力タイミングとしては、出力条件式が記載される。出力メッセージとしては、デバッグデータｄ８のシンボルの数値と共に出力される出力文字列が生成される。出力対象としては、デバッグデータｄ８のターゲットシステム８内の格納場所、例えばメモリやレジスタの識別記号が生成される。格納場所がメモリの場合は、具体的にはメモリアドレス、表示サイズと符号が生成される。表示サイズと符号は、シンボルｉとｊの型情報から生成される。格納場所がレジスタの場合は、レジスタ番号が生成される。表示出力形式としては、デバッグデータｄ８の型とサイズが生成される。
【００５０】
具体的には、図９と図１１に示すように、出力タイミングとしては、出力条件式if(pc==0x800000)が記載される。出力メッセージとしては、シンボルｉの出力文字列”i==%”とシンボルｊの出力文字列”j==%”が生成される。出力対象としては、シンボルｉが格納されるレジスタのレジスタ番号ｒ５と、シンボルｊが格納されるレジスタのレジスタ番号ｒ６が生成される。表示出力形式としては、デバッグデータｄ８のシンボルの数値が整数であることを示す型ｉｎｔと、数値が４桁以下であることを示すサイズ４が、それぞれのシンボルｉ、ｊ毎に生成される。
【００５１】
ステップＳ１０で、ターゲットシステム８は、オブジェクトプログラムｄ５と変換イベント情報ｄ６が設定された状態で再開もしくは実行すると、オブジェクトプログラムｄ５と、変換イベント情報ｄ６に記載されたイベントｅ１を実行する。イベント検出部２１には、出力タイミングが出力条件として設定される。イベント検出部２１は出力条件if(pc==0x800000)が成立するイベントｅ１を検出する。データ取得部２２には、出力対象の情報が設定される。データ取得部２２は、イベント検出時にデバッグデータｄ８の１１と２２０を格納場所ｒ５、ｒ６から読み出す。データ取得部２２は、イベント検出時に出力対象のデータを格納場所ｒ５、ｒ６からサイズ分ロード（load）する。ロードする際に、符号拡張が必要な場合には、符号拡張した形でロードする。デバッグ出力部２３には、出力メッセージ、出力形式、出力対象が設定される。デバッグ出力部２３は、イベントｅ１毎にデバッグデータｄ８を、図９に示すように、書式化された文字列i==11、j==220内において出力する。デバッグ出力部２３は、データ取得部２２でロードしたデータｄ８を、指定された出力形式に従ってprintf出力する。
【００５２】
なお、実施例１のデバック方法は、手順としてコンピュータが実行可能なデバックプログラムにより表現することができる。このデバックプログラムをコンピュータに実行させることにより、デバック方法を実施することができる。
【００５３】
デバッグ対象プログラムｄ２とは別に、デバッグ対象プログラムｄ２と同一の書き込みソースプログラムｄ３中に、プリント文を埋め込んでいるため、オペレータにとっては、デバッガ対象プログラムｄ２中に、プリント文が埋め込まれたかのようにデバッグすることができる。プリント文が埋め込まれたかのようにデバッグするために、プリント文をイベント化している。そして、ターゲットシステム８は、デバッグ対象プログラムｄ２とイベント化したプリント文を実行することで、プリント文が埋め込まれたかのようなデバッグを可能にしている。プリント文には、デバッガコマンドを用いていないので、デバッガコマンドを覚える必要が無く、デバッガ毎のコマンド仕様に影響されない。ターゲットプログラムｄ２にデバッグコードを含まずにデバッグできる。また、ターゲットシステム８には、コンパイル無しに実行可能なイベントを送信しているので、ターゲットシステム８の実行速度を低下させることがない。さらに、ターゲットシステム８にてプリント文の出力を行うため、ターゲットシステム８からデバッガ１への出力情報ｄ８の送信時間による処理速度低下を回避することができる。デバッグターゲット８とデバッガ１間の通信量が極めて少なく、高速な実行ができる。
【実施例２】
【００５４】
実施例１では、オリジナルソースプログラムｄ２とは独立した書き込みソースプログラムｄ３にデバッガ１のソースウィンドウ３２よりオリジナルイベント情報ｄ４を設定する方法である。実施例２では、プリント文書き込み部３が、オリジナルソースプログラムｄ２に直接デバッグプリント（printf）文ｄ１を埋め込むことによりオリジナルイベント情報ｄ４をオリジナルソースプログラムｄ２に設定した書き込みソースプログラムｄ３を生成する。イベント抽出部４は、書き込みソースプログラムｄ３からオリジナルイベント情報ｄ４を抽出することにより、オリジナルイベント情報ｄ４だけでなくオリジナルソースプログラムｄ２も生成する。コンパイラ５は、イベント抽出部４により生成されたオリジナルソースプログラムｄ２をコンパイルしてオブジェクトプログラムｄ５を生成する。なお、イベント抽出部４によるオリジナルイベント情報ｄ４の抽出を確実に実施するために、プリント文書き込み部３が、デバッグプリント文ｄ１を埋め込む際に、デバッグプリント文ｄ１をデバッグプリント文の開始、終了を示す識別子で挟んで記載する。このことにより、イベント抽出部４では、デバッグプリント文ｄ１の開始、終了を示す識別子を検出することにより容易に、オリジナルイベント情報ｄ４を抽出することができる。そして、コンパイラ５では、デバッグプリント文ｄ１をコンパイルすることはない。
【００５５】
以下では、出力条件式付きのデバッグプリント文ｄ１を例に具体的に説明する。実施例２で用いるデバッガ１は、実施例１のデバッガ１と同じである。実施例２のデバッグ方法は、実施例１のデバッグ方法を示した図２のフローチャートに基本的には従うが、若干の変更点がある。変更点は、ステップＳ１がステップＳ５の後に実行される点と、ステップＳ５において、オリジナルイベント情報ｄ４が抽出される際に、同時に、オリジナルソースプログラムｄ２も生成される点である。そして、ステップＳ５で生成されたオリジナルソースプログラムｄ２に基づいてステップＳ１のコンパイルが実行される。また、デバッグプリント文ｄ１が、出力条件式付きのデバッグプリント文ｄ１であることにより、ステップＳ２とＳ３をさらに詳細に説明する実施例１の図３のフローチャートは、図１２のフローチャートに置き換えられる。
【００５６】
すなわち、ステップＳ１１で、入出力部２が、図５に示すように、入出力部２のディスプレイ画面３１上に、オリジナルソースプログラムｄ２を表示するソースウィンドウ３２を開く。また、ディスプレイ画面３１上に、デバッガコマンドを表示するデバッグウィンドウ３３を開く。
【００５７】
ステップＳ１６で、オペレータが、ソースウィンドウ３２内の任意の場所にポインタを移動させ、マウスクリックする。
【００５８】
ステップＳ１３で、入出力部２が、ポインタ３４の位置にポップアップウィンドウ３５を開く。
【００５９】
ステップＳ１７で、オペレータは、ポップアップウィンドウ３５中でデバッグプリント文の出力タイミングも指定できる。例えば、図１４に示すように、変数名jと値５０を指定できる。出力タイミングは、変数jの値が50になったときと設定できる。オペレータはポップアップウィンドウ３５中にデバッグプリント文ｄ１であるprintf(“I = %x\n”, i);と、デバッグプリント文ｄ１を実行する出力タイミングを指定する出力条件if (j == 50)を記述する。なお、図１４に示すように、デバッグプリント文printf(“I = %x\n”, i);と出力条件if (j == 50)とを合わせてデバッグプリント文ｄ１と考えてもよい。
【００６０】
次に、図２のステップＳ４で、プリント文書き込み部３は、図１３に示すように、オリジナルソースプログラムｄ２に出力条件if (j == 50)とデバッグプリント文printf(“I = %x\n”, i);を挿入した書き込みソースプログラムｄ３を生成する。また、プリント文書き込み部３は、デバッグプリント文ｄ１を書き込む際に、デバッグプリント文ｄ１をデバッグプリント文の開始を示す識別子#pragma _BEGIN_DEBUGと終了を示す識別子#pragma _END_DEBUGで挟んで記載する。
【００６１】
ステップＳ５で、イベント抽出部４は、デバッグプリント文の開始を示す識別子#pragma _BEGIN_DEBUGと終了を示す識別子#pragma _END_DEBUGを検出する。イベント抽出部４は、識別子#pragma _BEGIN_DEBUGと識別子#pragma _END_DEBUGに挟まれたイベント毎のプリント文ｄ１と出力タイミングからなるオリジナルイベント情報ｄ４を書き込みソースプログラムｄ３から抽出する。一方、抽出後のデバッグプリント文を除いた書き込みソースプログラムｄ３は実質、オリジナルソースプログラムｄ２になる。抽出されたオリジナルイベント情報ｄ４は、イベントｅ１毎に、出力タイミングとデバッグプリント文から構成されている。具体的には、図１６に示すように、オリジナルイベント情報ｄ４は、printf形式で指定された出力形式printf(“i = %d, j = %d\n”, i, j);と出力タイミングif (j == 50)とからなる出力してほしいシンボルｉの情報を有する。
【００６２】
次に、ステップＳ１で、コンパイラ５は、ステップＳ５で生成されたオリジナルソースプログラムｄ２をコンパイルしてオブジェクトプログラムｄ５に変換する。このことによれば、コンパイラ５では、デバッグプリント文ｄ１をコンパイルすることはない。以下、ステップＳ６以降を実施例１と同様に実施する。
【００６３】
ステップＳ９で、イベント情報変換部７は、変換イベント情報ｄ６を生成する。変換イベント情報ｄ６は、具体的には、図１６に示すように、出力タイミングとしては、出力条件式if(r6 == 0x50)が記載される。出力メッセージとしては、シンボルｉの出力文字列”I==%”が生成される。出力対象としては、シンボルｉが格納されるレジスタのレジスタ番号ｒ５が生成される。表示出力形式としては、デバッグデータｄ８のシンボルの数値が整数であることを示す型ｉｎｔと、数値が４桁以下であることを示すサイズ４が生成される。
【００６４】
ステップＳ１０で、ターゲットシステム８は、オブジェクトプログラムｄ５と変換イベント情報ｄ６が設定された状態で実行すると、オブジェクトプログラムｄ５と、変換イベント情報ｄ６に記載されたイベントｅ１を実行する。イベント検出部２１には、出力タイミングが出力条件として設定される。イベント検出部２１は出力条件if(r6 == 0x50)が成立するイベントｅ１を検出する。データ取得部２２には、出力対象の情報が設定される。データ取得部２２は、イベントｅ１検出時にデバッグデータｄ８の１１を格納場所ｒ５から読み出す。データ取得部２２は、イベント検出時に出力対象のデータを格納場所ｒ５からサイズ分ロード（load）する。ロードする際に、符号拡張が必要な場合には、符号拡張した形でロードする。デバッグ出力部２３には、出力メッセージ、出力形式、出力対象が設定される。デバッグ出力部２３は、イベントｅ１毎にデバッグデータｄ８を、図１５と図１６に示すように、書式化された文字列I==11内において出力する。デバッグ出力部２３は、データ取得部２２でロードしたデータｄ８の１１を、指定された出力形式”I==%”に従ってprintf出力する。
【００６５】
デバッグ対象プログラムｄ２には、コンパイルの前にのみプリント文を埋め込んでおり、コンパイルの際には、プリント文を抜き取っているので、オペレータにとっては、デバッガ対象プログラムｄ２中に、プリント文が埋め込まれたかのようにデバッグすることができる。プリント文が埋め込まれたかのようにデバッグするために、プリント文はイベント化している。そして、ターゲットシステム８は、デバッグ対象プログラムｄ２とイベント化したプリント文を実行することで、プリント文が埋め込まれたかのようなデバッグを可能にしている。プリント文には、デバッガコマンドを用いていないので、デバッガコマンドを覚える必要が無く、デバッガ毎のコマンド仕様に影響されない。ターゲットプログラムｄ２にデバッグコードを含まずにデバッグできる。また、ターゲットシステム８には、コンパイル無しに実行可能なイベントを送信しているので、ターゲットシステム８の実行速度を低下させることがない。さらに、ターゲットシステム８にてプリント文の出力を行うため、ターゲットシステム８からデバッガ１への出力情報ｄ８の送信時間による処理速度低下を回避することができる。デバッグターゲット８とデバッガ１間の通信量が極めて少なく、高速な実行ができる。
【実施例３】
【００６６】
実施例３では、ターゲットシステム８として実中央演算装置（CPU）を使い、実施例１のシミュレータと比較してより少ないハードウェア（H/W）リソースで同様のデバッグ方法を実現するデバッグ方法を示す。実施例1との相違点は、図１９に示すように図８と異なり変換イベント情報ｄ６が出力文字列を含まない点と、図１７に示すようにデバッガ１がデバッグ出力部２３とヒット情報記憶部１９と出力情報記憶部１７を備え、ターゲットシステム８からデバッガ１に対してヒット（Hit）情報ｄ９を通知する点のみである。ヒット情報ｄ９には、図１９に示すように、検出したイベントｅ１を識別するイベント検出した際のイベント識別情報と、データ出力部２２で取得した出力データが含まれる。デバッグ出力部２３は、ターゲットシステム８から通知されたイベント識別情報に対応する出力文字列と出力データで書式化した文字列を出力情報ｄ８として出力する。
【００６７】
実施例３のデバッグ方法を図１８のフローチャートに示す。図１８のフローチャートは、実施例１のデバッグ方法を示した図２のフローチャートとは、ステップＳ９とＳ１０が若干の変更され、新たに、ステップＳ１１が加えられている。
【００６８】
すなわち、ステップＳ９で、イベント情報変換部７は、イベントイネーブル信号に応じて、出力文字列を含まない変換イベント情報ｄ６を生成する。変換イベント情報ｄ６が出力文字列を含む必要が無いのは、実ＣＰＵ８では、出力文字列を必要とするデバッグデータｄ８の出力が行われないからである。具体的には、図２０に示すように、出力文字列”i == %”、”j == %”が変換イベント情報ｄ６に含まれない。
【００６９】
ステップＳ１０で、実ＣＰＵ８は、オブジェクトプログラムｄ５と、変換イベント情報ｄ６に記載されたイベントｅ１を実行する。イベント検出部２１は検出条件if(pc==0x800000)が成立するイベントｅ１を検出する。データ取得部２２は、イベント検出時にデバッグデータ１１、２２０を格納場所ｒ５、ｒ６から読み出す。データ取得部２２は、イベントｅ１の識別子、例えば、ｅ１、event1や、プリント文を挿入するステップ行数１２とシンボルｉとｊに基づいて生成されたイベントｅ１に対応する識別子１２ｉ、１２ｊと、デバッグデータ１１、２２０を関係付けたヒット情報ｄ９を出力する。ヒット情報ｄ９は、ヒット情報記憶部１９に記憶される。
【００７０】
デバッグ出力部は、イベント毎にデバッグデータを出力する。
【００７１】
図２０と図２１に示すように、デバッグ出力部２３は、イベントｅ１毎の識別子ｅ１と関係付けられたデバッグデータｄ９をターゲットシステム８から入力し、イベントｅ１毎に出力文字列”i == %”、”j == %”と出力データ１１、２２０で書式化した文字列i == 11, j == 220を出力情報ｄ８として出力する。
【００７２】
実施例３では、実施例１と異なり、ターゲットシステム８からデバッガ１にデバッグデータを送信しているので、処理速度の低下が懸念されるが、そこで送信されるデータは、デバッグデータとイベント識別情報のみであるので、ターゲットシステム８からデバッガ１へのヒット情報ｄ９の送信時間による処理速度低下は最小限にとどめることができ、実施例１のその他の効果は実施例３でもそのまま享受することができる。
【実施例４】
【００７３】
実施例４では、実施例１で用いた図１のデバッガ１と図２のフローチャートのデバッグ方法を用いた他の実施例について説明する。
【００７４】
まず、図２に示すように、ステップＳ１で、コンパイラ５は、オリジナルソースプログラムｄ２をコンパイルしてオブジェクトプログラムｄ５に変換する。
【００７５】
ステップＳ２で、入出力部２は、デバッガ１のオペレータにオリジナルソースプログラムｄ２を表示して、イベントｅ１毎にデバッグプリント文ｄ１の入力と、デバッグプリント文ｄ１を実行して出力するシンボルの出力タイミングの指定を促す。
【００７６】
ステップＳ３で、図２２に示すように、オペレータは、デバッグプリント文ｄ１をprintf(“i = %x\n”, i);のように入力し、出力タイミングをステップ行数１２と１３の間に指定する。
【００７７】
ステップＳ４で、プリント文書き込み部３は、オリジナルソースプログラムｄ２の１２行と１３行のステップ行間にデバッグプリント文ｄ１のprintf(“i = %x\n”, i);を挿入した書き込みソースプログラムｄ３を生成する。
【００７８】
ステップＳ５で、イベント抽出部４は、図２３に示すようなイベント毎のプリント文ｄ１のprintf(“i = %x\n”, i);と出力タイミング「ステップ行数１２と１３の間」からなるオリジナルイベント情報ｄ４を書き込みソースプログラムｄ３から抽出する。
【００７９】
ステップＳ６で、シンボル情報解析部６は、オリジナルイベント情報ｄ４と、書き込みソースプログラムｄ３と、オブジェクトプログラムｄ５をロードする。図２４に示すように、シンボル情報解析部６は、イベントナンバー１毎に、デバッグデータｄ８を表す書き込みソースプログラムｄ３内のシンボルｉとそのシンボルｉの存在する出力タイミング（ステップ行数１２と１３の間）に対して、デバッグデータｄ８を記憶するターゲットシステム８内の記憶装置のアドレス１００００と、オブジェクトプログラムｄ５を実行してデバッグデータｄ８がアドレス１０００００の記憶装置に記憶される際のプログラムカウンターのカウント値２０を対応付けるシンボルテーブルｄ７を出力する。
【００８０】
ステップＳ７で、入出力部２は、イベントイネーブル信号の入力をオペレータに促す。
【００８１】
ステップＳ８で、オペレータは、促しに応じ、イベントイネーブル信号を入力する。入出力部２は、入力されたイベントイネーブル信号をイベント情報変換部７に送信する。イベント情報変換部７は、イベントイネーブル信号を受信する。
【００８２】
ステップＳ９で、イベント情報変換部７は、イベントイネーブル信号に応じて、変換イベント情報ｄ６を生成し、変換イベント情報記憶部１６に記憶させる。変換イベント情報ｄ６としては、図２２と図２３に示すように、出力タイミングとしては、出力条件式if(pc==0x20)に相当する出力条件が記載される。出力メッセージとしては、シンボルｉの出力文字列“i=0x%x”が生成される。出力対象としては、シンボルｉが格納されるメモリのアドレス１０００００が生成される。表示出力形式は、デバッグデータｄ８のシンボルの数値が符号拡張しない整数型ｉｎｔであり、ロードするバイト（byte）数４桁以下である。
【００８３】
ステップＳ１０で、ターゲットシステム８は、オブジェクトプログラムｄ５を実行すると、オブジェクトプログラムｄ５と、変換イベント情報ｄ６に記載されたイベント１を実行する。イベント検出部２１には、出力タイミングとして出力条件if(pc==0x20)が設定される。イベント検出部２１は出力条件if(pc==0x20)が成立するイベント１を検出する。データ取得部２２には、出力対象と出力形式の情報が設定される。データ取得部２２は、イベント検出時にアドレス0x100000のメモリデータを符号拡張せずに4byte loadする。デバッグ出力部２３には、出力メッセージ、出力形式、出力対象が設定される。デバッグ出力部２３は、イベント１毎にデバッグデータｄ８を、図９に示すように、書式化された文字列i =0xB内において出力する。デバッグ出力部２３は、データ取得部２２でロードしたデータｄ８を、指定された出力形式printf(“i=0x%x”, memoryu4[0x100000]);に従ってprintf出力する。
【００８４】
実施例４においても実施例１と同様に、デバッグ対象プログラムｄ２とは別に、デバッグ対象プログラムｄ２と同一の書き込みソースプログラムｄ３中に、プリント文を埋め込んでいるため、オペレータにとっては、デバッガ対象プログラムｄ２中に、プリント文が埋め込まれたかのようにデバッグすることができる。
【００８５】
実施例１乃至４は、本発明を実施するにあたっての具体化の例を示したものに過ぎず、実施例１乃至４によって本発明の技術的範囲が限定的に解釈されてはならないものである。本発明は、その技術的思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。すなわち、本発明の特許請求の範囲を逸脱しない範囲で、変更・改良や一部転用などが可能であり、これらすべて本発明の請求範囲内に包含されるものである。
【図面の簡単な説明】
【００８６】
【図１】本発明の一実施形態に係るデバッガとそのデバッガのターゲットシステムの構成図である。
【図２】本発明の一実施形態に係るデバック方法のフローチャートである。
【図３】デバッグプリント文の入力方法と、出力タイミングの指定方法のフローチャートである。
【図４】オリジナルソースプログラムのプログラムリストである。
【図５】本発明の一実施形態に係るデバッガの入出力部のディスプレイ上の表示（その１）である。
【図６】本発明の一実施形態に係るデバッガの入出力部のディスプレイ上の表示（その２）である。
【図７】本発明の一実施形態に係るデバッガの入出力部のディスプレイ上の表示（その３）である。
【図８】本発明の一実施形態に係るデバッガで使用するデータの構成表である。
【図９】デバッガで処理されたデータの表である。
【図１０】シンボルテーブルの構成表である。
【図１１】変換イベント情報の構成を説明するための図である。
【図１２】デバッグプリント文の入力方法と、出力タイミングの指定方法のフローチャートである。
【図１３】書き込みソースプログラムのプログラムリストである。
【図１４】プリント文のプログラムリストである。
【図１５】出力情報のリストである。
【図１６】デバッガで処理されたデータの表である。
【図１７】本発明の一実施形態に係るデバッガとそのデバッガのターゲットシステムの構成図である。
【図１８】本発明の一実施形態に係るデバック方法のフローチャートである。
【図１９】本発明の一実施形態に係るデバッガで使用するデータの構成表である。
【図２０】デバッガで処理されたデータの表である。
【図２１】変換イベント情報とヒット情報の構成を説明するための図である。
【図２２】デバッガとターゲットシステムで処理されたデータの表である。
【図２３】デバッガで処理されたデータの表である。
【図２４】シンボルテーブルの構成表である。
【符号の説明】
【００８７】
１    デバッガ
２    入出力部
３    プリント文書き込み部
４    イベント抽出部
５    コンパイラ
６    シンボル情報解析部
７    イベント情報変換部
８    ターゲットシステム、シミュレータ、実ＣＰＵ
９    デバッグ機能部
１１    オリジナルソースプログラム記憶部
１２    書き込みソースプログラム記憶部
１３    オブジェクトプログラム記憶部
１４    オリジナルイベント情報記憶部
１５    シンボルテーブル記憶部
１６    変換イベント情報記憶部
１７    出力情報記憶部
１９    ヒット情報記憶部
２１    イベント検出部
２２    データ取得部
２３    デバッグ出力部
３１    ディスプレイ画面
３２    ソースウィンドウ
３３    デバッグウィンドウ
３４    ポインタ
３５    ポップアップウィンドウ
【図１】
2007179221.tif 000003
【図２】
2007179221.tif 000004
【図３】
2007179221.tif 000005
【図４】
2007179221.tif 000006
【図５】
2007179221.tif 000007
【図６】
2007179221.tif 000008
【図７】
2007179221.tif 000009
【図８】
2007179221.tif 000010
【図９】
2007179221.tif 000011
【図１０】
2007179221.tif 000012
【図１１】
2007179221.tif 000013
【図１２】
2007179221.tif 000014
【図１３】
2007179221.tif 000015
【図１４】
2007179221.tif 000016
【図１５】
2007179221.tif 000017
【図１６】
2007179221.tif 000018
【図１７】
2007179221.tif 000019
【図１８】
2007179221.tif 000020
【図１９】
2007179221.tif 000021
【図２０】
2007179221.tif 000022
【図２１】
2007179221.tif 000023
【図２２】
2007179221.tif 000024
【図２３】
2007179221.tif 000025
【図２４】
2007179221.tif 000026