(57)【要約】    【課題】  解析対象となるソフトウェアに対してデバッグ専用命令の挿入を行うことによって生じるＲＯＭサイズの変化、最適度の低下および性能劣化を伴わずに、デバッグイベントを発生させる前記デバッグ専用命令の追加挿入や削除を任意に行うことが可能なソフトウェアのリアルタイム解析方法を提供することによって、ソフトウェア開発効率の改善と向上を図る。    【解決手段】  前記デバッグ専用命令を備えた並列命令実行を行うプロセッサと、前記解析対象となるソフトウェアの中に前記デバッグ専用命令を挿入するためのＲＯＭ領域をあらかじめ確保するプログラム変換手段と、前記ＲＯＭ領域に対して前記デバッグ専用命令への命令置換を実施することが可能なプログラム変換手段およびデバッガと、前記デバッグ専用命令の引数によってデバッグイベントの発生タイミングを任意に制御可能なデバッグ装置により、前記解析対象となるソフトウェアのＲＯＭサイズ、最適度および性能に対して影響を与えることなく、デバッグイベントの指定を任意に行うことが可能なソフトウェアのリアルタイム解析方法を提供する。【選択図】      図１
2005122329.tif 000002
【特許請求の範囲】
【請求項１】
解析対象となるソフトウェアにデバッグイベントを発生させるためのデバッグ専用命令を挿入しその実行履歴を参照するソフトウェアのリアルタイム解析方法において、前記デバッグ専用命令と命令実行状態の通知機能を備えた並列命令実行を行うプロセッサと、前記デバッグ専用命令の実行通知情報に基づいてデバッグイベントの発生タイミングを制御し、デバッグイベントの発生時に解析に必要なデバッグ情報を出力するデバッグ装置と、命令並列度が空いている箇所に前記デバッグ専用命令を挿入するためのＲＯＭ領域を確保し、前記ＲＯＭ領域の位置情報をＲＯＭ情報として出力するプログラム変換手段と、指示されたデバッグイベントの設定情報と前記ＲＯＭ情報に基づいて前記ＲＯＭ領域に対してデバッグ専用命令への命令置換処理を行うデバッガから構成される、前記デバッグ専用命令の挿入によるＲＯＭサイズの変化、最適度の低下および性能の劣化が発生しないことを特徴とするソフトウェアのリアルタイム解析方法。
【請求項２】
引数として無効化情報、イベントＩＤ情報およびイベント検出タイミング指定情報を持ち、実行時に前記無効化情報にて無効化の指定が行われていない場合にデバッグ装置に対して引数の内容と実行発生を通知することを特徴とする前記デバッグ専用命令を備えた請求項１記載のソフトウェアのリアルタイム解析方法。
【請求項３】
前記デバッグ専用命令が全てのプロセッサ資源に対して影響を与えることなく１マシンサイクルで実行が完了することを特徴とする請求項１または請求項２のいずれかに記載のソフトウェアのリアルタイム解析方法。
【請求項４】
前記デバッグ装置が、前記イベントＩＤ情報と前記イベント検出タイミング指定情報を記憶すると同時に、これらの情報と独立して独自に生成する時刻情報を元にしてデバッグ情報を生成し出力することを特徴とする請求項１または請求項２または請求項３に記載のソフトウェアのリアルタイム解析方法。
【請求項５】
前記デバッグ装置が、前記プロセッサからの命令実行完了通知を受ける度にそのときの時刻情報を随時記憶するＦＩＦＯ型バッファを備え、前記デバッグ専用命令実行時に通知される前記デバッグイベント検出タイミング指定情報に基づいて、過去に実行された任意の命令に対応する時刻情報を前記ＦＩＦＯ型バッファより抽出すると同時に、デバッグイベントの発生検出を行うことで、前記デバッグ専用命令よりも過去に実行された命令に対するデバッグイベントの設定と発生検出を可能とすることを特徴とする請求項１または請求項２または請求項３または請求項４に記載のソフトウェアのリアルタイム解析方法。
【請求項６】
前記デバッグ装置が、前記プロセッサからの命令実行完了通知を受ける度に動作する第１のカウンタを備え、前記デバッグ専用命令実行時に通知される前記デバッグイベント検出タイミング情報に基づいて、前記デバッグ専用命令の実行から任意指定回数後の命令実行が行われた時にデバッグイベント発生検出を行うことで、前記デバッグ専用命令よりも未来に実行される任意の後続命令に対するデバッグイベントの設定と発生検出を可能とすることを特徴とする請求項１または請求項２または請求項３または請求項４または請求項５に記載のソフトウェアのリアルタイム解析方法。
【請求項７】
前記プロセッサ上で条件分岐を含む全ての分岐命令が実行された際に、前記ＦＩＦＯ型バッファおよび前記第１のカウンタの内容を無効化し、ソフトウェアの不具合などによる意図しない分岐動作発生による誤ったデバッグイベント発生検出を行わないようにすることで、ソフトウェアの不具合に影響されず如何なる状況下でも正確なデバッグイベント発生検出を可能とすることを特徴とする請求項５または請求項６に記載のソフトウェアのリアルタイム解析方法。
【請求項８】
前記デバッグ装置が、前記デバッグ専用命令の実行通知を受ける度に動作する第２のカウンタとイベントＩＤ比較機構を備え、イベント検出タイミング情報により指定される任意のイベントＩＤを持つデバッグ専用命令が任意の指定回数連続実行された場合に対するデバッグイベントの設定と発生検出を可能とすることを特徴とする請求項１または請求項２または請求項３または請求項４または請求項５または請求項６または請求項７に記載のソフトウェアのリアルタイム解析方法。
【請求項９】
前記デバッグ装置が、前記ＦＩＦＯ型バッファ，前記第１のカウンタおよび前記第２のカウンタにて構成される１つのバンクを複数備え、前記プロセッサ上で割込みまたは例外の発生時および割込みまたは例外の処理ルーチンからの復帰時において、これらのバンクを切替制御することによって割込みや例外が非同期的に発生する状況下でもリアルタイム解析を継続可能とすることを特徴とする請求項８記載のソフトウェアのリアルタイム解析方法。
【請求項１０】
前記デバッグ装置が、前記プロセッサにおける割込みまたは例外の発生時に、前記ＦＩＦＯ型バッファ，前記第１のカウンタおよび前記第２のカウンタの内容を任意指定可能なポインタが示す記憶装置のアドレス領域に対して退避し、前記プロセッサにおける割込みまたは例外の処理ルーチンからの復帰時に、前記ポインタが示す記憶装置のアドレス領域より退避された前記ＦＩＦＯ型バッファ，前記第１のカウンタおよび前記第２のカウンタの内容を復帰させるスタック制御機構を備えることによって、非同期的に割込みや例外が発生する状況下でもリアルタイム解析を継続可能とすることを特徴とする請求項１または請求項２または請求項３または請求項４または請求項５または請求項６または請求項７または請求項８または請求項９に記載のソフトウェアのリアルタイム解析方法。
【請求項１１】
前記ソフトウェアの先頭命令もしくは任意の分岐命令から次の分岐命令までの命令区間を１つの基本ブロックとして扱う前記プログラム変換手段が、前記デバッグ専用命令の挿入を除いた状態で前記解析対象のソフトウェアを最適化を行った結果に対して、前記基本ブロック毎に命令並列度が空いている箇所に対して前記デバッグ専用命令を挿入するためのＲＯＭ領域を確保するためにＮＯＰ命令を挿入することで、前記解析対象となるソフトウェアの全ての箇所に対して常にデバッグイベントの設定が任意に可能な状態を維持することを特徴とする請求項１または請求項２または請求項３または請求項４または請求項５または請求項６または請求項７または請求項８または請求項９または請求項１０に記載のソフトウェアのリアルタイム解析方法。
【請求項１２】
前記プログラム変換手段が、前回解析対象となるソフトウェアの変換時にその内容を解析し、関数やサブルーチンの先頭命令、最後尾命令および前記ソフトウェアの記述上にて明示的に前記デバッグ専用命令の挿入が指示された箇所に対して自動的に前記デバッグ専用命令の挿入を行うことを特徴とする請求項１または請求項２または請求項３または請求項４または請求項５または請求項６または請求項７または請求項８または請求項９または請求項１０または請求項１１に記載のソフトウェアのリアルタイム解析方法。
【請求項１３】
前記プログラム変換手段が、前記デバッグ専用命令と前記ＮＯＰ命令の挿入位置情報を含んだＲＯＭ情報を前記デバッガに対して出力することを特徴とする請求項１または請求項２または請求項３または請求項４または請求項５または請求項６または請求項７または請求項８または請求項９または請求項１０または請求項１１または請求項１２に記載のソフトウェアのリアルタイム解析方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ上で動作するソフトウェアの動作をリアルタイム解析する際に用いる解析方法に関するものである。
【背景技術】
【０００２】
ソフトウェアの動作をリアルタイム解析する方法として、従来より解析対象ソフトウェア上に存在する任意の着眼点に対してデバッグイベントを設定し、そのデバッグイベントの発生経過履歴を参照することでソフトウェアの論理的動作や処理性能解析を行うという方法が広く用いられている。
【０００３】
このデバッグイベントを用いたリアルタイム解析方法では、専用命令もしくは特定資源に対する情報出力命令群を該当位置に挿入し、これらデバッグイベントのために挿入された命令の実行を検出する手段と、その履歴を収集する手段によってリアルタイム解析に必要な情報提供が実現されている（例えば、特許文献１）。
【特許文献１】特開平６−８９２００号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来のデバッグイベントを用いたリアルタイム解析方法では、デバッグイベントの指定位置の変更や削除を行う度に、コンパイル作業もしくはアセンブル作業が必要となりソフトウェアの再構築が発生するため、解析対象となるソフトウェアのソースプログラムレベルで変更が無い場合でも機械語レベルではＲＯＭサイズやプログラムカウンタの割当に変化が生じるので、解析作業のために解析対象に対して変化を与えるという解析作業の本質を損なう結果を招く問題点があった。
【０００５】
また、デバッグ用に命令を挿入することにより、挿入箇所の前後に存在する命令郡の構造に変化が発生することが原因で解析対象となるソフトウェア部分の最適度が下がってしまうという問題点があった。
【０００６】
また、専用命令を使用せずに特定資源に対する情報出力命令群を挿入する場合においてはデバッグイベントの設定数に比例して性能劣化を伴うという大きな問題点があった。
本発明では、前記従来技術における前記問題点を解決するために、解析対象のソフトウェアのＲＯＭサイズの変化、最適度の低下や性能劣化を伴わずに、任意にデバッグイベントの追加設定や削除を行うことが可能なリアルタイム解析方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
この目的を達成するために、本発明の請求項１記載のソフトウェアのリアルタイム解析方法は、解析対象となるソフトウェアにデバッグイベントを発生させるためのデバッグ専用命令を挿入しその実行履歴を参照するソフトウェアのリアルタイム解析方法であって、前記デバッグ専用命令と命令実行状態の通知機能を備えた並列命令実行を行うプロセッサと、前記デバッグ専用命令の実行通知情報に基づいてデバッグイベントの発生タイミングを制御し、デバッグイベントの発生時に解析に必要なデバッグ情報を出力するデバッグ装置と、命令並列度が空いている箇所に前記デバッグ専用命令を挿入するためのＲＯＭ領域を確保し、前記ＲＯＭ領域の位置情報をＲＯＭ情報として出力するプログラム変換手段と、指示されたデバッグイベントの設定情報と前記ＲＯＭ情報に基づいて前記ＲＯＭ領域に対してデバッグ専用命令への命令置換処理を行うデバッガから構成される、前記デバッグ専用命令の挿入によるＲＯＭサイズの変化、最適度の低下および性能の劣化が発生しないことを特徴とする。
【０００８】
請求項２記載のソフトウェアのリアルタイム解析方法は、請求項１記載のソフトウェアのリアルタイム解析方法において、前記デバッグ専用命令が引数として無効化情報、イベントＩＤ情報およびイベント検出タイミング指定情報を持ち、実行時に前記無効化情報にて無効化の指定が行われていない場合にデバッグ装置に対して引数の内容と実行発生を通知することを特徴とする。
【０００９】
請求項３記載のソフトウェアのリアルタイム解析方法は、請求項１または請求項２のいずれかに記載のソフトウェアのリアルタイム解析方法において、前記デバッグ専用命令が全てのプロセッサ資源に対して影響を与えることなく１マシンサイクルで実行が完了することを特徴とする。
【００１０】
請求項４記載のソフトウェアのリアルタイム解析方法は、請求項１または請求項２または請求項３に記載のソフトウェアのリアルタイム解析方法において、前記デバッグ装置が、前記イベントＩＤ情報と前記イベント検出タイミング指定情報を記憶すると同時に、これらの情報と独立して独自に生成する時刻情報を元にしてデバッグ情報を生成し出力することを特徴とする。
【００１１】
請求項５記載のソフトウェアのリアルタイム解析方法は、請求項１または請求項２または請求項３または請求項４に記載のソフトウェアのリアルタイム解析方法において、前記デバッグ装置が、前記プロセッサからの命令実行完了通知を受ける度ににそのときの時刻情報を随時記憶するＦＩＦＯ型バッファを備え、前記デバッグ専用命令実行時に通知される前記デバッグイベント検出タイミング指定情報に基づいて、過去に実行された任意の命令に対応する時刻情報を前記ＦＩＦＯ型バッファより抽出すると同時に、デバッグイベントの発生検出を行うことで、前記デバッグ専用命令よりも過去に実行された命令に対するデバッグイベントの設定と発生検出を可能とすることを特徴とする。
【００１２】
請求項６記載のソフトウェアのリアルタイム解析方法は、請求項１または請求項２または請求項３または請求項４または請求項５に記載のソフトウェアのリアルタイム解析方法において、前記デバッグ装置が、前記プロセッサからの命令実行完了通知を受ける度に動作する第１のカウンタを備え、前記デバッグ専用命令実行時に通知される前記デバッグイベント検出タイミング情報に基づいて、前記デバッグ専用命令の実行から任意指定回数後の命令実行が行われた時にデバッグイベント発生検出を行うことで、前記デバッグ専用命令よりも未来に実行される任意の後続命令に対するデバッグイベントの設定と発生検出を可能とすることを特徴とする。
【００１３】
請求項７記載のソフトウェアのリアルタイム解析方法は、請求項５または請求項６に記載のソフトウェアのリアルタイム解析方法において、前記プロセッサ上で条件分岐を含む全ての分岐命令が実行された際に、前記ＦＩＦＯ型バッファおよび前記第１のカウンタの内容を無効化し、ソフトウェアの不具合などによる意図しない分岐動作発生による誤ったデバッグイベント発生検出を行わないようにすることで、ソフトウェアの不具合に影響されず如何なる状況下でも正確なデバッグイベント発生検出を可能とすることを特徴とする。
【００１４】
請求項８記載のソフトウェアのリアルタイム解析方法は、請求項１または請求項２または請求項３または請求項４または請求項５または請求項６または請求項７に記載のソフトウェアのリアルタイム解析方法において、前記デバッグ装置が、前記デバッグ専用命令の実行通知を受ける度に動作する第２のカウンタとイベントＩＤ比較機構を備え、イベント検出タイミング情報により指定される任意のイベントＩＤを持つデバッグ専用命令が任意の指定回数連続実行された場合に対するデバッグイベントの設定と発生検出を可能とすることを特徴とする。
【００１５】
請求項９記載のソフトウェアのリアルタイム解析方法は、請求項８記載のソフトウェアのリアルタイム解析方法において、前記デバッグ装置が、前記ＦＩＦＯ型バッファ，前記第１のカウンタおよび前記第２のカウンタにて構成される１つバンクを複数備え、前記プロセッサ上で割込みまたは例外の発生時および割込みまたは例外の処理ルーチンからの復帰時においても、これらのバンクを切替制御することによって割込みや例外が非同期的に発生する状況下でもリアルタイム解析を継続可能とすることを特徴とする。
【００１６】
請求項１０記載のソフトウェアのリアルタイム解析方法は、請求項１または請求項２または請求項３または請求項４または請求項５または請求項６または請求項７または請求項８または請求項９に記載のソフトウェアのリアルタイム解析方法において、前記デバッグ装置が、前記プロセッサにおける割込みまたは例外の発生時に、前記ＦＩＦＯ型バッファ，前記第１のカウンタおよび前記第２のカウンタの内容を任意指定可能なポインタが示す記憶装置のアドレス領域に対して退避し、前期プロセッサにおける割込みまたは例外の処理ルーチンからの復帰時に、前記ポインタが示す記憶装置のアドレス領域より退避された前記ＦＩＦＯ型バッファ，前記第１のカウンタおよび前記第２のカウンタの内容を復帰させるスタック制御機構を備えることによって、非同期的に割込みや例外が発生する状況下でもリアルタイム解析を継続可能とすることを特徴とする。
【００１７】
請求項１１記載のソフトウェアのリアルタイム解析方法は、請求項１または請求項２または請求項３または請求項４または請求項５または請求項６または請求項７または請求項８または請求項９または請求項１０に記載のソフトウェアのリアルタイム解析方法において、前記基本ブロック単位をソフトウェアの先頭命令もしくは任意の分岐命令から次の分岐命令までの間とすることにより、解析対象となるソフトウェアの全ての箇所に対して常にリアルタイム解析を行うことを可能ととすることを特徴とする。
【００１８】
請求項１２記載のソフトウェアのリアルタイム解析方法は、請求項１または請求項２または請求項３または請求項４または請求項５または請求項６または請求項７または請求項８または請求項９または請求項１０または請求項１１に記載のソフトウェア解析方法において、前記プログラム変換手段が、前回解析対象となるソフトウェアの変換時にその内容を解析し、関数やサブルーチンの先頭命令、最後尾命令および前記ソフトウェアの記述上にて明示的に前記デバッグ専用命令の挿入が指示された箇所に対して自動的に前記デバッグ専用命令の挿入を行うことを特徴とする。
【００１９】
請求項１３記載のソフトウェアのリアルタイム解析方法は、請求項１または請求項２または請求項３または請求項４または請求項５または請求項６または請求項７または請求項８または請求項９または請求項１０または請求項１１または請求項１２に記載のソフトウェアのリアルタイム解析方法において、前記プログラム変換手段が、前記デバッグ専用命令と前記ＮＯＰ命令の挿入位置情報を含んだＲＯＭ情報を前記デバッガに出力することを特徴とする。
【００２０】
請求項１４記載のソフトウェアのリアルタイム解析方法は、請求項１または請求項２または請求項３または請求項４または請求項５または請求項６または請求項７または請求項８または請求項９または請求項１０または請求項１１または請求項１２または請求項１３に記載のソフトウェアのリアルタイム解析方法において、前記ＲＯＭ情報を読み込み、指示されたデバッグイベントの設定情報と前記ＲＯＭ情報に基づいて前記イベントＩＤ情報および前記イベント検出タイミング指定情報を生成し、前記ＲＯＭ領域に対してデバッグ専用命令への命令置換処理を行うことで、デバッグイベントの設定変更による解析対象ソフトウェアの再構築を必要としないリアルタイム解析を可能とすることを特徴とする。
【００２１】
以上により、解析対象となるソフトウェアに対してデバッグ専用命令の挿入を行うことによって生じるＲＯＭサイズの変化、最適度の低下および性能劣化を伴わずに、デバッグイベントを発生させる前期デバッグ専用命令の追加挿入や削除を任意に行うことが可能なリアルタイム解析方法を提供することができる。
【発明の効果】
【００２２】
以上のように、解析対象となるソフトウェアに対して前記デバッグ専用命令の挿入を行うことによって生じるＲＯＭサイズの変化、最適度の低下および性能劣化を伴わずに、デバッグイベントを発生させる前記デバッグ専用命令の追加挿入や削除を任意に行うことが可能なソフトウェアのリアルタイム解析方法を提供することによって、ソフトウェア開発効率の改善と向上を図ることができる。
【発明を実施するための最良の形態】
【００２３】
以下、本発明の実施の形態について、図１，図２，図３，図４，図５，図６を参照しながら説明する。
図１は本発明のリアルタイム解析方法の構成を説明するブロック図，図２はプロセッサが備えるデバッグ専用命令の仕様例を示す図，図３はデバッグ専用命令を挿入するためのＲＯＭ領域を確保するプログラム変化手段の動作を示す図，図４はデバッグ専用命令の後続命令に対するデバッグイベント指定が行われている場合の動作を例示した図，図５はデバッグ専用命令よりも前に存在する命令に対するデバッグイベント指定が行われている場合の動作を例示した図，図６は非同期的に発生する割込みや例外による分岐発生時の動作を例示した図である。
【００２４】
図１において、１００は並列命令実行を行うプロセッサ（以降プロセッサと称する）、２００はデバッグ装置、３００はコンパイラやアセンブラといったプログラム変換手段、４００はデバッガ、５００は記憶装置である。
【００２５】
プロセッサ１００は、命令を記憶装置５００から読み出す命令フェッチ制御部１０６、命令フェッチ制御部１０６によってフェッチされた命令を解読する実行命令解析部１０１、実行命令解読部１０１によってデバッグ専用命令の実行を検出しデバッグ装置２００へ通知するデバッグ専用命令実行通知部１０２、割込みもしくは例外が発生したことを検出しデバッグ装置２００へ通知する割込み発生通知部１０３、実行命令解読部１０１によって割込みもしくは例外の処理プログラム中に復帰命令の実行が検出されたことを検出しデバッグ装置２００へ通知する復帰命令実行通知部１０４、１命令実行単位毎に実行完了を検出しデバッグ装置２００へ通知する命令実行完了通知部１０５から構成される並列命令実行が可能なアーキテクチャを持ったプロセッサである。
【００２６】
デバッグ装置２００は、デバッグ専用命令実行通知部１０２より通知されたイベントＩＤ情報およびイベント検出タイミング指定情報の解読を行い後述するＦＩＦＯ型バッファ２０４，命令実行回数カウンタ２０５，デバッグ専用命令実行回数カウンタ２０６に対する制御をバンク制御部２０７を通じて行うイベント情報解析部２０１と、プロセッサ１００の動作とは独立して独自の時刻情報を生成し後述するＦＩＦＯ型バッファ２０４およびイベント検出部２０９に対して時刻情報を通知する時刻情報生成部２０２と、割込み発生通知部１０３および復帰命令実行通知部１０４からの通知を受けて割込みもしくは例外発生および割込みもしくは例外処理からの復帰を検出する割込み検出制御部２０３と、時刻情報生成部２０２にて生成された時刻情報を逐次記憶すると同時に後述のイベント検出部２０９に対してデバッグイベントに対応した情報を出力する機能を備えるＦＩＦＯ型バッファ２０４と、命令実行完了通知部１０５からの通知を受けて命令実行回数をカウントする命令実行回数カウンタ２０５と、イベント情報解析部２０１にて解読された結果に基づいて同一ＩＤを持つデバッグ専用命令の実行回数をカウントするデバッグ専用命令実行回数カウンタ２０６と、ＦＩＦＯ型バッファ２０４，命令実行回数カウンタ２０５，デバッグ専用命令実行回数カウンタ２０６を１つのバンクとして取り扱い、このバンクが複数搭載されているデバッグ装置２００にて割込み検出制御部２０３で検出される割込み発生および割込み処理からの復帰を起点としてバンクの切換制御を行うバンク制御部２０７と、任意の値に設定可能なポインタレジスタを備え、割込み検出制御部２０３で検出される割込み発生を受けて前記ポインタレジスタが示す記憶装置５００上のアドレス領域に対してＦＩＦＯ型バッファ２０４，命令実行回数カウンタ２０５，デバッグ専用命令実行回数カウンタ２０６の内容を書き出す（プッシュ動作）と同時にポインタレジスタの内容を自動的に増加させ、割込み検出制御部２０３で検出される割込み処理からの復帰を受けて前記ポインタレジスタが示す値を元に記憶装置５００へ退避されているＦＩＦＯ型バッファ２０４，命令実行回数カウンタ２０５，デバッグ専用命令実行回数カウンタ２０６の内容を読み出して復帰（ポップ動作）させるスタック制御部２０８と、イベント情報解析部２０１の解読結果を元にイベント検出を行い該当するイベントＩＤ情報と時刻情報を抽出するイベント検出部２０９と、イベント検出部２０９にて検出されたデバッグイベントの情報をデバッガ４００へ通知するためのデバッグ情報へ変換し出力するデバッグ情報出力部２１０とから構成される。
【００２７】
プログラム変換手段３００は、解析対象となるソースプログラム３０１と、ソースプログラム３０１を読み込んで性能やコードサイズが最も優れた結果になるよう最適化を行いながら機械語へ変換を行う最適化を伴った機械語変換手段３０２と、機械語変換手段３０２の結果からデバッグ専用命令の挿入のためにプログラムの先頭命令もしくは分岐命令から次回の分岐命令までの区間を一つの基本ブロックとして抽出する基本ブロック抽出手段３０３と、基本ブロック抽出手段３０３にて抽出された基本ブロック毎にその内容を読みとって命令並列度の空きがあるかどうかを調べる命令並列度検査手段３０４と、命令並列度検査手段３０４の検査結果として命令並列度に空きが全く無かった場合に該当する基本ブロックのみを最低１つ以上の空きが命令並列度に存在するように再び最適化を行う機械語再変換手段３０５と、命令並列度検査手段３０４の検査結果として命令並列度に空きがあった場合は基本ブロック抽出手段３０３にて抽出された基本ブロックを対象に、そうでない場合は機械語再変換手段３０５から得られる基本ブロックを対象にデバッグ専用命令もしくはＮＯＰ命令を命令並列度の空きがある場所に対して挿入する命令挿入手段３０６と、ソースプログラム３０１全体に対して命令挿入手段３０６の処理が行われた結果である実行オブジェクト３０７と、命令挿入手段３０６にて挿入されたデバッグ専用命令もしくはＮＯＰ命令の位置情報を含んだＲＯＭ情報３０８とから構成される。
【００２８】
デバッガ４００は、デバッグ装置２００内のデバッグ情報出力部２１０より出力されたデバッグ情報を受信するデバッグ情報受信部４０１と、デバッグ情報受信部４０１にて受信したデバッグ情報を解読して表示するデバッグ情報表示部４０２と、操作部４０５からの指示に従って後述の命令挿入情報解析部４０４から得られるデバッグ専用命令およびＮＯＰ命令の挿入位置情報を元に記憶装置５００上のデバッグ専用命令とＮＯＰ命令の命令置換処理を行うデバッグイベント設定変更制御部４０３と、プログラム変換装置３００にて得られるＲＯＭ情報３０８を読み込んでデバッグ専用命令およびＮＯＰ命令の挿入位置情報を得る命令挿入情報解析部４０４と、デバッガ４００を使用する作業者とのユーザインターフェースの役割を果たす操作部４０５から構成される。
【００２９】
次に、本発明の動作に関して説明する。
図２において、デバッグ専用命令コード６００が機械語のニモニックであり、引数としてイベントＩＤ情報６０１とイベント検出タイミング指定情報６０２がある。イベント検出タイミング指定情報６０２は、イベント設定対象命令がデバッグ専用命令６００から見て前にあるか後ろにあるかを示す方向指定情報６０３、イベント設定対象命令の位置を示すデバッグ専用命令６００からのオフセット命令数であるオフセット命令数指定情報６０４、デバッグイベント発生条件となるデバッグ専用命令実行回数指定情報６０５、実行時にイベントＩＤ情報６０１とイベント検出タイミング指定情報６０２を無効なものとして扱うように指定するデバッグ専用命令無効化指定情報６０６から構成される。
【００３０】
図３において、ソースプログラム例６１０を機械語変換手段３０２にて最適化を行って変換した結果が機械語変換結果例６１１である。この機械語変換結果例６１１を基本ブロック抽出手段３０３にかけて抽出された基本ブロック例が基本ブロック例６１２となる。この基本ブロック例６１２に対して命令並列度検査手段３０４にて検査を行うと、基本ブロック例６１２には命令並列度に空きが全く無いため、機械語再変換手段３０５にて命令並列度に空きができるように再変換を行う。その結果例が機械語再変換結果例６１３と再変換後の基本ブロック例６１４となる。再変換後の基本ブロック例６１４にはデバッグ専用命令挿入可能箇所例６１５が存在するので、この箇所に対して命令挿入手段３０６にてデバッグ専用命令もしくはＮＯＰ命令の挿入を行い、実行オブジェクト３０７が生成され、これが記憶装置５００に格納される。
【００３１】
プロセッサ１００は、記憶装置５００から命令フェッチ制御部１０７を通じて実行する命令を取り込み、実行命令解析部１０１にてどのような命令かを判別しながら動作を行う。この実行命令解析部１０１にて命令フェッチ制御部１０７から取り込んだ命令がデバッグ専用命令コード６００を示した場合、デバッグ専用命令無効化指定情報６０６の内容が偽であればデバッグ専用命令実行通知部１０２を通じてデバッグ装置２００に対してデバッグ専用命令実行と引数であるイベントＩＤ情報６０１およびイベント検出タイミング指定情報６０２の通知を行い、命令フェッチ制御部１０７から取り込んだ命令が割込みもしくは例外処理からの復帰を行う命令を示していた場合は復帰命令実行通知部１０４を通じてデバッグ装置２００に対して通知を行う。
【００３２】
図４に示した命令例では、イベントＩＤ情報が０ｘ５５、デバッグ専用命令より２つ後で実行される命令（Ｉｎｓｔ  Ｃ０、Ｉｎｓｔ  Ｃ１、Ｉｎｓｔ  Ｃ２）に対するイベント設定がなされている。
【００３３】
図４に示した命令例が実行されると、デバッグ専用命令実行を受けて命令実行回数カウンタ２０５にオフセット値である０ｘ２が設定され、以降、命令実行が行われる度に０ｘ１ずつカウンタ値が減少していく。そして、命令実行回数カウンタ２０５の値が０ｘ０になった時点、つまり、デバッグ専用命令より２つ後の命令が実行された時にデバッグイベントの発生が検出されることになる。このように、デバッグ専用命令実行時に通知される方向指定情報６０３がデバッグ専用命令よりも後ろ側を示す場合、オフセット命令数指定情報６０４の内容が命令実行回数カウンタ２０５にセットされると同時にカウンタ動作が有効化される。そして命令実行回数カウンタ２０５の動作が有効な状態でかつその値が０ｘ０になった時点でデバッグイベントを検出することによって、デバッグ専用命令よりも後に実行される命令に対するイベント設定およびデバッグイベント検出が可能となる。
【００３４】
図５における命令例では、イベントＩＤ情報が０ｘＡＡ、デバッグ専用命令より２つ前に実行される命令（Ｉｎｓｔ  Ｂ０、Ｉｎｓｔ  Ｂ１、Ｉｎｓｔ  Ｂ２）に対するイベント設定がなされている。ここで、ＦＩＦＯ型バッファ２０４には命令実行毎に常時時刻情報生成部２０２で作られた時刻情報が記憶される。
【００３５】
図５に示した命令例が実行されると、デバッグ専用命令の実行を受けた時点でイベント情報解析部２０１が方向指定情報６０３およびオフセット命令数指定情報６０４よりＦＩＦＯ型バッファの−２に存在するデバッグ専用命令よりも２つ前に実行された命令に対応する時刻情報がデバッグイベントの時刻情報として選択、抽出される。
【００３６】
つまり、デバッグ専用命令より２つ前の命令が実行された時の状態がデバッグイベント内容としてデバッグ専用命令の実行時に検出されることになる。このようにデバッグ専用命令実行時に通知される方向指定情報６０３がデバッグ専用命令よりも前側を示す場合、オフセット命令数指定情報６０４の内容に基づいてＦＩＦＯ型バッファ２０４の中から時刻情報が抽出されることで、デバッグ専用命令よりも前に実行される命令に対するイベント設定およびデバッグイベント検出が可能となる。
【００３７】
図６の想定条件として、ＦＩＦＯ型バッファ２０４、命令実行回数カウンタ２０５、デバッグ専用命令実行回数カウンタ２０６を一つのバンクとしてこれを２つ備えたバンク制御部２０７、かつ、これらのバンクが共に充填されている場合に記憶装置５００へバンクの内容を退避・復帰するためのスタック制御部２０８を備えたデバッグ装置２００が存在するものとする。
【００３８】
図６は、プログラム中のある基本ブロックにおける先頭命令６２０から命令が実行されて行き、基本ブロック内の命令６２１に対して割込みが発生して割込み処理先頭命令６２３へ分岐し、その割込み処理中の命令６２４にて多重に例外が発生し例外処理先頭命令６２６へ再び分岐し、例外処理からの復帰命令６２７で例外が発生する割込み処理内の命内の命令６２４へ復帰した後、基本ブロック内の割込みが発生した命令６２１へと復帰して基本ブロック最終命令６２２まで命令実行が行われる場合のものである。
【００３９】
まず、最初の割込みにおいて、バンク制御部２０７は、使用バンクをバンク０からバンク１に切り換える。そして、次の例外発生時には、バンク０の内容破壊を防ぐためスタック制御部２０８によってバンク０の内容を記憶装置５００へ退避すると同時にバンク制御部２０７は使用バンクをバンク０に切り換える。次に、例外処理からの復帰時にはスタック制御部２０８は記憶装置５００へ退避していたバンク０の内容を復帰させると同時にバンク制御部２０７が使用バンクをバンク１へ戻す。そして、最後の割込み処理からの復帰時に、バンク制御部２０７が使用バンクをバンク０に戻すことによって、非同期的に発生する割込みや例外による分岐が原因でＦＩＦＯ型バッファ２０４、命令実行回数カウンタ２０５、デバッグ専用命令実行回数カウンタ２０６の内容破壊が回避されるため非同期的に発生する割込みや例外による分岐が発生するような状況下でもデバッグイベントの検出可能状態を維持し続けることが可能となる。
【００４０】
なお、バンク制御部２０７およびスタック制御部２０８は、いずれかのみが存在する場合であっても図６の例と同様の効果を得ることが可能であり、実際のハードウェアコストや処理性能といった面で利用形態を選択することが可能である。
【００４１】
以上により、解析対象となるソフトウェアに対して前記デバッグ専用命令の挿入を行うことによって生じるＲＯＭサイズの変化、最適度の低下および性能劣化を伴わずに、デバッグイベントを発生させる前記デバッグ専用命令の追加挿入や削除を任意に行うことが可能なソフトウェアのリアルタイム解析方法を提供することによって、ソフトウェア開発効率の改善と向上を図ることができる。
【産業上の利用可能性】
【００４２】
本発明にかかるソフトウェアのリアルタイム解析方法は、解析対象のソフトウェアのＲＯＭサイズ変化、最適度の低下や性能劣化を伴わずに、任意にデバッグイベントの追加設定や削除を行うことが可能であるため、ソフトウェアをリアルタイム解析する際に用いる解析方法として有用である。
【図面の簡単な説明】
【００４３】
【図１】本発明のリアルタイム解析方法の構成を説明するブロック図
【図２】プロセッサが備えるデバッグ専用命令の仕様例を示す図
【図３】デバッグ専用命令もしくはデバッグ専用命令置換用ＮＯＰ命令の挿入を説明するプログラム変換図
【図４】デバッグ専用命令よりも後ろにある後続命令に対するイベント設定が行われている場合の動作を例示した図
【図５】デバッグ専用命令よりも前にある後続命令に対するイベント設定が行われている場合の動作を例示した図
【図６】非同期的に発生する想定外の割込みや例外による分岐発生時の動作を例示した図
【符号の説明】
【００４４】
１００・・・プロセッサ
１０１・・・実行命令解読部
１０２・・・デバッグ専用命令実行通知部
１０３・・・割込み発生通知部
１０４・・・復帰命令実行通知部
１０５・・・命令実行完了通知部
１０６・・・命令フェッチ制御部
２００・・・デバッグ装置
２０１・・・イベント情報解析部
２０２・・・時刻情報生成部
２０３・・・割込み検出制御部
２０４・・・ＦＩＦＯ型バッファ
２０５・・・命令実行回数カウンタ
２０６・・・デバッグ専用命令実行回数カウンタ
２０７・・・バンク制御部
２０８・・・スタック制御部
２０９・・・イベント検出部
２１０・・・デバッグ情報出力部
３００・・・プログラム変換手段
３０１・・・ソースプログラム
３０２・・・機械語変換手段
３０３・・・基本ブロック抽出手段
３０４・・・命令並列度検査手段
３０５・・・機械語再変換手段
３０６・・・命令挿入手段
３０７・・・実行オブジェクト
３０８・・・ＲＯＭ情報
４００・・・デバッガ
４０１・・・デバッグ情報受信部
４０２・・・デバッグ情報表示部
４０３・・・デバッグイベント設定変更制御部
４０４・・・命令挿入情報解析部
４０５・・・操作部
５００・・・記憶装置
６００・・・デバッグ専用命令コード
６０１・・・イベントＩＤ情報
６０２・・・イベント検出タイミング指定情報
６０３・・・方向指定情報
６０４・・・オフセット命令数指定情報
６０５・・・デバッグ専用命令実行回数指定情報
６０６・・・デバッグ専用命令無効化指定情報
６１０・・・ソースプログラム例
６１１・・・機械語変換結果例
６１２・・・基本ブロック例
６１３・・・機械語再変換結果例
６１４・・・再変換後の基本ブロック例
６１５・・・デバッグ専用命令挿入可能箇所例
６２０・・・基本ブロック先頭命令
６２１・・・割込みが入る基本ブロック内の命令
６２２・・・基本ブロック最終命令
６２３・・・割込み処理先頭命令
６２４・・・例外が発生する割込み処理内の命令
６２６・・・例外処理先頭命令
６２７・・・例外処理からの復帰命令
【図１】
2005122329.tif 000003
【図２】
2005122329.tif 000004
【図３】
2005122329.tif 000005
【図４】
2005122329.tif 000006
【図５】
2005122329.tif 000007
【図６】
2005122329.tif 000008