ソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法
【課題】ソフトウェアデバッグに必要となるソースコードに関する情報を自動的に提供すること。
【解決手段】ソフトウェアデバッグ支援装置100は、ハードウェアモデル112によって検証対象のソフトウェアが実行されると、ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレスを関連付つけたログデータ105を生成すると、生成されたログデータ105を記録領域に蓄積する。ソフトウェアデバッグプログラム120は、蓄積されたログデータ105の中の任意のログデータの選択を受け付けると、任意のログデータの実行結果に関連付けられているソースコードのアドレスを参照して検証対象のソフトウェアから任意のログデータ105に対応するソースコード132を検索してGUI130に出力する。
【解決手段】ソフトウェアデバッグ支援装置100は、ハードウェアモデル112によって検証対象のソフトウェアが実行されると、ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレスを関連付つけたログデータ105を生成すると、生成されたログデータ105を記録領域に蓄積する。ソフトウェアデバッグプログラム120は、蓄積されたログデータ105の中の任意のログデータの選択を受け付けると、任意のログデータの実行結果に関連付けられているソースコードのアドレスを参照して検証対象のソフトウェアから任意のログデータ105に対応するソースコード132を検索してGUI130に出力する。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、組み込み型のシステムにおけるソフトウェア開発に用いるソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法に関する。
【背景技術】
【0002】
従来、CPU(Central Processing Unit)コアや、DSP(Digital Signal Processor)コアを集積したSoC(System on Chip)のようなハードウェアとソフトウェアとが混在した組み込み型のシステムを開発する場合には、ハードウェアとソフトウェアとが一体となったシステムとしてシステムレベル検証がおこなわれる。
【0003】
このようなシステムレベル検証をおこなうには、前処理として、個々のハードウェアとソフトウェアとが独立した状態で、初期段階の検証を完了しておかなければならない。ところが、ソフトウェアを検証するには、ソフトウェアを実行させるハードウェアが必要である。したがって、C,C++,SystemCといったプログラム言語で記述したHW(ハードウェア)モデルを用いることによってソフトウェアの検証が実現可能となり、ハードウェアの検証状況を待たずにソフトウェアを早期に開発することができる。
【0004】
ソフトウェアの早期開発のための手法の一つとしてESL(Electronic System Level)設計手法がある。ESL設計手法には、アーキテクチャ探索、高位合成、性能見積もり、消費電力見積もり、ソフトウェア早期開発、HW/SW協調検証などの技術があるが、上述のように組み込み型のシステムの設計の際には、ESL設計手法をソフトウェアの早期開発に適用することができる。
【0005】
図22は、SoCの構成例を示すブロック図である。図22のシステム2200ように、SoCの構成例としては、たとえば、CPUと、メモリとの他に、特定の処理をおこなうための専用のHWブロック群とから構成されている。また、図23は、SoCの開発工程を示す説明図である。図23のように、ESLツール上で動作するHWモデルとISS(インストラクションセットシミュレータ)を使い、ハードウェアが完成する前にソフトウェアの検証を実現している。
【0006】
そして、図24は、ソフトウェア早期開発環境の構成例を示す説明図である。上述したように、SoCの開発工程では、ESLツール110に含まれるISS111上で実行形式ファイル102となったソフトウェアを動作させる。そして、各種のプログラム言語によって記述されたHWモデル112によってHWの処理をおこない、仮想的にシステム全体の動作を実現してソフトウェアの検証を実現する。さらに、ソフトウェアの検証にはソフトウェアデバッグプログラム120を使用する。ソフトウェアデバッグプログラム120では、ソフトウェアのソースコード101と実行形式ファイル102とを読み込み、ISS111の実行制御と、ISS111からのCPU動作情報を取得することによって、デバッグ機能を実現している。この、デバッグ機能には、ブレークポイント設定、継続実行、ステップ実行、ソースコード表示、変数・メモリ表示などがある。そして、GUI130によってソフトウェアデバッグプログラム120における実行制御、ソースコードといったデバッグに用いる情報が表示される。
【0007】
ここで、上述したようなデバッグを実現するための従来のデバッグ支援処理について説明する。図25は、初期段階のソフトウェアデバッグ処理の手順を示すフローチャートである。また、図26は、検証進行後のソフトウェアデバッグ処理の手順を示すフローチャートである。図25のフローチャートは、主にソフトウェア開発の初期段階でバグが多く含まれる時に用いられる。
【0008】
図25において、まず、ソースコードの動作を確認したい部分にブレークポイントを設定し(ステップS1)、ソースコードの動作を継続実行させる(ステップS2)。そして、ブレークが発生すると(ステップS3)、停止させて、ソースコード、変数、メモリなどの各値の内容確認をおこなう(ステップS4)。そして、バグが見つかったか否か、および問題がありそうな部分を過ぎたか否かによりデバッグを終了させるか否かを判断し(ステップS5)、デバッグを終了しない場合は(ステップS5:No)、1行ずつソースコードのステップを実行させ(ステップS6)、その都度ステップS4の内容確認処理を実行する。
【0009】
その後、ソースコードのデバッグが終了すると(ステップS5:Yes)、ステップS4の内容確認の際にプログラムのバグがあるか否かを判断する(ステップS7)。このステップS7において、バグが見つかったと判断された場合には(ステップS7:Yes)、ソースコードを修正・コンパイルして(ステップS8)、再度ステップS1の処理に戻り、デバッグを実行する。そして、ステップS7によってバグが見つからなかったと判断されると(ステップS7:No)、そのまま一連の処理を終了する。
【0010】
図25のような処理によって、ある程度の検証が進み、ソフトウェアが安定して動作するようになると、続いて、図26のフローチャートによってより詳細な検証がおこなわれる。図26において、まず、スクリプトなどによって入力ファイル(テストパターン)を指定する(ステップS11)。その後、継続実行させ(ステップS12)、終了後、期待値比較をおこなう(ステップS13)。このステップS13の比較結果を出力し(ステップS14)、入力ファイル数の処理が終了したか否かを判断し(ステップS15)、終了するまで(ステップS15:No)、ステップS11〜S14の処理を繰り返し実行する。
【0011】
その後、入力ファイル数の処理が終了すると(ステップS15:Yes)、そのまま一連の処理を終了する。このように、検証進行後のデバッグ処理では、スクリプトにより、マニュアルの入力を必要としないため、夜間やバックグラウンドで実行することで複数のテストパターンをまとめて実行させることができる。
【0012】
また、図27は、期待値比較処理を示す説明図である。図26のステップS13にておこなわれる期待値比較処理は、図27のように、テストパターン103からESLツール110によって生成された実行結果104と、期待値生成ソフト271によって生成された期待値データ272との比較処理が期待値比較スクリプト273によって実行され、比較結果274を出力する。図26のステップS13では、この期待値比較スクリプト273を実行させ、ステップS14によって、比較結果274を出力させている。
【0013】
また、図28は、期待値比較に応じたソフトウェアデバッグ処理の手順を示すフローチャートである。図27の処理によって出力された比較結果が期待値不一致であった場合は、図28のような手順によってデバッグ処理をおこなう。図28において、まず、出力データ、レジスタアクセスログ、ファームを確認する(ステップS21)。
【0014】
つぎに、検証対象ソフトに含まれている問題部分を特定できたか否かを判断する(ステップS22)。ここで、問題部分を特定できた場合には(ステップS22:Yes)、ファーム修正後、検証対象ソフトの再実行をおこない(ステップS23)、一連の処理を終了する。一方、ステップS22において、問題部分が特定できなかった場合(ステップS22:No)、問題部分を特定するため、従来手法によって詳細に調査して(ステップS24)、一連の処理を終了する。
【0015】
通常、ESL環境での実行速度は実機での実行速度の100分の1以下となる。したがって、図25の処理によってデバッグをおこなう際に、長いテストパターンを用いると、非常に長い処理時間を要してしまう。たとえば、画像デコードLSIの場合、実機での処理時間が1分のテストパターンであっても、ESL環境での処理時間は1時間40分かかってしまう。実際には、ブレークポイント設定、ステップ実行といった処理をしながらデバッグを進めるため、さらに時間がかかってしまう。そこで、図28のようなフローチャートの処理によって修正したファームを再実行する前に、まず、出力データ、レジスタアクセスログ、ソースコードを使ってデバッグをおこなう。そして、このデバッグによってバグが見つからなかった場合にのみ、図25のデバッグをおこなう(たとえば、下記特許文献1参照)。
【0016】
また、SoCに適用させるような組み込み型のソフトウェアの場合、一般的なソフトウェアのような演算処理だけでなく、CPU外部のHWブロックの制御もおこなわなければならない。このような、ソフトウェアによる制御は、HWブロック内のレジスタの読み書きや、HWブロックからの割り込み通知に基づいて実行される。なお、ここで説明したレジスタとは、一般的にCPU内部に配置された演算用レジスタとは異なり、HWブロックを制御したり、動作状態を確認したりするための専用のレジスタであり、CPUのメモリ空間にマッピングされている。
【0017】
ここで、図29は、レジスタアクセスログの構成を示す図表であり、図30は、割り込みログの構成を示す図表である。また、図31は、アクセスログ・割り込みログを示す説明図である。図29の図表2900や、図30の図表3000に示したように、組み込みソフトウェアに対するデバッグには、レジスタアクセスや割り込みログの情報が、プログラムを解析する際に非常に役に立つ情報となる。そして、検証対象ソフトをHWモデルによって実行させると、図31のようなレジスタアクセスや割り込みログの情報を出力結果として取得できる。そして、これらの情報によりシステムの動作がわかるため、ログに関する情報だけでもある程度のデバッグをおこなうことができる。
【0018】
上述のように、HWモデル112によるログデータ105を用いてデバッグをおこなう際の作業としては、具体的には、(1)レジスタの設定内容およびソースコードの確認処理と、(2)割り込み動作の確認処理との2つがある。(1)の確認処理では、レジスタアクセスログ内の確認したいアクセスの値や、レジスタアクセスとそれに対応する検証対象ソフトウェアのソースコードを確認しながら正しく動作しているか確認する。
【0019】
一方、(2)の確認処理では、実行結果として出力されたログデータ105内の割り込みログと、この割り込みログに対応するコマンド起動レジスタなどを確認して、起動をトリガとした割り込み発生のシーケンスの流れが正しく実行されているかどうかを確認する。同時にコマンド起動部分のソースコードも確認する。どちらの場合も検証者が、テキストファイルやプリントアウトした紙を見比べながらデバッグをおこなっていた。
【0020】
【特許文献1】特開2001−256072号公報
【発明の開示】
【発明が解決しようとする課題】
【0021】
しかしながら、上述したようなHWモデル112による実行結果を用いたデバッグは、検証者の手によってマニュアル的に実行されていたため、多大な時間を要するという問題があった。
【0022】
さらに、(1)の確認処理の場合、出力結果を目視で確認したり、レジスタ名を使ってソースコードを検索したりといった作業が要求される。ところが、ログと対応するソースコード部分を探す場合も、同じレジスタにアクセスするコードが複数箇所にあった場合には、どちらのソースコードの実行結果であるかを特定できない。たとえば、レジスタアクセスのシーケンスのログからソースコードの該当個所を類推することも不可能ではないが、対応箇所のソースコードを書いた検証者以外が、シーケンスから該当個所を特定するのは困難である。しかしながら、実際の開発環境では、1つのソフトウェアを複数名で分担して作成するのが一般的であるため、ソースコードの特定が非常に困難であるという問題があった。
【0023】
また、(2)の確認処理の場合、バグにより、途中で割り込みの順序が乱れてしまっているような出力結果では、ログから割り込み発生を起こしたソースコードを特定するのは困難であった。たとえば、図32は、ブロックAに関するログの一例を示す説明図である。そして、図33は、ログに応じたシーケンスを示す説明図である。図32に示したようなログの記述のみから検証をおこなう場合、図33のパターン1のようなシーケンスであってもパターン2のようなシーケンスであっても同一の記述になってしまい判別できないという問題があった。
【0024】
この発明は、上述した従来技術による問題点を解消するため、デバッグに必要となるソースコードに関する情報を自動的に提供するソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法を実現することを目的とする。
【課題を解決するための手段】
【0025】
上述した課題を解決し、目的を達成するため、このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法は、コンピュータにおいて、ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、前記ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレスを関連付けたログデータを生成する処理と、生成されたログデータを記録領域に蓄積する処理と、蓄積されたログデータを出力する処理とを含むことを要件とする。
【0026】
このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法によれば、指定したレジスタへのアスクセスログと、当該アクセスログを出力させる命令元となったソースコードとが関連付いたログデータを出力することができる。
【0027】
また、このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法は、検証対象ソフトウェアのソースコード群と、前記検証対象ソフトウェアをハードウェアモデルまたはハードウェアによって実行させた際のログデータ群とにアクセス可能なコンピュータにおいて、前記ログデータ群に記述されているレジスタの中から任意のレジスタの選択を受け付ける処理と、前記ソースコード群の中から、受け付けられた任意のレジスタの記述が含まれているソースコードを検索する処理と、検索されたソースコードを前記任意のレジスタが記述されたログデータと対応付けて出力する処理とを含むことを要件とする。
【0028】
このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法によれば、指定したレジスタへのアクセスを実行するソースコードを自動的に抽出して検証者に提供することができる。
【発明の効果】
【0029】
このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法によれば、デバッグに必要となるソースコードに関する情報を自動的に提供することによって効率的なデバッグを支援することができるという効果を奏する。
【発明を実施するための最良の形態】
【0030】
以下に添付図面を参照して、このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法の好適な実施の形態を詳細に説明する。このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法では、指定されたレジスタアクセスや割り込み動作とソースコードとの対応情報を自動的に抽出して検証者に提供することによってデバッグを支援することができる。
【0031】
(ソフトウェアデバッグ支援処理の概要)
まず、本実施の形態にかかるソフトウェアデバッグ支援処理について説明する。図1は、本実施の形態にかかるソフトウェアデバッグ支援処理の概要を示す説明図である。図1のように、本実施の形態では、ソフトウェアデバッグ支援装置100によって検証者(ユーザ)が指定したレジスタアクセスや割り込み動作のログを対応するソースコードと関連付けて出力することによって、検証者によるソフトウェアデバッグを支援することができる。
【0032】
まず、本実施の形態にかかるソフトウェアデバッグ支援装置100の構成について説明する。図1のように、ソフトウェアデバッグ支援装置100は、ESLツール110と、ソフトウェアデバッグプログラム120と、GUI130とを含んだ構成になっている。ESLツール110は、従来より用いられている設計手法である。そして、今回のソフトウェアデバッグ支援装置100のように、ソフトウェア早期開発に用いる場合は、図1のようにISS111と、HWモデル112とを搭載した構成を用いる。
【0033】
このISS111およびHWモデル112は、検証対象ソフトの実行形式ファイル102を読み込むことによって、仮想的なSoCを構成する。また、HWモデル112には入力データ103としてテストパターンが入力される。HWモデル112では、ISS111の制御に応じて入力された入力データ103のテストパターンに応じた処理を実行し、この実行結果が、出力データ104として出力される。また、HWモデル112からは、ISS111からの制御に応じたログデータ105が出力される。
【0034】
また、ソフトウェアデバッグプログラム120は、検証対象ソフトウェアのソースコード101と実行形式ファイル102とを読み込み、ISS111の実行制御と、ISS111からのCPU動作情報を取得することによって、デバッグ機能を実現する。この、デバッグ機能には、従来のブレークポイント設定、継続実行、ステップ実行、ソースコード表示、変数・メモリ表示に加えて、指定したレジスタアクセスログ131と対応するソースコード132とを対応付けて表示させる機能を備えている。したがって、GUI130は、ソフトウェアデバッグプログラム120における実行制御の受け付けや、ソースコード132といったデバッグに用いる情報が表示される。
【0035】
つぎに、上述したソフトウェアデバッグ支援装置100のハードウェア構成について説明する。図2は、ソフトウェアデバッグ支援装置のハードウェア構成を示すブロック図である。ソフトウェアデバッグ支援装置100は、図2のようなハードウェア構成をもつ汎用コンピュータによってESLツール110と、ソフトウェアデバッグプログラム120と、GUI130とが実現される。
【0036】
たとえば、図2において、ソフトウェアデバッグ支援装置100は、CPU(Central Processing Unit)201と、ROM(Read‐Only Memory)202と、RAM(Random Access Memory)203と、磁気ディスクドライブ204と、磁気ディスク205と、光ディスクドライブ206と、光ディスク207と、ディスプレイ208と、入力I/F(Interface)209とネットワークI/F(Interface)210と、を備えている。また、各構成部はバス220によってそれぞれ接続されている。
【0037】
ここで、CPU201は、ソフトウェアデバッグ支援装置100の全体の制御を司る。ROM202は、ブートプログラムや、ESLツールや、ソフトウェアデバッグプログラムなどのプログラムを記憶している。RAM203は、CPU201のワークエリアとして使用される。磁気ディスクドライブ204は、CPU201の制御にしたがって磁気ディスク205に対するデータのリード/ライトを制御する。磁気ディスク205は、磁気ディスクドライブ204の制御で書き込まれたデータを記憶する。
【0038】
光ディスクドライブ206は、CPU201の制御にしたがって光ディスク207に対するデータのリード/ライトを制御する。光ディスク207は、光ディスクドライブ206の制御で書き込まれたデータを記憶したり、光ディスク207に記憶されたデータをコンピュータに読み取らせたりする。
【0039】
ディスプレイ208は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ208は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【0040】
入力インターフェース(以下、「入力I/F」と略する)209は、キーボード、タッチパネルなど検証者からの指示を受け付ける。たとえば、キーボードの場合、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。また、マウスの場合は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【0041】
ネットワークインターフェース(以下、「ネットワークI/F」と略する)210は、
通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワークに接続され、このネットワークを介して他の装置に接続される。そして、ネットワークI/F210は、ネットワークと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。ネットワークI/F210には、たとえばモデムやLANアダプタなどを採用することができる。
【0042】
以上説明したように、ソフトウェアデバッグ支援装置100は、汎用のコンピュータのハードウェア資源201〜210を利用してESLツール110、ソフトウェアデバッグプログラム120およびGUI130を実現することができる。たとえば、ESLツール110およびソフトウェアデバッグプログラム120は、CPU201、ROM202、RAM203によって実現することができる。また、GUI130は、ディスプレイ208および入力I/F209によって実現することができる。
【0043】
また、ソフトウェアデバッグ支援装置100の入力情報であるソースコード(全体)101、実行形式ファイル102および入力データ(テストパターン)103は、あらかじめ磁気ディスク205や、光ディスク207に記録しておいてもよいし、ネットワークI/F210を介して外部から取得してもよい。また、磁気ディスク205や、光ディスク207を、デバッグ支援装置100からの出力情報であり出力データ104やログデータ105を蓄積する蓄積手段として利用することもできる。
【0044】
また、上述の説明では、ESLツール110、ソフトウェアデバッグプログラム120およびGUI130を1台の汎用コンピュータによって実現させているが、複数のコンピュータによってそれぞれの機能を実現させ、ネットワークI/F210を介して、1つのソフトウェアデバッグ支援システムとして提供してもよい。
【0045】
以下に、図1によって説明したようなソフトウェアデバッグ支援処理を実現するための具体的な実施例1,2について説明する。実施例1,2は、図1のソフトウェアデバッグ支援装置100によって実現されるが、それぞれ異なる構成のログデータ105を扱うため(実施例1の場合は、従来のログデータと同じ構成)、ソフトウェアデバッグ支援用に検証者に提供される情報もそれぞれ異なる構成となる。したがって、検証者は、デバッグ支援装置100のハードウェア環境や、デバッグ処理における検証目的に応じて、実施例1,2のいずれかを利用すればよい。
【0046】
(実施例1)
実施例1では、図25にて説明したような、通常のログデータを利用して、指定されたアクセスログや割り込みログについて、対応するソースコードを抽出してユーザに提供することでデバッグを支援する構成になっている。
【0047】
上述したように、本実施の形態では、図1にて説明したデバッグ支援装置100によってソフトウェアデバッグ支援処理が実現される。したがって、まず、実施例1におけるソフトウェアデバッグプログラム120の構成について説明する。図3は、実施例1におけるソフトウェアデバッグプログラムの構成を示すブロック図である。図3のように、ソフトウェアデバッグプログラム120には、ソースコード101、実行形式ファイル102およびログデータ105が入力され、下記のような処理を実行するプログラム群によって構成されている。
【0048】
・ログデータ入力部:ログデータからレジスタアクセス・割り込みログを読み込ませる。
・レジスタアクセスログ表示部:ログデータ入力部が読み込んだレジスタアクセス・割り込みログをGUI上に表示させる。
・GUI制御受付部:検証者からのGUI操作を受け付ける。
・ソースコード検索部:GUI制御受付部によって指定されたレジスタ名からソースコードを検索する。検索時に同じレジスタ名を含んだソースコードが複数の箇所に存在する場合は、すべてのソースコードの記述箇所を検証候補としてGUI上に表示させて選択可能にする。
・ソースコード表示部:ソースコード検索部によって検索されたソースコードを表示させる。
【0049】
つぎに、実施例1におけるソフトウェアデバッグ支援処理の手順について説明する。図4は、実施例1におけるソフトウェアデバッグ支援処理の手順を示すフローチャートである。図4のフローチャートは、GUI130などによって検証者からのソース表示指示が入力されると、これをトリガとしてソフトウェアデバッグ支援処理を開始する。まず、GUI130からソース表示指示があると、指定されたレジスタ名でソースコードを検索する(ステップS401)。ステップS401によって、指定されたレジスタ名に対応するレジスタアクセスの記述が検索されるため、検索されたれレジスタアクセス記述が複数あるか否かを判断する(ステップS402)。
【0050】
このステップS402において、レジスタアクセス記述が複数ある場合(ステップS402:Yes)、これら複数のレジスタアクセス記述の候補部分の一覧をGUI130上に表示させる(ステップS403)。ここで表示させた候補部分の一覧から検証者からの選択を受け付けると、選択された部分のソースコード132を表示させ(ステップS404)、一連の処理を終了する。
【0051】
一方、ステップS402において、検索されたレジスタアクセス記述が一カ所のみであった場合(ステップS402:No)、検索されたレジスタアクセス記述部分に対応するソースコードを表示し(ステップS405)、一連の処理を終了する。
【0052】
なお、図4のフローチャートでは、検証者にレジスタ名を指定させ、指定されたレジスタ名からソースコードを検索しているが、ログデータ一覧の中から検証したいログデータを指定させてもよい。このような場合は、選択されたログデータの中からレジスタ名を抽出する。そして抽出されたレジスタ名について図4のフローチャートの処理をおこなえばよい。
【0053】
このように、実施例1では従来のログデータをそのまま利用して指定したレジスタに関するレジスタアクセスログ131とソースコード132とを対応付けて表示させることができる。したがって、検証者は、従来のようにすべてのソースコード101とログデータ105とを比較しながら対応関係を把握するような手間が削減される。また、上述したように、ログデータ105は従来の構成のものをそのまま利用するため、HWモデル112もあらたな機能を追加することなく従来の構成をそのまま利用することができる。
【0054】
(実施例2)
実施例2は、ログデータ105として実施例1の場合よりも多くの情報を取得することによって、実施例1よりも多様な情報を提供してデバッグ支援を実現する。なお、実施例2の場合も実施例1と同様に図1のようなデバッグ支援装置100の構成によって実現されるが、HWモデル112内部の構成と、ソフトウェアデバッグプログラム120内部の構成、さらに、HWモデル112から出力させるログデータの構成が異なっている。したがって、以下に各構成の相違点と、具体的なデバッグ支援処理の内容とについて説明する。
【0055】
<ソフトウェアデバッグプログラムの構成>
まず、実施例2におけるソフトウェアデバッグプログラムについて説明する。図5は、実施例2におけるソフトウェアデバッグプログラムの構成を示すブロック図である。図5のように、ソフトウェアデバッグプログラム120には、レジスタアクセスログ表示部、ソースコード表示部、ソース行取得部、GUI制御受付部、ログデータ入力部、ログデータ検索部が含まれている。このように、実施例1と比較して、ソース行取得部が追加され、ソースコード検索部に替わってログデータ検索部が追加された構成になっている。
【0056】
また、ソフトウェアデバッグプログラム120に入力されるソースコード101、実行形式ファイル102は、実施例1と同じ情報である。また、上述したように、ログデータ105は、実施例2のデバッグ支援処理を実現するために、HWモデル112によって、実施例1のログデータ105(図29,30に示した従来のログデータと同じ構成)とは異なる構成のログデータ105が出力されており、このログデータ105が入力される。なお、HWモデル112によるログデータ105の出力処理については後述する。
【0057】
つぎに、上述したソフトウェアデバッグプログラムの各機能部について、実施例1と異なる処理をおこなう点について説明する、ソース行取得部は、レジスタアクセスログ表示部によって表示されたレジスタアクセスログや割込ログの中から検証者にソースコード表示指示を受け付けると、ログデータ105に関連付けられたた命令アドレスを参照して対応するソースコード行数を取得する。したがって、ソースコード表示部は、指定された行数に対応するソースコード132の表示をおこなう。なお、アドレスとソースコード132の行数との対応情報は、HWモデル112に入力される実行形式ファイル102に含まれるため、HWモデル112によって、命令アドレスが関連付いたログデータ105を出力させている(詳しくはHWモデル112の構成にて説明する)。またログデータ検索部は、検証者によって指定された割り込み名でログデータ105を検索する処理をおこなう。
【0058】
<HWモデルの構成>
つぎに、実施例2のソフトウェアデバッグ支援装置100に適用するHWモデルの構成について説明する。図6は、実施例2におけるHWモデルの構成を示すブロック図である。図6のように、実施例2のデバッグ支援装置100のESLツール110のHWモデル112は、デバッグ用の情報を含んだログデータ105を出力させるために、あらたな機能を含んだ構成になっている。
【0059】
具体的に説明すると、図6のHWモデル112では、従来のHW機能部600に加えて、レジスタアクセスログ出力部601と、割り込みログ出力部602と、命令アドレス取得部603と、スタックメモリ読み出し部604と、リターンアドレス取得部605とを備えている。
【0060】
レジスタアクセスログ出力部601は、従来のログ(「従来のログ」とは図29にて説明したログデータを意味する)に加えてデバッグ用の情報をあらたに出力する。割り込みログ出力部602は、従来の割り込みログ(「従来の割り込みログ」とは図30にて説明したログデータを意味する)に加えてデバッグ用の情報をあらたに出力する。命令アドレス取得部603は、レジスタアクセスが発生した時点のプログラムの命令アドレス(プログラムカウンタの値)を取得する。命令アドレスは、ISS111のAPI(Application Program Interface)として用意されているPC取得関数を用いて取得する。
【0061】
スタックメモリ読み出し部604は、ISS111からスタックメモリの内容を読み出す処理をおこなう。このスタックメモリの読み出しもAPIとして用意されているメモリ読み出し関数を用いて実現する。リターンアドレス取得部605は、読み出したスタックメモリの内容から呼び出し元の関数を示すリターンアドレスを取得する処理をおこなう。
【0062】
<ログの構成>
つぎに、実施例2におけるレジスタアクセスログ、割り込みログそれぞれの構成について説明する。図6にて説明したように、実施例2のHWモデル112は、あらたな機能部601〜605が追加されている。したがって、HWモデル112からは、図30,31にて説明した従来のログや従来の割り込みログにあらたにデバッグ用の情報が追加された構成のログデータ105が出力される。
【0063】
図7は、実施例2におけるレジスタアクセスログの構成を示す図表であり、図8は、実施例2における割り込みログの構成を示す図表である。実施例2において、レジスタアクセスに関するログデータは、図7の図表700に示すように従来のログデータの構成に、割り込みID、命令アドレスおよびリターンアドレスが追加された構成になっている。また、図8の図表800に示すように従来のログデータの構成に、割り込み種別、割り込みIDが追加されている。ここで追加されている割り込みIDは、割り込みの原因となるコマンド起動レジスタと割り込みを対応付けるために割り当てられるIDである。なお、本実施の形態では、割り込み種別として、下記の4種類に区別された情報を用いる。
【0064】
・コマンド完了:COM_END
・イネーブル変化:ENABLE
・その他:OTHER
・要因変化:MASKED
【0065】
このように、実施例2のHWモデル112では、従来のログデータにデバッグ用の情報が関連付いたあらたなログデータ105を生成する構成になっている。したがって、以下に、HWモデル112が各種実行処理をおこなった場合のログデータ105の出力手順と、出力されたログデータ105を用いソフトウェアデバッグ支援処理について説明する。
【0066】
<HWモデル実行処理(レジスタアクセスログ出力時)>
まず、HWモデル112におけるレジスタアクセスログ出力時の実行処理の手順を説明する。図9は、HWモデルにおけるレジスタアクセスログ出力時の実行処理の手順を示すフローチャートである。図9において、まず、実行中のプログラムにおいてレジスタアクセスが発生したか否かを判断する(ステップS901)。ここで、レジスタアクセスが発生するまで待ち(ステップS901:Noのループ)、レジスタアクセスが発生すると(ステップS901:Yes)、命令アドレス取得部603によってレジスタアクセス発生時に実行された命令アドレスを取得する(ステップS902)。
【0067】
つぎに、スタックメモリ読み出し部604によってスタックメモリを読み出し(ステップS903)、リターンアドレス取得部605によって、ステップS903によって読み出したスタックメモリの内容を解析し、リターンアドレスが存在する場合は値を保持する(ステップS904)。そして、プログラムの実行結果に加えて、ステップS902にて取得した命令アドレスと、ステップS904にて取得したリターンアドレスとをログデータ105として出力する(ステップS905)。その後、実行させたプログラムに応じてハードウェア構成を実行させて(ステップS906)、一連の処理が終了する。
【0068】
このように、HWモデル112は、レジスタアクセスを実行した場合に、このレジスタアクセスの実行を命令したソースコードの命令アドレスを取得し、命令アドレスが関連付いたログデータ105生成され蓄積されている。また、実行したレジスタアクセスにおいてリターンアドレスが存在する場合には、リターンアドレスを併せて取得し、リターンアドレスが関連付いたログデータ105が生成され蓄積されていることになる。
【0069】
<ソースコード表示処理>
つぎに、上述のようにデバッグ用の情報として各種アドレスを含んだログデータ105を用いたソフトウェアデバッグ支援処理について説明する。ここでは、具体的には、ソフトウェアデバッグプログラム120によってログデータ105から指定したログについてのソースコードを表示させることによって検証者のソフトウェアデバッグを支援する。
【0070】
図10は、実施例2におけるソフトウェアデバッグプログラムのソースコード表示処理の手順を示すフローチャートである。図10のフローチャートでは、検証者がGUIを使ってレジスタアクセスに対応するソースコード132を表示させる指示をおこなった際の処理をあらわしている。
【0071】
図10において、まず検証者からのGUIの入力を受け付けたか否かを判断する(ステップS1001)。ここで、GUI入力を受け付けたと判断されるまで待ち(ステップS1001:Noのループ)、GUI入力を受け付けると(ステップS1001:Yes)、受け付けたGUI入力がソース表示指示か呼び出し元関数表示指示かを確認するための処理に移行する。
【0072】
まず、受け付けたGUI入力がソース表示指示か否かを判断する(ステップS1002)。ここで、受け付けたGUI入力がソース表示指示であった場合(ステップS1002:Yes)、ソース表示をおこなうため、指定アクセス部分の命令アドレスを取得し(ステップS1003)、さらに、取得した命令アドレスに対応するソース行番号を取得する(ステップS1004)。そして、取得したソース行番号を参照してソースコードを表示し(ステップS1005)、一連の処理を終了する。
【0073】
一方、ステップS1002において、ソース表示指示ではなかった場合(ステップS1002:No)、呼び出し元表示指示と判断し、リターンアドレスがあるか否かを判断する(ステップS1006)。ここで、リターンアドレスがあると判断された場合は(ステップS1006:Yes)、リターンアドレスを取得し(ステップS1007)、リターンアドレスに対応するソース行番号を取得する(ステップS1008)。そして、取得したソース行番号を参照してソースコードを表示し(ステップS1009)、一連の処理を終了する。以上説明したステップS1005およびステップS1009のソースコード表示処理では、表示対象部分のソースコードがGUI130上に表示される。また、ステップS1006において、リターンアドレスがないと判断された場合(ステップS1006:No)、そのまま一連の処理を終了する。
【0074】
このように、ソフトウェアデバッグ支援装置100のHWモデル112によって事前に出力されたレジスタアクセスログを用いて、ソフトウェアデバッグプログラム120がレジスタアクセスの実行元となる命令アドレスやリターンアドレスに対応するソースコード132を自動的に抽出する。抽出されたソースコード132は、GUI130によってレジスタアクセスログ131と対応付けられた情報として表示され、検証者によるソフトウェアデバッグ用の情報として提供される。
【0075】
<HWモデル実行処理(割り込みログ出力時)>
つぎに、HWモデル112の実行処理によって割り込みが発生した場合の割り込みログ出力について説明する。図11は、HWモデルにおける割り込みログ出力時の実行処理の手順を示すフローチャートである。割り込み処理は、レジスタライトが発生した際にそのレジスタが、(ア)コマンド起動レジスタ、(イ)割り込みマスク/イネーブルレジスタ、(ウ)それ以外である場合におこなわれる。したがって、レジスタライトが上述の(ア)〜(ウ)のいずれかを確認した後、それぞれの場合に応じた処理をおこなう。
【0076】
図11のフローチャートにおいて、まず、レジスタライトが発生したか否かを判断する(ステップS1101)。ここで、レジスタライトが発生するまで待ち(ステップS1101:Noのループ)、レジスタライトが発生すると(ステップS1101:Yes)、つぎに、ステップS1101において、ライトされたレジスタが起動レジスタであるか否かを判断する(ステップS1102)。
【0077】
このステップS1102において、ライトされたレジスタが起動レジスタであると(ステップS1102:Yes)、上述した(ア)の場合と判断される。したがって、まず、割り込みIDを割り当て(ステップS1103)、アクセスログを出力し(ステップS1104)、HW処理を実行する(ステップS1105)。そして、ステップS1105のHW処理実行後、割り込みが発生するか否かを判断して(ステップS1106)、割り込みが発生すると判断された場合には(ステップS1106:Yes)、割り込みを実行させる(ステップS1107)。そして、ステップ1107にて実行した割り込み処理のログを出力して(ステップS1108)、一連の処理を終了する。また、ステップS1105のHW処理実行後、割り込みが発生しないと判断された場合には(ステップS1106:No)、そのまま一連の処理を終了する。
【0078】
一方、ステップS1102において、ライトしたレジスタが起動レジスタでなかったとすると(ステップS1102:No)、上述した(イ)また(ウ)の場合と判断される。したがって、今度は、ライトしたレジスタがマスク/イネーブルレジスタか否かを判断する(ステップS1109)。ここで、アクセスしたレジスタがマスク/イネーブルレジスタのいずれかであれば(ステップS1109:Yes)、(イ)の場合と判断される。したがって、マスク/イネーブルレジスタのアクセスログを出力し(ステップS1110)、さらに、割り込みが発生するか否かを判断する(ステップS1111)。
【0079】
ステップS1111において、割り込みが発生すると判断された場合には(ステップS1111:Yes)、そのまま、割り込み処理を実行させる(ステップS1112)。そして、ステップ1112にて実行した割り込み処理のログを出力して(ステップS1113)、一連の処理を終了する。なお、ステップS1111において、割り込みが発生しないと判断された場合には(ステップS1111:No)、そのまま一連の処理を終了する。
【0080】
そして、ステップS1109において、アクセスしたレジスタがマスク/イネーブルレジスタのいずれでもなければ(ステップS1109:No)、(ウ)の場合と判断される。したがって、アクセスしたレジスタは、起動レジスタ、マスク/イネーブルレジスタのいずれにも該当しないその他のレジスタとしてアクセスログを出力して(ステップS1114)、一連の処理を終了する。
【0081】
<割り込み対応レジスタ表示処理>
つぎに、図11の処理によってHWモデル112から出力されたログデータ105を用いて、割り込みに対応する起動レジスタの表示処理の手順について説明する。図12は、実施例2におけるソフトウェアデバッグプログラムの割り込み対応レジスタの表示処理の手順を示すフローチャートである。ここでは、ソフトウェアデバッグプログラム120は、検証者からGUI130を介して割り込み原因表示指示があった場合、割り込みログの割り込み種別が(A)マスク/イネーブル変化による割り込み、(B)コマンド完了による通常の割り込み、(C)それ以外の割り込みのいずれであるかを確認して、それぞれの割り込み種別に応じた表示処理をおこなう。
【0082】
図12のフローチャートにおいて、まず、検証者から割り込み原因表示指示を受け付けたか否かを判断する(ステップS1201)。ここで、割り込み原因表示指示を受け付けるまで待ち(ステップS1201:Noのループ)、割り込み原因表示指示を受け付けると(ステップS1201:Yes)、つぎに、割り込みの発生原因はマスク/イネーブル変化によるか否かを判断する(ステップS1202)。このステップS1202における割り込み発生原因の判別は、ログデータ105に含まれている情報の中の割り込み種別を参照する。
【0083】
ステップS1202において、割り込み発生原因が(A)マスク/イネーブル変化であった場合(ステップS1202:Yes)、まず、ログデータ105から割り込み要因を取得し(ステップS1203)、取得した割り込み要因でログを検索する(ステップS1204)。そして、その割り込みが発生した時間より前の時間で一番近い位置の割り込み要因変化部分を探し、その割り込みIDを取得する(ステップS1205)。その後、ステップS1205にて取得した割り込みIDによってログデータ105を検索し(ステップS1206)、対応するレジスタアクセスを特定し、GUI130上に表示して(ステップS1207)、一連の処理を終了する。
【0084】
一方、ステップS1202において、割り込み発生原因が(A)ではない場合(ステップS1202:No)、さらに(B)コマンド完了による通常の割り込みであるか否かを判断し(ステップS1208)、(B)の割り込みであった場合(ステップS1208:Yes)、割り込みログからIDを取得し(ステップS1209)、そのIDでログを検索し(ステップS1210)、対応するレジスタアクセスを特定してGUI上に表示して(ステップS1211)、一連の処理を終了する。
【0085】
また、ステップ1208において(B)の割り込みでなかった場合(ステップS1208:No)、(C)それ以外の割り込みであると判断される。したがって、GUI130に割り込みに対応する起動レジスタが無いというメッセージのみを表示して(ステップS1212)、一連の処理を終了する。
【0086】
<ログデータの出力例>
ここで、図13−1〜図13−3は、ログデータの出力例を示す説明図である。図13−1は、上述した(A)の場合に出力されるログデータ105である。具体的には、イネーブルレジスタへの書き込みにより割り込みが発生する場合であり、2行目の割り込みイネーブルレジスタへの書き込みにより割り込みが無効となっている。また、3行目のコマンド起動レジスタへの書き込みによりHWモデル112の処理が開始される(起動レジスタID:0x324)。
【0087】
さらに、10行目でコマンド完了により割り込み要因レジスタの値が変化し、割り込み状態となっている。このとき、割り込みが無効となっているため、実際に割り込みは発生しない。そしてログデータ105には起動レジスタのIDに対応する0x324が記録されている。また、12行目の割り込みイネーブルレジスタへの書き込みにより割り込みが有効となっている。その結果、13行目において、10行目で割り込み状態となっていた割り込みが発生している。ここでは、イネーブルレジスタ変更による割り込み発生のため、割り込みIDは記録されない。
【0088】
つぎに、図13−2は、上述した(B)の場合に出力されるログデータ105である。起動コマンドの完了に伴った割り込みが発生する場合となっている。さらに、図13−3は、上述した(C)の場合に出力されるログデータ105である。(C)の場合、起動/マスク/イネーブルレジスタとは関係なく発生する割り込み(エラーなど)をあらわしている(たとえば、9行目のように起動/マスク/イネーブルレジスタとは関係のないエラーによる割り込み)。上述したように、(C)の割り込みの場合、対応するIDがないため割り込みIDは記録されない。
【0089】
このように、ソフトウェアデバッグ支援装置100のHWモデル112によって割り込みが発生すると、割り込みの種別に応じて、割り込みに対応する起動レジスタへのアクセスを表示され、検証者によるソフトウェアデバッグ用の情報として提供される。また、割り込み要因がわからない場合には、その旨を示すメッセージを出力することもできる。
【0090】
(デバッグ処理の手順)
つぎに、本実施の形態にかかるデバッグ処理の手順について説明する。図14は、本実施の形態にかかるデバッグ処理の手順を示すフローチャートである。上述したように、本実施の形態では、ソフトウェアデバッグプログラム120によってデバッグ支援処理をおこなうことによって指定した箇所に対応するソースコードが表示される。検証者は、表示されたソースコードから検証箇所を確認して、適宜ソースコードの修正をおこなう。
【0091】
デバッグ処理について説明すると、図14のフローチャートにおいて、まず、バッチ処理により複数のテストパターンを連続実行する(ステップS1401)。そして実行結果と期待値との比較結果が正しいか否かを判断する(ステップS1402)。ここで、比較結果が正しいと判断された場合は(ステップS1402:Yes)、ソースコードにバグは含まれないため、そのまま一連の処理を終了する。
【0092】
一方、ステップS1402において、比較結果が正しくないと判断された場合は(ステップS1402:No)、デバッグ支援処理によって再度アクセスログ、割り込みログのソースコードを確認する(ステップS1403)。そして、ステップ1403のソースコードの確認処理によって問題部分を特定できたか否かを判断する(ステップS1404)。ここで、問題部分が特定できた場合は(ステップS1404:Yes)、問題部分のファームを修正し(ステップS1405)、ステップS1401の処理に戻り、再度バッチ処理を実行する。
【0093】
また、ステップS1404において、問題部分が特定できなかった場合(ステップS1404:No)、従来手法を用いてソースコードを詳細に調査して問題特定し(ステップS1406)、ステップS1405の処理に移行する。このように、ソフトウェアデバッグ支援装置100では、ソースコード修正後のソフトウェアのデバッグ処理を繰り返すことにより検証精度を向上させることができる。
【0094】
以上説明したように、実施例2では下記のような機能が実現される。したがって、検証者へデバッグに必要となるソースコードに関する情報を自動的に提供可能となりファーム開発期間を短縮できる。
・デバッガでレジスタログ/割り込みログ表示
・レジスタアクセスとソースとの対応表示
・ログデータ内の指定された割り込み処理についての割り込みの原因(レジスタアクセスログ)表示
・指定された起動レジスタアクセス部分のソースコード表示
【0095】
(表示例)
つぎに、実施例2のソフトウェアデバッグ支援装置100を利用して、検証者がレジスタアクセスに対応するソースコードを表示させる場合と、割り込みに対応する起動レジスタを表示させる場合について具体例を挙げて説明する。
【0096】
<SoCの構成>
まず、SoCの構成について説明する。図15は、SoCの構成例を示すブロック図である。以下表示例はいずれも図15のSoC1500によって検証対象ソフトウェアが例の説明に使用するSoC例のブロック図を示す。SoC1500では、CPU上のファームからブロックA、ブロックB、ブロックCの制御をおこなう。
【0097】
<ソースコード表示時>
つぎに、ソースコード表示時の表示例について説明する。ここでは、まずソースコード表示時のHWモデルの処理について説明した後、GUIへの表示例について説明する。
【0098】
・HWモデルのシーケンス
図16は、ソースコード表示時のHWモデルの処理を示すシーケンス図である。図16では、通常のレジスタ(コマンド起動レジスタではない)にアクセスする際の処理を示している。まず、ISS(ファーム)111によるレジスタアクセスが発生すると、HWモデル112では、命令アドレスを取得する(ステップS1601)。ステップS1601では、HWモデル112は、ISS111に対して命令アドレスの出力を要求する。この要求に応答してISS111から命令アドレスが送信されることによってHWモデル112が命令アドレスを取得することができる。
【0099】
続いて、HWモデル112は、取得した命令アドレスを参照してISS111からスタックメモリの内容を読み出す(ステップS1602)。このステップS1602の処理もステップS1601と同様に、HWモデル112からISS111へスタックメモリの読み出しを要求することによって実現される。そして、HWモデル112は、ステップS1602によって読み出したスタックメモリからリターンアドレスを取り出し(ステップS1603)、命令アドレスと、リターンアドレスを加えたレジスタアクセスログを出力し(ステップS1604)、最後に実際のハード処理を実行する(ステップS1605)。
【0100】
・GUIの表示例
つぎに、ソースコード表示時のGUIの表示例について説明する。図17は、ソースコード表示時のGUIの表示例を示す説明図である。上述した図13-1はこの時のレジスタアクセスログである。図17のように、ソースコード表示時には、複数のウィンドウが表示される。そして、たとえば、上側のウィンドウ1701にレジスタアクセス・割り込みログを表示し、下側のウィンドウ1702にソースコードを表示させる。図17の表示例では、レジスタアクセスログのBLOCK_A__IRQ_CLEARレジスタへの書き込みを指定し、ソースコード表示ボタンBをクリックすることによって、ソースコード表示画面にレジスタアクセスに対応するソースコード行「write_reg(BLOCK_A__IRQ_CLEAR,int_clear);」が表示されている。
【0101】
ソフトウェアデバッグプログラム120の動作としては、レジスタアクセスログの時間536465におけるBLOCK_A__IRQ_CLEARレジスタへの書き込みの際、実行形式ファイル内のデバッグ情報から、命令アドレス0xB588に対応するソースコード行を求める。そして、その行数のソースコードをソース表示ウィンドウに表示させる。さらに、ソフトウェアデバッグプログラム120は、ソースコードウィンドウの呼び出し元関数表示ボタンCがクリックされると、呼び出し元関数のソースコードを表示させる。
【0102】
<割り込み発生時>
つぎに、割り込み発生時の表示例について説明する。ここでも、まず割り込み発生時のHWモデルの処理について説明した後、GUIへの表示例について説明する。
【0103】
・HWモデルのシーケンス
図18−1〜図18−3は、割り込みログ出力時のHWモデルの処理例を示すシーケンス図である。図18−1では、HWモデル112において(ア)のコマンド起動レジスタの割り込みが発生した場合のシーケンスを示している。図18−1のように、ISS111からのコマンド起動レジスタへの書き込みが発生すると、HWモデル112では、割り込みID0x324が割り当てられる(ステップS1811)。そして、割り込みIDを含むレジスタアクセスログが出力される(ステップS1812)。
【0104】
その後、HWモデル112における時間経過を実現するためにタイマー設定がおこなわれ(ステップS1813)、ISS111に送信される。ISS111は、タイマー設定に応答して指定サイクル経過後にタイマーイベントが発生する。なお、タイマー設定およびタイマーイベント発生はISS111のAPIに用意されているものとする。
【0105】
HWモデル112はISS111からのタイマーイベントを受け付けると、ハードウェア処理を実行し(ステップS1814)、その後、割り込みを発生させ(ステップS1815)、割り込みID0x324の割り込みログをログデータ105として出力する(ステップS1816)。
【0106】
つぎに、図18−2は、割り込みログ出力時のHWモデルの処理例(その2)を示すシーケンス図である。HWモデル112において(イ)の割り込みマスク/イネーブルレジスタの割り込みが発生した場合のシーケンスを示している。図18−2のように、ISS111からのコマンド起動レジスタへの書き込みが発生すると、HWモデル112では、ハードウェア処理が実行される(ステップS1821)。そして、ステップS1821の処理完了に伴い、割り込み要因が変化する(ステップS1822)
【0107】
そして、ISS111によって割り込みイネーブルレジスタを有効にされると、さらに、ISS111からのマスク/イネーブルレジスタ書き込みにより、HWモデル112は、割り込みが有効となる(ステップS1823)。そして、HWモデル112は、レジスタアクセスログを出力した後(ステップS1824)、イネーブルレジスタの値と、割り込み要因レジスタの値を確認して割り込みを発生させるかどうかチェックする(ステップS1825)。図18−2の例では、事前に割り込み状態となっているため割り込みを発生させ(ステップS1826)、割り込みログを出力する(ステップS1827)。この場合、対応する起動レジスタがないため、割り込みIDは記録されない。
【0108】
また、図18−3のシーケンスでは、図11における(ウ)のようにコマンド起動/割り込みマスク/割り込みイネーブルレジスタ以外で割り込みに関係のないレジスタへの書き込みがおこなわれる場合のHWモデル112の手順を示している。図18−3のように、ISS111からのレジスタ書き込み(起動/マスク/イネーブル以外)に応答して、HWモデル112では、レジスタアクセスログを出力する(ステップS1831)。なお、ステップS1831の処理の際、HWモデル112は、割り込み処理自体は未発生であるため、割り込みログは出力しない。
【0109】
・GUIの表示例
[マスク/イネーブル変化による割り込み発生時]
つぎに、マスク/イネーブル変化による割り込み発生時のGUIの表示例について説明する。図19−1および図19−2は、マスク/イネーブル変化による割り込み発生時のGUI表示例を示す説明図である。図19−1では、図14において(A)のイネーブル変化による割り込みに相当するログ例である。
【0110】
レジスタアクセスの中から検証者によって検証対象となる割り込みの指定を受け付けた後、割り込み原因表示ボタンAをクリックすることによって、対応する割り込み要因変化ログ、起動レジスタ書き込みが表示される。ソフトウェアデバッグプログラム120では、まず指定された割り込みログの割り込み種別を確認する。このとき割り込み種別は、イネーブル(ENABLE)となっているため、割り込み要因の値「BLOCK_A_INT_DEC_DONE」で時間的に前方向のログを検索し、一番近い位置の要因変化(MASKED)で割り込み要因が同じログを探す。表示例では、一番近い位置として10行目に見つかり、その時点で割り込みID(0x324)が確定する。その後、ID0x324でログを検索し、対応するBLOCK_A_DEC_STARTレジスタへの書き込みアクセスを表示する。割り込み要因も表示する。
【0111】
また、図19−2では、図19−1と同様に図14において(A)のイネーブル変化による割り込みであるが、割り込み要因変化部分のログをGUIに表示しない場合を示している(検証者によって割り込み原因表示ボタンAがクリックされなかった)。このとき、ソフトウェアデバッグプログラム120の処理は、図19−1と同様のものとなる。
【0112】
[コマンド完了による割り込み発生時]
つぎに、コマンド完了による割り込み発生時のGUI表示例について説明する。図20は、コマンド完了による割り込み発生時のGUI表示例を示す説明図である。図20では、図14における(B)の起動コマンドに対応する完了割り込みが発生した場合に表示をあらわしている。
【0113】
図20のように、割り込み原因表示ボタンAをクリックすることにより対応する起動レジスタ書き込みが表示される。このとき、ソフトウェアデバッグプログラム120は、割り込みログの割り込みID0x324で割り込みログを検索する。そして、対応する、時間525650の「BLOCK_A__DEC_START」レジスタへの書き込みアクセスを表示する。さらに、ソースコード表示ボタンBがクリックされると、BLOCK_A__DEC_STARTレジスタへの書き込み部分のソースコードを表示させる。
【0114】
[その他の割り込み発生時]
最後に、上述したマスク/イネーブル変化およびコマンド完了以外の要因による割り込み発生時のGUIの表示例について説明する。図21は、その他の割り込み発生時のGUI表示例を示す説明図である。図21のウィンドウ2100の表示例は、図12にて説明した(C)起動/マスク/イネーブルレジスタとは関係なく発生する割り込み(エラーなど)の場合の表示例である。
【0115】
上述したように、マスク/イネーブル変化およびコマンド完了以外の要因によって発生した割り込みログの場合、特定のレジスタが関連付けられていない。したがって、割り込み原因表示ボタンAをクリックすると、図21のように、「割り込み原因起動レジスタなし」とのメッセージが表示される。このとき、ソフトウェアデバッグプログラム120では、まず、指定された割り込みログについて、ログデータ105を参照して割り込み種別を確認する。割り込み種別はOTHER(その他)となっているため、ソフトウェアデバッグプログラム120は、対応する起動レジスタなしとして、GUI130上に表示させるように動作する。
【0116】
このように、本実施の形態では、従来のログデータを用いて指定したレジスタへのアクセスを実行するソースコードを自動的に抽出して検証者に提供することができる(実施例1)。また、デバッグ用のデータと関連付いたあらたなログデータを生成して、デバッグに必要となるソースコードに関する情報を自動的に提供することもできる(実施例2)。
【0117】
なお、本実施の形態で説明したソフトウェアデバッグ支援方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、このプログラムは、インターネット等のネットワークを介して配布することが可能な媒体であってもよい。
【0118】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0119】
(付記1)コンピュータを、
ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、当該ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレス情報を関連付けたログデータを生成する生成手段、
前記生成手段によって生成されたログデータを記録領域に蓄積する蓄積手段、
前記蓄積手段によって記録領域に蓄積されたログデータを出力する出力手段、
として機能させることを特徴とするソフトウェアデバッグ支援プログラム。
【0120】
(付記2)前記コンピュータを、さらに、
前記蓄積手段によって前記記録領域に蓄積されたログデータの中の任意のログデータの選択を受け付ける受付手段、
前記受付手段によって受け付けられた任意のログデータの実行結果に関連付けられているアドレス情報に対応するソースコードを前記検証対象のソフトウェアから検索する検索手段、
として機能させ、
前記出力手段は、前記検索手段によって検索されたソースコードを前記任意のログデータと対応付けて出力することを特徴とする付記1に記載のソフトウェアデバッグ支援プログラム。
【0121】
(付記3)前記生成手段は、前記ソフトウェアのソースコードごとの実行結果に前記ソースコードの命令アドレスおよびリターンアドレスの少なくとも一方をアドレス情報として関連付けたログデータを生成することを特徴とする付記1または2に記載のソフトウェアデバッグ支援プログラム。
【0122】
(付記4)前記生成手段は、前記ソフトウェアによって割り込み処理が発生した場合、当該割り込み処理をあらわす割り込みIDと、当該割り込み処理の種別情報とを含んだログデータを生成することを特徴とする付記1〜3のいずれか一つに記載のソフトウェアデバッグ支援プログラム。
【0123】
(付記5)前記検索手段は、前記受付手段によって割り込みに関する情報を含んだログデータが選択された場合、当該ログデータに含まれている割り込みIDと、当該割り込み処理の種別情報と用いて当該割り込み処理を起こしたレジスタと検索し、
前記出力手段は、前記割り込みに関する情報を含んだログデータと、前記検索手段によって検索されたレジスタと、を対応付けて出力することを特徴とする付記4に記載のソフトウェアデバッグ支援プログラム。
【0124】
(付記6)検証対象ソフトウェアのソースコード群と、前記検証対象ソフトウェアをハードウェアモデルまたはハードウェアによって実行させた際のログデータ群とにアクセス可能なコンピュータを、
前記ログデータ群に記述されているレジスタの中から任意のレジスタの選択を受け付ける受付手段、
前記ソースコード群の中から、前記受付手段によって受け付けられた任意のレジスタの記述が含まれているソースコードを検索する検索手段、
前記検索手段によって検索されたソースコードを前記任意のレジスタが記述されたログデータと対応付けて出力する出力手段、
として機能させることを特徴とするソフトウェアデバッグ支援プログラム。
【0125】
(付記7)前記出力手段は、前記検索手段によって、前記任意のレジスタの記述が含まれているソースコードが複数検索された場合に、当該検索されたソースコードの一覧を出力し、前記受付手段によって、当該一覧の中から任意のソースコードの選択を受け付けると、当該任意のソースコードを前記任意のレジスタが記述されたログデータと対応付けて出力することを特徴とする付記1に記載のソフトウェアデバッグ支援プログラム。
【0126】
(付記8)前記コンピュータを、さらに、
前記受付手段が、ログデータ群の中の任意のログデータの選択を受け付けた場合に、当該任意のログデータからレジスタの記述を抽出する抽出手段として機能させ、
前記検索手段は、前記ソースコード群の中から、前記抽出手段によって抽出されたレジスタの記述が含まれているソースコードを検索することを特徴とする付記1または2に記載のソフトウェアデバッグ支援プログラム。
【0127】
(付記9)ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、当該ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレス情報を関連付けたログデータを生成する生成手段と、
前記生成手段によって生成されたログデータを記録領域に蓄積する蓄積手段と、
前記蓄積手段によって記録領域に蓄積されたログデータを出力する出力手段と、
を備えることを特徴とするソフトウェアデバッグ支援装置。
【0128】
(付記10)コンピュータが、
ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、当該ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレス情報を関連付けたログデータを生成する生成工程と、
前記生成工程によって生成されたログデータを記録領域に蓄積する蓄積工程と、
前記蓄積工程によって記録領域に蓄積されたログデータを出力する出力工程と、
を実行することを特徴とするソフトウェアデバッグ支援方法。
【図面の簡単な説明】
【0129】
【図1】本実施の形態にかかるソフトウェアデバッグ支援処理の概要を示す説明図である。
【図2】ソフトウェアデバッグ支援装置のハードウェア構成を示すブロック図である。
【図3】実施例1におけるソフトウェアデバッグプログラムの構成を示すブロック図である。
【図4】実施例1におけるソフトウェアデバッグ支援処理の手順を示すフローチャートである。
【図5】実施例2におけるソフトウェアデバッグプログラムの構成を示すブロック図である。
【図6】実施例2におけるHWモデルの構成を示すブロック図である。
【図7】実施例2におけるレジスタアクセスログの構成を示す図表である。
【図8】実施例2における割り込みログの構成を示す図表である。
【図9】HWモデルにおけるレジスタアクセスログ出力時の実行処理の手順を示すフローチャートである。
【図10】実施例2におけるソフトウェアデバッグプログラムのソースコード表示処理の手順を示すフローチャートである。
【図11】HWモデルにおける割り込みログ出力時の実行処理の手順を示すフローチャートである。
【図12】実施例2におけるソフトウェアデバッグプログラムの割り込み対応レジスタの表示処理の手順を示すフローチャートである。
【図13−1】ログデータの出力例(その1)を示す説明図である。
【図13−2】ログデータの出力例(その2)を示す説明図である。
【図13−3】ログデータの出力例(その3)を示す説明図である。
【図14】本実施の形態にかかるソフトウェアデバッグ処理の手順を示すフローチャートである。
【図15】SoCの構成例を示すブロック図である。
【図16】ソースコード表示時のHWモデルの処理を示すシーケンス図である。
【図17】ソースコード表示時のGUIの表示例を示す説明図である。
【図18−1】割り込みログ出力時のHWモデルの処理例(その1)を示すシーケンス図である。
【図18−2】割り込みログ出力時のHWモデルの処理例(その2)を示すシーケンス図である。
【図18−3】割り込みログ出力時のHWモデルの処理例(その3)を示すシーケンス図である。
【図19−1】マスク/イネーブル変化による割り込み発生時のGUI表示例(その1)を示す説明図である。
【図19−2】マスク/イネーブル変化による割り込み発生時のGUI表示例(その2)を示す説明図である。
【図20】コマンド完了による割り込み発生時のGUI表示例を示す説明図である。
【図21】その他の割り込み発生時のGUI表示例を示す説明図である。
【図22】SoCの構成例を示すブロック図である。
【図23】SoCの開発工程を示す説明図である。
【図24】ソフトウェア早期開発環境の構成例を示す説明図である。
【図25】初期段階のソフトウェアデバッグ処理の手順を示すフローチャートである。
【図26】検証進行後のソフトウェアデバッグ処理の手順を示すフローチャートである。
【図27】期待値比較処理を示す説明図である。
【図28】期待値比較に応じたソフトウェアデバッグ処理の手順を示すフローチャートである。
【図29】レジスタアクセスログの構成を示す図表である。
【図30】割り込みログの構成を示す図表である。
【図31】アクセスログ・割り込みログを示す説明図である。
【図32】ブロックAに関するログの一例を示す説明図である。
【図33】ログに応じたシーケンスを示す説明図である。
【符号の説明】
【0130】
100 ソフトウェアデバッグ支援装置
101 ソースコード(全体)
102 実行形式ファイル
103 入力データ(テストパターン)
104 出力データ(実行結果)
105 ログデータ
110 ESLツール
111 ISS
112 HWモデル
120 ソフトウェアデバッグプログラム
130 GUI
131 レジスタアクセスログ
132 ソースコード(ログ対応部分)
【技術分野】
【0001】
この発明は、組み込み型のシステムにおけるソフトウェア開発に用いるソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法に関する。
【背景技術】
【0002】
従来、CPU(Central Processing Unit)コアや、DSP(Digital Signal Processor)コアを集積したSoC(System on Chip)のようなハードウェアとソフトウェアとが混在した組み込み型のシステムを開発する場合には、ハードウェアとソフトウェアとが一体となったシステムとしてシステムレベル検証がおこなわれる。
【0003】
このようなシステムレベル検証をおこなうには、前処理として、個々のハードウェアとソフトウェアとが独立した状態で、初期段階の検証を完了しておかなければならない。ところが、ソフトウェアを検証するには、ソフトウェアを実行させるハードウェアが必要である。したがって、C,C++,SystemCといったプログラム言語で記述したHW(ハードウェア)モデルを用いることによってソフトウェアの検証が実現可能となり、ハードウェアの検証状況を待たずにソフトウェアを早期に開発することができる。
【0004】
ソフトウェアの早期開発のための手法の一つとしてESL(Electronic System Level)設計手法がある。ESL設計手法には、アーキテクチャ探索、高位合成、性能見積もり、消費電力見積もり、ソフトウェア早期開発、HW/SW協調検証などの技術があるが、上述のように組み込み型のシステムの設計の際には、ESL設計手法をソフトウェアの早期開発に適用することができる。
【0005】
図22は、SoCの構成例を示すブロック図である。図22のシステム2200ように、SoCの構成例としては、たとえば、CPUと、メモリとの他に、特定の処理をおこなうための専用のHWブロック群とから構成されている。また、図23は、SoCの開発工程を示す説明図である。図23のように、ESLツール上で動作するHWモデルとISS(インストラクションセットシミュレータ)を使い、ハードウェアが完成する前にソフトウェアの検証を実現している。
【0006】
そして、図24は、ソフトウェア早期開発環境の構成例を示す説明図である。上述したように、SoCの開発工程では、ESLツール110に含まれるISS111上で実行形式ファイル102となったソフトウェアを動作させる。そして、各種のプログラム言語によって記述されたHWモデル112によってHWの処理をおこない、仮想的にシステム全体の動作を実現してソフトウェアの検証を実現する。さらに、ソフトウェアの検証にはソフトウェアデバッグプログラム120を使用する。ソフトウェアデバッグプログラム120では、ソフトウェアのソースコード101と実行形式ファイル102とを読み込み、ISS111の実行制御と、ISS111からのCPU動作情報を取得することによって、デバッグ機能を実現している。この、デバッグ機能には、ブレークポイント設定、継続実行、ステップ実行、ソースコード表示、変数・メモリ表示などがある。そして、GUI130によってソフトウェアデバッグプログラム120における実行制御、ソースコードといったデバッグに用いる情報が表示される。
【0007】
ここで、上述したようなデバッグを実現するための従来のデバッグ支援処理について説明する。図25は、初期段階のソフトウェアデバッグ処理の手順を示すフローチャートである。また、図26は、検証進行後のソフトウェアデバッグ処理の手順を示すフローチャートである。図25のフローチャートは、主にソフトウェア開発の初期段階でバグが多く含まれる時に用いられる。
【0008】
図25において、まず、ソースコードの動作を確認したい部分にブレークポイントを設定し(ステップS1)、ソースコードの動作を継続実行させる(ステップS2)。そして、ブレークが発生すると(ステップS3)、停止させて、ソースコード、変数、メモリなどの各値の内容確認をおこなう(ステップS4)。そして、バグが見つかったか否か、および問題がありそうな部分を過ぎたか否かによりデバッグを終了させるか否かを判断し(ステップS5)、デバッグを終了しない場合は(ステップS5:No)、1行ずつソースコードのステップを実行させ(ステップS6)、その都度ステップS4の内容確認処理を実行する。
【0009】
その後、ソースコードのデバッグが終了すると(ステップS5:Yes)、ステップS4の内容確認の際にプログラムのバグがあるか否かを判断する(ステップS7)。このステップS7において、バグが見つかったと判断された場合には(ステップS7:Yes)、ソースコードを修正・コンパイルして(ステップS8)、再度ステップS1の処理に戻り、デバッグを実行する。そして、ステップS7によってバグが見つからなかったと判断されると(ステップS7:No)、そのまま一連の処理を終了する。
【0010】
図25のような処理によって、ある程度の検証が進み、ソフトウェアが安定して動作するようになると、続いて、図26のフローチャートによってより詳細な検証がおこなわれる。図26において、まず、スクリプトなどによって入力ファイル(テストパターン)を指定する(ステップS11)。その後、継続実行させ(ステップS12)、終了後、期待値比較をおこなう(ステップS13)。このステップS13の比較結果を出力し(ステップS14)、入力ファイル数の処理が終了したか否かを判断し(ステップS15)、終了するまで(ステップS15:No)、ステップS11〜S14の処理を繰り返し実行する。
【0011】
その後、入力ファイル数の処理が終了すると(ステップS15:Yes)、そのまま一連の処理を終了する。このように、検証進行後のデバッグ処理では、スクリプトにより、マニュアルの入力を必要としないため、夜間やバックグラウンドで実行することで複数のテストパターンをまとめて実行させることができる。
【0012】
また、図27は、期待値比較処理を示す説明図である。図26のステップS13にておこなわれる期待値比較処理は、図27のように、テストパターン103からESLツール110によって生成された実行結果104と、期待値生成ソフト271によって生成された期待値データ272との比較処理が期待値比較スクリプト273によって実行され、比較結果274を出力する。図26のステップS13では、この期待値比較スクリプト273を実行させ、ステップS14によって、比較結果274を出力させている。
【0013】
また、図28は、期待値比較に応じたソフトウェアデバッグ処理の手順を示すフローチャートである。図27の処理によって出力された比較結果が期待値不一致であった場合は、図28のような手順によってデバッグ処理をおこなう。図28において、まず、出力データ、レジスタアクセスログ、ファームを確認する(ステップS21)。
【0014】
つぎに、検証対象ソフトに含まれている問題部分を特定できたか否かを判断する(ステップS22)。ここで、問題部分を特定できた場合には(ステップS22:Yes)、ファーム修正後、検証対象ソフトの再実行をおこない(ステップS23)、一連の処理を終了する。一方、ステップS22において、問題部分が特定できなかった場合(ステップS22:No)、問題部分を特定するため、従来手法によって詳細に調査して(ステップS24)、一連の処理を終了する。
【0015】
通常、ESL環境での実行速度は実機での実行速度の100分の1以下となる。したがって、図25の処理によってデバッグをおこなう際に、長いテストパターンを用いると、非常に長い処理時間を要してしまう。たとえば、画像デコードLSIの場合、実機での処理時間が1分のテストパターンであっても、ESL環境での処理時間は1時間40分かかってしまう。実際には、ブレークポイント設定、ステップ実行といった処理をしながらデバッグを進めるため、さらに時間がかかってしまう。そこで、図28のようなフローチャートの処理によって修正したファームを再実行する前に、まず、出力データ、レジスタアクセスログ、ソースコードを使ってデバッグをおこなう。そして、このデバッグによってバグが見つからなかった場合にのみ、図25のデバッグをおこなう(たとえば、下記特許文献1参照)。
【0016】
また、SoCに適用させるような組み込み型のソフトウェアの場合、一般的なソフトウェアのような演算処理だけでなく、CPU外部のHWブロックの制御もおこなわなければならない。このような、ソフトウェアによる制御は、HWブロック内のレジスタの読み書きや、HWブロックからの割り込み通知に基づいて実行される。なお、ここで説明したレジスタとは、一般的にCPU内部に配置された演算用レジスタとは異なり、HWブロックを制御したり、動作状態を確認したりするための専用のレジスタであり、CPUのメモリ空間にマッピングされている。
【0017】
ここで、図29は、レジスタアクセスログの構成を示す図表であり、図30は、割り込みログの構成を示す図表である。また、図31は、アクセスログ・割り込みログを示す説明図である。図29の図表2900や、図30の図表3000に示したように、組み込みソフトウェアに対するデバッグには、レジスタアクセスや割り込みログの情報が、プログラムを解析する際に非常に役に立つ情報となる。そして、検証対象ソフトをHWモデルによって実行させると、図31のようなレジスタアクセスや割り込みログの情報を出力結果として取得できる。そして、これらの情報によりシステムの動作がわかるため、ログに関する情報だけでもある程度のデバッグをおこなうことができる。
【0018】
上述のように、HWモデル112によるログデータ105を用いてデバッグをおこなう際の作業としては、具体的には、(1)レジスタの設定内容およびソースコードの確認処理と、(2)割り込み動作の確認処理との2つがある。(1)の確認処理では、レジスタアクセスログ内の確認したいアクセスの値や、レジスタアクセスとそれに対応する検証対象ソフトウェアのソースコードを確認しながら正しく動作しているか確認する。
【0019】
一方、(2)の確認処理では、実行結果として出力されたログデータ105内の割り込みログと、この割り込みログに対応するコマンド起動レジスタなどを確認して、起動をトリガとした割り込み発生のシーケンスの流れが正しく実行されているかどうかを確認する。同時にコマンド起動部分のソースコードも確認する。どちらの場合も検証者が、テキストファイルやプリントアウトした紙を見比べながらデバッグをおこなっていた。
【0020】
【特許文献1】特開2001−256072号公報
【発明の開示】
【発明が解決しようとする課題】
【0021】
しかしながら、上述したようなHWモデル112による実行結果を用いたデバッグは、検証者の手によってマニュアル的に実行されていたため、多大な時間を要するという問題があった。
【0022】
さらに、(1)の確認処理の場合、出力結果を目視で確認したり、レジスタ名を使ってソースコードを検索したりといった作業が要求される。ところが、ログと対応するソースコード部分を探す場合も、同じレジスタにアクセスするコードが複数箇所にあった場合には、どちらのソースコードの実行結果であるかを特定できない。たとえば、レジスタアクセスのシーケンスのログからソースコードの該当個所を類推することも不可能ではないが、対応箇所のソースコードを書いた検証者以外が、シーケンスから該当個所を特定するのは困難である。しかしながら、実際の開発環境では、1つのソフトウェアを複数名で分担して作成するのが一般的であるため、ソースコードの特定が非常に困難であるという問題があった。
【0023】
また、(2)の確認処理の場合、バグにより、途中で割り込みの順序が乱れてしまっているような出力結果では、ログから割り込み発生を起こしたソースコードを特定するのは困難であった。たとえば、図32は、ブロックAに関するログの一例を示す説明図である。そして、図33は、ログに応じたシーケンスを示す説明図である。図32に示したようなログの記述のみから検証をおこなう場合、図33のパターン1のようなシーケンスであってもパターン2のようなシーケンスであっても同一の記述になってしまい判別できないという問題があった。
【0024】
この発明は、上述した従来技術による問題点を解消するため、デバッグに必要となるソースコードに関する情報を自動的に提供するソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法を実現することを目的とする。
【課題を解決するための手段】
【0025】
上述した課題を解決し、目的を達成するため、このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法は、コンピュータにおいて、ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、前記ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレスを関連付けたログデータを生成する処理と、生成されたログデータを記録領域に蓄積する処理と、蓄積されたログデータを出力する処理とを含むことを要件とする。
【0026】
このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法によれば、指定したレジスタへのアスクセスログと、当該アクセスログを出力させる命令元となったソースコードとが関連付いたログデータを出力することができる。
【0027】
また、このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法は、検証対象ソフトウェアのソースコード群と、前記検証対象ソフトウェアをハードウェアモデルまたはハードウェアによって実行させた際のログデータ群とにアクセス可能なコンピュータにおいて、前記ログデータ群に記述されているレジスタの中から任意のレジスタの選択を受け付ける処理と、前記ソースコード群の中から、受け付けられた任意のレジスタの記述が含まれているソースコードを検索する処理と、検索されたソースコードを前記任意のレジスタが記述されたログデータと対応付けて出力する処理とを含むことを要件とする。
【0028】
このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法によれば、指定したレジスタへのアクセスを実行するソースコードを自動的に抽出して検証者に提供することができる。
【発明の効果】
【0029】
このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法によれば、デバッグに必要となるソースコードに関する情報を自動的に提供することによって効率的なデバッグを支援することができるという効果を奏する。
【発明を実施するための最良の形態】
【0030】
以下に添付図面を参照して、このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法の好適な実施の形態を詳細に説明する。このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法では、指定されたレジスタアクセスや割り込み動作とソースコードとの対応情報を自動的に抽出して検証者に提供することによってデバッグを支援することができる。
【0031】
(ソフトウェアデバッグ支援処理の概要)
まず、本実施の形態にかかるソフトウェアデバッグ支援処理について説明する。図1は、本実施の形態にかかるソフトウェアデバッグ支援処理の概要を示す説明図である。図1のように、本実施の形態では、ソフトウェアデバッグ支援装置100によって検証者(ユーザ)が指定したレジスタアクセスや割り込み動作のログを対応するソースコードと関連付けて出力することによって、検証者によるソフトウェアデバッグを支援することができる。
【0032】
まず、本実施の形態にかかるソフトウェアデバッグ支援装置100の構成について説明する。図1のように、ソフトウェアデバッグ支援装置100は、ESLツール110と、ソフトウェアデバッグプログラム120と、GUI130とを含んだ構成になっている。ESLツール110は、従来より用いられている設計手法である。そして、今回のソフトウェアデバッグ支援装置100のように、ソフトウェア早期開発に用いる場合は、図1のようにISS111と、HWモデル112とを搭載した構成を用いる。
【0033】
このISS111およびHWモデル112は、検証対象ソフトの実行形式ファイル102を読み込むことによって、仮想的なSoCを構成する。また、HWモデル112には入力データ103としてテストパターンが入力される。HWモデル112では、ISS111の制御に応じて入力された入力データ103のテストパターンに応じた処理を実行し、この実行結果が、出力データ104として出力される。また、HWモデル112からは、ISS111からの制御に応じたログデータ105が出力される。
【0034】
また、ソフトウェアデバッグプログラム120は、検証対象ソフトウェアのソースコード101と実行形式ファイル102とを読み込み、ISS111の実行制御と、ISS111からのCPU動作情報を取得することによって、デバッグ機能を実現する。この、デバッグ機能には、従来のブレークポイント設定、継続実行、ステップ実行、ソースコード表示、変数・メモリ表示に加えて、指定したレジスタアクセスログ131と対応するソースコード132とを対応付けて表示させる機能を備えている。したがって、GUI130は、ソフトウェアデバッグプログラム120における実行制御の受け付けや、ソースコード132といったデバッグに用いる情報が表示される。
【0035】
つぎに、上述したソフトウェアデバッグ支援装置100のハードウェア構成について説明する。図2は、ソフトウェアデバッグ支援装置のハードウェア構成を示すブロック図である。ソフトウェアデバッグ支援装置100は、図2のようなハードウェア構成をもつ汎用コンピュータによってESLツール110と、ソフトウェアデバッグプログラム120と、GUI130とが実現される。
【0036】
たとえば、図2において、ソフトウェアデバッグ支援装置100は、CPU(Central Processing Unit)201と、ROM(Read‐Only Memory)202と、RAM(Random Access Memory)203と、磁気ディスクドライブ204と、磁気ディスク205と、光ディスクドライブ206と、光ディスク207と、ディスプレイ208と、入力I/F(Interface)209とネットワークI/F(Interface)210と、を備えている。また、各構成部はバス220によってそれぞれ接続されている。
【0037】
ここで、CPU201は、ソフトウェアデバッグ支援装置100の全体の制御を司る。ROM202は、ブートプログラムや、ESLツールや、ソフトウェアデバッグプログラムなどのプログラムを記憶している。RAM203は、CPU201のワークエリアとして使用される。磁気ディスクドライブ204は、CPU201の制御にしたがって磁気ディスク205に対するデータのリード/ライトを制御する。磁気ディスク205は、磁気ディスクドライブ204の制御で書き込まれたデータを記憶する。
【0038】
光ディスクドライブ206は、CPU201の制御にしたがって光ディスク207に対するデータのリード/ライトを制御する。光ディスク207は、光ディスクドライブ206の制御で書き込まれたデータを記憶したり、光ディスク207に記憶されたデータをコンピュータに読み取らせたりする。
【0039】
ディスプレイ208は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ208は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【0040】
入力インターフェース(以下、「入力I/F」と略する)209は、キーボード、タッチパネルなど検証者からの指示を受け付ける。たとえば、キーボードの場合、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。また、マウスの場合は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【0041】
ネットワークインターフェース(以下、「ネットワークI/F」と略する)210は、
通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワークに接続され、このネットワークを介して他の装置に接続される。そして、ネットワークI/F210は、ネットワークと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。ネットワークI/F210には、たとえばモデムやLANアダプタなどを採用することができる。
【0042】
以上説明したように、ソフトウェアデバッグ支援装置100は、汎用のコンピュータのハードウェア資源201〜210を利用してESLツール110、ソフトウェアデバッグプログラム120およびGUI130を実現することができる。たとえば、ESLツール110およびソフトウェアデバッグプログラム120は、CPU201、ROM202、RAM203によって実現することができる。また、GUI130は、ディスプレイ208および入力I/F209によって実現することができる。
【0043】
また、ソフトウェアデバッグ支援装置100の入力情報であるソースコード(全体)101、実行形式ファイル102および入力データ(テストパターン)103は、あらかじめ磁気ディスク205や、光ディスク207に記録しておいてもよいし、ネットワークI/F210を介して外部から取得してもよい。また、磁気ディスク205や、光ディスク207を、デバッグ支援装置100からの出力情報であり出力データ104やログデータ105を蓄積する蓄積手段として利用することもできる。
【0044】
また、上述の説明では、ESLツール110、ソフトウェアデバッグプログラム120およびGUI130を1台の汎用コンピュータによって実現させているが、複数のコンピュータによってそれぞれの機能を実現させ、ネットワークI/F210を介して、1つのソフトウェアデバッグ支援システムとして提供してもよい。
【0045】
以下に、図1によって説明したようなソフトウェアデバッグ支援処理を実現するための具体的な実施例1,2について説明する。実施例1,2は、図1のソフトウェアデバッグ支援装置100によって実現されるが、それぞれ異なる構成のログデータ105を扱うため(実施例1の場合は、従来のログデータと同じ構成)、ソフトウェアデバッグ支援用に検証者に提供される情報もそれぞれ異なる構成となる。したがって、検証者は、デバッグ支援装置100のハードウェア環境や、デバッグ処理における検証目的に応じて、実施例1,2のいずれかを利用すればよい。
【0046】
(実施例1)
実施例1では、図25にて説明したような、通常のログデータを利用して、指定されたアクセスログや割り込みログについて、対応するソースコードを抽出してユーザに提供することでデバッグを支援する構成になっている。
【0047】
上述したように、本実施の形態では、図1にて説明したデバッグ支援装置100によってソフトウェアデバッグ支援処理が実現される。したがって、まず、実施例1におけるソフトウェアデバッグプログラム120の構成について説明する。図3は、実施例1におけるソフトウェアデバッグプログラムの構成を示すブロック図である。図3のように、ソフトウェアデバッグプログラム120には、ソースコード101、実行形式ファイル102およびログデータ105が入力され、下記のような処理を実行するプログラム群によって構成されている。
【0048】
・ログデータ入力部:ログデータからレジスタアクセス・割り込みログを読み込ませる。
・レジスタアクセスログ表示部:ログデータ入力部が読み込んだレジスタアクセス・割り込みログをGUI上に表示させる。
・GUI制御受付部:検証者からのGUI操作を受け付ける。
・ソースコード検索部:GUI制御受付部によって指定されたレジスタ名からソースコードを検索する。検索時に同じレジスタ名を含んだソースコードが複数の箇所に存在する場合は、すべてのソースコードの記述箇所を検証候補としてGUI上に表示させて選択可能にする。
・ソースコード表示部:ソースコード検索部によって検索されたソースコードを表示させる。
【0049】
つぎに、実施例1におけるソフトウェアデバッグ支援処理の手順について説明する。図4は、実施例1におけるソフトウェアデバッグ支援処理の手順を示すフローチャートである。図4のフローチャートは、GUI130などによって検証者からのソース表示指示が入力されると、これをトリガとしてソフトウェアデバッグ支援処理を開始する。まず、GUI130からソース表示指示があると、指定されたレジスタ名でソースコードを検索する(ステップS401)。ステップS401によって、指定されたレジスタ名に対応するレジスタアクセスの記述が検索されるため、検索されたれレジスタアクセス記述が複数あるか否かを判断する(ステップS402)。
【0050】
このステップS402において、レジスタアクセス記述が複数ある場合(ステップS402:Yes)、これら複数のレジスタアクセス記述の候補部分の一覧をGUI130上に表示させる(ステップS403)。ここで表示させた候補部分の一覧から検証者からの選択を受け付けると、選択された部分のソースコード132を表示させ(ステップS404)、一連の処理を終了する。
【0051】
一方、ステップS402において、検索されたレジスタアクセス記述が一カ所のみであった場合(ステップS402:No)、検索されたレジスタアクセス記述部分に対応するソースコードを表示し(ステップS405)、一連の処理を終了する。
【0052】
なお、図4のフローチャートでは、検証者にレジスタ名を指定させ、指定されたレジスタ名からソースコードを検索しているが、ログデータ一覧の中から検証したいログデータを指定させてもよい。このような場合は、選択されたログデータの中からレジスタ名を抽出する。そして抽出されたレジスタ名について図4のフローチャートの処理をおこなえばよい。
【0053】
このように、実施例1では従来のログデータをそのまま利用して指定したレジスタに関するレジスタアクセスログ131とソースコード132とを対応付けて表示させることができる。したがって、検証者は、従来のようにすべてのソースコード101とログデータ105とを比較しながら対応関係を把握するような手間が削減される。また、上述したように、ログデータ105は従来の構成のものをそのまま利用するため、HWモデル112もあらたな機能を追加することなく従来の構成をそのまま利用することができる。
【0054】
(実施例2)
実施例2は、ログデータ105として実施例1の場合よりも多くの情報を取得することによって、実施例1よりも多様な情報を提供してデバッグ支援を実現する。なお、実施例2の場合も実施例1と同様に図1のようなデバッグ支援装置100の構成によって実現されるが、HWモデル112内部の構成と、ソフトウェアデバッグプログラム120内部の構成、さらに、HWモデル112から出力させるログデータの構成が異なっている。したがって、以下に各構成の相違点と、具体的なデバッグ支援処理の内容とについて説明する。
【0055】
<ソフトウェアデバッグプログラムの構成>
まず、実施例2におけるソフトウェアデバッグプログラムについて説明する。図5は、実施例2におけるソフトウェアデバッグプログラムの構成を示すブロック図である。図5のように、ソフトウェアデバッグプログラム120には、レジスタアクセスログ表示部、ソースコード表示部、ソース行取得部、GUI制御受付部、ログデータ入力部、ログデータ検索部が含まれている。このように、実施例1と比較して、ソース行取得部が追加され、ソースコード検索部に替わってログデータ検索部が追加された構成になっている。
【0056】
また、ソフトウェアデバッグプログラム120に入力されるソースコード101、実行形式ファイル102は、実施例1と同じ情報である。また、上述したように、ログデータ105は、実施例2のデバッグ支援処理を実現するために、HWモデル112によって、実施例1のログデータ105(図29,30に示した従来のログデータと同じ構成)とは異なる構成のログデータ105が出力されており、このログデータ105が入力される。なお、HWモデル112によるログデータ105の出力処理については後述する。
【0057】
つぎに、上述したソフトウェアデバッグプログラムの各機能部について、実施例1と異なる処理をおこなう点について説明する、ソース行取得部は、レジスタアクセスログ表示部によって表示されたレジスタアクセスログや割込ログの中から検証者にソースコード表示指示を受け付けると、ログデータ105に関連付けられたた命令アドレスを参照して対応するソースコード行数を取得する。したがって、ソースコード表示部は、指定された行数に対応するソースコード132の表示をおこなう。なお、アドレスとソースコード132の行数との対応情報は、HWモデル112に入力される実行形式ファイル102に含まれるため、HWモデル112によって、命令アドレスが関連付いたログデータ105を出力させている(詳しくはHWモデル112の構成にて説明する)。またログデータ検索部は、検証者によって指定された割り込み名でログデータ105を検索する処理をおこなう。
【0058】
<HWモデルの構成>
つぎに、実施例2のソフトウェアデバッグ支援装置100に適用するHWモデルの構成について説明する。図6は、実施例2におけるHWモデルの構成を示すブロック図である。図6のように、実施例2のデバッグ支援装置100のESLツール110のHWモデル112は、デバッグ用の情報を含んだログデータ105を出力させるために、あらたな機能を含んだ構成になっている。
【0059】
具体的に説明すると、図6のHWモデル112では、従来のHW機能部600に加えて、レジスタアクセスログ出力部601と、割り込みログ出力部602と、命令アドレス取得部603と、スタックメモリ読み出し部604と、リターンアドレス取得部605とを備えている。
【0060】
レジスタアクセスログ出力部601は、従来のログ(「従来のログ」とは図29にて説明したログデータを意味する)に加えてデバッグ用の情報をあらたに出力する。割り込みログ出力部602は、従来の割り込みログ(「従来の割り込みログ」とは図30にて説明したログデータを意味する)に加えてデバッグ用の情報をあらたに出力する。命令アドレス取得部603は、レジスタアクセスが発生した時点のプログラムの命令アドレス(プログラムカウンタの値)を取得する。命令アドレスは、ISS111のAPI(Application Program Interface)として用意されているPC取得関数を用いて取得する。
【0061】
スタックメモリ読み出し部604は、ISS111からスタックメモリの内容を読み出す処理をおこなう。このスタックメモリの読み出しもAPIとして用意されているメモリ読み出し関数を用いて実現する。リターンアドレス取得部605は、読み出したスタックメモリの内容から呼び出し元の関数を示すリターンアドレスを取得する処理をおこなう。
【0062】
<ログの構成>
つぎに、実施例2におけるレジスタアクセスログ、割り込みログそれぞれの構成について説明する。図6にて説明したように、実施例2のHWモデル112は、あらたな機能部601〜605が追加されている。したがって、HWモデル112からは、図30,31にて説明した従来のログや従来の割り込みログにあらたにデバッグ用の情報が追加された構成のログデータ105が出力される。
【0063】
図7は、実施例2におけるレジスタアクセスログの構成を示す図表であり、図8は、実施例2における割り込みログの構成を示す図表である。実施例2において、レジスタアクセスに関するログデータは、図7の図表700に示すように従来のログデータの構成に、割り込みID、命令アドレスおよびリターンアドレスが追加された構成になっている。また、図8の図表800に示すように従来のログデータの構成に、割り込み種別、割り込みIDが追加されている。ここで追加されている割り込みIDは、割り込みの原因となるコマンド起動レジスタと割り込みを対応付けるために割り当てられるIDである。なお、本実施の形態では、割り込み種別として、下記の4種類に区別された情報を用いる。
【0064】
・コマンド完了:COM_END
・イネーブル変化:ENABLE
・その他:OTHER
・要因変化:MASKED
【0065】
このように、実施例2のHWモデル112では、従来のログデータにデバッグ用の情報が関連付いたあらたなログデータ105を生成する構成になっている。したがって、以下に、HWモデル112が各種実行処理をおこなった場合のログデータ105の出力手順と、出力されたログデータ105を用いソフトウェアデバッグ支援処理について説明する。
【0066】
<HWモデル実行処理(レジスタアクセスログ出力時)>
まず、HWモデル112におけるレジスタアクセスログ出力時の実行処理の手順を説明する。図9は、HWモデルにおけるレジスタアクセスログ出力時の実行処理の手順を示すフローチャートである。図9において、まず、実行中のプログラムにおいてレジスタアクセスが発生したか否かを判断する(ステップS901)。ここで、レジスタアクセスが発生するまで待ち(ステップS901:Noのループ)、レジスタアクセスが発生すると(ステップS901:Yes)、命令アドレス取得部603によってレジスタアクセス発生時に実行された命令アドレスを取得する(ステップS902)。
【0067】
つぎに、スタックメモリ読み出し部604によってスタックメモリを読み出し(ステップS903)、リターンアドレス取得部605によって、ステップS903によって読み出したスタックメモリの内容を解析し、リターンアドレスが存在する場合は値を保持する(ステップS904)。そして、プログラムの実行結果に加えて、ステップS902にて取得した命令アドレスと、ステップS904にて取得したリターンアドレスとをログデータ105として出力する(ステップS905)。その後、実行させたプログラムに応じてハードウェア構成を実行させて(ステップS906)、一連の処理が終了する。
【0068】
このように、HWモデル112は、レジスタアクセスを実行した場合に、このレジスタアクセスの実行を命令したソースコードの命令アドレスを取得し、命令アドレスが関連付いたログデータ105生成され蓄積されている。また、実行したレジスタアクセスにおいてリターンアドレスが存在する場合には、リターンアドレスを併せて取得し、リターンアドレスが関連付いたログデータ105が生成され蓄積されていることになる。
【0069】
<ソースコード表示処理>
つぎに、上述のようにデバッグ用の情報として各種アドレスを含んだログデータ105を用いたソフトウェアデバッグ支援処理について説明する。ここでは、具体的には、ソフトウェアデバッグプログラム120によってログデータ105から指定したログについてのソースコードを表示させることによって検証者のソフトウェアデバッグを支援する。
【0070】
図10は、実施例2におけるソフトウェアデバッグプログラムのソースコード表示処理の手順を示すフローチャートである。図10のフローチャートでは、検証者がGUIを使ってレジスタアクセスに対応するソースコード132を表示させる指示をおこなった際の処理をあらわしている。
【0071】
図10において、まず検証者からのGUIの入力を受け付けたか否かを判断する(ステップS1001)。ここで、GUI入力を受け付けたと判断されるまで待ち(ステップS1001:Noのループ)、GUI入力を受け付けると(ステップS1001:Yes)、受け付けたGUI入力がソース表示指示か呼び出し元関数表示指示かを確認するための処理に移行する。
【0072】
まず、受け付けたGUI入力がソース表示指示か否かを判断する(ステップS1002)。ここで、受け付けたGUI入力がソース表示指示であった場合(ステップS1002:Yes)、ソース表示をおこなうため、指定アクセス部分の命令アドレスを取得し(ステップS1003)、さらに、取得した命令アドレスに対応するソース行番号を取得する(ステップS1004)。そして、取得したソース行番号を参照してソースコードを表示し(ステップS1005)、一連の処理を終了する。
【0073】
一方、ステップS1002において、ソース表示指示ではなかった場合(ステップS1002:No)、呼び出し元表示指示と判断し、リターンアドレスがあるか否かを判断する(ステップS1006)。ここで、リターンアドレスがあると判断された場合は(ステップS1006:Yes)、リターンアドレスを取得し(ステップS1007)、リターンアドレスに対応するソース行番号を取得する(ステップS1008)。そして、取得したソース行番号を参照してソースコードを表示し(ステップS1009)、一連の処理を終了する。以上説明したステップS1005およびステップS1009のソースコード表示処理では、表示対象部分のソースコードがGUI130上に表示される。また、ステップS1006において、リターンアドレスがないと判断された場合(ステップS1006:No)、そのまま一連の処理を終了する。
【0074】
このように、ソフトウェアデバッグ支援装置100のHWモデル112によって事前に出力されたレジスタアクセスログを用いて、ソフトウェアデバッグプログラム120がレジスタアクセスの実行元となる命令アドレスやリターンアドレスに対応するソースコード132を自動的に抽出する。抽出されたソースコード132は、GUI130によってレジスタアクセスログ131と対応付けられた情報として表示され、検証者によるソフトウェアデバッグ用の情報として提供される。
【0075】
<HWモデル実行処理(割り込みログ出力時)>
つぎに、HWモデル112の実行処理によって割り込みが発生した場合の割り込みログ出力について説明する。図11は、HWモデルにおける割り込みログ出力時の実行処理の手順を示すフローチャートである。割り込み処理は、レジスタライトが発生した際にそのレジスタが、(ア)コマンド起動レジスタ、(イ)割り込みマスク/イネーブルレジスタ、(ウ)それ以外である場合におこなわれる。したがって、レジスタライトが上述の(ア)〜(ウ)のいずれかを確認した後、それぞれの場合に応じた処理をおこなう。
【0076】
図11のフローチャートにおいて、まず、レジスタライトが発生したか否かを判断する(ステップS1101)。ここで、レジスタライトが発生するまで待ち(ステップS1101:Noのループ)、レジスタライトが発生すると(ステップS1101:Yes)、つぎに、ステップS1101において、ライトされたレジスタが起動レジスタであるか否かを判断する(ステップS1102)。
【0077】
このステップS1102において、ライトされたレジスタが起動レジスタであると(ステップS1102:Yes)、上述した(ア)の場合と判断される。したがって、まず、割り込みIDを割り当て(ステップS1103)、アクセスログを出力し(ステップS1104)、HW処理を実行する(ステップS1105)。そして、ステップS1105のHW処理実行後、割り込みが発生するか否かを判断して(ステップS1106)、割り込みが発生すると判断された場合には(ステップS1106:Yes)、割り込みを実行させる(ステップS1107)。そして、ステップ1107にて実行した割り込み処理のログを出力して(ステップS1108)、一連の処理を終了する。また、ステップS1105のHW処理実行後、割り込みが発生しないと判断された場合には(ステップS1106:No)、そのまま一連の処理を終了する。
【0078】
一方、ステップS1102において、ライトしたレジスタが起動レジスタでなかったとすると(ステップS1102:No)、上述した(イ)また(ウ)の場合と判断される。したがって、今度は、ライトしたレジスタがマスク/イネーブルレジスタか否かを判断する(ステップS1109)。ここで、アクセスしたレジスタがマスク/イネーブルレジスタのいずれかであれば(ステップS1109:Yes)、(イ)の場合と判断される。したがって、マスク/イネーブルレジスタのアクセスログを出力し(ステップS1110)、さらに、割り込みが発生するか否かを判断する(ステップS1111)。
【0079】
ステップS1111において、割り込みが発生すると判断された場合には(ステップS1111:Yes)、そのまま、割り込み処理を実行させる(ステップS1112)。そして、ステップ1112にて実行した割り込み処理のログを出力して(ステップS1113)、一連の処理を終了する。なお、ステップS1111において、割り込みが発生しないと判断された場合には(ステップS1111:No)、そのまま一連の処理を終了する。
【0080】
そして、ステップS1109において、アクセスしたレジスタがマスク/イネーブルレジスタのいずれでもなければ(ステップS1109:No)、(ウ)の場合と判断される。したがって、アクセスしたレジスタは、起動レジスタ、マスク/イネーブルレジスタのいずれにも該当しないその他のレジスタとしてアクセスログを出力して(ステップS1114)、一連の処理を終了する。
【0081】
<割り込み対応レジスタ表示処理>
つぎに、図11の処理によってHWモデル112から出力されたログデータ105を用いて、割り込みに対応する起動レジスタの表示処理の手順について説明する。図12は、実施例2におけるソフトウェアデバッグプログラムの割り込み対応レジスタの表示処理の手順を示すフローチャートである。ここでは、ソフトウェアデバッグプログラム120は、検証者からGUI130を介して割り込み原因表示指示があった場合、割り込みログの割り込み種別が(A)マスク/イネーブル変化による割り込み、(B)コマンド完了による通常の割り込み、(C)それ以外の割り込みのいずれであるかを確認して、それぞれの割り込み種別に応じた表示処理をおこなう。
【0082】
図12のフローチャートにおいて、まず、検証者から割り込み原因表示指示を受け付けたか否かを判断する(ステップS1201)。ここで、割り込み原因表示指示を受け付けるまで待ち(ステップS1201:Noのループ)、割り込み原因表示指示を受け付けると(ステップS1201:Yes)、つぎに、割り込みの発生原因はマスク/イネーブル変化によるか否かを判断する(ステップS1202)。このステップS1202における割り込み発生原因の判別は、ログデータ105に含まれている情報の中の割り込み種別を参照する。
【0083】
ステップS1202において、割り込み発生原因が(A)マスク/イネーブル変化であった場合(ステップS1202:Yes)、まず、ログデータ105から割り込み要因を取得し(ステップS1203)、取得した割り込み要因でログを検索する(ステップS1204)。そして、その割り込みが発生した時間より前の時間で一番近い位置の割り込み要因変化部分を探し、その割り込みIDを取得する(ステップS1205)。その後、ステップS1205にて取得した割り込みIDによってログデータ105を検索し(ステップS1206)、対応するレジスタアクセスを特定し、GUI130上に表示して(ステップS1207)、一連の処理を終了する。
【0084】
一方、ステップS1202において、割り込み発生原因が(A)ではない場合(ステップS1202:No)、さらに(B)コマンド完了による通常の割り込みであるか否かを判断し(ステップS1208)、(B)の割り込みであった場合(ステップS1208:Yes)、割り込みログからIDを取得し(ステップS1209)、そのIDでログを検索し(ステップS1210)、対応するレジスタアクセスを特定してGUI上に表示して(ステップS1211)、一連の処理を終了する。
【0085】
また、ステップ1208において(B)の割り込みでなかった場合(ステップS1208:No)、(C)それ以外の割り込みであると判断される。したがって、GUI130に割り込みに対応する起動レジスタが無いというメッセージのみを表示して(ステップS1212)、一連の処理を終了する。
【0086】
<ログデータの出力例>
ここで、図13−1〜図13−3は、ログデータの出力例を示す説明図である。図13−1は、上述した(A)の場合に出力されるログデータ105である。具体的には、イネーブルレジスタへの書き込みにより割り込みが発生する場合であり、2行目の割り込みイネーブルレジスタへの書き込みにより割り込みが無効となっている。また、3行目のコマンド起動レジスタへの書き込みによりHWモデル112の処理が開始される(起動レジスタID:0x324)。
【0087】
さらに、10行目でコマンド完了により割り込み要因レジスタの値が変化し、割り込み状態となっている。このとき、割り込みが無効となっているため、実際に割り込みは発生しない。そしてログデータ105には起動レジスタのIDに対応する0x324が記録されている。また、12行目の割り込みイネーブルレジスタへの書き込みにより割り込みが有効となっている。その結果、13行目において、10行目で割り込み状態となっていた割り込みが発生している。ここでは、イネーブルレジスタ変更による割り込み発生のため、割り込みIDは記録されない。
【0088】
つぎに、図13−2は、上述した(B)の場合に出力されるログデータ105である。起動コマンドの完了に伴った割り込みが発生する場合となっている。さらに、図13−3は、上述した(C)の場合に出力されるログデータ105である。(C)の場合、起動/マスク/イネーブルレジスタとは関係なく発生する割り込み(エラーなど)をあらわしている(たとえば、9行目のように起動/マスク/イネーブルレジスタとは関係のないエラーによる割り込み)。上述したように、(C)の割り込みの場合、対応するIDがないため割り込みIDは記録されない。
【0089】
このように、ソフトウェアデバッグ支援装置100のHWモデル112によって割り込みが発生すると、割り込みの種別に応じて、割り込みに対応する起動レジスタへのアクセスを表示され、検証者によるソフトウェアデバッグ用の情報として提供される。また、割り込み要因がわからない場合には、その旨を示すメッセージを出力することもできる。
【0090】
(デバッグ処理の手順)
つぎに、本実施の形態にかかるデバッグ処理の手順について説明する。図14は、本実施の形態にかかるデバッグ処理の手順を示すフローチャートである。上述したように、本実施の形態では、ソフトウェアデバッグプログラム120によってデバッグ支援処理をおこなうことによって指定した箇所に対応するソースコードが表示される。検証者は、表示されたソースコードから検証箇所を確認して、適宜ソースコードの修正をおこなう。
【0091】
デバッグ処理について説明すると、図14のフローチャートにおいて、まず、バッチ処理により複数のテストパターンを連続実行する(ステップS1401)。そして実行結果と期待値との比較結果が正しいか否かを判断する(ステップS1402)。ここで、比較結果が正しいと判断された場合は(ステップS1402:Yes)、ソースコードにバグは含まれないため、そのまま一連の処理を終了する。
【0092】
一方、ステップS1402において、比較結果が正しくないと判断された場合は(ステップS1402:No)、デバッグ支援処理によって再度アクセスログ、割り込みログのソースコードを確認する(ステップS1403)。そして、ステップ1403のソースコードの確認処理によって問題部分を特定できたか否かを判断する(ステップS1404)。ここで、問題部分が特定できた場合は(ステップS1404:Yes)、問題部分のファームを修正し(ステップS1405)、ステップS1401の処理に戻り、再度バッチ処理を実行する。
【0093】
また、ステップS1404において、問題部分が特定できなかった場合(ステップS1404:No)、従来手法を用いてソースコードを詳細に調査して問題特定し(ステップS1406)、ステップS1405の処理に移行する。このように、ソフトウェアデバッグ支援装置100では、ソースコード修正後のソフトウェアのデバッグ処理を繰り返すことにより検証精度を向上させることができる。
【0094】
以上説明したように、実施例2では下記のような機能が実現される。したがって、検証者へデバッグに必要となるソースコードに関する情報を自動的に提供可能となりファーム開発期間を短縮できる。
・デバッガでレジスタログ/割り込みログ表示
・レジスタアクセスとソースとの対応表示
・ログデータ内の指定された割り込み処理についての割り込みの原因(レジスタアクセスログ)表示
・指定された起動レジスタアクセス部分のソースコード表示
【0095】
(表示例)
つぎに、実施例2のソフトウェアデバッグ支援装置100を利用して、検証者がレジスタアクセスに対応するソースコードを表示させる場合と、割り込みに対応する起動レジスタを表示させる場合について具体例を挙げて説明する。
【0096】
<SoCの構成>
まず、SoCの構成について説明する。図15は、SoCの構成例を示すブロック図である。以下表示例はいずれも図15のSoC1500によって検証対象ソフトウェアが例の説明に使用するSoC例のブロック図を示す。SoC1500では、CPU上のファームからブロックA、ブロックB、ブロックCの制御をおこなう。
【0097】
<ソースコード表示時>
つぎに、ソースコード表示時の表示例について説明する。ここでは、まずソースコード表示時のHWモデルの処理について説明した後、GUIへの表示例について説明する。
【0098】
・HWモデルのシーケンス
図16は、ソースコード表示時のHWモデルの処理を示すシーケンス図である。図16では、通常のレジスタ(コマンド起動レジスタではない)にアクセスする際の処理を示している。まず、ISS(ファーム)111によるレジスタアクセスが発生すると、HWモデル112では、命令アドレスを取得する(ステップS1601)。ステップS1601では、HWモデル112は、ISS111に対して命令アドレスの出力を要求する。この要求に応答してISS111から命令アドレスが送信されることによってHWモデル112が命令アドレスを取得することができる。
【0099】
続いて、HWモデル112は、取得した命令アドレスを参照してISS111からスタックメモリの内容を読み出す(ステップS1602)。このステップS1602の処理もステップS1601と同様に、HWモデル112からISS111へスタックメモリの読み出しを要求することによって実現される。そして、HWモデル112は、ステップS1602によって読み出したスタックメモリからリターンアドレスを取り出し(ステップS1603)、命令アドレスと、リターンアドレスを加えたレジスタアクセスログを出力し(ステップS1604)、最後に実際のハード処理を実行する(ステップS1605)。
【0100】
・GUIの表示例
つぎに、ソースコード表示時のGUIの表示例について説明する。図17は、ソースコード表示時のGUIの表示例を示す説明図である。上述した図13-1はこの時のレジスタアクセスログである。図17のように、ソースコード表示時には、複数のウィンドウが表示される。そして、たとえば、上側のウィンドウ1701にレジスタアクセス・割り込みログを表示し、下側のウィンドウ1702にソースコードを表示させる。図17の表示例では、レジスタアクセスログのBLOCK_A__IRQ_CLEARレジスタへの書き込みを指定し、ソースコード表示ボタンBをクリックすることによって、ソースコード表示画面にレジスタアクセスに対応するソースコード行「write_reg(BLOCK_A__IRQ_CLEAR,int_clear);」が表示されている。
【0101】
ソフトウェアデバッグプログラム120の動作としては、レジスタアクセスログの時間536465におけるBLOCK_A__IRQ_CLEARレジスタへの書き込みの際、実行形式ファイル内のデバッグ情報から、命令アドレス0xB588に対応するソースコード行を求める。そして、その行数のソースコードをソース表示ウィンドウに表示させる。さらに、ソフトウェアデバッグプログラム120は、ソースコードウィンドウの呼び出し元関数表示ボタンCがクリックされると、呼び出し元関数のソースコードを表示させる。
【0102】
<割り込み発生時>
つぎに、割り込み発生時の表示例について説明する。ここでも、まず割り込み発生時のHWモデルの処理について説明した後、GUIへの表示例について説明する。
【0103】
・HWモデルのシーケンス
図18−1〜図18−3は、割り込みログ出力時のHWモデルの処理例を示すシーケンス図である。図18−1では、HWモデル112において(ア)のコマンド起動レジスタの割り込みが発生した場合のシーケンスを示している。図18−1のように、ISS111からのコマンド起動レジスタへの書き込みが発生すると、HWモデル112では、割り込みID0x324が割り当てられる(ステップS1811)。そして、割り込みIDを含むレジスタアクセスログが出力される(ステップS1812)。
【0104】
その後、HWモデル112における時間経過を実現するためにタイマー設定がおこなわれ(ステップS1813)、ISS111に送信される。ISS111は、タイマー設定に応答して指定サイクル経過後にタイマーイベントが発生する。なお、タイマー設定およびタイマーイベント発生はISS111のAPIに用意されているものとする。
【0105】
HWモデル112はISS111からのタイマーイベントを受け付けると、ハードウェア処理を実行し(ステップS1814)、その後、割り込みを発生させ(ステップS1815)、割り込みID0x324の割り込みログをログデータ105として出力する(ステップS1816)。
【0106】
つぎに、図18−2は、割り込みログ出力時のHWモデルの処理例(その2)を示すシーケンス図である。HWモデル112において(イ)の割り込みマスク/イネーブルレジスタの割り込みが発生した場合のシーケンスを示している。図18−2のように、ISS111からのコマンド起動レジスタへの書き込みが発生すると、HWモデル112では、ハードウェア処理が実行される(ステップS1821)。そして、ステップS1821の処理完了に伴い、割り込み要因が変化する(ステップS1822)
【0107】
そして、ISS111によって割り込みイネーブルレジスタを有効にされると、さらに、ISS111からのマスク/イネーブルレジスタ書き込みにより、HWモデル112は、割り込みが有効となる(ステップS1823)。そして、HWモデル112は、レジスタアクセスログを出力した後(ステップS1824)、イネーブルレジスタの値と、割り込み要因レジスタの値を確認して割り込みを発生させるかどうかチェックする(ステップS1825)。図18−2の例では、事前に割り込み状態となっているため割り込みを発生させ(ステップS1826)、割り込みログを出力する(ステップS1827)。この場合、対応する起動レジスタがないため、割り込みIDは記録されない。
【0108】
また、図18−3のシーケンスでは、図11における(ウ)のようにコマンド起動/割り込みマスク/割り込みイネーブルレジスタ以外で割り込みに関係のないレジスタへの書き込みがおこなわれる場合のHWモデル112の手順を示している。図18−3のように、ISS111からのレジスタ書き込み(起動/マスク/イネーブル以外)に応答して、HWモデル112では、レジスタアクセスログを出力する(ステップS1831)。なお、ステップS1831の処理の際、HWモデル112は、割り込み処理自体は未発生であるため、割り込みログは出力しない。
【0109】
・GUIの表示例
[マスク/イネーブル変化による割り込み発生時]
つぎに、マスク/イネーブル変化による割り込み発生時のGUIの表示例について説明する。図19−1および図19−2は、マスク/イネーブル変化による割り込み発生時のGUI表示例を示す説明図である。図19−1では、図14において(A)のイネーブル変化による割り込みに相当するログ例である。
【0110】
レジスタアクセスの中から検証者によって検証対象となる割り込みの指定を受け付けた後、割り込み原因表示ボタンAをクリックすることによって、対応する割り込み要因変化ログ、起動レジスタ書き込みが表示される。ソフトウェアデバッグプログラム120では、まず指定された割り込みログの割り込み種別を確認する。このとき割り込み種別は、イネーブル(ENABLE)となっているため、割り込み要因の値「BLOCK_A_INT_DEC_DONE」で時間的に前方向のログを検索し、一番近い位置の要因変化(MASKED)で割り込み要因が同じログを探す。表示例では、一番近い位置として10行目に見つかり、その時点で割り込みID(0x324)が確定する。その後、ID0x324でログを検索し、対応するBLOCK_A_DEC_STARTレジスタへの書き込みアクセスを表示する。割り込み要因も表示する。
【0111】
また、図19−2では、図19−1と同様に図14において(A)のイネーブル変化による割り込みであるが、割り込み要因変化部分のログをGUIに表示しない場合を示している(検証者によって割り込み原因表示ボタンAがクリックされなかった)。このとき、ソフトウェアデバッグプログラム120の処理は、図19−1と同様のものとなる。
【0112】
[コマンド完了による割り込み発生時]
つぎに、コマンド完了による割り込み発生時のGUI表示例について説明する。図20は、コマンド完了による割り込み発生時のGUI表示例を示す説明図である。図20では、図14における(B)の起動コマンドに対応する完了割り込みが発生した場合に表示をあらわしている。
【0113】
図20のように、割り込み原因表示ボタンAをクリックすることにより対応する起動レジスタ書き込みが表示される。このとき、ソフトウェアデバッグプログラム120は、割り込みログの割り込みID0x324で割り込みログを検索する。そして、対応する、時間525650の「BLOCK_A__DEC_START」レジスタへの書き込みアクセスを表示する。さらに、ソースコード表示ボタンBがクリックされると、BLOCK_A__DEC_STARTレジスタへの書き込み部分のソースコードを表示させる。
【0114】
[その他の割り込み発生時]
最後に、上述したマスク/イネーブル変化およびコマンド完了以外の要因による割り込み発生時のGUIの表示例について説明する。図21は、その他の割り込み発生時のGUI表示例を示す説明図である。図21のウィンドウ2100の表示例は、図12にて説明した(C)起動/マスク/イネーブルレジスタとは関係なく発生する割り込み(エラーなど)の場合の表示例である。
【0115】
上述したように、マスク/イネーブル変化およびコマンド完了以外の要因によって発生した割り込みログの場合、特定のレジスタが関連付けられていない。したがって、割り込み原因表示ボタンAをクリックすると、図21のように、「割り込み原因起動レジスタなし」とのメッセージが表示される。このとき、ソフトウェアデバッグプログラム120では、まず、指定された割り込みログについて、ログデータ105を参照して割り込み種別を確認する。割り込み種別はOTHER(その他)となっているため、ソフトウェアデバッグプログラム120は、対応する起動レジスタなしとして、GUI130上に表示させるように動作する。
【0116】
このように、本実施の形態では、従来のログデータを用いて指定したレジスタへのアクセスを実行するソースコードを自動的に抽出して検証者に提供することができる(実施例1)。また、デバッグ用のデータと関連付いたあらたなログデータを生成して、デバッグに必要となるソースコードに関する情報を自動的に提供することもできる(実施例2)。
【0117】
なお、本実施の形態で説明したソフトウェアデバッグ支援方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、このプログラムは、インターネット等のネットワークを介して配布することが可能な媒体であってもよい。
【0118】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0119】
(付記1)コンピュータを、
ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、当該ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレス情報を関連付けたログデータを生成する生成手段、
前記生成手段によって生成されたログデータを記録領域に蓄積する蓄積手段、
前記蓄積手段によって記録領域に蓄積されたログデータを出力する出力手段、
として機能させることを特徴とするソフトウェアデバッグ支援プログラム。
【0120】
(付記2)前記コンピュータを、さらに、
前記蓄積手段によって前記記録領域に蓄積されたログデータの中の任意のログデータの選択を受け付ける受付手段、
前記受付手段によって受け付けられた任意のログデータの実行結果に関連付けられているアドレス情報に対応するソースコードを前記検証対象のソフトウェアから検索する検索手段、
として機能させ、
前記出力手段は、前記検索手段によって検索されたソースコードを前記任意のログデータと対応付けて出力することを特徴とする付記1に記載のソフトウェアデバッグ支援プログラム。
【0121】
(付記3)前記生成手段は、前記ソフトウェアのソースコードごとの実行結果に前記ソースコードの命令アドレスおよびリターンアドレスの少なくとも一方をアドレス情報として関連付けたログデータを生成することを特徴とする付記1または2に記載のソフトウェアデバッグ支援プログラム。
【0122】
(付記4)前記生成手段は、前記ソフトウェアによって割り込み処理が発生した場合、当該割り込み処理をあらわす割り込みIDと、当該割り込み処理の種別情報とを含んだログデータを生成することを特徴とする付記1〜3のいずれか一つに記載のソフトウェアデバッグ支援プログラム。
【0123】
(付記5)前記検索手段は、前記受付手段によって割り込みに関する情報を含んだログデータが選択された場合、当該ログデータに含まれている割り込みIDと、当該割り込み処理の種別情報と用いて当該割り込み処理を起こしたレジスタと検索し、
前記出力手段は、前記割り込みに関する情報を含んだログデータと、前記検索手段によって検索されたレジスタと、を対応付けて出力することを特徴とする付記4に記載のソフトウェアデバッグ支援プログラム。
【0124】
(付記6)検証対象ソフトウェアのソースコード群と、前記検証対象ソフトウェアをハードウェアモデルまたはハードウェアによって実行させた際のログデータ群とにアクセス可能なコンピュータを、
前記ログデータ群に記述されているレジスタの中から任意のレジスタの選択を受け付ける受付手段、
前記ソースコード群の中から、前記受付手段によって受け付けられた任意のレジスタの記述が含まれているソースコードを検索する検索手段、
前記検索手段によって検索されたソースコードを前記任意のレジスタが記述されたログデータと対応付けて出力する出力手段、
として機能させることを特徴とするソフトウェアデバッグ支援プログラム。
【0125】
(付記7)前記出力手段は、前記検索手段によって、前記任意のレジスタの記述が含まれているソースコードが複数検索された場合に、当該検索されたソースコードの一覧を出力し、前記受付手段によって、当該一覧の中から任意のソースコードの選択を受け付けると、当該任意のソースコードを前記任意のレジスタが記述されたログデータと対応付けて出力することを特徴とする付記1に記載のソフトウェアデバッグ支援プログラム。
【0126】
(付記8)前記コンピュータを、さらに、
前記受付手段が、ログデータ群の中の任意のログデータの選択を受け付けた場合に、当該任意のログデータからレジスタの記述を抽出する抽出手段として機能させ、
前記検索手段は、前記ソースコード群の中から、前記抽出手段によって抽出されたレジスタの記述が含まれているソースコードを検索することを特徴とする付記1または2に記載のソフトウェアデバッグ支援プログラム。
【0127】
(付記9)ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、当該ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレス情報を関連付けたログデータを生成する生成手段と、
前記生成手段によって生成されたログデータを記録領域に蓄積する蓄積手段と、
前記蓄積手段によって記録領域に蓄積されたログデータを出力する出力手段と、
を備えることを特徴とするソフトウェアデバッグ支援装置。
【0128】
(付記10)コンピュータが、
ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、当該ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレス情報を関連付けたログデータを生成する生成工程と、
前記生成工程によって生成されたログデータを記録領域に蓄積する蓄積工程と、
前記蓄積工程によって記録領域に蓄積されたログデータを出力する出力工程と、
を実行することを特徴とするソフトウェアデバッグ支援方法。
【図面の簡単な説明】
【0129】
【図1】本実施の形態にかかるソフトウェアデバッグ支援処理の概要を示す説明図である。
【図2】ソフトウェアデバッグ支援装置のハードウェア構成を示すブロック図である。
【図3】実施例1におけるソフトウェアデバッグプログラムの構成を示すブロック図である。
【図4】実施例1におけるソフトウェアデバッグ支援処理の手順を示すフローチャートである。
【図5】実施例2におけるソフトウェアデバッグプログラムの構成を示すブロック図である。
【図6】実施例2におけるHWモデルの構成を示すブロック図である。
【図7】実施例2におけるレジスタアクセスログの構成を示す図表である。
【図8】実施例2における割り込みログの構成を示す図表である。
【図9】HWモデルにおけるレジスタアクセスログ出力時の実行処理の手順を示すフローチャートである。
【図10】実施例2におけるソフトウェアデバッグプログラムのソースコード表示処理の手順を示すフローチャートである。
【図11】HWモデルにおける割り込みログ出力時の実行処理の手順を示すフローチャートである。
【図12】実施例2におけるソフトウェアデバッグプログラムの割り込み対応レジスタの表示処理の手順を示すフローチャートである。
【図13−1】ログデータの出力例(その1)を示す説明図である。
【図13−2】ログデータの出力例(その2)を示す説明図である。
【図13−3】ログデータの出力例(その3)を示す説明図である。
【図14】本実施の形態にかかるソフトウェアデバッグ処理の手順を示すフローチャートである。
【図15】SoCの構成例を示すブロック図である。
【図16】ソースコード表示時のHWモデルの処理を示すシーケンス図である。
【図17】ソースコード表示時のGUIの表示例を示す説明図である。
【図18−1】割り込みログ出力時のHWモデルの処理例(その1)を示すシーケンス図である。
【図18−2】割り込みログ出力時のHWモデルの処理例(その2)を示すシーケンス図である。
【図18−3】割り込みログ出力時のHWモデルの処理例(その3)を示すシーケンス図である。
【図19−1】マスク/イネーブル変化による割り込み発生時のGUI表示例(その1)を示す説明図である。
【図19−2】マスク/イネーブル変化による割り込み発生時のGUI表示例(その2)を示す説明図である。
【図20】コマンド完了による割り込み発生時のGUI表示例を示す説明図である。
【図21】その他の割り込み発生時のGUI表示例を示す説明図である。
【図22】SoCの構成例を示すブロック図である。
【図23】SoCの開発工程を示す説明図である。
【図24】ソフトウェア早期開発環境の構成例を示す説明図である。
【図25】初期段階のソフトウェアデバッグ処理の手順を示すフローチャートである。
【図26】検証進行後のソフトウェアデバッグ処理の手順を示すフローチャートである。
【図27】期待値比較処理を示す説明図である。
【図28】期待値比較に応じたソフトウェアデバッグ処理の手順を示すフローチャートである。
【図29】レジスタアクセスログの構成を示す図表である。
【図30】割り込みログの構成を示す図表である。
【図31】アクセスログ・割り込みログを示す説明図である。
【図32】ブロックAに関するログの一例を示す説明図である。
【図33】ログに応じたシーケンスを示す説明図である。
【符号の説明】
【0130】
100 ソフトウェアデバッグ支援装置
101 ソースコード(全体)
102 実行形式ファイル
103 入力データ(テストパターン)
104 出力データ(実行結果)
105 ログデータ
110 ESLツール
111 ISS
112 HWモデル
120 ソフトウェアデバッグプログラム
130 GUI
131 レジスタアクセスログ
132 ソースコード(ログ対応部分)
【特許請求の範囲】
【請求項1】
コンピュータを、
ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、当該ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレス情報を関連付けたログデータを生成する生成手段、
前記生成手段によって生成された前記ログデータを記録領域に蓄積する蓄積手段、
前記蓄積手段によって記録領域に蓄積された前記ログデータを出力する出力手段、
として機能させることを特徴とするソフトウェアデバッグ支援プログラム。
【請求項2】
前記コンピュータを、さらに、
前記蓄積手段によって前記記録領域に蓄積された前記ログデータの中の任意のログデータの選択を受け付ける受付手段、
前記受付手段によって受け付けられた前記任意のログデータの実行結果に関連付けられているアドレス情報に対応する前記ソースコードを前記検証対象のソフトウェアから検索する検索手段、
として機能させ、
前記出力手段は、前記検索手段によって検索された前記ソースコードを前記任意のログデータと対応付けて出力することを特徴とする請求項1に記載のソフトウェアデバッグ支援プログラム。
【請求項3】
検証対象ソフトウェアのソースコード群と、前記検証対象ソフトウェアをハードウェアモデルまたはハードウェアによって実行させた際のログデータ群とにアクセス可能なコンピュータを、
前記ログデータ群に記述されているレジスタの中から任意のレジスタの選択を受け付ける受付手段、
前記ソースコード群の中から、前記受付手段によって受け付けられた前記任意のレジスタの記述が含まれているソースコードを検索する検索手段、
前記検索手段によって検索された前記ソースコードを前記任意のレジスタが記述されたログデータと対応付けて出力する出力手段、
として機能させることを特徴とするソフトウェアデバッグ支援プログラム。
【請求項4】
ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、当該ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレス情報を関連付けたログデータを生成する生成手段と、
前記生成手段によって生成された前記ログデータを記録領域に蓄積する蓄積手段と、
前記蓄積手段によって記録領域に蓄積された前記ログデータを出力する出力手段と、
を備えることを特徴とするソフトウェアデバッグ支援装置。
【請求項5】
コンピュータが、
ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、当該ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレス情報を関連付けたログデータを生成する生成工程と、
前記生成工程によって生成された前記ログデータを記録領域に蓄積する蓄積工程と、
前記蓄積工程によって記録領域に蓄積された前記ログデータを出力する出力工程と、
を実行することを特徴とするソフトウェアデバッグ支援方法。
【請求項1】
コンピュータを、
ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、当該ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレス情報を関連付けたログデータを生成する生成手段、
前記生成手段によって生成された前記ログデータを記録領域に蓄積する蓄積手段、
前記蓄積手段によって記録領域に蓄積された前記ログデータを出力する出力手段、
として機能させることを特徴とするソフトウェアデバッグ支援プログラム。
【請求項2】
前記コンピュータを、さらに、
前記蓄積手段によって前記記録領域に蓄積された前記ログデータの中の任意のログデータの選択を受け付ける受付手段、
前記受付手段によって受け付けられた前記任意のログデータの実行結果に関連付けられているアドレス情報に対応する前記ソースコードを前記検証対象のソフトウェアから検索する検索手段、
として機能させ、
前記出力手段は、前記検索手段によって検索された前記ソースコードを前記任意のログデータと対応付けて出力することを特徴とする請求項1に記載のソフトウェアデバッグ支援プログラム。
【請求項3】
検証対象ソフトウェアのソースコード群と、前記検証対象ソフトウェアをハードウェアモデルまたはハードウェアによって実行させた際のログデータ群とにアクセス可能なコンピュータを、
前記ログデータ群に記述されているレジスタの中から任意のレジスタの選択を受け付ける受付手段、
前記ソースコード群の中から、前記受付手段によって受け付けられた前記任意のレジスタの記述が含まれているソースコードを検索する検索手段、
前記検索手段によって検索された前記ソースコードを前記任意のレジスタが記述されたログデータと対応付けて出力する出力手段、
として機能させることを特徴とするソフトウェアデバッグ支援プログラム。
【請求項4】
ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、当該ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレス情報を関連付けたログデータを生成する生成手段と、
前記生成手段によって生成された前記ログデータを記録領域に蓄積する蓄積手段と、
前記蓄積手段によって記録領域に蓄積された前記ログデータを出力する出力手段と、
を備えることを特徴とするソフトウェアデバッグ支援装置。
【請求項5】
コンピュータが、
ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、当該ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレス情報を関連付けたログデータを生成する生成工程と、
前記生成工程によって生成された前記ログデータを記録領域に蓄積する蓄積工程と、
前記蓄積工程によって記録領域に蓄積された前記ログデータを出力する出力工程と、
を実行することを特徴とするソフトウェアデバッグ支援方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13−1】
【図13−2】
【図13−3】
【図14】
【図15】
【図16】
【図17】
【図18−1】
【図18−2】
【図18−3】
【図19−1】
【図19−2】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13−1】
【図13−2】
【図13−3】
【図14】
【図15】
【図16】
【図17】
【図18−1】
【図18−2】
【図18−3】
【図19−1】
【図19−2】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【公開番号】特開2010−55180(P2010−55180A)
【公開日】平成22年3月11日(2010.3.11)
【国際特許分類】
【出願番号】特願2008−216771(P2008−216771)
【出願日】平成20年8月26日(2008.8.26)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成22年3月11日(2010.3.11)
【国際特許分類】
【出願日】平成20年8月26日(2008.8.26)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]