(57)【要約】【課題】ソフトウェアデバッグに必要となるソースコードに関する情報を自動的に提供すること。【解決手段】ソフトウェアデバッグ支援装置１００は、ハードウェアモデル１１２によって検証対象のソフトウェアが実行されると、ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレスを関連付つけたログデータ１０５を生成すると、生成されたログデータ１０５を記録領域に蓄積する。ソフトウェアデバッグプログラム１２０は、蓄積されたログデータ１０５の中の任意のログデータの選択を受け付けると、任意のログデータの実行結果に関連付けられているソースコードのアドレスを参照して検証対象のソフトウェアから任意のログデータ１０５に対応するソースコード１３２を検索してＧＵＩ１３０に出力する。【選択図】図１
2010055180.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータを、
ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、当該ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレス情報を関連付けたログデータを生成する生成手段、
前記生成手段によって生成された前記ログデータを記録領域に蓄積する蓄積手段、
前記蓄積手段によって記録領域に蓄積された前記ログデータを出力する出力手段、
として機能させることを特徴とするソフトウェアデバッグ支援プログラム。
【請求項２】
前記コンピュータを、さらに、
前記蓄積手段によって前記記録領域に蓄積された前記ログデータの中の任意のログデータの選択を受け付ける受付手段、
前記受付手段によって受け付けられた前記任意のログデータの実行結果に関連付けられているアドレス情報に対応する前記ソースコードを前記検証対象のソフトウェアから検索する検索手段、
として機能させ、
前記出力手段は、前記検索手段によって検索された前記ソースコードを前記任意のログデータと対応付けて出力することを特徴とする請求項１に記載のソフトウェアデバッグ支援プログラム。
【請求項３】
検証対象ソフトウェアのソースコード群と、前記検証対象ソフトウェアをハードウェアモデルまたはハードウェアによって実行させた際のログデータ群とにアクセス可能なコンピュータを、
前記ログデータ群に記述されているレジスタの中から任意のレジスタの選択を受け付ける受付手段、
前記ソースコード群の中から、前記受付手段によって受け付けられた前記任意のレジスタの記述が含まれているソースコードを検索する検索手段、
前記検索手段によって検索された前記ソースコードを前記任意のレジスタが記述されたログデータと対応付けて出力する出力手段、
として機能させることを特徴とするソフトウェアデバッグ支援プログラム。
【請求項４】
ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、当該ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレス情報を関連付けたログデータを生成する生成手段と、
前記生成手段によって生成された前記ログデータを記録領域に蓄積する蓄積手段と、
前記蓄積手段によって記録領域に蓄積された前記ログデータを出力する出力手段と、
を備えることを特徴とするソフトウェアデバッグ支援装置。
【請求項５】
コンピュータが、
ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、当該ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレス情報を関連付けたログデータを生成する生成工程と、
前記生成工程によって生成された前記ログデータを記録領域に蓄積する蓄積工程と、
前記蓄積工程によって記録領域に蓄積された前記ログデータを出力する出力工程と、
を実行することを特徴とするソフトウェアデバッグ支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、組み込み型のシステムにおけるソフトウェア開発に用いるソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法に関する。
【背景技術】
【０００２】
従来、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）コアや、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）コアを集積したＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  Ｃｈｉｐ）のようなハードウェアとソフトウェアとが混在した組み込み型のシステムを開発する場合には、ハードウェアとソフトウェアとが一体となったシステムとしてシステムレベル検証がおこなわれる。
【０００３】
このようなシステムレベル検証をおこなうには、前処理として、個々のハードウェアとソフトウェアとが独立した状態で、初期段階の検証を完了しておかなければならない。ところが、ソフトウェアを検証するには、ソフトウェアを実行させるハードウェアが必要である。したがって、Ｃ，Ｃ＋＋，ＳｙｓｔｅｍＣといったプログラム言語で記述したＨＷ（ハードウェア）モデルを用いることによってソフトウェアの検証が実現可能となり、ハードウェアの検証状況を待たずにソフトウェアを早期に開発することができる。
【０００４】
ソフトウェアの早期開発のための手法の一つとしてＥＳＬ（Ｅｌｅｃｔｒｏｎｉｃ  Ｓｙｓｔｅｍ  Ｌｅｖｅｌ）設計手法がある。ＥＳＬ設計手法には、アーキテクチャ探索、高位合成、性能見積もり、消費電力見積もり、ソフトウェア早期開発、ＨＷ／ＳＷ協調検証などの技術があるが、上述のように組み込み型のシステムの設計の際には、ＥＳＬ設計手法をソフトウェアの早期開発に適用することができる。
【０００５】
図２２は、ＳｏＣの構成例を示すブロック図である。図２２のシステム２２００ように、ＳｏＣの構成例としては、たとえば、ＣＰＵと、メモリとの他に、特定の処理をおこなうための専用のＨＷブロック群とから構成されている。また、図２３は、ＳｏＣの開発工程を示す説明図である。図２３のように、ＥＳＬツール上で動作するＨＷモデルとＩＳＳ（インストラクションセットシミュレータ）を使い、ハードウェアが完成する前にソフトウェアの検証を実現している。
【０００６】
そして、図２４は、ソフトウェア早期開発環境の構成例を示す説明図である。上述したように、ＳｏＣの開発工程では、ＥＳＬツール１１０に含まれるＩＳＳ１１１上で実行形式ファイル１０２となったソフトウェアを動作させる。そして、各種のプログラム言語によって記述されたＨＷモデル１１２によってＨＷの処理をおこない、仮想的にシステム全体の動作を実現してソフトウェアの検証を実現する。さらに、ソフトウェアの検証にはソフトウェアデバッグプログラム１２０を使用する。ソフトウェアデバッグプログラム１２０では、ソフトウェアのソースコード１０１と実行形式ファイル１０２とを読み込み、ＩＳＳ１１１の実行制御と、ＩＳＳ１１１からのＣＰＵ動作情報を取得することによって、デバッグ機能を実現している。この、デバッグ機能には、ブレークポイント設定、継続実行、ステップ実行、ソースコード表示、変数・メモリ表示などがある。そして、ＧＵＩ１３０によってソフトウェアデバッグプログラム１２０における実行制御、ソースコードといったデバッグに用いる情報が表示される。
【０００７】
ここで、上述したようなデバッグを実現するための従来のデバッグ支援処理について説明する。図２５は、初期段階のソフトウェアデバッグ処理の手順を示すフローチャートである。また、図２６は、検証進行後のソフトウェアデバッグ処理の手順を示すフローチャートである。図２５のフローチャートは、主にソフトウェア開発の初期段階でバグが多く含まれる時に用いられる。
【０００８】
図２５において、まず、ソースコードの動作を確認したい部分にブレークポイントを設定し（ステップＳ１）、ソースコードの動作を継続実行させる（ステップＳ２）。そして、ブレークが発生すると（ステップＳ３）、停止させて、ソースコード、変数、メモリなどの各値の内容確認をおこなう（ステップＳ４）。そして、バグが見つかったか否か、および問題がありそうな部分を過ぎたか否かによりデバッグを終了させるか否かを判断し（ステップＳ５）、デバッグを終了しない場合は（ステップＳ５：Ｎｏ）、１行ずつソースコードのステップを実行させ（ステップＳ６）、その都度ステップＳ４の内容確認処理を実行する。
【０００９】
その後、ソースコードのデバッグが終了すると（ステップＳ５：Ｙｅｓ）、ステップＳ４の内容確認の際にプログラムのバグがあるか否かを判断する（ステップＳ７）。このステップＳ７において、バグが見つかったと判断された場合には（ステップＳ７：Ｙｅｓ）、ソースコードを修正・コンパイルして（ステップＳ８）、再度ステップＳ１の処理に戻り、デバッグを実行する。そして、ステップＳ７によってバグが見つからなかったと判断されると（ステップＳ７：Ｎｏ）、そのまま一連の処理を終了する。
【００１０】
図２５のような処理によって、ある程度の検証が進み、ソフトウェアが安定して動作するようになると、続いて、図２６のフローチャートによってより詳細な検証がおこなわれる。図２６において、まず、スクリプトなどによって入力ファイル（テストパターン）を指定する（ステップＳ１１）。その後、継続実行させ（ステップＳ１２）、終了後、期待値比較をおこなう（ステップＳ１３）。このステップＳ１３の比較結果を出力し（ステップＳ１４）、入力ファイル数の処理が終了したか否かを判断し（ステップＳ１５）、終了するまで（ステップＳ１５：Ｎｏ）、ステップＳ１１〜Ｓ１４の処理を繰り返し実行する。
【００１１】
その後、入力ファイル数の処理が終了すると（ステップＳ１５：Ｙｅｓ）、そのまま一連の処理を終了する。このように、検証進行後のデバッグ処理では、スクリプトにより、マニュアルの入力を必要としないため、夜間やバックグラウンドで実行することで複数のテストパターンをまとめて実行させることができる。
【００１２】
また、図２７は、期待値比較処理を示す説明図である。図２６のステップＳ１３にておこなわれる期待値比較処理は、図２７のように、テストパターン１０３からＥＳＬツール１１０によって生成された実行結果１０４と、期待値生成ソフト２７１によって生成された期待値データ２７２との比較処理が期待値比較スクリプト２７３によって実行され、比較結果２７４を出力する。図２６のステップＳ１３では、この期待値比較スクリプト２７３を実行させ、ステップＳ１４によって、比較結果２７４を出力させている。
【００１３】
また、図２８は、期待値比較に応じたソフトウェアデバッグ処理の手順を示すフローチャートである。図２７の処理によって出力された比較結果が期待値不一致であった場合は、図２８のような手順によってデバッグ処理をおこなう。図２８において、まず、出力データ、レジスタアクセスログ、ファームを確認する（ステップＳ２１）。
【００１４】
つぎに、検証対象ソフトに含まれている問題部分を特定できたか否かを判断する（ステップＳ２２）。ここで、問題部分を特定できた場合には（ステップＳ２２：Ｙｅｓ）、ファーム修正後、検証対象ソフトの再実行をおこない（ステップＳ２３）、一連の処理を終了する。一方、ステップＳ２２において、問題部分が特定できなかった場合（ステップＳ２２：Ｎｏ）、問題部分を特定するため、従来手法によって詳細に調査して（ステップＳ２４）、一連の処理を終了する。
【００１５】
通常、ＥＳＬ環境での実行速度は実機での実行速度の１００分の１以下となる。したがって、図２５の処理によってデバッグをおこなう際に、長いテストパターンを用いると、非常に長い処理時間を要してしまう。たとえば、画像デコードＬＳＩの場合、実機での処理時間が１分のテストパターンであっても、ＥＳＬ環境での処理時間は１時間４０分かかってしまう。実際には、ブレークポイント設定、ステップ実行といった処理をしながらデバッグを進めるため、さらに時間がかかってしまう。そこで、図２８のようなフローチャートの処理によって修正したファームを再実行する前に、まず、出力データ、レジスタアクセスログ、ソースコードを使ってデバッグをおこなう。そして、このデバッグによってバグが見つからなかった場合にのみ、図２５のデバッグをおこなう（たとえば、下記特許文献１参照）。
【００１６】
また、ＳｏＣに適用させるような組み込み型のソフトウェアの場合、一般的なソフトウェアのような演算処理だけでなく、ＣＰＵ外部のＨＷブロックの制御もおこなわなければならない。このような、ソフトウェアによる制御は、ＨＷブロック内のレジスタの読み書きや、ＨＷブロックからの割り込み通知に基づいて実行される。なお、ここで説明したレジスタとは、一般的にＣＰＵ内部に配置された演算用レジスタとは異なり、ＨＷブロックを制御したり、動作状態を確認したりするための専用のレジスタであり、ＣＰＵのメモリ空間にマッピングされている。
【００１７】
ここで、図２９は、レジスタアクセスログの構成を示す図表であり、図３０は、割り込みログの構成を示す図表である。また、図３１は、アクセスログ・割り込みログを示す説明図である。図２９の図表２９００や、図３０の図表３０００に示したように、組み込みソフトウェアに対するデバッグには、レジスタアクセスや割り込みログの情報が、プログラムを解析する際に非常に役に立つ情報となる。そして、検証対象ソフトをＨＷモデルによって実行させると、図３１のようなレジスタアクセスや割り込みログの情報を出力結果として取得できる。そして、これらの情報によりシステムの動作がわかるため、ログに関する情報だけでもある程度のデバッグをおこなうことができる。
【００１８】
上述のように、ＨＷモデル１１２によるログデータ１０５を用いてデバッグをおこなう際の作業としては、具体的には、（１）レジスタの設定内容およびソースコードの確認処理と、（２）割り込み動作の確認処理との２つがある。（１）の確認処理では、レジスタアクセスログ内の確認したいアクセスの値や、レジスタアクセスとそれに対応する検証対象ソフトウェアのソースコードを確認しながら正しく動作しているか確認する。
【００１９】
一方、（２）の確認処理では、実行結果として出力されたログデータ１０５内の割り込みログと、この割り込みログに対応するコマンド起動レジスタなどを確認して、起動をトリガとした割り込み発生のシーケンスの流れが正しく実行されているかどうかを確認する。同時にコマンド起動部分のソースコードも確認する。どちらの場合も検証者が、テキストファイルやプリントアウトした紙を見比べながらデバッグをおこなっていた。
【００２０】
【特許文献１】特開２００１−２５６０７２号公報
【発明の開示】
【発明が解決しようとする課題】
【００２１】
しかしながら、上述したようなＨＷモデル１１２による実行結果を用いたデバッグは、検証者の手によってマニュアル的に実行されていたため、多大な時間を要するという問題があった。
【００２２】
さらに、（１）の確認処理の場合、出力結果を目視で確認したり、レジスタ名を使ってソースコードを検索したりといった作業が要求される。ところが、ログと対応するソースコード部分を探す場合も、同じレジスタにアクセスするコードが複数箇所にあった場合には、どちらのソースコードの実行結果であるかを特定できない。たとえば、レジスタアクセスのシーケンスのログからソースコードの該当個所を類推することも不可能ではないが、対応箇所のソースコードを書いた検証者以外が、シーケンスから該当個所を特定するのは困難である。しかしながら、実際の開発環境では、１つのソフトウェアを複数名で分担して作成するのが一般的であるため、ソースコードの特定が非常に困難であるという問題があった。
【００２３】
また、（２）の確認処理の場合、バグにより、途中で割り込みの順序が乱れてしまっているような出力結果では、ログから割り込み発生を起こしたソースコードを特定するのは困難であった。たとえば、図３２は、ブロックＡに関するログの一例を示す説明図である。そして、図３３は、ログに応じたシーケンスを示す説明図である。図３２に示したようなログの記述のみから検証をおこなう場合、図３３のパターン１のようなシーケンスであってもパターン２のようなシーケンスであっても同一の記述になってしまい判別できないという問題があった。
【００２４】
この発明は、上述した従来技術による問題点を解消するため、デバッグに必要となるソースコードに関する情報を自動的に提供するソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法を実現することを目的とする。
【課題を解決するための手段】
【００２５】
上述した課題を解決し、目的を達成するため、このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法は、コンピュータにおいて、ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、前記ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレスを関連付けたログデータを生成する処理と、生成されたログデータを記録領域に蓄積する処理と、蓄積されたログデータを出力する処理とを含むことを要件とする。
【００２６】
このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法によれば、指定したレジスタへのアスクセスログと、当該アクセスログを出力させる命令元となったソースコードとが関連付いたログデータを出力することができる。
【００２７】
また、このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法は、検証対象ソフトウェアのソースコード群と、前記検証対象ソフトウェアをハードウェアモデルまたはハードウェアによって実行させた際のログデータ群とにアクセス可能なコンピュータにおいて、前記ログデータ群に記述されているレジスタの中から任意のレジスタの選択を受け付ける処理と、前記ソースコード群の中から、受け付けられた任意のレジスタの記述が含まれているソースコードを検索する処理と、検索されたソースコードを前記任意のレジスタが記述されたログデータと対応付けて出力する処理とを含むことを要件とする。
【００２８】
このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法によれば、指定したレジスタへのアクセスを実行するソースコードを自動的に抽出して検証者に提供することができる。
【発明の効果】
【００２９】
このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法によれば、デバッグに必要となるソースコードに関する情報を自動的に提供することによって効率的なデバッグを支援することができるという効果を奏する。
【発明を実施するための最良の形態】
【００３０】
以下に添付図面を参照して、このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法の好適な実施の形態を詳細に説明する。このソフトウェアデバッグ支援プログラム、ソフトウェアデバッグ支援装置およびソフトウェアデバッグ支援方法では、指定されたレジスタアクセスや割り込み動作とソースコードとの対応情報を自動的に抽出して検証者に提供することによってデバッグを支援することができる。
【００３１】
（ソフトウェアデバッグ支援処理の概要）
まず、本実施の形態にかかるソフトウェアデバッグ支援処理について説明する。図１は、本実施の形態にかかるソフトウェアデバッグ支援処理の概要を示す説明図である。図１のように、本実施の形態では、ソフトウェアデバッグ支援装置１００によって検証者（ユーザ）が指定したレジスタアクセスや割り込み動作のログを対応するソースコードと関連付けて出力することによって、検証者によるソフトウェアデバッグを支援することができる。
【００３２】
まず、本実施の形態にかかるソフトウェアデバッグ支援装置１００の構成について説明する。図１のように、ソフトウェアデバッグ支援装置１００は、ＥＳＬツール１１０と、ソフトウェアデバッグプログラム１２０と、ＧＵＩ１３０とを含んだ構成になっている。ＥＳＬツール１１０は、従来より用いられている設計手法である。そして、今回のソフトウェアデバッグ支援装置１００のように、ソフトウェア早期開発に用いる場合は、図１のようにＩＳＳ１１１と、ＨＷモデル１１２とを搭載した構成を用いる。
【００３３】
このＩＳＳ１１１およびＨＷモデル１１２は、検証対象ソフトの実行形式ファイル１０２を読み込むことによって、仮想的なＳｏＣを構成する。また、ＨＷモデル１１２には入力データ１０３としてテストパターンが入力される。ＨＷモデル１１２では、ＩＳＳ１１１の制御に応じて入力された入力データ１０３のテストパターンに応じた処理を実行し、この実行結果が、出力データ１０４として出力される。また、ＨＷモデル１１２からは、ＩＳＳ１１１からの制御に応じたログデータ１０５が出力される。
【００３４】
また、ソフトウェアデバッグプログラム１２０は、検証対象ソフトウェアのソースコード１０１と実行形式ファイル１０２とを読み込み、ＩＳＳ１１１の実行制御と、ＩＳＳ１１１からのＣＰＵ動作情報を取得することによって、デバッグ機能を実現する。この、デバッグ機能には、従来のブレークポイント設定、継続実行、ステップ実行、ソースコード表示、変数・メモリ表示に加えて、指定したレジスタアクセスログ１３１と対応するソースコード１３２とを対応付けて表示させる機能を備えている。したがって、ＧＵＩ１３０は、ソフトウェアデバッグプログラム１２０における実行制御の受け付けや、ソースコード１３２といったデバッグに用いる情報が表示される。
【００３５】
つぎに、上述したソフトウェアデバッグ支援装置１００のハードウェア構成について説明する。図２は、ソフトウェアデバッグ支援装置のハードウェア構成を示すブロック図である。ソフトウェアデバッグ支援装置１００は、図２のようなハードウェア構成をもつ汎用コンピュータによってＥＳＬツール１１０と、ソフトウェアデバッグプログラム１２０と、ＧＵＩ１３０とが実現される。
【００３６】
たとえば、図２において、ソフトウェアデバッグ支援装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、磁気ディスクドライブ２０４と、磁気ディスク２０５と、光ディスクドライブ２０６と、光ディスク２０７と、ディスプレイ２０８と、入力Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０９とネットワークＩ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２１０と、を備えている。また、各構成部はバス２２０によってそれぞれ接続されている。
【００３７】
ここで、ＣＰＵ２０１は、ソフトウェアデバッグ支援装置１００の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムや、ＥＳＬツールや、ソフトウェアデバッグプログラムなどのプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される。磁気ディスクドライブ２０４は、ＣＰＵ２０１の制御にしたがって磁気ディスク２０５に対するデータのリード／ライトを制御する。磁気ディスク２０５は、磁気ディスクドライブ２０４の制御で書き込まれたデータを記憶する。
【００３８】
光ディスクドライブ２０６は、ＣＰＵ２０１の制御にしたがって光ディスク２０７に対するデータのリード／ライトを制御する。光ディスク２０７は、光ディスクドライブ２０６の制御で書き込まれたデータを記憶したり、光ディスク２０７に記憶されたデータをコンピュータに読み取らせたりする。
【００３９】
ディスプレイ２０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ２０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００４０】
入力インターフェース（以下、「入力Ｉ／Ｆ」と略する）２０９は、キーボード、タッチパネルなど検証者からの指示を受け付ける。たとえば、キーボードの場合、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。また、マウスの場合は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００４１】
ネットワークインターフェース（以下、「ネットワークＩ／Ｆ」と略する）２１０は、
通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、このネットワークを介して他の装置に接続される。そして、ネットワークＩ／Ｆ２１０は、ネットワークと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。ネットワークＩ／Ｆ２１０には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００４２】
以上説明したように、ソフトウェアデバッグ支援装置１００は、汎用のコンピュータのハードウェア資源２０１〜２１０を利用してＥＳＬツール１１０、ソフトウェアデバッグプログラム１２０およびＧＵＩ１３０を実現することができる。たとえば、ＥＳＬツール１１０およびソフトウェアデバッグプログラム１２０は、ＣＰＵ２０１、ＲＯＭ２０２、ＲＡＭ２０３によって実現することができる。また、ＧＵＩ１３０は、ディスプレイ２０８および入力Ｉ／Ｆ２０９によって実現することができる。
【００４３】
また、ソフトウェアデバッグ支援装置１００の入力情報であるソースコード（全体）１０１、実行形式ファイル１０２および入力データ（テストパターン）１０３は、あらかじめ磁気ディスク２０５や、光ディスク２０７に記録しておいてもよいし、ネットワークＩ／Ｆ２１０を介して外部から取得してもよい。また、磁気ディスク２０５や、光ディスク２０７を、デバッグ支援装置１００からの出力情報であり出力データ１０４やログデータ１０５を蓄積する蓄積手段として利用することもできる。
【００４４】
また、上述の説明では、ＥＳＬツール１１０、ソフトウェアデバッグプログラム１２０およびＧＵＩ１３０を１台の汎用コンピュータによって実現させているが、複数のコンピュータによってそれぞれの機能を実現させ、ネットワークＩ／Ｆ２１０を介して、１つのソフトウェアデバッグ支援システムとして提供してもよい。
【００４５】
以下に、図１によって説明したようなソフトウェアデバッグ支援処理を実現するための具体的な実施例１，２について説明する。実施例１，２は、図１のソフトウェアデバッグ支援装置１００によって実現されるが、それぞれ異なる構成のログデータ１０５を扱うため（実施例１の場合は、従来のログデータと同じ構成）、ソフトウェアデバッグ支援用に検証者に提供される情報もそれぞれ異なる構成となる。したがって、検証者は、デバッグ支援装置１００のハードウェア環境や、デバッグ処理における検証目的に応じて、実施例１，２のいずれかを利用すればよい。
【００４６】
（実施例１）
実施例１では、図２５にて説明したような、通常のログデータを利用して、指定されたアクセスログや割り込みログについて、対応するソースコードを抽出してユーザに提供することでデバッグを支援する構成になっている。
【００４７】
上述したように、本実施の形態では、図１にて説明したデバッグ支援装置１００によってソフトウェアデバッグ支援処理が実現される。したがって、まず、実施例１におけるソフトウェアデバッグプログラム１２０の構成について説明する。図３は、実施例１におけるソフトウェアデバッグプログラムの構成を示すブロック図である。図３のように、ソフトウェアデバッグプログラム１２０には、ソースコード１０１、実行形式ファイル１０２およびログデータ１０５が入力され、下記のような処理を実行するプログラム群によって構成されている。
【００４８】
・ログデータ入力部：ログデータからレジスタアクセス・割り込みログを読み込ませる。
・レジスタアクセスログ表示部：ログデータ入力部が読み込んだレジスタアクセス・割り込みログをＧＵＩ上に表示させる。
・ＧＵＩ制御受付部：検証者からのＧＵＩ操作を受け付ける。
・ソースコード検索部：ＧＵＩ制御受付部によって指定されたレジスタ名からソースコードを検索する。検索時に同じレジスタ名を含んだソースコードが複数の箇所に存在する場合は、すべてのソースコードの記述箇所を検証候補としてＧＵＩ上に表示させて選択可能にする。
・ソースコード表示部：ソースコード検索部によって検索されたソースコードを表示させる。
【００４９】
つぎに、実施例１におけるソフトウェアデバッグ支援処理の手順について説明する。図４は、実施例１におけるソフトウェアデバッグ支援処理の手順を示すフローチャートである。図４のフローチャートは、ＧＵＩ１３０などによって検証者からのソース表示指示が入力されると、これをトリガとしてソフトウェアデバッグ支援処理を開始する。まず、ＧＵＩ１３０からソース表示指示があると、指定されたレジスタ名でソースコードを検索する（ステップＳ４０１）。ステップＳ４０１によって、指定されたレジスタ名に対応するレジスタアクセスの記述が検索されるため、検索されたれレジスタアクセス記述が複数あるか否かを判断する（ステップＳ４０２）。
【００５０】
このステップＳ４０２において、レジスタアクセス記述が複数ある場合（ステップＳ４０２：Ｙｅｓ）、これら複数のレジスタアクセス記述の候補部分の一覧をＧＵＩ１３０上に表示させる（ステップＳ４０３）。ここで表示させた候補部分の一覧から検証者からの選択を受け付けると、選択された部分のソースコード１３２を表示させ（ステップＳ４０４）、一連の処理を終了する。
【００５１】
一方、ステップＳ４０２において、検索されたレジスタアクセス記述が一カ所のみであった場合（ステップＳ４０２：Ｎｏ）、検索されたレジスタアクセス記述部分に対応するソースコードを表示し（ステップＳ４０５）、一連の処理を終了する。
【００５２】
なお、図４のフローチャートでは、検証者にレジスタ名を指定させ、指定されたレジスタ名からソースコードを検索しているが、ログデータ一覧の中から検証したいログデータを指定させてもよい。このような場合は、選択されたログデータの中からレジスタ名を抽出する。そして抽出されたレジスタ名について図４のフローチャートの処理をおこなえばよい。
【００５３】
このように、実施例１では従来のログデータをそのまま利用して指定したレジスタに関するレジスタアクセスログ１３１とソースコード１３２とを対応付けて表示させることができる。したがって、検証者は、従来のようにすべてのソースコード１０１とログデータ１０５とを比較しながら対応関係を把握するような手間が削減される。また、上述したように、ログデータ１０５は従来の構成のものをそのまま利用するため、ＨＷモデル１１２もあらたな機能を追加することなく従来の構成をそのまま利用することができる。
【００５４】
（実施例２）
実施例２は、ログデータ１０５として実施例１の場合よりも多くの情報を取得することによって、実施例１よりも多様な情報を提供してデバッグ支援を実現する。なお、実施例２の場合も実施例１と同様に図１のようなデバッグ支援装置１００の構成によって実現されるが、ＨＷモデル１１２内部の構成と、ソフトウェアデバッグプログラム１２０内部の構成、さらに、ＨＷモデル１１２から出力させるログデータの構成が異なっている。したがって、以下に各構成の相違点と、具体的なデバッグ支援処理の内容とについて説明する。
【００５５】
＜ソフトウェアデバッグプログラムの構成＞
まず、実施例２におけるソフトウェアデバッグプログラムについて説明する。図５は、実施例２におけるソフトウェアデバッグプログラムの構成を示すブロック図である。図５のように、ソフトウェアデバッグプログラム１２０には、レジスタアクセスログ表示部、ソースコード表示部、ソース行取得部、ＧＵＩ制御受付部、ログデータ入力部、ログデータ検索部が含まれている。このように、実施例１と比較して、ソース行取得部が追加され、ソースコード検索部に替わってログデータ検索部が追加された構成になっている。
【００５６】
また、ソフトウェアデバッグプログラム１２０に入力されるソースコード１０１、実行形式ファイル１０２は、実施例１と同じ情報である。また、上述したように、ログデータ１０５は、実施例２のデバッグ支援処理を実現するために、ＨＷモデル１１２によって、実施例１のログデータ１０５（図２９，３０に示した従来のログデータと同じ構成）とは異なる構成のログデータ１０５が出力されており、このログデータ１０５が入力される。なお、ＨＷモデル１１２によるログデータ１０５の出力処理については後述する。
【００５７】
つぎに、上述したソフトウェアデバッグプログラムの各機能部について、実施例１と異なる処理をおこなう点について説明する、ソース行取得部は、レジスタアクセスログ表示部によって表示されたレジスタアクセスログや割込ログの中から検証者にソースコード表示指示を受け付けると、ログデータ１０５に関連付けられたた命令アドレスを参照して対応するソースコード行数を取得する。したがって、ソースコード表示部は、指定された行数に対応するソースコード１３２の表示をおこなう。なお、アドレスとソースコード１３２の行数との対応情報は、ＨＷモデル１１２に入力される実行形式ファイル１０２に含まれるため、ＨＷモデル１１２によって、命令アドレスが関連付いたログデータ１０５を出力させている（詳しくはＨＷモデル１１２の構成にて説明する）。またログデータ検索部は、検証者によって指定された割り込み名でログデータ１０５を検索する処理をおこなう。
【００５８】
＜ＨＷモデルの構成＞
つぎに、実施例２のソフトウェアデバッグ支援装置１００に適用するＨＷモデルの構成について説明する。図６は、実施例２におけるＨＷモデルの構成を示すブロック図である。図６のように、実施例２のデバッグ支援装置１００のＥＳＬツール１１０のＨＷモデル１１２は、デバッグ用の情報を含んだログデータ１０５を出力させるために、あらたな機能を含んだ構成になっている。
【００５９】
具体的に説明すると、図６のＨＷモデル１１２では、従来のＨＷ機能部６００に加えて、レジスタアクセスログ出力部６０１と、割り込みログ出力部６０２と、命令アドレス取得部６０３と、スタックメモリ読み出し部６０４と、リターンアドレス取得部６０５とを備えている。
【００６０】
レジスタアクセスログ出力部６０１は、従来のログ（「従来のログ」とは図２９にて説明したログデータを意味する）に加えてデバッグ用の情報をあらたに出力する。割り込みログ出力部６０２は、従来の割り込みログ（「従来の割り込みログ」とは図３０にて説明したログデータを意味する）に加えてデバッグ用の情報をあらたに出力する。命令アドレス取得部６０３は、レジスタアクセスが発生した時点のプログラムの命令アドレス（プログラムカウンタの値）を取得する。命令アドレスは、ＩＳＳ１１１のＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）として用意されているＰＣ取得関数を用いて取得する。
【００６１】
スタックメモリ読み出し部６０４は、ＩＳＳ１１１からスタックメモリの内容を読み出す処理をおこなう。このスタックメモリの読み出しもＡＰＩとして用意されているメモリ読み出し関数を用いて実現する。リターンアドレス取得部６０５は、読み出したスタックメモリの内容から呼び出し元の関数を示すリターンアドレスを取得する処理をおこなう。
【００６２】
＜ログの構成＞
つぎに、実施例２におけるレジスタアクセスログ、割り込みログそれぞれの構成について説明する。図６にて説明したように、実施例２のＨＷモデル１１２は、あらたな機能部６０１〜６０５が追加されている。したがって、ＨＷモデル１１２からは、図３０，３１にて説明した従来のログや従来の割り込みログにあらたにデバッグ用の情報が追加された構成のログデータ１０５が出力される。
【００６３】
図７は、実施例２におけるレジスタアクセスログの構成を示す図表であり、図８は、実施例２における割り込みログの構成を示す図表である。実施例２において、レジスタアクセスに関するログデータは、図７の図表７００に示すように従来のログデータの構成に、割り込みＩＤ、命令アドレスおよびリターンアドレスが追加された構成になっている。また、図８の図表８００に示すように従来のログデータの構成に、割り込み種別、割り込みＩＤが追加されている。ここで追加されている割り込みＩＤは、割り込みの原因となるコマンド起動レジスタと割り込みを対応付けるために割り当てられるＩＤである。なお、本実施の形態では、割り込み種別として、下記の４種類に区別された情報を用いる。
【００６４】
・コマンド完了：ＣＯＭ＿ＥＮＤ
・イネーブル変化：ＥＮＡＢＬＥ
・その他：ＯＴＨＥＲ
・要因変化：ＭＡＳＫＥＤ
【００６５】
このように、実施例２のＨＷモデル１１２では、従来のログデータにデバッグ用の情報が関連付いたあらたなログデータ１０５を生成する構成になっている。したがって、以下に、ＨＷモデル１１２が各種実行処理をおこなった場合のログデータ１０５の出力手順と、出力されたログデータ１０５を用いソフトウェアデバッグ支援処理について説明する。
【００６６】
＜ＨＷモデル実行処理（レジスタアクセスログ出力時）＞
まず、ＨＷモデル１１２におけるレジスタアクセスログ出力時の実行処理の手順を説明する。図９は、ＨＷモデルにおけるレジスタアクセスログ出力時の実行処理の手順を示すフローチャートである。図９において、まず、実行中のプログラムにおいてレジスタアクセスが発生したか否かを判断する（ステップＳ９０１）。ここで、レジスタアクセスが発生するまで待ち（ステップＳ９０１：Ｎｏのループ）、レジスタアクセスが発生すると（ステップＳ９０１：Ｙｅｓ）、命令アドレス取得部６０３によってレジスタアクセス発生時に実行された命令アドレスを取得する（ステップＳ９０２）。
【００６７】
つぎに、スタックメモリ読み出し部６０４によってスタックメモリを読み出し（ステップＳ９０３）、リターンアドレス取得部６０５によって、ステップＳ９０３によって読み出したスタックメモリの内容を解析し、リターンアドレスが存在する場合は値を保持する（ステップＳ９０４）。そして、プログラムの実行結果に加えて、ステップＳ９０２にて取得した命令アドレスと、ステップＳ９０４にて取得したリターンアドレスとをログデータ１０５として出力する（ステップＳ９０５）。その後、実行させたプログラムに応じてハードウェア構成を実行させて（ステップＳ９０６）、一連の処理が終了する。
【００６８】
このように、ＨＷモデル１１２は、レジスタアクセスを実行した場合に、このレジスタアクセスの実行を命令したソースコードの命令アドレスを取得し、命令アドレスが関連付いたログデータ１０５生成され蓄積されている。また、実行したレジスタアクセスにおいてリターンアドレスが存在する場合には、リターンアドレスを併せて取得し、リターンアドレスが関連付いたログデータ１０５が生成され蓄積されていることになる。
【００６９】
＜ソースコード表示処理＞
つぎに、上述のようにデバッグ用の情報として各種アドレスを含んだログデータ１０５を用いたソフトウェアデバッグ支援処理について説明する。ここでは、具体的には、ソフトウェアデバッグプログラム１２０によってログデータ１０５から指定したログについてのソースコードを表示させることによって検証者のソフトウェアデバッグを支援する。
【００７０】
図１０は、実施例２におけるソフトウェアデバッグプログラムのソースコード表示処理の手順を示すフローチャートである。図１０のフローチャートでは、検証者がＧＵＩを使ってレジスタアクセスに対応するソースコード１３２を表示させる指示をおこなった際の処理をあらわしている。
【００７１】
図１０において、まず検証者からのＧＵＩの入力を受け付けたか否かを判断する（ステップＳ１００１）。ここで、ＧＵＩ入力を受け付けたと判断されるまで待ち（ステップＳ１００１：Ｎｏのループ）、ＧＵＩ入力を受け付けると（ステップＳ１００１：Ｙｅｓ）、受け付けたＧＵＩ入力がソース表示指示か呼び出し元関数表示指示かを確認するための処理に移行する。
【００７２】
まず、受け付けたＧＵＩ入力がソース表示指示か否かを判断する（ステップＳ１００２）。ここで、受け付けたＧＵＩ入力がソース表示指示であった場合（ステップＳ１００２：Ｙｅｓ）、ソース表示をおこなうため、指定アクセス部分の命令アドレスを取得し（ステップＳ１００３）、さらに、取得した命令アドレスに対応するソース行番号を取得する（ステップＳ１００４）。そして、取得したソース行番号を参照してソースコードを表示し（ステップＳ１００５）、一連の処理を終了する。
【００７３】
一方、ステップＳ１００２において、ソース表示指示ではなかった場合（ステップＳ１００２：Ｎｏ）、呼び出し元表示指示と判断し、リターンアドレスがあるか否かを判断する（ステップＳ１００６）。ここで、リターンアドレスがあると判断された場合は（ステップＳ１００６：Ｙｅｓ）、リターンアドレスを取得し（ステップＳ１００７）、リターンアドレスに対応するソース行番号を取得する（ステップＳ１００８）。そして、取得したソース行番号を参照してソースコードを表示し（ステップＳ１００９）、一連の処理を終了する。以上説明したステップＳ１００５およびステップＳ１００９のソースコード表示処理では、表示対象部分のソースコードがＧＵＩ１３０上に表示される。また、ステップＳ１００６において、リターンアドレスがないと判断された場合（ステップＳ１００６：Ｎｏ）、そのまま一連の処理を終了する。
【００７４】
このように、ソフトウェアデバッグ支援装置１００のＨＷモデル１１２によって事前に出力されたレジスタアクセスログを用いて、ソフトウェアデバッグプログラム１２０がレジスタアクセスの実行元となる命令アドレスやリターンアドレスに対応するソースコード１３２を自動的に抽出する。抽出されたソースコード１３２は、ＧＵＩ１３０によってレジスタアクセスログ１３１と対応付けられた情報として表示され、検証者によるソフトウェアデバッグ用の情報として提供される。
【００７５】
＜ＨＷモデル実行処理（割り込みログ出力時）＞
つぎに、ＨＷモデル１１２の実行処理によって割り込みが発生した場合の割り込みログ出力について説明する。図１１は、ＨＷモデルにおける割り込みログ出力時の実行処理の手順を示すフローチャートである。割り込み処理は、レジスタライトが発生した際にそのレジスタが、（ア）コマンド起動レジスタ、（イ）割り込みマスク／イネーブルレジスタ、（ウ）それ以外である場合におこなわれる。したがって、レジスタライトが上述の（ア）〜（ウ）のいずれかを確認した後、それぞれの場合に応じた処理をおこなう。
【００７６】
図１１のフローチャートにおいて、まず、レジスタライトが発生したか否かを判断する（ステップＳ１１０１）。ここで、レジスタライトが発生するまで待ち（ステップＳ１１０１：Ｎｏのループ）、レジスタライトが発生すると（ステップＳ１１０１：Ｙｅｓ）、つぎに、ステップＳ１１０１において、ライトされたレジスタが起動レジスタであるか否かを判断する（ステップＳ１１０２）。
【００７７】
このステップＳ１１０２において、ライトされたレジスタが起動レジスタであると（ステップＳ１１０２：Ｙｅｓ）、上述した（ア）の場合と判断される。したがって、まず、割り込みＩＤを割り当て（ステップＳ１１０３）、アクセスログを出力し（ステップＳ１１０４）、ＨＷ処理を実行する（ステップＳ１１０５）。そして、ステップＳ１１０５のＨＷ処理実行後、割り込みが発生するか否かを判断して（ステップＳ１１０６）、割り込みが発生すると判断された場合には（ステップＳ１１０６：Ｙｅｓ）、割り込みを実行させる（ステップＳ１１０７）。そして、ステップ１１０７にて実行した割り込み処理のログを出力して（ステップＳ１１０８）、一連の処理を終了する。また、ステップＳ１１０５のＨＷ処理実行後、割り込みが発生しないと判断された場合には（ステップＳ１１０６：Ｎｏ）、そのまま一連の処理を終了する。
【００７８】
一方、ステップＳ１１０２において、ライトしたレジスタが起動レジスタでなかったとすると（ステップＳ１１０２：Ｎｏ）、上述した（イ）また（ウ）の場合と判断される。したがって、今度は、ライトしたレジスタがマスク／イネーブルレジスタか否かを判断する（ステップＳ１１０９）。ここで、アクセスしたレジスタがマスク／イネーブルレジスタのいずれかであれば（ステップＳ１１０９：Ｙｅｓ）、（イ）の場合と判断される。したがって、マスク／イネーブルレジスタのアクセスログを出力し（ステップＳ１１１０）、さらに、割り込みが発生するか否かを判断する（ステップＳ１１１１）。
【００７９】
ステップＳ１１１１において、割り込みが発生すると判断された場合には（ステップＳ１１１１：Ｙｅｓ）、そのまま、割り込み処理を実行させる（ステップＳ１１１２）。そして、ステップ１１１２にて実行した割り込み処理のログを出力して（ステップＳ１１１３）、一連の処理を終了する。なお、ステップＳ１１１１において、割り込みが発生しないと判断された場合には（ステップＳ１１１１：Ｎｏ）、そのまま一連の処理を終了する。
【００８０】
そして、ステップＳ１１０９において、アクセスしたレジスタがマスク／イネーブルレジスタのいずれでもなければ（ステップＳ１１０９：Ｎｏ）、（ウ）の場合と判断される。したがって、アクセスしたレジスタは、起動レジスタ、マスク／イネーブルレジスタのいずれにも該当しないその他のレジスタとしてアクセスログを出力して（ステップＳ１１１４）、一連の処理を終了する。
【００８１】
＜割り込み対応レジスタ表示処理＞
つぎに、図１１の処理によってＨＷモデル１１２から出力されたログデータ１０５を用いて、割り込みに対応する起動レジスタの表示処理の手順について説明する。図１２は、実施例２におけるソフトウェアデバッグプログラムの割り込み対応レジスタの表示処理の手順を示すフローチャートである。ここでは、ソフトウェアデバッグプログラム１２０は、検証者からＧＵＩ１３０を介して割り込み原因表示指示があった場合、割り込みログの割り込み種別が（Ａ）マスク／イネーブル変化による割り込み、（Ｂ）コマンド完了による通常の割り込み、（Ｃ）それ以外の割り込みのいずれであるかを確認して、それぞれの割り込み種別に応じた表示処理をおこなう。
【００８２】
図１２のフローチャートにおいて、まず、検証者から割り込み原因表示指示を受け付けたか否かを判断する（ステップＳ１２０１）。ここで、割り込み原因表示指示を受け付けるまで待ち（ステップＳ１２０１：Ｎｏのループ）、割り込み原因表示指示を受け付けると（ステップＳ１２０１：Ｙｅｓ）、つぎに、割り込みの発生原因はマスク／イネーブル変化によるか否かを判断する（ステップＳ１２０２）。このステップＳ１２０２における割り込み発生原因の判別は、ログデータ１０５に含まれている情報の中の割り込み種別を参照する。
【００８３】
ステップＳ１２０２において、割り込み発生原因が（Ａ）マスク／イネーブル変化であった場合（ステップＳ１２０２：Ｙｅｓ）、まず、ログデータ１０５から割り込み要因を取得し（ステップＳ１２０３）、取得した割り込み要因でログを検索する（ステップＳ１２０４）。そして、その割り込みが発生した時間より前の時間で一番近い位置の割り込み要因変化部分を探し、その割り込みＩＤを取得する（ステップＳ１２０５）。その後、ステップＳ１２０５にて取得した割り込みＩＤによってログデータ１０５を検索し（ステップＳ１２０６）、対応するレジスタアクセスを特定し、ＧＵＩ１３０上に表示して（ステップＳ１２０７）、一連の処理を終了する。
【００８４】
一方、ステップＳ１２０２において、割り込み発生原因が（Ａ）ではない場合（ステップＳ１２０２：Ｎｏ）、さらに（Ｂ）コマンド完了による通常の割り込みであるか否かを判断し（ステップＳ１２０８）、（Ｂ）の割り込みであった場合（ステップＳ１２０８：Ｙｅｓ）、割り込みログからＩＤを取得し（ステップＳ１２０９）、そのＩＤでログを検索し（ステップＳ１２１０）、対応するレジスタアクセスを特定してＧＵＩ上に表示して（ステップＳ１２１１）、一連の処理を終了する。
【００８５】
また、ステップ１２０８において（Ｂ）の割り込みでなかった場合（ステップＳ１２０８：Ｎｏ）、（Ｃ）それ以外の割り込みであると判断される。したがって、ＧＵＩ１３０に割り込みに対応する起動レジスタが無いというメッセージのみを表示して（ステップＳ１２１２）、一連の処理を終了する。
【００８６】
＜ログデータの出力例＞
ここで、図１３−１〜図１３−３は、ログデータの出力例を示す説明図である。図１３−１は、上述した（Ａ）の場合に出力されるログデータ１０５である。具体的には、イネーブルレジスタへの書き込みにより割り込みが発生する場合であり、２行目の割り込みイネーブルレジスタへの書き込みにより割り込みが無効となっている。また、３行目のコマンド起動レジスタへの書き込みによりＨＷモデル１１２の処理が開始される（起動レジスタＩＤ：０ｘ３２４）。
【００８７】
さらに、１０行目でコマンド完了により割り込み要因レジスタの値が変化し、割り込み状態となっている。このとき、割り込みが無効となっているため、実際に割り込みは発生しない。そしてログデータ１０５には起動レジスタのＩＤに対応する０ｘ３２４が記録されている。また、１２行目の割り込みイネーブルレジスタへの書き込みにより割り込みが有効となっている。その結果、１３行目において、１０行目で割り込み状態となっていた割り込みが発生している。ここでは、イネーブルレジスタ変更による割り込み発生のため、割り込みＩＤは記録されない。
【００８８】
つぎに、図１３−２は、上述した（Ｂ）の場合に出力されるログデータ１０５である。起動コマンドの完了に伴った割り込みが発生する場合となっている。さらに、図１３−３は、上述した（Ｃ）の場合に出力されるログデータ１０５である。（Ｃ）の場合、起動／マスク／イネーブルレジスタとは関係なく発生する割り込み（エラーなど）をあらわしている（たとえば、９行目のように起動／マスク／イネーブルレジスタとは関係のないエラーによる割り込み）。上述したように、（Ｃ）の割り込みの場合、対応するＩＤがないため割り込みＩＤは記録されない。
【００８９】
このように、ソフトウェアデバッグ支援装置１００のＨＷモデル１１２によって割り込みが発生すると、割り込みの種別に応じて、割り込みに対応する起動レジスタへのアクセスを表示され、検証者によるソフトウェアデバッグ用の情報として提供される。また、割り込み要因がわからない場合には、その旨を示すメッセージを出力することもできる。
【００９０】
（デバッグ処理の手順）
つぎに、本実施の形態にかかるデバッグ処理の手順について説明する。図１４は、本実施の形態にかかるデバッグ処理の手順を示すフローチャートである。上述したように、本実施の形態では、ソフトウェアデバッグプログラム１２０によってデバッグ支援処理をおこなうことによって指定した箇所に対応するソースコードが表示される。検証者は、表示されたソースコードから検証箇所を確認して、適宜ソースコードの修正をおこなう。
【００９１】
デバッグ処理について説明すると、図１４のフローチャートにおいて、まず、バッチ処理により複数のテストパターンを連続実行する（ステップＳ１４０１）。そして実行結果と期待値との比較結果が正しいか否かを判断する（ステップＳ１４０２）。ここで、比較結果が正しいと判断された場合は（ステップＳ１４０２：Ｙｅｓ）、ソースコードにバグは含まれないため、そのまま一連の処理を終了する。
【００９２】
一方、ステップＳ１４０２において、比較結果が正しくないと判断された場合は（ステップＳ１４０２：Ｎｏ）、デバッグ支援処理によって再度アクセスログ、割り込みログのソースコードを確認する（ステップＳ１４０３）。そして、ステップ１４０３のソースコードの確認処理によって問題部分を特定できたか否かを判断する（ステップＳ１４０４）。ここで、問題部分が特定できた場合は（ステップＳ１４０４：Ｙｅｓ）、問題部分のファームを修正し（ステップＳ１４０５）、ステップＳ１４０１の処理に戻り、再度バッチ処理を実行する。
【００９３】
また、ステップＳ１４０４において、問題部分が特定できなかった場合（ステップＳ１４０４：Ｎｏ）、従来手法を用いてソースコードを詳細に調査して問題特定し（ステップＳ１４０６）、ステップＳ１４０５の処理に移行する。このように、ソフトウェアデバッグ支援装置１００では、ソースコード修正後のソフトウェアのデバッグ処理を繰り返すことにより検証精度を向上させることができる。
【００９４】
以上説明したように、実施例２では下記のような機能が実現される。したがって、検証者へデバッグに必要となるソースコードに関する情報を自動的に提供可能となりファーム開発期間を短縮できる。
・デバッガでレジスタログ／割り込みログ表示
・レジスタアクセスとソースとの対応表示
・ログデータ内の指定された割り込み処理についての割り込みの原因（レジスタアクセスログ）表示
・指定された起動レジスタアクセス部分のソースコード表示
【００９５】
（表示例）
つぎに、実施例２のソフトウェアデバッグ支援装置１００を利用して、検証者がレジスタアクセスに対応するソースコードを表示させる場合と、割り込みに対応する起動レジスタを表示させる場合について具体例を挙げて説明する。
【００９６】
＜ＳｏＣの構成＞
まず、ＳｏＣの構成について説明する。図１５は、ＳｏＣの構成例を示すブロック図である。以下表示例はいずれも図１５のＳｏＣ１５００によって検証対象ソフトウェアが例の説明に使用するＳｏＣ例のブロック図を示す。ＳｏＣ１５００では、ＣＰＵ上のファームからブロックＡ、ブロックＢ、ブロックＣの制御をおこなう。
【００９７】
＜ソースコード表示時＞
つぎに、ソースコード表示時の表示例について説明する。ここでは、まずソースコード表示時のＨＷモデルの処理について説明した後、ＧＵＩへの表示例について説明する。
【００９８】
・ＨＷモデルのシーケンス
図１６は、ソースコード表示時のＨＷモデルの処理を示すシーケンス図である。図１６では、通常のレジスタ（コマンド起動レジスタではない）にアクセスする際の処理を示している。まず、ＩＳＳ（ファーム）１１１によるレジスタアクセスが発生すると、ＨＷモデル１１２では、命令アドレスを取得する（ステップＳ１６０１）。ステップＳ１６０１では、ＨＷモデル１１２は、ＩＳＳ１１１に対して命令アドレスの出力を要求する。この要求に応答してＩＳＳ１１１から命令アドレスが送信されることによってＨＷモデル１１２が命令アドレスを取得することができる。
【００９９】
続いて、ＨＷモデル１１２は、取得した命令アドレスを参照してＩＳＳ１１１からスタックメモリの内容を読み出す（ステップＳ１６０２）。このステップＳ１６０２の処理もステップＳ１６０１と同様に、ＨＷモデル１１２からＩＳＳ１１１へスタックメモリの読み出しを要求することによって実現される。そして、ＨＷモデル１１２は、ステップＳ１６０２によって読み出したスタックメモリからリターンアドレスを取り出し（ステップＳ１６０３）、命令アドレスと、リターンアドレスを加えたレジスタアクセスログを出力し（ステップＳ１６０４）、最後に実際のハード処理を実行する（ステップＳ１６０５）。
【０１００】
・ＧＵＩの表示例
つぎに、ソースコード表示時のＧＵＩの表示例について説明する。図１７は、ソースコード表示時のＧＵＩの表示例を示す説明図である。上述した図１３-１はこの時のレジスタアクセスログである。図１７のように、ソースコード表示時には、複数のウィンドウが表示される。そして、たとえば、上側のウィンドウ１７０１にレジスタアクセス・割り込みログを表示し、下側のウィンドウ１７０２にソースコードを表示させる。図１７の表示例では、レジスタアクセスログのＢＬＯＣＫ＿Ａ＿＿ＩＲＱ＿ＣＬＥＡＲレジスタへの書き込みを指定し、ソースコード表示ボタンＢをクリックすることによって、ソースコード表示画面にレジスタアクセスに対応するソースコード行「ｗｒｉｔｅ＿ｒｅｇ（ＢＬＯＣＫ＿Ａ＿＿ＩＲＱ＿ＣＬＥＡＲ，ｉｎｔ＿ｃｌｅａｒ）；」が表示されている。
【０１０１】
ソフトウェアデバッグプログラム１２０の動作としては、レジスタアクセスログの時間５３６４６５におけるＢＬＯＣＫ＿Ａ＿＿ＩＲＱ＿ＣＬＥＡＲレジスタへの書き込みの際、実行形式ファイル内のデバッグ情報から、命令アドレス０ｘＢ５８８に対応するソースコード行を求める。そして、その行数のソースコードをソース表示ウィンドウに表示させる。さらに、ソフトウェアデバッグプログラム１２０は、ソースコードウィンドウの呼び出し元関数表示ボタンＣがクリックされると、呼び出し元関数のソースコードを表示させる。
【０１０２】
＜割り込み発生時＞
つぎに、割り込み発生時の表示例について説明する。ここでも、まず割り込み発生時のＨＷモデルの処理について説明した後、ＧＵＩへの表示例について説明する。
【０１０３】
・ＨＷモデルのシーケンス
図１８−１〜図１８−３は、割り込みログ出力時のＨＷモデルの処理例を示すシーケンス図である。図１８−１では、ＨＷモデル１１２において（ア）のコマンド起動レジスタの割り込みが発生した場合のシーケンスを示している。図１８−１のように、ＩＳＳ１１１からのコマンド起動レジスタへの書き込みが発生すると、ＨＷモデル１１２では、割り込みＩＤ０ｘ３２４が割り当てられる（ステップＳ１８１１）。そして、割り込みＩＤを含むレジスタアクセスログが出力される（ステップＳ１８１２）。
【０１０４】
その後、ＨＷモデル１１２における時間経過を実現するためにタイマー設定がおこなわれ（ステップＳ１８１３）、ＩＳＳ１１１に送信される。ＩＳＳ１１１は、タイマー設定に応答して指定サイクル経過後にタイマーイベントが発生する。なお、タイマー設定およびタイマーイベント発生はＩＳＳ１１１のＡＰＩに用意されているものとする。
【０１０５】
ＨＷモデル１１２はＩＳＳ１１１からのタイマーイベントを受け付けると、ハードウェア処理を実行し（ステップＳ１８１４）、その後、割り込みを発生させ（ステップＳ１８１５）、割り込みＩＤ０ｘ３２４の割り込みログをログデータ１０５として出力する（ステップＳ１８１６）。
【０１０６】
つぎに、図１８−２は、割り込みログ出力時のＨＷモデルの処理例（その２）を示すシーケンス図である。ＨＷモデル１１２において（イ）の割り込みマスク／イネーブルレジスタの割り込みが発生した場合のシーケンスを示している。図１８−２のように、ＩＳＳ１１１からのコマンド起動レジスタへの書き込みが発生すると、ＨＷモデル１１２では、ハードウェア処理が実行される（ステップＳ１８２１）。そして、ステップＳ１８２１の処理完了に伴い、割り込み要因が変化する（ステップＳ１８２２）
【０１０７】
そして、ＩＳＳ１１１によって割り込みイネーブルレジスタを有効にされると、さらに、ＩＳＳ１１１からのマスク／イネーブルレジスタ書き込みにより、ＨＷモデル１１２は、割り込みが有効となる（ステップＳ１８２３）。そして、ＨＷモデル１１２は、レジスタアクセスログを出力した後（ステップＳ１８２４）、イネーブルレジスタの値と、割り込み要因レジスタの値を確認して割り込みを発生させるかどうかチェックする（ステップＳ１８２５）。図１８−２の例では、事前に割り込み状態となっているため割り込みを発生させ（ステップＳ１８２６）、割り込みログを出力する（ステップＳ１８２７）。この場合、対応する起動レジスタがないため、割り込みＩＤは記録されない。
【０１０８】
また、図１８−３のシーケンスでは、図１１における（ウ）のようにコマンド起動／割り込みマスク／割り込みイネーブルレジスタ以外で割り込みに関係のないレジスタへの書き込みがおこなわれる場合のＨＷモデル１１２の手順を示している。図１８−３のように、ＩＳＳ１１１からのレジスタ書き込み（起動／マスク／イネーブル以外）に応答して、ＨＷモデル１１２では、レジスタアクセスログを出力する（ステップＳ１８３１）。なお、ステップＳ１８３１の処理の際、ＨＷモデル１１２は、割り込み処理自体は未発生であるため、割り込みログは出力しない。
【０１０９】
・ＧＵＩの表示例
［マスク／イネーブル変化による割り込み発生時］
つぎに、マスク／イネーブル変化による割り込み発生時のＧＵＩの表示例について説明する。図１９−１および図１９−２は、マスク／イネーブル変化による割り込み発生時のＧＵＩ表示例を示す説明図である。図１９−１では、図１４において（Ａ）のイネーブル変化による割り込みに相当するログ例である。
【０１１０】
レジスタアクセスの中から検証者によって検証対象となる割り込みの指定を受け付けた後、割り込み原因表示ボタンＡをクリックすることによって、対応する割り込み要因変化ログ、起動レジスタ書き込みが表示される。ソフトウェアデバッグプログラム１２０では、まず指定された割り込みログの割り込み種別を確認する。このとき割り込み種別は、イネーブル（ＥＮＡＢＬＥ）となっているため、割り込み要因の値「ＢＬＯＣＫ＿Ａ＿ＩＮＴ＿ＤＥＣ＿ＤＯＮＥ」で時間的に前方向のログを検索し、一番近い位置の要因変化（ＭＡＳＫＥＤ）で割り込み要因が同じログを探す。表示例では、一番近い位置として１０行目に見つかり、その時点で割り込みＩＤ（０ｘ３２４）が確定する。その後、ＩＤ０ｘ３２４でログを検索し、対応するＢＬＯＣＫ＿Ａ＿ＤＥＣ＿ＳＴＡＲＴレジスタへの書き込みアクセスを表示する。割り込み要因も表示する。
【０１１１】
また、図１９−２では、図１９−１と同様に図１４において（Ａ）のイネーブル変化による割り込みであるが、割り込み要因変化部分のログをＧＵＩに表示しない場合を示している（検証者によって割り込み原因表示ボタンＡがクリックされなかった）。このとき、ソフトウェアデバッグプログラム１２０の処理は、図１９−１と同様のものとなる。
【０１１２】
［コマンド完了による割り込み発生時］
つぎに、コマンド完了による割り込み発生時のＧＵＩ表示例について説明する。図２０は、コマンド完了による割り込み発生時のＧＵＩ表示例を示す説明図である。図２０では、図１４における（Ｂ）の起動コマンドに対応する完了割り込みが発生した場合に表示をあらわしている。
【０１１３】
図２０のように、割り込み原因表示ボタンＡをクリックすることにより対応する起動レジスタ書き込みが表示される。このとき、ソフトウェアデバッグプログラム１２０は、割り込みログの割り込みＩＤ０ｘ３２４で割り込みログを検索する。そして、対応する、時間５２５６５０の「ＢＬＯＣＫ＿Ａ＿＿ＤＥＣ＿ＳＴＡＲＴ」レジスタへの書き込みアクセスを表示する。さらに、ソースコード表示ボタンＢがクリックされると、ＢＬＯＣＫ＿Ａ＿＿ＤＥＣ＿ＳＴＡＲＴレジスタへの書き込み部分のソースコードを表示させる。
【０１１４】
［その他の割り込み発生時］
最後に、上述したマスク／イネーブル変化およびコマンド完了以外の要因による割り込み発生時のＧＵＩの表示例について説明する。図２１は、その他の割り込み発生時のＧＵＩ表示例を示す説明図である。図２１のウィンドウ２１００の表示例は、図１２にて説明した（Ｃ）起動／マスク／イネーブルレジスタとは関係なく発生する割り込み（エラーなど）の場合の表示例である。
【０１１５】
上述したように、マスク／イネーブル変化およびコマンド完了以外の要因によって発生した割り込みログの場合、特定のレジスタが関連付けられていない。したがって、割り込み原因表示ボタンＡをクリックすると、図２１のように、「割り込み原因起動レジスタなし」とのメッセージが表示される。このとき、ソフトウェアデバッグプログラム１２０では、まず、指定された割り込みログについて、ログデータ１０５を参照して割り込み種別を確認する。割り込み種別はＯＴＨＥＲ（その他）となっているため、ソフトウェアデバッグプログラム１２０は、対応する起動レジスタなしとして、ＧＵＩ１３０上に表示させるように動作する。
【０１１６】
このように、本実施の形態では、従来のログデータを用いて指定したレジスタへのアクセスを実行するソースコードを自動的に抽出して検証者に提供することができる（実施例１）。また、デバッグ用のデータと関連付いたあらたなログデータを生成して、デバッグに必要となるソースコードに関する情報を自動的に提供することもできる（実施例２）。
【０１１７】
なお、本実施の形態で説明したソフトウェアデバッグ支援方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、このプログラムは、インターネット等のネットワークを介して配布することが可能な媒体であってもよい。
【０１１８】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１１９】
（付記１）コンピュータを、
ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、当該ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレス情報を関連付けたログデータを生成する生成手段、
前記生成手段によって生成されたログデータを記録領域に蓄積する蓄積手段、
前記蓄積手段によって記録領域に蓄積されたログデータを出力する出力手段、
として機能させることを特徴とするソフトウェアデバッグ支援プログラム。
【０１２０】
（付記２）前記コンピュータを、さらに、
前記蓄積手段によって前記記録領域に蓄積されたログデータの中の任意のログデータの選択を受け付ける受付手段、
前記受付手段によって受け付けられた任意のログデータの実行結果に関連付けられているアドレス情報に対応するソースコードを前記検証対象のソフトウェアから検索する検索手段、
として機能させ、
前記出力手段は、前記検索手段によって検索されたソースコードを前記任意のログデータと対応付けて出力することを特徴とする付記１に記載のソフトウェアデバッグ支援プログラム。
【０１２１】
（付記３）前記生成手段は、前記ソフトウェアのソースコードごとの実行結果に前記ソースコードの命令アドレスおよびリターンアドレスの少なくとも一方をアドレス情報として関連付けたログデータを生成することを特徴とする付記１または２に記載のソフトウェアデバッグ支援プログラム。
【０１２２】
（付記４）前記生成手段は、前記ソフトウェアによって割り込み処理が発生した場合、当該割り込み処理をあらわす割り込みＩＤと、当該割り込み処理の種別情報とを含んだログデータを生成することを特徴とする付記１〜３のいずれか一つに記載のソフトウェアデバッグ支援プログラム。
【０１２３】
（付記５）前記検索手段は、前記受付手段によって割り込みに関する情報を含んだログデータが選択された場合、当該ログデータに含まれている割り込みＩＤと、当該割り込み処理の種別情報と用いて当該割り込み処理を起こしたレジスタと検索し、
前記出力手段は、前記割り込みに関する情報を含んだログデータと、前記検索手段によって検索されたレジスタと、を対応付けて出力することを特徴とする付記４に記載のソフトウェアデバッグ支援プログラム。
【０１２４】
（付記６）検証対象ソフトウェアのソースコード群と、前記検証対象ソフトウェアをハードウェアモデルまたはハードウェアによって実行させた際のログデータ群とにアクセス可能なコンピュータを、
前記ログデータ群に記述されているレジスタの中から任意のレジスタの選択を受け付ける受付手段、
前記ソースコード群の中から、前記受付手段によって受け付けられた任意のレジスタの記述が含まれているソースコードを検索する検索手段、
前記検索手段によって検索されたソースコードを前記任意のレジスタが記述されたログデータと対応付けて出力する出力手段、
として機能させることを特徴とするソフトウェアデバッグ支援プログラム。
【０１２５】
（付記７）前記出力手段は、前記検索手段によって、前記任意のレジスタの記述が含まれているソースコードが複数検索された場合に、当該検索されたソースコードの一覧を出力し、前記受付手段によって、当該一覧の中から任意のソースコードの選択を受け付けると、当該任意のソースコードを前記任意のレジスタが記述されたログデータと対応付けて出力することを特徴とする付記１に記載のソフトウェアデバッグ支援プログラム。
【０１２６】
（付記８）前記コンピュータを、さらに、
前記受付手段が、ログデータ群の中の任意のログデータの選択を受け付けた場合に、当該任意のログデータからレジスタの記述を抽出する抽出手段として機能させ、
前記検索手段は、前記ソースコード群の中から、前記抽出手段によって抽出されたレジスタの記述が含まれているソースコードを検索することを特徴とする付記１または２に記載のソフトウェアデバッグ支援プログラム。
【０１２７】
（付記９）ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、当該ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレス情報を関連付けたログデータを生成する生成手段と、
前記生成手段によって生成されたログデータを記録領域に蓄積する蓄積手段と、
前記蓄積手段によって記録領域に蓄積されたログデータを出力する出力手段と、
を備えることを特徴とするソフトウェアデバッグ支援装置。
【０１２８】
（付記１０）コンピュータが、
ハードウェアモデルまたはハードウェアによって検証対象のソフトウェアが実行されると、当該ソフトウェアのソースコードごとの実行結果に当該ソースコードのアドレス情報を関連付けたログデータを生成する生成工程と、
前記生成工程によって生成されたログデータを記録領域に蓄積する蓄積工程と、
前記蓄積工程によって記録領域に蓄積されたログデータを出力する出力工程と、
を実行することを特徴とするソフトウェアデバッグ支援方法。
【図面の簡単な説明】
【０１２９】
【図１】本実施の形態にかかるソフトウェアデバッグ支援処理の概要を示す説明図である。
【図２】ソフトウェアデバッグ支援装置のハードウェア構成を示すブロック図である。
【図３】実施例１におけるソフトウェアデバッグプログラムの構成を示すブロック図である。
【図４】実施例１におけるソフトウェアデバッグ支援処理の手順を示すフローチャートである。
【図５】実施例２におけるソフトウェアデバッグプログラムの構成を示すブロック図である。
【図６】実施例２におけるＨＷモデルの構成を示すブロック図である。
【図７】実施例２におけるレジスタアクセスログの構成を示す図表である。
【図８】実施例２における割り込みログの構成を示す図表である。
【図９】ＨＷモデルにおけるレジスタアクセスログ出力時の実行処理の手順を示すフローチャートである。
【図１０】実施例２におけるソフトウェアデバッグプログラムのソースコード表示処理の手順を示すフローチャートである。
【図１１】ＨＷモデルにおける割り込みログ出力時の実行処理の手順を示すフローチャートである。
【図１２】実施例２におけるソフトウェアデバッグプログラムの割り込み対応レジスタの表示処理の手順を示すフローチャートである。
【図１３−１】ログデータの出力例（その１）を示す説明図である。
【図１３−２】ログデータの出力例（その２）を示す説明図である。
【図１３−３】ログデータの出力例（その３）を示す説明図である。
【図１４】本実施の形態にかかるソフトウェアデバッグ処理の手順を示すフローチャートである。
【図１５】ＳｏＣの構成例を示すブロック図である。
【図１６】ソースコード表示時のＨＷモデルの処理を示すシーケンス図である。
【図１７】ソースコード表示時のＧＵＩの表示例を示す説明図である。
【図１８−１】割り込みログ出力時のＨＷモデルの処理例（その１）を示すシーケンス図である。
【図１８−２】割り込みログ出力時のＨＷモデルの処理例（その２）を示すシーケンス図である。
【図１８−３】割り込みログ出力時のＨＷモデルの処理例（その３）を示すシーケンス図である。
【図１９−１】マスク／イネーブル変化による割り込み発生時のＧＵＩ表示例（その１）を示す説明図である。
【図１９−２】マスク／イネーブル変化による割り込み発生時のＧＵＩ表示例（その２）を示す説明図である。
【図２０】コマンド完了による割り込み発生時のＧＵＩ表示例を示す説明図である。
【図２１】その他の割り込み発生時のＧＵＩ表示例を示す説明図である。
【図２２】ＳｏＣの構成例を示すブロック図である。
【図２３】ＳｏＣの開発工程を示す説明図である。
【図２４】ソフトウェア早期開発環境の構成例を示す説明図である。
【図２５】初期段階のソフトウェアデバッグ処理の手順を示すフローチャートである。
【図２６】検証進行後のソフトウェアデバッグ処理の手順を示すフローチャートである。
【図２７】期待値比較処理を示す説明図である。
【図２８】期待値比較に応じたソフトウェアデバッグ処理の手順を示すフローチャートである。
【図２９】レジスタアクセスログの構成を示す図表である。
【図３０】割り込みログの構成を示す図表である。
【図３１】アクセスログ・割り込みログを示す説明図である。
【図３２】ブロックＡに関するログの一例を示す説明図である。
【図３３】ログに応じたシーケンスを示す説明図である。
【符号の説明】
【０１３０】
１００  ソフトウェアデバッグ支援装置
１０１  ソースコード（全体）
１０２  実行形式ファイル
１０３  入力データ（テストパターン）
１０４  出力データ（実行結果）
１０５  ログデータ
１１０  ＥＳＬツール
１１１  ＩＳＳ
１１２  ＨＷモデル
１２０  ソフトウェアデバッグプログラム
１３０  ＧＵＩ
１３１  レジスタアクセスログ
１３２  ソースコード（ログ対応部分）
【図１】
2010055180.tif 000003
【図２】
2010055180.tif 000004
【図３】
2010055180.tif 000005
【図４】
2010055180.tif 000006
【図５】
2010055180.tif 000007
【図６】
2010055180.tif 000008
【図７】
2010055180.tif 000009
【図８】
2010055180.tif 000010
【図９】
2010055180.tif 000011
【図１０】
2010055180.tif 000012
【図１１】
2010055180.tif 000013
【図１２】
2010055180.tif 000014
【図１３−１】
2010055180.tif 000015
【図１３−２】
2010055180.tif 000016
【図１３−３】
2010055180.tif 000017
【図１４】
2010055180.tif 000018
【図１５】
2010055180.tif 000019
【図１６】
2010055180.tif 000020
【図１７】
2010055180.tif 000021
【図１８−１】
2010055180.tif 000022
【図１８−２】
2010055180.tif 000023
【図１８−３】
2010055180.tif 000024
【図１９−１】
2010055180.tif 000025
【図１９−２】
2010055180.tif 000026
【図２０】
2010055180.tif 000027
【図２１】
2010055180.tif 000028
【図２２】
2010055180.tif 000029
【図２３】
2010055180.tif 000030
【図２４】
2010055180.tif 000031
【図２５】
2010055180.tif 000032
【図２６】
2010055180.tif 000033
【図２７】
2010055180.tif 000034
【図２８】
2010055180.tif 000035
【図２９】
2010055180.tif 000036
【図３０】
2010055180.tif 000037
【図３１】
2010055180.tif 000038
【図３２】
2010055180.tif 000039
【図３３】
2010055180.tif 000040