(57)【要約】【課題】カバレッジ計測のトレースデータを格納するためのメモリ容量増加を抑制する。【解決手段】複数の分岐命令を含むプログラムを実行時に、入力部１０７は、分岐命令が実行される毎に当該分岐命令の分岐元データと対応の分岐先データとを入力する。制御部１１０は、入力部が入力する分岐命令の分岐先データに基づくカバレッジ計測用メモリ１０１のアドレス指定領域に、当該分岐命令の次位に実行される分岐命令について入力する分岐元データを格納する。【選択図】図７
2014063346.tif 000002
【特許請求の範囲】
【請求項１】
複数の分岐命令を含むプログラムの実行時に、分岐命令が実行される毎に、当該分岐命令の分岐元データと対応の分岐先データとを入力する入力部と、
前記複数の分岐命令に関するデータを格納するためのメモリと、
前記メモリのアクセスを制御するための制御部と、を備え、
前記制御部は、
前記入力部が入力する分岐命令の前記分岐先データに基づき指定される前記メモリのアドレス領域に、当該分岐命令の次位に実行される分岐命令について前記入力部が入力する分岐元データを格納する、情報処理装置。
【請求項２】
前記制御部は、
前記指定されるアドレス領域に格納されているデータが示す値と、前記次位に実行される分岐命令について前記入力部が入力する分岐元データが示す値とを比較するための比較部を含み、
前記比較の結果から、前記入力する分岐元データが示す値は前記指定されるアドレス領域のデータが示す値よりも大きいと判定したとき、当該アドレス領域のデータを、当該分岐元データに書換える、請求項１に記載の情報処理装置。
【請求項３】
前記制御部は、
前記比較の結果から、前記入力する分岐元データが示す値は前記指定されるアドレス領域のデータが示す値以下であると判定したとき、前記書換えを行わない、請求項２に記載の情報処理装置。
【請求項４】
前記プログラムを記憶するための記憶領域を、さらに備え、
前記メモリは、前記記憶領域のアドレスに１対１に割付けられた前記アドレス領域を含む、請求項１から３のいずれかに記載の情報処理装置。
【請求項５】
前記メモリの全アドレス領域のうちから、分岐元データが格納されているアドレス領域を検出するための解析部を、さらに備える、請求項１に記載の情報処理装置。
【請求項６】
前記解析部は、前記メモリの全アドレス領域のうちから、分岐元データが格納されているアドレス領域の割合いを検出する、請求項５に記載の情報処理装置。
【請求項７】
前記制御部は、
前記入力部が入力する分岐命令の前記分岐先データが示す値が閾値よりも大きいときは、当該分岐先データに対応の分岐元データを、その後に前記入力部が入力する分岐命令の前記分岐先データに基づき指定される前記メモリのアドレス領域に格納する、請求項１に記載の情報処理装置。
【請求項８】
複数の分岐命令を含むプログラムの実行時に、分岐命令が実行される毎に、当該分岐命令の分岐元データと対応の分岐先データとを入力するステップと、
前記複数の分岐命令に関するデータを格納するためのメモリのアクセスを制御するステップと、を備え、
前記アクセスを制御するステップでは、
前記入力するステップにより入力する分岐命令の前記分岐先データに基づき指定される前記メモリのアドレス領域に、当該分岐命令の次位に実行される分岐命令について前記入力するステップにより入力する分岐元データを格納する、情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置に関し、たとえば、対象プログラム中の命令をどれくらい実行したかを検出する情報処理装置に利用できるものである。
【背景技術】
【０００２】
マイクロコンピュータの１種であるＭＣＵ（Micro Computer Unit）が家電などの各種電気機器に組み込まれるようになり、ＭＣＵに内蔵されるソフトウェアが有するバグを見つけ出し修正するデバッグ工程は重要である。デバッグ工程では、プログラムが適切に動作するかをチェックするために、ＩＣＥ（In-Circuit Emulator）等のエミュレータをＭＣＵに接続して、プログラム実行中のＭＣＵ内の各部の状態をＩＣＥによりモニタする。
【０００３】
モニタする項目の１つに、プログラムのトレースデータから、プログラム内の分岐命令によって実行された命令の当該プログラムに占める割合を検出する、いわゆるプログラムのカバレッジ率の計測がある。たとえば、特許文献１（特開２００４−２１９３９号公報）には、プログラム実行時にＭＣＵから出力されるトレースデータに含まれる全ての分岐元／分岐先アドレスを一旦ＩＣＥ内のメモリに記録する。そして、プログラム実行終了後に記録された分岐情報をソフトウェアにより解析し、解析結果から分岐率を算出する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−２１９３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
また、カバレッジ率を計測するためにトレースデータを記録する場合に、トレースデータをＭＣＵからホストコンピュータ内の大容量メモリに直接転送することができないとき（たとえば、転送帯域が確保できないようなとき）には、通常トレースデータをＭＣＵからエミュレータが備えるメモリに転送して記録する。しかし、エミュレータに搭載可能なメモリはホストコンピュータに比較して圧倒的に容量が小さいため、長時間のプログラム実行などによりトレースデータ量が多くなると、エミュレータのメモリではトレースデータの上書き記録が発生し、カバレッジ率を計測することができないという問題があった。
【０００６】
特許文献１は、トレース高速化とトレースパケット数削減を図るためのトレースデータの選択出力や分岐情報の圧縮や復元方法を開示するが、トレースデータを記憶するためのメモリ容量削減の方法は何ら開示しない。
【０００７】
それゆえに、対象プログラムのカバレッジ計測に係るトレースデータを格納するためのメモリ容量増加を抑制する情報処理装置の提供が望まれる。
【０００８】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００９】
本発明の一実施形態では、情報処理装置は、複数の分岐命令を含むプログラムを実行時に、分岐命令が実行される毎に当該分岐命令の分岐元データと対応の分岐先データとを入力する入力部と、複数の分岐命令に関するデータを格納するためのメモリと、メモリのアクセスを制御するための制御部と、を備える。制御部は、入力部が入力する分岐命令の分岐先データに基づくメモリのアドレス指定領域に、当該分岐命令の次位に実行される分岐命令について入力する分岐元データを格納する。
【発明の効果】
【００１０】
本発明の一実施形態の情報処理装置は、対象プログラムのカバレッジ計測に係るトレースデータを格納するために必要なメモリ容量が増加するのを抑制する。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施の形態１に係るシステムの概略構成図である。
【図２】本発明の実施の形態１に係るホストコンピュータのハードウェア構成図である。
【図３】本発明の実施の形態１に係るエミュレータのハードウェア構成とパケット構成を示す図である。
【図４】本発明の実施の形態１に係るカバレッジ計測のためのメイン処理のフローチャートである。
【図５】本発明の実施の形態１に係るカバレッジ計測用メモリへのデータ記録処理のフローチャートである。
【図６】本発明の実施の形態１に係るカバレッジ計測に係る解析処理のフローチャートである。
【図７】本発明の実施の形態１に係るカバレッジ計測用メモリの格納データを説明する図である。
【図８】本発明の実施の形態１に係る対象プログラムと、カバレッジ計測用メモリの格納データとを模式的に示す図である。
【図９】本発明の実施の形態に係る解析処理の具体例を示す図である。
【図１０】本発明の実施の形態２に係る対象プログラムと、カバレッジ計測用メモリの格納データとを模式的に示す図である。
【図１１】本発明の実施の形態２に係るエミュレータの動作を示すタイミングチャートである。
【図１２】本発明の実施の形態３に係る対象プログラムから対象外プログラムへの分岐を説明する図である。
【図１３】本発明の実施の形態３に係るエミュレータの概略構成図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照しつつ、発明の各実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。
【００１３】
本実施の形態では、アドレス指定されてアクセス（データの読出／書込み）される領域を“アドレス領域”と称する。アドレス指定のために用いるデータを“アドレス”と称する。アドレス指定に用いるアドレスはヘキサデシマル（１６進法）に従う値を示す。本実施の形態では、“アドレス値”という場合には、このヘキサデシマルの値を示す。なお、アドレスの表現はヘキサデシマルに従う表現に限定されない。
【００１４】
また、“カバレッジ”（または、カバレッジ率）は、対象プログラムの全命令文（プログラムコード）について、対象プログラムの実行時に、どれくらい実行されたかを示す値であり、いわゆるＣ０カバレッジと呼ばれる。
【００１５】
[実施の形態１]
＜システム構成＞
図１は、本発明の実施の形態１に係るシステムの概略構成図である。図１を参照して、システムは、情報処理装置に相当するＩＣＥなどのエミュレータ１００、エミュレータ１００にデータ伝送路であるバス５００を介し接続されるＭＣＵ２００、およびエミュレータ１００にケーブル４００を介し接続されるホストコンピュータ３００を備える。エミュレータ１００は、ＩＣＥなどの情報処理装置に相当する。
【００１６】
ケーブル４００の通信フォーマットは、たとえばＵＳＢ（Universal Serial Bus）を適用するが、ＵＳＢに限定されない。また、エミュレータ１００とホストコンピュータ３００とは、ケーブル４００による有線通信に限定されず、無線通信であってもよい。
【００１７】
ＭＣＵ２００は、基板上にＣＰＵ（Central Processing Unit）２０１、Ｉ／Ｏ回路２０２、データおよびプログラムを格納するための記憶部２０３、およびＯＣＤ回路２０４を備える。Ｉ／Ｏ回路２０２は、バス５００が接続されてバス５００とＭＣＵ２００との間でのデータ入出力を制御する。これら各部は、通信用のバスを介して相互に接続される。
【００１８】
記憶部２０３は、揮発性／不揮発性メモリ、ＲＯＭ（Read Only Memory）およびＲＡＭ（Random Access Memory）などを含む。
【００１９】
ＯＣＤ(On Chip Debugging Emulator)回路２０４は、後述するパケットを生成しＩ／Ｏ回路２０２に出力する。Ｉ／Ｏ回路２０２は、ＯＣＤ回路２０４からのパケットを含むデータを入力し、転送用フォーマット従い変換し、変換後のデータをバス５００に出力する。
【００２０】
＜分岐命令に係る分岐元／分岐先データ＞
本実施の形態では、カバレッジ率の計測対象プログラム（以下、対象プログラムという）は複数の分岐命令を含む。対象プログラムが実行されるときに分岐命令が実行されると、当該分岐命令の分岐元を示す分岐元データと、分岐先を示す分岐先データが検出される。
【００２１】
具体的には、ＭＣＵ２００において、対象プログラムのプログラムコードは記憶部２０３の予め定められた記憶領域に格納される。プログラム実行時には、ＣＰＵ２０１内の図示しないプログラムカウンタのカウント値に基づくアドレス指定により記憶部２０３の対象プログラム中の命令を読出し、読出した命令を実行する。命令が実行されると、プログラムカウンタのカウント値は、次位の命令を格納したアドレスを指示するようにインクリメントされる。ＣＰＵ２０１は、インクリメント後のカウント値に基づくアドレス指定により次位の命令を読出し、読出した命令を実行する。これにより、記憶部２０３に格納される対象プログラムが実行される。
【００２２】
対象プログラム実行時に、ＣＰＵ２０１が、分岐命令を実行したとき、ＯＣＤ回路２０４はＣＰＵ２０１−記憶部２０３間の図示しないバスを監視して分岐元データと分岐先データを取得する。ここでは、分岐元データは、分岐命令が格納されていたアドレスを示し、分岐先データは、分岐命令を実行したときにインクリメントされた後のプログラムカウンタのカウント値に基づくアドレスを示す。つまり、分岐先データ、分岐命令により分岐（ｊｕｍｐなど）した先の命令が格納されたアドレスを示す。
【００２３】
図２は、本発明の実施の形態１に係るホストコンピュータ３００のハードウェア構成図である。図２を参照してホストコンピュータ３００は一般的な情報処理装置に相当する。具体的には、ＣＰＵ３０１、揮発／不揮発メモリ、ＲＯＭ、ＲＡＭおよびハードディスクなどを含む記憶部３０２、ケーブル４００が接続される通信部３０３、表示部３０４、タイマ３０５、および入力部３０６を備える。さらに、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）３０８などの記録媒体が着脱自在に装着されて、装着される記録媒体をアクセスするためのＩ／Ｆ（Interface）３０７を備える。各部は、バスを介し通信する。記憶部３０２は、ＣＰＵ３０１が解析するべきデータ（以下、解析データという）が格納される予め定められた記憶領域である解析用メモリ３１２を含む。また、入力部３０６は、マウス、キーボードなどによるユーザ操作を受付けて、受付けた操作内容に従う指令・データを入力する。
【００２４】
ホストコンピュータ３００とエミュレータ１００間では、ケーブル４００などによる通信ではなく、ＣＤ−ＲＯＭ３０８などの記録媒体を介してデータ転送するとしてもよい。
【００２５】
なお、ホストコンピュータ３００は図１のように据え置き型に限定されず、携帯型の情報処理端末であってもよい。
【００２６】
＜エミュレータの構成およびパケット構成＞
図３は、本発明の実施の形態１に係るエミュレータ１００のハードウェア構成とパケット構成を示す図である。図３（Ａ）のエミュレータ１００は、バス５００が接続される入力部１０７、不揮発性のＲＡＭなどからなるカバレッジ計測用メモリ１０１、およびカバレッジ計測用メモリ１０１を制御するためのメモリ制御回路１０２を備える。これら回路に関連して、さらに、メモリアドレスレジスタ１０３、分岐元保持レジスタ１０４、分岐元アドレス値の大小比較をするための大小比較器１０５、および分岐先保持レジスタ１０６を備える。カバレッジ計測用メモリ１０１は、ＭＣＵ２００におけるプログラム実行に伴って出力されるトレースデータを記録するためのメモリであって、とりわけ分岐命令に関する情報（以降、分岐情報という）を格納するためのメモリである。
【００２７】
メモリ制御回路１０２は、アドレス１１３によりカバレッジ計測用メモリ１０１をアドレス指定し、指定されたアドレス領域についてデータ１１４を読み書きする。
【００２８】
入力部１０７は、入力するデータを出力するために図示しないマルチプレクサを有する。
【００２９】
図３（Ｂ）には、トレースバス５００を介し転送されるパケットのフィールド構成が示される。ＯＣＤ回路２０４は、対象プログラムを実行時に、分岐命令が実行されると、当該分岐命令のためのパケットを生成する。ＣＰＵ２０１は実行される命令コードの種類を判別し、分岐命令であると判定したときは、ＯＣＤ回路２０４にパケット生成を指示するとともに、分岐命令に係る分岐元データおよび分岐先データを出力する。
【００３０】
図３（Ｂ）を参照しパケットは、当該パケットの種類、当該パケットの宛先／送信元などを示す情報ＨＥを格納するためのヘッダフィルードおよび転送するべきデータを格納するためのデータフィルードを含む。データフィルードには、ＣＰＵ２０１が出力する分岐元データ１１２および分岐先データ１１１がセット（組）で格納される。
【００３１】
エミュレータ１００の入力部１０７は、ＭＣＵ２００からパケットを入力し、入力パケットの情報ＨＥを解析する。解析結果に基づき、当該パケットの種類が分岐情報を格納したパケットであると検出すると、マルチプレクサを、当該パケットの分岐元データ１１２を大小比較器１０５へ出力し、分岐先データ１１１をメモリアドレスレジスタ１０３に出力するように制御する。
【００３２】
ここでは、説明を簡単にするために、ＭＣＵ２００で対象プログラムが実行中は、分岐命令が実行される毎に、当該分岐命令のパケットがバス５００を介しエミュレータ１００に伝送されるとする。
【００３３】
＜カバレッジ計測用メモリへの記録アルゴリズム＞
図４は、本発明の実施の形態１に係るカバレッジ計測のためのメイン処理のフローチャートである。図４を参照して、メイン処理は、カバレッジ計測用メモリ１０１へのデータ記録処理（ステップＴ１）と、カバレッジ計測用メモリ１０１の記録データのカバレッジ計測に係る解析処理（ステップＴ２）とを含む。
【００３４】
図５は、本発明の実施の形態１に係るカバレッジ計測用メモリ１０１へのデータ記録処理のフローチャートである。なお、カバレッジ計測用メモリ１０１のメモリアドレスそれぞれは、ＭＣＵ２００の記憶部２０３のプログラム記憶領域のアドレスに１対１に割付けられる。割付け後に、カバレッジ計測用メモリ１０１は初期化される。初期化では、全アドレス領域にゼロが格納される。これをゼロクリアという。
【００３５】
その後、ＭＣＵ２００で、対象プログラムが実行開始される。ＭＣＵ２００のＯＣＤ回路２０４は、当該プログラムの実行開始をエミュレータ１００に通知する。エミュレータ１００は、当該通知をバス５００を介し入力すると、図５の処理を開始する。
【００３６】
ここでは、プログラムは先頭アドレスのプログラムコードから実行開始され、以降のアドレスのプログラムコードが順次に実行される。なお、実行開始アドレスは、先頭アドレスに固定されず、ユーザ指示に従い可変に変更できるとしてもよい。
【００３７】
エミュレータ１００の入力部１０７は、バス５００からパケットを入力すると（ステップＳ３）、パケットのデータ部の分岐先データ１１１が示すアドレス値をメモリアドレスレジスタ１０３に格納する（ステップＳ７）。
【００３８】
メモリ制御回路１０２は、メモリアドレスレジスタ１０３に格納された値（アドレス値）に基づき、カバレッジ計測用メモリ１０１をアドレス指定する（ステップＳ９）。そして、指定アドレス領域からデータを読出し、読出したデータを分岐元保持レジスタ１０４に格納する（ステップＳ１１）。これと同時に、メモリアドレスレジスタ１０３の内容を分岐先保持レジスタ１０６に転送する（ステップＳ１３）。
【００３９】
その後、入力部１０７により次位に実行される分岐命令のパケットを入力する（ステップＳ１５）。
【００４０】
大小比較器１０５は、入力パケットの分岐元データ１１２のアドレス値と分岐元保持レジスタ１０４の値（プログラム実行開始後の初回の比較では当該値はゼロを示す）とを比較する（ステップＳ１７）。メモリ制御回路１０２は、比較結果に基づき、前者が後者より大きいと判定した場合には（ステップＳ１９でＹＥＳ）、分岐先保持レジスタ１０６の値（前回に入力したパケットの分岐先データ１１１が示す分岐先アドレス）に基づくカバレッジ計測用メモリ１０１のアドレス指定領域の値を、今回入力したパケットの分岐元データ１１２が示す分岐元アドレス値に書換える（ステップＳ２１）。
【００４１】
また、比較の結果から、入力する分岐元データ１１２が示すアドレス値は分岐元保持レジスタ１０４の値以下であると判定したときは（ステップＳ１９でＮＯ）、書換え（ステップＳ２１）を行なわずに、ステップＳ２３に移行する。
【００４２】
ＭＣＵ２００は対象プログラム実行を終了したとき、実行終了通知をエミュレータ１００に通知する。
【００４３】
エミュレータ１００の入力部１０７が、実行終了通知を入力すると、図５の処理を終了し（ステップＳ２３でＹＥＳ）、元の図４の処理に戻る。実行終了通知を入力しない間は（ステップＳ２３でＮＯ）、ステップＳ７に戻る。
【００４４】
以降は、トレースデータであるパケットを入力する毎に、当該パケット中の分岐情報に基づきステップＳ７〜ステップＳ２１を実行する。
【００４５】
以上の記録処理により、カバレッジ計測用メモリ１０１のアドレス（分岐命令の分岐先アドレスに対応）には、次位の分岐命令の分岐元アドレスの値が格納される形式でトレースデータが記録される。
【００４６】
また、大小比較器１０５およびメモリ制御回路１０２によるアドレス値の比較処理および、比較結果に基づく、カバレッジ計測用メモリ１０１の分岐先アドレス値の書換え処理（ステップＳ２１）により、カバレッジ計測用メモリ１０１の格納される分岐元アドレス値は、先行する分岐先アドレスから連続して実行されたプログラムコードが格納されたアドレス領域のサイズを示す。
【００４７】
＜トレースデータの解析＞
図６は、本発明の実施の形態１に係るカバレッジ計測に係る解析処理のフローチャートである。図６を参照して解析処理（図４のステップＴ２）を説明する。なお、予めホストコンピュータ３００の記憶部３０２には、ＭＣＵ２００における対象プログラムのプログラムコード格納領域と同じサイズの解析用メモリ３１２が確保されて、ゼロクリアされていると想定する。
【００４８】
ＣＰＵ３０１は、エミュレータ１００と通信することにより、カバレッジ計測用メモリ１０１の先頭アドレスからデータを順番に読出す（ステップＳ２３）。読出したデータが“ゼロ”であるか否かを判定する（ステップＳ２５）。“ゼロ”であると判定すると（ステップＳ２５でＮＯ）、ステップＳ２３に戻り、カバレッジ計測用メモリ１０１の次位のアドレスからデータを読出し、以降の処理を繰返す。
【００４９】
一方、“ゼロ”でないと判定すると（ステップＳ２５でＹＥＳ）、解析用メモリ３１２に対しマーキングする（ステップＳ２７）。マーキングは、対象プログラム中の実行済みのプログラムコードを示すための処理を示す。具体的には、解析用メモリ３１２の分岐先アドレス（カバレッジ計測用メモリ１０１の直前のステップＳ２３でデータ読出がされたアドレス）から次の分岐元アドレス（カバレッジ計測用メモリ１０１の直前のステップＳ２３で読出されたアドレス値）までの各アドレス領域に、マークデータを格納する。マークデータは、実行されなかったプログラムコードから区別できるものであればよく、たとえば値“１”、フラグなどである。本実施の形態では、値“１”を格納する。
【００５０】
その後、ＣＰＵ３０１は、カバレッジ計測用メモリ１０１のトレースデータが格納されている最終アドレス領域のデータを読出したか否かを判定し（ステップＳ２９）、未だ最終アドレス領域のデータを読出していないと判定すると（ステップＳ２９でＮＯ）、ステップＳ２３に戻るが、読出したと判定すると（ステップＳ２９でＹＥＳ）、図６の処理は終了し、図４の元の処理に戻る。
【００５１】
以上の解析処理により、最終的に解析用メモリ３１２にはＭＣＵ２００で実行されたプログラムコードが格納されたアドレス領域のみに実行済みマークが格納されたカバレッジ計測の結果が生成される。生成されたカバレッジ計測結果は、表示部３０４などの出力デバイスを介して出力される。
【００５２】
ここで、対象プログラム中の各分岐命令の分岐先データが、異なる分岐先アドレスを示す場合のカバレッジ計測について、以下に具体的に説明する。
【００５３】
＜トレースデータの具体例＞
図７は、本発明の実施の形態１に係るカバレッジ計測用メモリ１０１に記憶されるデータ例を説明する図である。図７（Ａ）を参照して、ＭＣＵ２００でプログラム実行が開始されるとトレースが開始される。トレース開始されると実行される分岐命令毎に、パケットが出力される。ここでは、出力されるパケットを示すトレース（１）〜（４）それぞれは、分岐先データ１１１および分岐元データ１１２のセットを含む。なお、図中では（１）〜（４）は、括弧に代替して丸を用いている。
【００５４】
ＭＣＵ２００から各分岐命令に対応する図７（Ａ）の分岐情報が出力される場合に、カバレッジ計測用メモリ１０１には図５のフローチャートに従って、図７（Ｂ）に示すようデータが格納される。つまりに、図７（Ｂ）の制御部１１０は、各分岐命令について、対応の分岐先データ１１１が示す分岐先アドレスに対応するカバレッジ計測用メモリ１０１のアドレス領域に、次位に実行される分岐命令の分岐元データ１１２が示す分岐元アドレスを格納する。カバレッジ計測用メモリ１０１は、計測対象のプログラムコードサイズ分のメモリ領域１０１Ｅを有する。
【００５５】
なお、制御部１１０は、図３（Ａ）のエミュレータ１００の入力部１０７を除く部分を示す。
【００５６】
この構成によると、分岐先データ１１１（すなわち、分岐先アドレス）をカバレッジ計測用メモリ１０１のアドレスで置き換えることができる。その結果、カバレッジ計測用メモリ１０１に格納するべきデータは、分岐先データ１１１（すなわち、分岐先アドレス）のみで済ませることができ、従来方式（分岐先データ１１１と分岐元データ１１２のセットを格納する方式）に比較し、カバレッジ計測用メモリ１０１に必要なメモリ容量を少なくすることができる。
【００５７】
図８は、本発明の実施の形態１に係る対象プログラムと、カバレッジ計測用メモリ１０１の格納データとを模式的に示す図である。図８（Ａ）は、カバレッジ計測用メモリ１０１に格納されるデータの一例を示し、図８（Ｂ）はＭＣＵ２００の記憶部２０３の予め定められた領域に格納された対象プログラムを模式的に示す。
【００５８】
図８（Ｂ）を参照して、記憶部２０３の予め定められた領域はアドレスＨ´０１００〜Ｈ´０５００で指定されるアドレス領域を含む。当該予め定められた領域に格納された対象プログラムはたとえば３個の分岐命令を含む。対象プログラムが実行開始されると、まず１番目の分岐命令が実行される。
【００５９】
１番目の分岐命令が実行されるときに出力されるパケットには、分岐元アドレス、すなわち１番目の分岐命令が格納されているアドレスＨ´００００と分岐先アドレスＨ´０１００とが格納される。２番目の分岐命令が実行されるときに出力されるパケットには分岐元アドレス、すなわち当該分岐命令が格納されているアドレスＨ´０２００と分岐先アドレスＨ´０３００が検出される。３番目の分岐命令が実行されるときに出力されるパケットには分岐元アドレス、すなわち当該分岐命令が格納されているアドレスＨ´０４００と分岐先アドレスＨ´００００が検出される。なお、３番目の分岐命令が実行されるときにプログラム実行は終了する。プログラム実行終了を検出したＯＣＤ回路２０４は、分岐先アドレスとしてアドレスＨ´００００を生成する。
【００６０】
図８（Ｂ）では、破線はＣＰＵ２０１が実行する命令の実行フローを模式的に示し、実線が示すアドレス領域は対象プログラムのプログラムコードが格納されたアドレス領域を含む。また、当該破線に関連付けてアドレス値（Ｈ´０１００〜Ｈ´０５００）が示される。実線に重畳して示される長方形はカバレッジ計測時に実行されたプログラムコードの格納領域を示す。具体的には、長方形の長手方向の長さは、実行されたプログラムコードが格納されたアドレス領域のサイズを示す。
【００６１】
図８のカバレッジ計測を、図５のフローチャートに従い説明する。なお、エミュレータ１００では、あらかじめカバレッジ計測用メモリ１０１は初期化（ゼロクリア）されている。ＭＣＵ２００により、対象プログラムの実行が開始されると、カバレッジ計測が開始される。
【００６２】
まず、１番目の分岐命令が実行されると、エミュレータ１００は、分岐先アドレスＨ´０１００と分岐元アドレスＨ´００００を格納したパケットを入力し（ステップＳ３）、パケットの分岐先アドレスＨ´０１００はメモリアドレスレジスタ１０３に格納される（ステップＳ７）。
【００６３】
メモリ制御回路１０２は、メモリアドレスレジスタ１０３に格納されたアドレスＨ´０１００に基づくアドレス指定により、カバレッジ計測用メモリ１０１から分岐元アドレス値（このときは、ゼロ）を読出し、読出したデータを分岐元保持レジスタ１０４に格納する（ステップＳ９、Ｓ１１）。これと同時に、メモリアドレスレジスタ１０３に格納されているアドレス値（Ｈ´０１００）を分岐先保持レジスタ１０６へ転送する（ステップＳ１３）。
【００６４】
その後、２番目の分岐命令のパケットを入力する（ステップＳ１５）。大小比較器１０５は、当該パケットの分岐元アドレスＨ´０２００と分岐元保持レジスタ１０４の値（このときは、ゼロ）とを比較する（ステップＳ１６）。そして、比較結果に基づき、前者が後者より大きいと判定する（ステップＳ１９でＹＥＳ）。メモリ制御回路１０２は分岐先保持レジスタ１０６のアドレス値（１番目の分岐命令の分岐先アドレスＨ´０１００）に基づきカバレッジ計測用メモリ１０１をアドレス指定する。そしてし、当該アドレス指定領域の値を、２番目の分岐命令のパケットの分岐元アドレスＨ´０２００に書換える（ステップＳ２１）。
【００６５】
これにより、カバレッジ計測用メモリ１０１では、１番目の分岐命令の分岐先アドレスＨ´０１００が指定する領域に、次位（２番目）の分岐命令の分岐元アドレス値（Ｈ´０２００）が格納される。
【００６６】
まだ、プログラムの実行終了とは判定されないので（ステップＳ２３でＮＯ）、ステップＳ７に戻る。
【００６７】
２番目の分岐命令のパケットの分岐先アドレスＨ´０３００はメモリアドレスレジスタ１０３に格納される（ステップＳ７）。メモリ制御回路１０２は、メモリアドレスレジスタ１０３に格納されたアドレスＨ´０３００に基づくアドレス指定により、カバレッジ計測用メモリ１０１から分岐元アドレス値（このときは、ゼロ）を読出し、読出したデータを分岐元保持レジスタ１０４に格納する（ステップＳ９、Ｓ１１）。これと同時に、メモリアドレスレジスタ１０３に格納されているアドレス値（Ｈ´０３００）を分岐先保持レジスタ１０６へ転送する（ステップＳ１３）。
【００６８】
その後、３番目の分岐命令のパケットを入力する（ステップＳ１５）。大小比較器１０５は、当該パケットの分岐元アドレスＨ´０４００と分岐元保持レジスタ１０４の値（このときは、ゼロ）とを比較する（ステップＳ１６）。比較結果に基づき、前者が後者より大きいと判定する（ステップＳ１９でＹＥＳ）。メモリ制御回路１０２は分岐先保持レジスタ１０６のアドレス値（２番目の分岐命令の分岐先アドレスＨ´０３００）に基づきカバレッジ計測用メモリ１０１をアドレス指定する。そして、当該アドレス指定領域の値を３番目の分岐命令のパケットの分岐元アドレスＨ´０４００に書換える（ステップＳ２１）。
【００６９】
これにより、カバレッジ計測用メモリ１０１では、２番目の分岐命令の分岐先アドレスＨ´０３００が指定する領域に、次位（３番目）の分岐命令の分岐元アドレス値（Ｈ´０４００）が格納される。
【００７０】
その後、プログラムの実行終了と判定されるので（ステップＳ２３でＹＥＳ）、処理は元の図４に戻る。これにより、カバレッジ計測用メモリ１０１へのトレースデータの格納は終了する。
【００７１】
図８（Ｂ）の対象プログラムを実行すると、カバレッジ計測用メモリ１０１には、図８（Ａ）に示すように、１番目の分岐命令の分岐先アドレスＨ´０１００で指定されるアドレス領域には２番目の分岐命令の分岐元アドレスＨ´０２００が格納される。そして、２番目の分岐命令の分岐先アドレスＨ´０３００で指定されるアドレス領域には３番目の分岐命令の分岐元アドレスＨ´０４００が格納される。このように、カバレッジ計測用メモリ１０１には、アドレス（分岐命令の分岐先アドレスに対応）領域に、次位に実行される分岐命令の分岐元アドレスの値が格納されるようにトレースデータが記録される。
【００７２】
＜解析処理の具体例＞
図９は、本発明の実施の形態に係るカバレッジ計測用メモリ１０１の格納データに対する解析処理の具体例を示す図である。
【００７３】
図９では、図８に従ってカバレッジ計測用メモリ１０１に格納されたデータを、図６の手順で解析した結果（１）〜（７）（図中では括弧は丸に代替されている）が示される。ここでは、解析用メモリ３１２は、記憶部２０３の対象プログラムのプログラムコード領域と同じサイズを有する。解析用メモリ３１２は、アドレスＨ´００００〜Ｈ´ＦＦＦＦで指定されるアドレス領域を有する。ＣＰＵ３０１は、記憶部２０３のプログラムコード記憶領域のアドレスに１対１に割付けられたカバレッジ計測用メモリ１０１の全アドレス領域のうち、分岐元アドレス値が格納されているアドレス領域が占める大きさを検出する。
【００７４】
まず、ホストコンピュータ３００のＣＰＵ３０１は、解析用メモリ３１２を初期化（ゼロクリア）する（結果（１）を参照）。
【００７５】
その後、ＣＰＵ３０１は、カバレッジ計測用メモリ１０１の先頭アドレスＨ´００００の領域から読出処理を開始する。読出された値が初期値（ゼロ）と判定すると、すなわち当該アドレス領域には分岐元アドレス値は格納されていないと判定すると、次位のアドレス領域を読出処理する。このようにして、先頭アドレスＨ´００００〜アドレスＨ´００ＦＦまでの各アドレス領域の読出処理を繰返すと、各アドレス領域から読出された値はゼロと判定されるので、上述したマーキングは実行されない（結果（２）を参照）。
【００７６】
その後、ＣＰＵ３０１は、アドレスＨ´０１００の領域から分岐元アドレス値（Ｈ´０２００）を読出す。したがって、ＣＰＵ３０１は、解析用メモリ３１２のアドレスＨ´０１００〜Ｈ´０２００の各アドレス領域をマーキングする。ここでは、各アドレス領域に“１”を格納する（結果（３）を参照）。
【００７７】
続くアドレスＨ´０１０１からＨ´０２ＦＦまでの各アドレス領域から読出される値はゼロであるから、上述したマーキングは実行されない（結果（４）を参照）。
【００７８】
その後、ＣＰＵ３０１は、アドレスＨ´０３００のアドレス領域からアドレスＨ´０４００を読出す。したがって、ＣＰＵ３０１は、解析用メモリ３１２のアドレスＨ´０３００〜Ｈ´０４００の各アドレス領域に“１”を格納する（結果（５）を参照）。
【００７９】
続くアドレスＨ´０３０１からＨ´ＦＦＦＦまでの各アドレス領域から読出される値はゼロであるから、上述したマーキングは実行されない（結果（６）を参照）。
【００８０】
最終的に、解析用メモリ３１２には、先頭アドレス（Ｈ´００００）〜最終アドレス（Ｈ´ＦＦＦＦ）までの各アドレス領域には上記の結果（１）〜（６）の値（１または０）が格納されたカバレッジ解析結果が格納される（結果（７）を参照）。
【００８１】
これにより、カバレッジ計測用メモリ１０１の全アドレス領域のうち、分岐元アドレス値が格納されているアドレス領域が占める大きさが検出される。
【００８２】
ＣＰＵ３０１は、表示部３０４に図９の結果（７）に基づく画像または情報を表示する。これにより、ユーザは、対象プログラムについてのカバレッジ計測結果を確認することができる。画像としては、たとえば、結果（７）の“１”の部分のみを色を反転して表示する。
【００８３】
また、情報としては、結果（７）をもとに、対象プログラムの全プログラムコード数に対する実行されたコード数が占める割合を算出して表示してもよい。すなわち、記憶部２０３の対象プログラムコード記憶領域のアドレスに１対１に割付けられたカバレッジ計測用メモリ１０１の全アドレス領域のうち、分岐元アドレス値が格納されているアドレス領域の割合い、すなわちカバレッジ（網羅率）を算出して表示するとしてもよい。
【００８４】
なお、出力は表示に限定されず、印刷であってもよい。
＜実施の形態１の効果＞
本実施の形態１と対比した従来のトレースデータの記録方法によるカバレッジ計測では、以下の課題が残る。
【００８５】
課題（１）：対象プログラムを実行後のソフトウェアによるトレースデータの解析処理に要する時間が、記録されたトレースデータ量が増加するほど増加する。このため、エミュレータで大量のトレースデータを取得している場合、解析に長時間を要する。
【００８６】
課題（２）：トレースデータの記録に、エミュレータに搭載しているトレースメモリ（カバレッジ計測用メモリ１０１に相当）を使用するような場合、トレースメモリの容量を超えるトレースデータが出力されるケースでは、当該要領を超えたトレースデータはレースメモリに上書きにより格納される。上書きにより、トレースデータの一部が消失し、カバレッジ計測は失敗する。回避策として、トレースメモリの上書きを抑止する処理を追加する方法を適用できる。つまり、トレースデータが格納されてトレースメモリがフルになったときに、ＭＣＵによる対象プログラムの実行を停止し、その後、トレースメモリのトレースデータをホストコンピュータへ転送し、転送後に実行停止していた対象プログラムの実行を再開することで上書きを抑止する。しかしながら、処理の追加により、カバレッジ計測のリアルタイム性が損なわれる。
【００８７】
本実施の形態１では、上記の課題を解消する効果を得ることができる。
効果（１）：図７〜図９に示すカバレッジ計測用メモリ１０１の使用方法と分岐情報の記録アルゴリズムを用いた場合、カバレッジ計測用メモリ１０１に格納される分岐情報は、分岐元データ１１２が示す分岐アドレスのみで済む。また、対象プログラムを実行する時間の長さに関わらずカバレッジ計測用メモリ１０１に必要な容量をプログラムサイズに応じた固定サイズとすることができて、上記の課題（１）は解消される。
【００８８】
効果（２）：カバレッジ計測用メモリ１０１は、記憶部２０３の対象プログラムコードを格納した領域に相当サイズのアドレス領域を有すればよい。その場合であっても、対象プログラム中の分岐命令の数に関わらず、またカバレッジ計測用メモリ１０１の上書きが発生することはなく、上記の課題（２）は解消される。
【００８９】
効果（３）：ホストコンピュータ３００による解析対象は、ＭＣＵ２００からの分岐情報量（パケット数）に影響されずカバレッジ計測用メモリ１０１に割当てられたプログラムコード領域サイズ分の範囲に限定することができて、常に一定時間での解析が可能である。また、トレースメモリ上書きによる破綻も生じない。
【００９０】
効果（４）：上述の効果は、対象プログラムを特別な加工をしないで得ることができる。
【００９１】
[実施の形態２]
本実施の形態２では、対象プログラムが、同一アドレスに分岐するような複数の分岐命令を含む場合を説明する。つまり、実施の形態１では、対象プログラム中の各分岐命令の分岐先データは、異なる分岐先アドレスを示す場合であったが、本実施の形態２では、対象プログラム中の複数の分岐命令の分岐先データ１１１が同じアドレスを示す場合のカバレッジ計測について説明する。
【００９２】
なお、本実施の形態２でも、図１〜図３の構成と、図４〜図６のフローチャートが適用されるので、これらの説明は繰り返さない。
【００９３】
図１０は、本発明の実施の形態２に係る対象プログラムと、カバレッジ計測用メモリ１０１の格納データとを模式的に示す図である。図１０（Ａ）は、カバレッジ計測用メモリ１０１に格納されるデータの一例を示し、図１０（Ｂ）はＭＣＵ２００の記憶部２０３の予め定められた領域に格納された対象プログラムを模式的に示す。
【００９４】
図１０（Ｂ）を参照して、記憶部２０３の予め定められた領域はアドレスＨ´０１００〜Ｈ´０５００で指定されるアドレス領域を含む。当該予め定められた領域に格納された対象プログラムはたとえば４個の分岐命令を含む。対象プログラムが実行開始されると、１番目の分岐命令が実行される。
【００９５】
１番目の分岐命令が実行されるときに出力されるパケットには、分岐元アドレスＨ´００００と分岐先アドレスＨ´０１００とが格納される。２番目の分岐命令が実行されるときに出力されるパケットには分岐元アドレスＨ´０２００と分岐先アドレスＨ´０３００が格納される。３番目の分岐命令が実行されるときに出力されるパケットには分岐元アドレスＨ´０４００と分岐先アドレスＨ´０３００が格納される。４番目の分岐命令が実行されるときに出力されるパケットには分岐元アドレスＨ´０５００と分岐先アドレスＨ´００００が格納される。なお、４番目の分岐命令が実行されるときにプログラム実行は終了する。プログラム実行終了を検出するとＯＣＤ回路２０４は、分岐先アドレスとしてアドレスＨ´００００を検出する。
【００９６】
上記の１番目、２番目および３番目の分岐命令が実行された場合には、図１０（Ａ）のカバレッジ計測用メモリ１０１では、実施の形態１と同様に、１番目の分岐命令の分岐先アドレスＨ´０１００で指定されるアドレス領域には２番目の分岐命令の分岐元アドレス値（Ｈ´０２００）が格納される。そして、２番目の分岐命令の分岐先アドレスＨ´０３００で指定されるアドレス領域には３番目の分岐命令の分岐元アドレス値（Ｈ´０４００）が格納される。
【００９７】
まだ、プログラムの実行終了とは判定されないので（ステップＳ２３でＮＯ）、ステップＳ７に戻る。
【００９８】
３番目の分岐命令のパケットの分岐先アドレスＨ´０３００はメモリアドレスレジスタ１０３に格納される（ステップＳ７）。メモリ制御回路１０２は、メモリアドレスレジスタ１０３に格納されたアドレスＨ´０３００に基づくアドレス指定により、カバレッジ計測用メモリ１０１から分岐元アドレス値（このときは、Ｈ´０４００）を読出し、読出したデータを分岐元保持レジスタ１０４に格納する（ステップＳ９、Ｓ１１）。これと同時に、メモリアドレスレジスタ１０３に格納されているアドレス値（Ｈ´０３００）を分岐先保持レジスタ１０６へ転送する（ステップＳ１３）。
【００９９】
その後、４番目の分岐命令のパケットを入力する（ステップＳ１５）。大小比較器１０５は、当該パケットの分岐元アドレスＨ´０５００と分岐元保持レジスタ１０４の値（このときは、Ｈ´０４００）とを比較し（ステップＳ１６）、比較結果に基づき、前者が後者より大きいと判定する（ステップＳ１９でＹＥＳ）。メモリ制御回路１０２は分岐先保持レジスタ１０６のアドレス値（３番目の分岐命令の分岐先アドレスＨ´０３００）に基づきカバレッジ計測用メモリ１０１をアドレス指定する。そして、当該アドレス指定領域の値を、４番目の分岐命令のパケットの分岐元アドレス値（Ｈ´０５００）に書換える（ステップＳ２１）。
【０１００】
これにより、カバレッジ計測用メモリ１０１では、２番目の分岐命令の分岐先アドレスＨ´０３００が指定する領域には、４番目の分岐命令の分岐元アドレス値（Ｈ´０５００）が格納される。
【０１０１】
その後、プログラムの実行終了と判定されるので（ステップＳ２３でＹＥＳ）、図４の元の処理に戻る。
【０１０２】
図１０（Ｂ）では、図８（Ｂ）と同様に、破線はＣＰＵ２０１が実行する命令の実行フローを記憶部２０３を模式的に示し、実線が示すアドレス領域は対象プログラムのプログラムコードが格納されたアドレス領域を含む。また、実線に関連して示される長方形の長手方向の長さは、実行されたプログラムコードが格納されたアドレス領域のサイズを示す。
【０１０３】
上記のように４番目の分岐命令の実行により分岐元アドレスＨ´０５００が検出されて、直前（３番目）の分岐命令の分岐元アドレス値（Ｈ´０４００)と新たに検出した分岐元アドレス値（Ｈ´０５００）を比較し、大きい方の値（Ｈ´０５００）を、カバレッジ計測用メモリ１０１のアドレス（Ｈ´０３００）領域に格納する。すなわち、アドレス（Ｈ´０３００）領域に格納されていた元の値（Ｈ´０４００）を新たな分岐元アドレス値（Ｈ´０５００）に書換える。これにより、対象プログラムの実行終了時に、カバレッジ計測用メモリ１０１の記録内容から、対象プログラムのアドレスＨ´０３００からＨ´０５００までのプログラムコードが実行されたことを示すことができる。
【０１０４】
＜タイミングチャート＞
図１１は、本発明の実施の形態２に係るエミュレータ１００の動作を示すタイミングチャートである。図１０の同一分岐先アドレスを有する複数の分岐命令が実行される場合のエミュレータ１００の動作を、図１１を参照し説明する。
【０１０５】
図１１（Ａ）は、ＭＣＵ２００からのパケットの信号を示す。ＭＣＵ２００からの信号は、エミュレータ１００に入力後、エミュレータ１００の内部の制御クロック（図１１（Ｂ）を参照）に同期したトレース情報単位（パケットに相当）である、たとえば図１１（Ｃ）の“分岐１”〜“分岐４”に整形される。
【０１０６】
上記の１番目、２番目、３番目および４番目の分岐命令に相当する“分岐１”〜“分岐４”が入力されると（図１１（Ｃ）と（Ｄ）を参照）、メモリアドレスレジスタ１０３のデータはアドレス値Ｈ´０１００→Ｈ´０３００→Ｈ´０３００と変化する（図１１（Ｅ）を参照）。当該アドレスはアドレス１１３に相当する。メモリ制御回路１０２により、アドレス１１３により指定されるカバレッジ計測用メモリ１０１のアドレス領域からデータ１１４が読出されて（図１１（Ｆ）と（Ｇ）を参照）、読出しデータ１１４は分岐元保持レジスタ１０４に格納される（図１１（Ｈ）参照）。
【０１０７】
比較器１０５は、入力する分岐元アドレス値（図１１（Ｃ）参照）と分岐元保持レジスタ１０４のアドレス値とを比較し、比較結果から、前者が後者より大きいと判定する、メモリ制御回路１０２は分岐先保持レジスタ１０６のアドレス値（図１１（Ｄ）、図１１（Ｋ）参照）に基づきカバレッジ計測用メモリ１０１をアドレス指定し、当該アドレス指定領域にライトデータレジスタの値（図１１（Ｉ）参照）を格納する（図１１（Ｊ）参照）。なお、ライトデータレジスタは、メモリ制御回路１０２内のレジスタ（図示しない）であって、カバレッジ計測用メモリ１０１に書込むデータを一時的に格納するためのレジスタを示す。
【０１０８】
＜実施の形態２の効果＞
エミュレータ１００は、ＭＣＵ２００から同じ分岐先アドレスを示す分岐先データ１１１を有する複数のパケットを連続して入力した場合に、入力順番に、先に入力したパケットと次位に入力したパケット間の分岐元データ１１２が示す分岐元アドレスを比較し、比較結果に基づき、大きい方を、カバレッジ計測用メモリ１０１の当該分岐先アドレス領域に格納するアルゴリズムを採用している。
【０１０９】
これにより、同一分岐先アドレスを示す複数の分岐命令が実行される場合には、分岐元アドレス値に関わらず（分岐パターンに関わらず）、カバレッジ計測用メモリ１０１の当該同一分岐先アドレスが示す領域には、複数分岐命令のうちの最大値を示す分岐元アドレスが格納される。したがって、当該同一分岐先アドレス値と最大の分岐元アドレス値とから、複数分岐命令が実行されたときに連続して実行されたプログラムコードの範囲を記録することができる。したがって、同一分岐先アドレスを示す分岐命令が実行されるようなプログラムを計測対象とする場合であっても、カバレッジ計測用メモリ１０１のトレースデータ量の増加およびホストコンピュータ３００による解析時間の増加を防止できる。
【０１１０】
[実施の形態３]
本実施の形態３では、対象プログラムから他のプログラムに分岐する場合を説明する。上述した実施の形態１と２では、分岐先は対象プログラム内を示したが、本実施の形態３では、対象プログラムを実行中に、対象外プログラムに分岐する場合のカバレッジ計測を説明する。ここでは、対象プログラムを実行中に、タイマ割込みが発生し、対象プログラム外の割込プログラムに分岐する場合を想定する。
【０１１１】
図１２は、本発明の実施の形態３に係る対象プログラムと割込プログラムへの分岐とを説明する図である。図１３は、本発明の実施の形態３に係るエミュレータ１０００の概略構成図である。図１３のエミュレータ１０００と図３（Ａ）のエミュレータ１００の構成と比較し異なる点は、エミュレータ１０００はメモリ制御回路１０２に代替しメモリ制御回路１０２０を備える点にある。他の部分は、図３（Ａ）に示したものと同じであり説明は繰り返さない。
【０１１２】
図１２（Ａ）には、記憶部２０３に格納されたプログラムが模式的に示される。図１２（Ｂ）には、図１２（Ａ）のプログラム実行時に、実行されるプログラムコードの範囲が太矢印で模式的に示される。図１２（Ｃ）には、対象プログラム実行時に出力される分岐情報が模式的に示される。
【０１１３】
図１２（Ａ）では、対象プログラムのプログラムコードは記憶部２０３のアドレスＨ´０１００〜Ｈ´０２８０に格納され、割込プログラムは、カバレッジ対象外のアドレスＨ´１００００〜Ｈ´１００２０に格納されている。なお、図１２（Ａ）では、対象プログラムの各continue文は、本来、アドレスＨ´０２５０に分岐するが、説明の便宜上アドレスＨ´０１４０に分岐するものとする。
【０１１４】
動作において、対象プログラムが先頭アドレスのプログラムコードから実行開始されると、図１２（Ｂ）に示すように矢印（１）〜（８）の順番で各矢印の長さ分のプログラムコードが実行される。各矢印先端（終端）のプログラムコードは分岐命令に相当する。したがって、当該先端に対応するアドレスが分岐元アドレスに相当し、次位の矢印の開始端に対応するアドレスが分岐先アドレスに相当する。
【０１１５】
図１２（Ａ）のアドレス（Ｈ´０２３０）のプログラムコードを実行時にタイマ割込（timer_int）が発生したとする（図１２（Ｂ）の矢印（５）の先端）。このとき、ＣＰＵ２０１は、プログラムカウンタの現在値を図示しないレジスタ（退避レジスタという）に退避させる。これにより、退避レジスタに割込プログラムから対象プログラムに戻るためのアドレス値（Ｈ´０２３０）を格納しておくことができる。
【０１１６】
その後、プログラムカウンタの値はＨ´１００００に更新されて、アドレスＨ´１００００以降の割込プログラム（図１２（Ｂ）の斜線部）に分岐して、割込プログラムが実行開始される（図１２（Ｂ）の矢印（６））。
【０１１７】
割込プログラムが実行終了すると、ＣＰＵ２０１は、プログラムカウンタの値を、退避レジスタの値に基づき書き換える。たとえば、アドレスＨ´０２４０を示すように書き換える。これにより、対象プログラムの、タイマ割込（timer_int）発生時点のプログラムコードから（矢印（７）を参照）実行が再開される。
【０１１８】
その後、矢印（７）の先端アドレスで分岐命令が実行されて、矢印（８）で示すプログラムコードが実行される。その後、対象プログラムの実行は終了し、ＭＣＵ２００からエミュレータ１０００にプログラム実行終了通知が伝送される。
【０１１９】
図１２（Ａ）の対象プログラムを実行中は、実施の形態１および２と同様の処理によりカバレッジ計測用メモリ１０１に分岐情報が出力される。対象プログラム開始から終了までに出力された分岐先情報（分岐先アドレスと分岐元アドレスのセット）は、図１２（Ｃ）に模式的に示される。
【０１２０】
図１２（Ｃ）の分岐情報６００と７００それぞれは、矢印（５）の先端アドレス領域の分岐命令が実行されるときに出力される分岐先情報（分岐先アドレス（Ｈ´１００００）と分岐元アドレス（Ｈ´０２３０）のセット）と、矢印（６）の先端アドレス領域の分岐命令が実行されるときに出力される分岐先情報（分岐先アドレス（Ｈ´０２４０）と分岐元アドレス（Ｈ´１００２０）のセット）それぞれを示す。
【０１２１】
分岐情報６００の分岐先アドレス（Ｈ´１００００）は、カバレッジ計測用メモリ１０１のアドレス指定可能な範囲を超える。分岐情報７００の分岐元アドレス（Ｈ´１００２０）を、カバレッジ計測用メモリ１０１の矢印（５）の分岐先アドレス（Ｈ´０２４０）の領域に格納すれば、誤計測となる。つまり、その後のホストコンピュータ３００による解析の結果は、アドレスＨ´０２４０〜Ｈ´１００２０までのプログラムコードが実行されたことを示すことになるからである。
【０１２２】
そこで、本実施の形態３に係るエミュレータ１０００のメモリ制御回路１０２０は、対象プログラム実行中に、対象プログラムから対象外のプログラムに分岐する場合であっても上記の誤計測とならないように、カバレッジ計測用メモリ１０１に分岐情報を格納する。
【０１２３】
具体的には、メモリ制御回路１０２０は、入力パケットについてデータ６００の分岐情報を検出した場合には、すなわちデータ１１３が示す分岐先アドレス値と閾値とを比較し、比較結果から、当該分岐先アドレス値は閾値よりも大きいと判定したときは、当該データ１１３を破棄する。そして、次に入力するパケットの分岐情報（すなわちデータ７００）の分岐先アドレス（Ｈ´０２０４０）を示すデータ１１３に基づくカバレッジ計測用メモリ１０１のアドレス指定領域の値を、先に入力していたパケットの分岐情報（すなわち、データ６００）の分岐元アドレス（Ｈ´０２３０）値で書換える。なお、上記の閾値は、記憶部２０３の対象プログラムの記憶領域の最終アドレス値を示し、メモリ制御回路１０２０内の図示しないレジスタに格納されていると想定する。
【０１２４】
これにより、カバレッジ計測用メモリ１０１のアドレスＨ´０２４０の領域に分岐元アドレスＨ´０２３０を格納することができて、対象プログラム実行中に、対象プログラム内から対象外プログラムへ分岐する分岐命令が実行されたとしても、カバレッジ計測用メモリ１０１に、上記の誤計測のないカバレッジ計測を可能とするトレースデータを格納することができる。
【０１２５】
＜変形例１＞
上記の分岐先データ１１１および分岐元データ１１２は、分岐先アドレスおよび分岐元アドレスを示すとしたが、これらデータはアドレスに限定されない。たとえば、分岐先データ１１１および分岐元データ１１２は、記憶部２０３の対象プログラムが格納された領域の先頭アドレスを基準としたオフセット値を示すとしてもよい。その場合には、エミュレータ１００の内部で、たとえば入力部１０７で、入力パケットのデータ部に格納されている当該基準とオフセット値とから、分岐先アドレスおよび分岐元アドレスを算出する。
【０１２６】
＜変形例２＞
上記の実施の形態では、対象プログラムはＭＣＵ２００で実行されるとしたが、ホストコンピュータ３００により実行されるとしてもよい。その場合には、ホストコンピュータ３００の記憶部３０２に対象プログラムを格納し、ＣＰＵ３０１が当該対象プログラムを実行する。実行中に検出される分岐情報（分岐命令実行毎に検出される分岐情報）は、図５のフローチャートに従って記憶部３０２の予め定められたトレース領域（カバレッジ計測用メモリ１０１に相当）に格納する。そして、対象プログラム実行終了後には、図６のフローチャートに従うプログラムを実行することにより、記憶部３０２のトレース領域のトレースデータを解析し、たとえば図９に示す解析結果を出力する。
【０１２７】
[実施の形態４]
実施の形態１〜３では、エミュレータ１００がトレースデータを記録し、ホストコンピュータ３００がトレースデータを解析するとしたが、トレースデータ記録はエミュレータ１００に代替してホストコンピュータ３００で実行するとしてもよい。その場合に、実施の形態１〜３に示すカバレッジ計測用メモリ１０１へのデータ格納および解析の処理は、図４〜６のフローチャートに従うプログラムとして提供することができる。このようなプログラムは、コンピュータに付属するＣＤ−ＲＯＭ、ＲＯＭ、ＲＡＭおよびメモリカードなどのコンピュータ読取り可能な記録媒体にて記録させて、プログラム製品として提供することもできる。あるいは、コンピュータに内蔵するハードディスクなどの記録媒体にて非一時的に記録させて、プログラムを提供することもできる。また、ネットワークを介したダウンロードによって、プログラムを提供することもできる。
【０１２８】
たとえば、図２の構成では、ＣＰＵ３０１を備えるホストコンピュータ３００には、ＣＤ−ＲＯＭ３０８を用いて当該プログラムを供給することができる。ＣＰＵ３０１は、Ｉ／Ｆ３０７を介してＣＤ−ＲＯＭ３０８に格納されたプログラムを読出し、実行する。
【０１２９】
提供されるプログラム製品は、記憶部３０２のハードディスクなどのプログラム格納部にインストールされてＣＰＵ３０１により読出されて実行される。なお、プログラム製品は、プログラム自体と、プログラムが記録された記録媒体とを含む。
【０１３０】
上述の実施の形態では、情報処理システムが示される。情報処理システムは、複数の分岐命令を含むプログラムを実行するためのプログラム実行ユニットと、当該プログラム実行ユニットに伝送路を介し接続される情報処理装置を備える。この情報処理装置は、プログラム実行ユニットから、実行される分岐命令の分岐元データと対応の分岐先データとを入力するための入力部と、複数の分岐命令に関するデータを格納するためのメモリと、メモリのアクセスを制御するための制御部と、を備える。
【０１３１】
上記の制御部は、入力部が入力する分岐命令の分岐先データに基づき指定されるメモリのアドレス領域に、当該分岐命令の次位に実行される分岐命令について入力部が入力する分岐元データを格納する。
【０１３２】
また、上述の実施の形態では、プロセッサを備えるコンピュータに、情報処理方法を実行させるためのプログラムが示される。このプログラムは、プロセッサに、複数の分岐命令を含むプログラムを実行するための外部のプログラム実行ユニットから、実行される分岐命令の分岐元データと対応の分岐先データとを入力するステップと、複数の分岐命令に関するデータを格納するためのメモリのアクセスを制御するステップと、を実行させる。アクセスを制御するステップでは、入力するステップにより入力する分岐命令の分岐先データに基づき指定されるメモリのアドレス領域に、当該分岐命令の次位に実行される分岐命令について入力するステップにより入力する分岐元データを格納する。
【０１３３】
また、上述の実施の形態では、上記のプログラムを非一時的に記録した機械読取可能な記録媒体が示される。
【０１３４】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【０１３５】
１００  エミュレータ、１０１  カバレッジ計測用メモリ、１０２  メモリ制御回路、１０３  メモリアドレスレジスタ、１０４  分岐元保持レジスタ、１０５  大小比較器、１０６  分岐先保持レジスタ、１１１  分岐先データ、１１２  分岐元データ、２００  ＭＣＵ、３００  ホストコンピュータ、３１２  解析用メモリ。
【図１】
2014063346.tif 000003
【図２】
2014063346.tif 000004
【図３】
2014063346.tif 000005
【図４】
2014063346.tif 000006
【図５】
2014063346.tif 000007
【図６】
2014063346.tif 000008
【図７】
2014063346.tif 000009
【図８】
2014063346.tif 000010
【図９】
2014063346.tif 000011
【図１０】
2014063346.tif 000012
【図１１】
2014063346.tif 000013
【図１２】
2014063346.tif 000014
【図１３】
2014063346.tif 000015