(57)【要約】【課題】  ソフトウエアの試行、デバッグ作業の効率向上と、適用対象の拡大のため、モニタやデバッガを必要とせずに、試行中のブレーク機能、変数値の更新機能の双方を、簡易かつ低コストで提供する。【解決手段】  実行プログラム内のブレーク要求を検出し、ブレーク要求を、標準入力待ちコードに置き換えて（読み替えて）、標準入力待ちコードを実行する。標準入力待ちの機能によって、ブレーク機能と、変数値の更新機能、再実行開始を行う。【選択図】  図１
2006350676.tif 000002
【特許請求の範囲】
【請求項１】
デバッグ対象の実行プログラム、当該実行プログラムのソースコードファイルを参照可能に接続された演算処理部の制御方法であって、
当該演算処理部は、前記実行プログラムが実行されている状態で、当該実行プログラム内にブレーク要求が記述されているか否かを検出する機能と、前記ブレーク要求が記述されていたならば、標準入力待ちコードと読み替えて実行する機能を有し、
前記標準入力待ちコードの実行により、標準入力待ち機能によって、前記実行プログラムの実行状態を一時停止させることを特徴とする演算処理部の制御方法。
【請求項２】
請求項１記載の演算処理部の制御方法において、
一時停止した状態で、標準入力からの入力を識別し、当該入力に応じて、所定の変数値を表示し、又は、更新する演算処理部の制御方法。
【請求項３】
請求項１記載の演算処理部の制御方法において、
一時停止した状態で、標準入力からの入力を識別し、当該入力に応じて、所定のソースコードの一部を表示する演算処理部の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、組込みシステムにおけるプログラムのデバッグ方法に係り、特に、デバッグ中にプログラムの実行を中断させる、ブレークポイントの設定に関する。
【背景技術】
【０００２】
プログラム開発においては、コンピュータ上でプログラムがどのように振る舞うか、実行時の監視が必須である。このような監視を行う基本的方法として、例えば、ソースプログラムにログの出力コードを埋め込み、これをコンパイルし、コンパイル後のモジュールを実行することで、実行中のログを得て、監視を行うことが知られている。
そして、プログラムを実行させながら、その実行状態を表示する機能を持つ、デバッガが一般的に用いられている。デバッガは、開発者が作成したプログラムコードにバグがないかを検証するために使われるツールである。
デバッガを用いれば、ソースコード（ソースプログラム）を表示した上で、操作者がそのコード中のどのポイントでどのような情報を表示するのか指定でき、この結果、そのソースコードを実行しながら、動的な情報（変数、引数、レジスタの値の変化）を表示できるから、デバッグ対象のプログラム又はコードの健全性をチェックできる。
従来のデバッガでは、ソフトウェア割込みを発生させる命令自体を、直接、デバッグ対象のプログラムに埋め込むことを要し、その割込み命令が実行され、割込みが発生して、対象プラグラムを中断（ブレーク）させていた。デバッガは、このほかに、中断時に、変数、メモリ領域、レジスタの値を参照する機能、これらの値を設定する機能、中断したプログラムの実行を再開する機能を有している。
【０００３】
メモリー、ＣＰＵパワーその他の計算機資源を豊富に有する上記のシステムとは異なり、各種の機器に組み込まれて、マイクロプロセッサによりその制御を行う、機器組込み制御システム（組込みシステム）が普及している。
組込みシステムに搭載されるプログラムをデバッグするに際しては、１）組込みシステムでは、汎用のＯＳを搭載できない、２）メモリ容量の制約が厳しい等の理由により、機器の実動作環境下で従来のデバッガを使用できないという課題があった。
そのため、対象プログラムの変数の値を表示装置やファイルに出力する、又は、内部メモリに書き込む、といったデバッグ機能を、各種の機器の開発者自らが開発しなければならなかった。つまり対象プログラム中に自作のソフトウエアを組み込んで、アセンブル／コンパイルした後に実行し、組込みシステムが処理するデータの変化を追跡することが必要であった。このようなデバッグ機能は、製品をリリースするときには削除されるか、コンパイルフラグで切換えられるようにし、最終的な製品（オブジェクトコード）からは除かれていた（特許文献１）。 
組込みシステムにおいては、リモートデバッグと呼ばれる、比較的高機能なデバッグが行われることがある（特許文献２）。一般に次のような手法である（図１１）。
デバッグの対象である、ターゲットシステム２３のＲＯＭ２６に、モニタープログラム２５を組み込む。ホストコンピュータ２２上のデバッガ２１は、モニタープログラム２５とインターフェース２９を介して通信する。ＣＰＵ２４は、組込みシステムにおけるマイクロコンピュータ内の中央演算ユニットである。ここで、ユーザプログラム２７はＲＡＭ２８に格納されている。
ホストコンピュータ２２は、モニタープログラム２５に対してコマンドを送信し、モニタープログラム２５はそのコマンドを受信し、ブレーク、トレースその他の処理を実行する。モニタープログラム２５は、ブレークコマンドに対しては、ブレークポイントのアドレスをレジスタに格納してＣＰＵ２４にアドレス一致例外を発生させ、ユーザプログラム２７からモニタープログラム２５に制御を移し、ブレーク処理を行う（ハードウェアブレーク）。
ハードウエアブレークの機能がないマイクロコンピュータにおいては、モニタープログラム２５がブレークポイントに例外を発生させるトラップ命令を、ユーザプログラム２７中に書き込み、ユーザプログラム２７に例外を発生させてモニタープログラム２５に制御を移し、ブレーク処理を行い、同処理が終了した後、前記トラップ命令を元の命令に戻す（ソフトウェアブレーク）。
モニタープログラム２５は、トレースコマンドに対しては、マイクロコンピュータが有しているトレース機能を使うため、ＣＰＵ２４をトレースモードに遷移させ、ユーザプログラム２７を対象として、トレース実行させる。トレースモードがないマイクロコンピュータ対しては、ソフトウエアブレークで説明した方法により、１命令先のアドレスにブレークポイントを設定して、ユーザプログラム２７が１命令実行した時点で例外を発生させ、これを繰り返すことにより、ユーザプログラム２７を対象として、トレース実行させる。
【０００４】
従来のリモートデバッグは、実行時に、デバッグ対象システム上のモニタープログラム又はホストコンピュータ上のデバッガが、ブレークポイントに例外を発生させるトラップ命令を、ＲＡＭ上に展開されたユーザプログラムに書き込んでいる。従って、ＲＯＭ上でユーザプログラムを動作させる組込みシステムには適用できない。ＲＯＭには書き込みができないためである。
この課題に対して、特許文献２では、ＲＯＭ化前に、ソースコードの翻訳時にトラップ命令を埋め込み、ＲＯＭに格納し、そのままＲＯＭ上で実行させるとしている。
【０００５】
ＲＡＭへの展開前に、トラップ命令等の埋め込み操作を行うことは、例えば、特許文献３にも記載されている。ここでは、ブレークポイントの適切な指定位置情報を容易に把握するため、デバッガの機能を使わずに、実行プログラムのソースコード又はソースコードに関連する情報を、実行プログラムの実行時に連動して表示し、実行プログラムの意味等の把握を容易にすることができる、ソースコード表示システム及びプログラムを提供している。
【０００６】
【特許文献１】特開２００１−２２２４４７号公報
【特許文献２】特開２００４−０１３８８０号公報
【特許文献３】特開２００４−１３９３１３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
特許文献２では、デバッガと組み合わせて実行させるので、表示・参照機能の制約は少ない。しかしデバッガを用いる点で、計算機資源を要し、動作環境上の制約が大きくなり、組み込み機器への適用が制限される。
【０００８】
一方、特許文献３では、デバッガを必要しない点で広範に適用できるが、表示機能のみであり、パラメータの変更、変数値の更新ができない。
【０００９】
本発明は、専用のモニタープログラムやデバッガの追加を必要とせずに、ブレーク機能及び変数値の更新機能の双方を提供することを目的とする。
【課題を解決するための手段】
【００１０】
デバッグ対象の実行プログラムの実行状態で、当該実行プログラム内にブレーク要求が記述されているか否かを検出する機能、及び、ブレーク要求が記述されていたならば、標準入力待ちコードと読み替えて実行する機能を設ける。
【００１１】
この機能の実行により、標準入力待ち（一時停止）状態となり、ユーザからの入力を受付るので、かかる入力を識別するコマンド識別手段と、識別したコマンドを実行する手段、例えば、実行プログラムのソースコード、変数、その他実行プログラムの関連情報を取得する情報取得手段と、関連情報の一部または全部を表示する表示手段と、変数の格納している値を更新する更新手段とを備える。
【００１２】
ここで、ブレーク要求の存在は、ブレークメソッドの呼び出しコードの存在と同義としてもよい。その場合は、ブレークメソッドの定義部分に標準入力待ち関数の呼び出しを記述しておけば、ブレークメソッドの呼び出しに連動して、標準入力待ちが実行されることになる。結果として、デバッグ対象の実行プログラムの実行における、前記一時停止と同等なステップが実現できる。
なお、標準入力とは、キーボードからの入力を行う標準ライブラリ関数であり、例えば、Ｃ言語の標準入力ライブラリの存在するscanf関数が該当する。
【発明の効果】
【００１３】
従来のデバッガを必要とせずに、プログラムの実行を簡便に一時停止させ、ソースコード（全部又は一部）、用いられている変数値、その他ソースコードに関連する情報の表示、更新及びプログラムの再実行が可能となる。
【発明を実施するための最良の形態】
【００１４】
本発明における、プログラム実行部は、実行プログラムの実行機能、その実行過程においてブレーク要求が出現した場合に標準入力待ちコードを実行する機能を有する。標準入力待ちコードは、標準入力制御部を呼び出す。
標準入力制御部は、プログラムの実行を一時停止する。また、プログラムの実行状態を表示する。さらに、ユーザへの入力待ち画面の表示を表示情報制御部に依頼する。
【００１５】
標準入力制御部は、入力待ち画面に対してユーザが入力する、標準入力制御用コマンドを読み込んで解釈する。つまり、ユーザが入力したコマンドを、標準入力制御用コマンドライブラリから呼び出す。必要な実行を行う。標準入力制御用コマンドライブラリから返ってきた処理結果を、表示情報制御部に転送する。このような表示情報生成処理依頼機能を備えている。
【実施例１】
【００１６】
図１は、本発明を適用した、デバッグ支援を行う情報処理装置のシステム構成図である。
デバッグ対象である実行プログラムのファイル１０１は、必要に応じ実行プログラム用データベース１１０を使用して、プログラム実行部１０７により実行される。実行プログラムを作成するために使用したソースコードのファイル１０２、表示情報リソースファイル１０３、変数値格納用テーブル１０５は、演算処理部１０６から、適宜、参照される。
表示情報リソースファイル１０３は、ソースコードの説明文その他ソースコードに関連する表示情報を記述したファイルである。変数値格納用テーブル１０５は、ファイル１０２中のソースコードで使用されている変数の値を、時系列に格納する。
【００１７】
本システムの演算処理部１０６は、プログラム実行部１０７、ブレーク実行部１０７２、標準入力制御部１１１、及び、表示情報制御部１０８を有している。
ブレーク実行部１０７２は、本発明に特徴的な構成要素である。ブレーク実行部１０７２は、標準入力待ち命令を実行する機能を担うものであり、ブレーク実行部１０７２によってブレーク要求コードを標準入力待ち命令と読み替えてブレーク処理を実現する。同部１０７２は、プログラム実行部１０７が実行過程においてブレーク要求コードを検出した際に起動し、ブレーク要求コードを標準入力待ち命令と読み替えて、プログラム実行部１０７に処理を渡す。
【００１８】
ブレーク実行部１０７２によって読み替えられた標準入力待ち命令は、標準入力制御部１１１を呼び出す。同部１１１は、プログラムの実行を一時停止し、実行プログラムの状態を表示し、ユーザのための入力待ち画面の表示を表示情報制御部１０８へ指示する。
標準入力制御部１１１は、入力待ち画面に対して、ユーザが入力した標準入力制御用コマンドを解釈する。つまり、標準入力制御用コマンドライブラリ１０４から、そのコマンドを呼び出す。また、ライブラリ１０４から返ってきた処理結果を表示情報制御部１０８に転送する。なお、標準入力制御用コマンドライブラリ１０４は、実行プログラムに埋め込まれた、本発明のコマンドライブラリである。
【００１９】
表示情報制御部１０８は、プログラム実行部１０７からの処理命令に基づき、ファイル１０２のソースコード、表示情報リソースファイル１０３のメッセージリソース、変数値格納用テーブル１０５にある変数情報から、表示すべき情報を生成し、ディスプレイ装置１０９に指示する。また、ファイル１０１の実行プログラムの実行状態の表示をディスプレイ装置１０９に指示する。
【００２０】
図２（ａ）に、変数値格納用テーブル１０５に保存されるデータ構造の一例を示す。
変数名２０２とは、実行プログラムのソースコード内で使用されている変数の名前であり、具体的には、ｉｎｄｅｘ，ａｍｏｕｎｔ，ｄａｙなどが該当する。同図には、ＡＡＡ、ＢＢＢ、ＣＣＣと記載されている。変数２０３は、その値が格納されるエリアを示す。
図２（ｂ）に、図１に図示しない、ブレーク要求指示ファイルの一例を示す。これは、実行プログラム上でブレーク要求の挿入位置が記述された定義ファイルである。
【００２１】
ブレーク要求コードの挿入は、この指示ファイルを参照して為される。具体的には（１）コンパイラが、ブレーク要求コードを挿入したソースプログラムと、等価な実行プログラムを生成する。（２）変換ツールが、実行プログラムを解析して、その実行プログラムに埋め込む。又は（３）インタプリタその他実行時に逐次解釈処理を行うプログラム実行部が、その解釈時にブレーク要求コードを挿入する。
挿入箇所については、ブレーク位置情報記述データを別途、用意して、これを挿入操作主体（コンパイラ、変換ツール、又は、プログラム実行部）に参照させる。
図２（ｂ）の項番１と２では、複数のブレーク要求コードを１の挿入位置ファイルにまとめて記載し、一括で指定している。これとは異なり、一箇所ずつ、対話的に指定してもよい。対話的に指定する場合には、ＧＵＩ操作で、ソースプログラムを画面表示しても良い。
【００２２】
図３に、ディスプレイ装置１０９の表示画面の一例を示す。
この画面は、ブレーク要求の結果、表示される停止した状態を示している。ユーザからの対話的な入力操作を待つ、入力待ち画面である。この対話的な操作画面において、ユーザは、デバッグ対象のプログラムについて、所定のコマンドを入力することにより、所定の情報の取得又は更新を行える。上記コマンド入力は、図示しないキーボードによって入力される。
入力操作を待つ画面上で、ユーザが入力できる標準入力制御用コマンドには、次のような種類が有る。
【００２３】
コマンド名    意味
ｐ            変数値の表示
ｓ            変数値の更新
ｃ            処理の再開
ｌ            ソースコードの表示
図３の３０１は、実行中のプログラムのソースコードのファイル名と行番号であり、ブレーク位置を示している。３０２は、ユーザからの対話的な入力操作を促す表示であり、次のコマンドを受付可能であることを示している。これらが、標準入力制御用コマンドに相当し、標準入力制御用コマンドライブラリ１０４（図１）により実現される。
【００２４】
図４は、ブレーク処理の概要を示すフローチャートである。
プログラム実行部１０７（図１）は、デバッグの対象となるプログラム（実行プログラムファイル１０１に有る実行プログラム）の実行を開始する（ステップ４０１）。
次に、実行プログラム中にブレーク要求コードが記述されている限り、以下に示すステップ４０３からステップ４０７までの処理を繰り返し実行する（ステップ４０２）。
【００２５】
ステップ４０３において、次のブレーク要求コードまでプログラムの処理を実行する。プログラム実行部１０７は、ブレーク要求コードの解釈と実行を行う（ステップ４０４）。これにより、同部１０７は、標準入力待ちコマンドを実行し、標準入力待ちコードの処理において、標準入力制御部１１１を呼び出す（ステップ４０４）。
【００２６】
ステップ４０５において、標準入力制御部１１１は、プログラムの実行を停止する。ついで、ユーザへの入力待ち画面の表示を、表示情報制御部１０８に指示する。
表示情報制御部１０８は、転送された情報に基づいて入力待ち画面の表示情報を生成し（ステップ４０６）、その表示情報をディスプレイ装置１０９に表示する（ステップ４０７）。
標準入力制御部１１１は、入力待ち画面に対してユーザが入力する標準入力制御用コマンドを読んで解釈する。ここで次のステップ位置へ処理を進める操作、例えば、図３における処理再開のコマンド“ｃ”の入力が為されると、次の処理へ進む。
かかる一連の操作は、対象プログラムが終了するまで実行される（ステップ４０８）。
【００２７】
図５は、図４のステップ４０６において、プログラムが停止した後、停止地点周辺のソースコードを表示する処理のフローチャートである。これは、入力待ち画面に対して、ユーザが、ソース表示コマンド" ｌ"を入力すると生じる。
プログラム実行部１０７は、実行中のプログラムのプログラム名及び実行中の行番号を、表示情報制御部１０８に転送する。表示情報制御部１０８は、ソースコードファイル１０２から、プログラム名に合致する実行中のファイルを取得する（ステップ５０１）。
表示情報制御部１０８は、ステップ５０１にて取得したファイルのソースコードから、プログラム実行部１０７から指示された行番号の前後数行、例えば、１０行のソースコードを文字列として取得する（ステップ５０２）。次に同部１０８は、ソースコードのファイル名（図３、３０１）を、ディスプレイ装置１０９に表示する（ステップ５０３）。そして同部１０８は、ソースコードの一部又は全部を表示する（ステップ５０４）。図６に、図５のフローの結果、生成されるソース表示画面の一例を示す。
【００２８】
図７は、図４のステップ４０６において、プログラムが停止した後、変数表示コマンド“ｐ”を入力して、所定のエリアに指定された変数の値を表示する処理のフローチャートである。この実施例では、ブレーク要求コード毎に、監視すべき変数名を予め指定してあるものとするが、変数指定コマンドを別に設けて、停止時に入力待ち画面に対して指定してもよい。
プログラム実行部１０７は、実行中のプログラム中のブレーク要求コードに指定している、監視対象の変数名を抽出する（ステップ７０１）。もし、監視対象の変数名が指定されていなければ、ステップ７０２以降は実行せずに終了する。
プログラム実行部１０７は、変数値格納用テーブル１０５から監視対象の変数名の値を取得する（ステップ７０２）。そして同部１０７は、変数名とその値を表示する表示情報を作成するよう、表示情報制御部１０８に指示する。同部１０８は、指示された情報に基づき、変数名と変数値を表示するための表示情報を生成して、生成された表示情報をディスプレイ装置１０９に表示する（ステップ７０３）。
プログラム実行部１０７は、次の入力を受け付ける標準入力待ち状態にし（ステップ７０４）、一連の処理を終了する。図８に、図７のフローの結果、生成される変数値の表示画面の一例を示す。
【００２９】
図９は、図４のステップ４０６において、プログラムが停止した後、変数値更新コマンドを入力して、指定された変数の値を更新する処理のフローチャートである。
プログラム実行部１０７は、実行中のプログラム中のブレーク要求コードに指定している、監視対象の変数名を抽出する（ステップ９０１）。もし、監視対象の変数名が指定されていなければ、ステップ９０２以降は実行せずに終了する。
プログラム実行部１０７は、変数値格納用テーブル１０５から監視対象の変数名の値を取得する（ステップ９０２）。
プログラム実行部１０７は、変数名とその値を表示する表示情報を作成するよう、表示情報制御部１０８に指示する。同部１０８は、指示された情報に基づき、変数名と変数値を表示するための表示情報を生成して、生成された表示情報をディスプレイ装置１０９に表示する。またプログラム実行部１０７は、更新する変数名と変数値を指定させる入力待ち画面を、表示情報制御部１０８に作成するように指示する。同部１０８は、指示された情報に基づいて、変数名と変数の値を表示するための表示情報を生成して、ディスプレイ装置１０９に表示する（ステップ９０３）。
【００３０】
プログラム実行部１０７は、標準入力制御部１１１を呼び出す。同部１１１は、標準入力待ち画面を表示し、変数値の更新待ち状態となって、画面表示を停止する（ステップ９０４）。標準入力制御部１１１は、入力待ち画面に対してユーザからの入力があった場合には（ステップ９０５、Ｙｅｓ）、その入力に係る変数の更新値を受け取り、プログラム実行部１０７へ渡す。ユーザからの入力がなかった場合には（ステップ９０５、Ｎｏ）、入力待ち状態を維持する。
【００３１】
プログラム実行部１０７は、該当する変数名に対応する格納箇所に、この更新値を格納して更新する（ステップ９０６）。同部１０７は、次の入力を受け付ける標準入力待ち状態にし（ステップ９０７）、一連の処理を終了する。図１０に、図９のフローの結果、生成される変数値の更新操作画面の一例を示す。
【００３２】
なお、本発明を、図１１のようなホストＰＣからデバッグターゲットを通信経由（インターフェース）でデバッグするリモートデバッグの形態で実施する場合は、表示情報制御部１０８（図１）によって生成された各種の表示情報を、ホストＰＣ側に通信経由で伝送して、ホストＰＣ側に接続されているディスプレイ装置（１０９、図１）に表示する形態であっても良い。同様に、入力待ち画面に対する入力も、ホストＰＣ側に接続されているキーボードからの入力が、通信経由で実行プログラム１０１に伝送される形態によって実現されるようにしても良い。
【産業上の利用可能性】
【００３３】
コンピュータ資源が十分でない環境下でも、ソフトウェア開発の効率向上及び精度向上を達成できる。
【図面の簡単な説明】
【００３４】
【図１】本発明を適用した、デバッグ支援を行う情報処理装置のシステム構成図である。
【図２】変数値格納用テーブル１０５に保存されるデータ構造の一例と、ブレーク要求指示ファイルの一例を示す図である。
【図３】ディスプレイ装置１０９の表示画面における、入力待ち画面の一例を示す図である。
【図４】ブレーク処理の概要を示すフローチャートである。
【図５】図４のステップ４０６において、プログラムが停止した後、停止地点周辺のソースコードを表示する処理のフローチャートである。
【図６】図５のフローの結果、生成されるソース表示画面の一例を示す図である。
【図７】変数表示コマンド“ｐ”を入力して、所定のエリアに指定された変数の値を表示する処理のフローチャートである。
【図８】図７のフローの結果、生成される変数値の表示画面の一例を示す図である。
【図９】変数値更新コマンドを入力して、指定された変数の値を更新する処理のフローチャートである。
【図１０】図９のフローの結果、生成される変数値の更新操作画面の一例を示す図である。
【図１１】従来のデバッグ方法を行うシステム構成の概念図である。
【符号の説明】
【００３５】
１０１…実行プログラム、
１０２…ソースコードファイル、
１０３…表示情報リソースファイル、
１０４…標準入力制御用コマンドライブラリ、
１０５…変数値格納用テーブル、
１０６…演算制御部、
１０７…プログラム実行部、    １０７２…ブレーク実行部、
１０８…表示情報制御部、
１０９…ディスプレイ装置、
１１１…標準入力制御部。
【図１】
2006350676.tif 000003
【図２】
2006350676.tif 000004
【図３】
2006350676.tif 000005
【図４】
2006350676.tif 000006
【図５】
2006350676.tif 000007
【図６】
2006350676.tif 000008
【図７】
2006350676.tif 000009
【図８】
2006350676.tif 000010
【図９】
2006350676.tif 000011
【図１０】
2006350676.tif 000012
【図１１】
2006350676.tif 000013