(57)【要約】      （修正有）【課題】スタック領域の使用状態をユーザに把握しやすい態様で提供する。【解決手段】マイクロコンピュータ１０は、スタックポインタ値を参照してプログラム実行を行うＣＰＵ１００と、ＣＰＵ１００の出力をトレースするトレース部２１０を備える。トレース部２１０は、プログラム内の分岐命令実行の際にＣＰＵ１００から出力されるスタックポインタ値を出力するとともに、ＣＰＵ１００から入力されるスタックポインタ値を所定条件に基づいて選択して出力する。【選択図】図１
2014153970.tif 000002
【特許請求の範囲】
【請求項１】
スタックポインタ値を参照してプログラム実行を行うＣＰＵと、前記ＣＰＵの各種出力をトレースするトレース部と、を備え、
前記トレース部は、
前記プログラム内の分岐命令実行の際に前記ＣＰＵから出力される前記スタックポインタ値を出力するとともに、前記ＣＰＵから出力される前記スタックポインタ値を所定条件に基づいて選択して出力する、半導体装置。
【請求項２】
前記トレース部は、
前記分岐命令の実行が始まってから終わるまでの間において、前記ＣＰＵから出力される前記スタックポインタ値の内で最も大きな値を選択して出力する、請求項１に記載の半導体装置。
【請求項３】
前記トレース部は、
前記ＣＰＵから入力される前記スタックポインタ値が一定値以上である場合、当該スタックポインタ値を選択して出力する、請求項１に記載の半導体装置。
【請求項４】
前記ＣＰＵは、
前記スタックポインタ値が変化する毎に、当該スタックポインタ値を前記トレース部に出力する、請求項１に記載の半導体装置。
【請求項５】
前記トレース部は、前記スタックポインタ値と関連付けられたスタック領域に書き込まれるスタックデータを出力する、請求項１に記載の半導体装置。
【請求項６】
前記トレース部は、
前記ＣＰＵから出力される前記スタックポインタ値が所定の閾値を超えた場合にのみ前記スタックデータを出力する、請求項５に記載の半導体装置。
【請求項７】
スタックポインタ値を参照してプログラム実行を行うＣＰＵが出力するトレースデータの取得方法であって、
前記プログラム内の分岐命令実行の際に前記ＣＰＵから出力される前記スタックポインタ値を出力するとともに、前記ＣＰＵから入力される前記スタックポインタ値を所定条件に基づいて選択して出力する、プログラムトレース方法。
【請求項８】
前記分岐命令の実行が始まってから終わるまでの間において、前記ＣＰＵから出力される前記スタックポインタ値の内で最も大きな値を選択して出力する、請求項７に記載のプログラムトレース方法。
【請求項９】
前記ＣＰＵから入力される前記スタックポインタ値が一定値以上である場合、当該スタックポインタ値を選択して出力する、請求項７に記載のプログラムトレース方法。
【請求項１０】
前記ＣＰＵは、
前記スタックポインタ値が変化する毎に、当該スタックポインタ値を前記トレース部に出力する、請求項７に記載のプログラムトレース方法。
【請求項１１】
前記スタックポインタ値と関連付けられたスタック領域に書き込まれるスタックデータを出力する、請求項７に記載のプログラムトレース方法。
【請求項１２】
前記ＣＰＵから出力される前記スタックポインタ値が所定の閾値を超えた場合にのみ前記スタックデータを出力する、請求項１１に記載のプログラムトレース方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は半導体装置、及びプログラムトレース方法に関し、例えばスタックポインタに関するトレースを行う半導体装置、及びプログラムトレース方法に関する。
【背景技術】
【０００２】
マイクロコンピュータ内におけるプログラム実行の解析手法として、トレース解析が挙げられる。トレース解析は、ＣＰＵ（Central Processing Unit,中央演算処理装置）が出力したプログラムの実行状態（トレース情報）をトレースメモリに出力する手法である。ユーザは、トレースメモリに蓄積されたトレース情報を参照することによってプログラムの実行状態を確認し、エラー原因を特定する。
【０００３】
プログラム実行の不具合原因の一つとしてスタックオーバーフローが挙げられる。スタックオーバーフローとは、バッファオーバーフローの一種である。プログラム実行時に用いるスタックメモリが格納可能な情報量には上限がある。スタックメモリとは、プログラム実行中のサブルーチンに関する情報を格納するスタック（コールスタック）が展開されるメモリである。スタックオーバーフローとは、コールスタックに上記の上限値を超えた量のデータが格納された場合に生じるプログラム実行エラーである。
【０００４】
スタックオーバーフローの原因解析は、一般的にトレース情報を解析することにより行われる。しかしながら一般的なＣＰＵによるプログラム実行では、スタックメモリに対するアクセスが頻繁に行われる。ここで、トレース装置がスタックメモリに対するアクセス（スタックメモリに対する書き込みデータ、読み出しデータ）を全てトレースメモリに書き込む場合、トレースメモリを大容量にする必要がある。そこで、トレース情報の削減手法が提案されている。トレース情報の削減手法について以下に説明する。
【０００５】
特許文献１には、スタックアクセスと通常のデータアクセスを独立に行うことができるデバッグシステムを開示している。当該デバッグシステムでは、スタックアクセスをそのままトレースするのではなく、スタックアクセス情報（スタックアクセス内容（ＰＵＳＨ等）とスタックアクセスデータ内容（ＰＵＳＨ等を行ったデータ値））と、スタックアクセス付加情報と、をトレースする。これにより、スタックアクセスのデータサイズが６６ビットから４０ビットに削減できる。
【０００６】
特許文献２には、フレームポインタ操作、直前のトレースデータが分岐条件であるメモリアクセス命令、等をトレースしないトレース方法が開示されている。詳細には、リンクレジスタ（ＬＲ、戻り先アドレス）やスタックポインタ（ＳＰ）を出力しないトレース方法が開示されている。
【０００７】
特許文献３には、トレース情報の出力を最適化する半導体集積回路が開示されている。当該半導体集積回路では、復帰命令（リターン命令）が実施されたときに、その分岐先が予想している分岐先と異なる場合にのみ当該分岐先アドレスをトレース情報として出力する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００８−６５４４１号公報
【特許文献２】特開２００７−５２６７６号公報
【特許文献３】特開２００５−２０９１７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上述のように、特許文献１に記載のデバッグシステムでは、スタックアクセスに関するトレースデータを少ないデータ量で表現する（６６ビットから４０ビット）ことにより、トレースメモリに書き込むデータ量を削減している。特許文献２及び特許文献３に記載の手法では、一部のトレース情報を出力しないことにより、トレースメモリに書き込まれるデータ量を削減している。特許文献１〜３にかかる手法では、スタックデータ（スタックに書き込まれるデータ）をトレースするものである。
【００１０】
しかしながら、スタックオーバーフローの解析という観点では、必ずしもスタックデータ（スタックに書き込まれるデータ）が必要ではなく、むしろスタックの使用状態（スタック領域の内、どの程度の領域（何％の領域）を使用しているか）が解析に重要となる。上述の特許文献１〜特許文献３の技術では、ユーザがスタックデータを参照することが想定されているため、スタックオーバーフローの解析に時間がかかることや解析を誤ってしまう等の問題があった。すなわち、上述の技術では、スタック領域の使用状態を把握することが困難であるという問題があった。
【００１１】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１２】
一実施の形態によれば、半導体装置（マイクロコンピュータ）は、
スタックポインタ値を参照してプログラム実行を行うＣＰＵと、前記ＣＰＵの出力をトレースするトレース部と、を備え、
前記トレース部は、
前記プログラム内の分岐命令実行の際に前記ＣＰＵから出力される前記スタックポインタ値を出力するとともに、前記ＣＰＵから入力される前記スタックポインタ値を所定条件に基づいて選択して出力する、ものである。
【００１３】
また一実施の形態によれば、プログラムトレース方法は、
スタックポインタ値を参照してプログラム実行を行うＣＰＵが出力するトレースデータの取得方法であって、
前記プログラム内の分岐命令実行の際に前記ＣＰＵから出力される前記スタックポインタ値を出力するとともに、前記ＣＰＵから入力される前記スタックポインタ値を所定条件に基づいて選択して出力する、ものである。
【発明の効果】
【００１４】
前記一実施の形態によれば、スタック領域の使用状態をユーザに把握しやすい態様で提供することができる半導体装置及びプログラムトレース方法を提供することができる。
【図面の簡単な説明】
【００１５】
【図１】実施の形態１にかかるデバッグシステム１の構成を示すブロック図である。
【図２】実施の形態１にかかるＣＰＵ１００の構成を示すブロック図である。
【図３】実施の形態１にかかるデバッグ部２００の構成を示すブロック図である。
【図４】実施の形態１にかかるＳＰ値選択トレース部２１５の構成を示すブロック図である。
【図５】実施の形態１にかかるＳＰ値選択トレース部２１５の動作を示すタイミングチャートである。
【図６Ａ】実施の形態１にかかるデバッグ部２００が出力するトレース情報を示す図である。
【図６Ｂ】特許文献１に記載の手法を用いて出力したトレース情報を示す図である。
【図６Ｃ】特許文献２に記載の手法を用いて出力したトレース情報を示す図である。
【図７】実施の形態２にかかるデバッグ部２００の構成を示すブロック図である。
【図８】実施の形態３にかかるグラフ生成部が出力するスタックポインタ値の遷移を示すグラフの一例である。
【発明を実施するための形態】
【００１６】
＜実施の形態１＞
以下、図面を参照して本実施の形態１にかかるデバッグシステム１について説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００１７】
図１は、本実施の形態にかかるデバッグシステム１の構成を示すブロック図である。デバッグシステム１は、マイクロコンピュータ（半導体装置）１０、及び外部デバッグ装置３０を備える。
【００１８】
マイクロコンピュータ１０は、ＣＰＵ１００、及びデバッグ部２００を有する。デバッグ部２００は、内部にトレース部２１０と、図示しない各処理部と、を有する。ここで図示しない処理部は、例えばデバッグ実行中のブレーク処理についての各種処理を実行する。マイクロコンピュータ１０は、任意の通信機器、家電装置、産業機器、車載装置等の内部に設けられる。
【００１９】
外部デバッグ装置３０は、内部にトレースメモリ３１０を有する。トレースメモリ３１０は、マイクロコンピュータ１０から出力されるトレース情報を逐次格納する。外部デバッグ装置３０は、例えば一般的なコンピュータであればよい。
【００２０】
次に、ＣＰＵ１００の構成について図２を参照して説明する。ＣＰＵ(Central Processing Unit)１００は、命令実行制御部１１０、メモリアクセス制御部１２０、データバスインターフェイス１３０、ＣＰＵレジスタ１４０、データトレースインターフェイス１５０、及びスタックトレースインターフェイス１６０を備える。
【００２１】
ＣＰＵレジスタ１４０は、内部にＳＰ（Stack Pointer:スタックポインタ）１４１を有する。ＳＰ１４１は、スタックの管理を行うポインタである。スタックとは、割り込み要求が生じた場合等に、割り込み直前までに実行していたプログラムのフラグ等を記憶する。スタックは、図示しないメモリ装置内の領域に展開される。ＳＰ１４１は当該メモリ装置における当該フラグ等の退避先の番地を保持する。ＳＰ１４１は、ＦＩＬＯ（First In Last Out）方式でデータを管理する。
【００２２】
命令実行制御部１１０は、図示しない記憶装置からプログラムを読み出して、当該プログラムの実行制御を行う。命令実行制御部１１０は、プログラム内の処理内容に応じてメモリアクセス制御部１２０、データバスインターフェイス１３０を介したメモリ装置やバスアクセスを制御する。さらに命令実行制御部１１０は、プログラム内の命令実行に際してＳＰ１４１の値の参照および書き換えを随時行う。
【００２３】
メモリアクセス制御部１２０は、ＣＰＵ１００の外部のメモリ装置またはＣＰＵレジスタ１４０へのアクセスを制御する。メモリ装置は、スタックを記憶するとともに一般的なデータを記憶する。このスタックが展開される領域をスタック領域と呼称する。また以下の説明では、スタックに対するアクセスをスタックアクセスと呼称し、それ以外のアクセスをデータアクセスと呼称する。上述のＳＰ１４１の値（スタックポインタ値）は、メモリ装置におけるスタック領域の番地を示す。そのため、ＳＰ１４１の値（スタックポインタ値）を参照することにより、スタック領域の使用量を把握することができる。
【００２４】
なお、スタックアクセスは例えば以下のパターンにおいて実行される。
・関数へのコール命令実行
・関数からのリターン命令実行
・割り込み発生による分岐
・割り込みからのリターン命令実行
・汎用レジスタ値の退避命令実行
・汎用レジスタ値の復帰命令実行
【００２５】
メモリアクセス制御部１２０は、命令実行制御部１１０からのアクセス命令がスタックアクセスであるか否かに応じてＳＰアクセス信号を生成する。ＳＰアクセス信号とは、スタックアクセスの際にハイレベルになる信号である。
【００２６】
命令実行制御部１１０は、実行した命令が分岐命令である場合、分岐先のアドレス、分岐元のアドレス、分岐タイミングを示す分岐タイミング信号、分岐発生時のスタックポインタ値（ＳＰ１４１の値、すなわちスタック領域のどの程度の領域を使用しているかを示す値）をトレース装置２００に出力する。さらに命令実行制御部１１０は、ＳＰ１４１の値を監視し、ＳＰ１４１の値が変更される毎にＳＰ１４１の値、及び変更毎にハイレベルとなるＳＰ変化タイミング信号をデバッグ部２００に出力する。
【００２７】
プログラム実行に伴ってメモリ装置へのアクセス（スタックアクセス及びデータアクセス）を行う場合、メモリアクセス制御部１２０は、データバスインターフェイス１３０にアクセスを行う。
【００２８】
データトレースインターフェイス１５０は、メモリアクセス制御部１２０とデータバスインターフェイス１３０との間のデータ送受信を監視する。データトレースインターフェイス１５０は、データバスインターフェイス１３０を介してメモリ装置（図示せず）へのアクセスが生じ、かつＳＰアクセス信号がロウレベルである場合、すなわちスタックアクセスではない場合、データアクセスのトレース情報を抽出する。データアクセスのトレース情報は、データアクセスの種類（リード、ライト）、アクセスアドレス、及び書き込み（または読み出し）データを含む。データトレースインターフェイス１５０は、メモリアクセス制御部１２０からデータバスインターフェイス１３０への送受信データから上述のトレース情報を抽出する。データトレースインターフェイス１５０は、抽出したデータアクセスのトレース情報（データアクセスの種類（リード、ライト）、アクセスアドレス、及び書き込み（または読み出し）データ）をトレース装置２００に供給する。
【００２９】
スタックトレースインターフェイス１６０は、メモリアクセス制御部１２０とデータバスインターフェイス１３０との間のデータ送受信を監視する。スタックトレースインターフェイス１６０は、データバスインターフェイス１３０を介してメモリ装置（図示せず）へのアクセスが生じ、かつＳＰアクセス信号がハイレベルである場合、すなわちスタックアクセスである場合、スタックアクセスのトレース情報を抽出する。スタックアクセスのトレース情報は、データアクセスの種類（リード、ライト）、アクセスアドレス、及び書き込み（または読み出し）データを含む。スタックトレースインターフェイス１６０は、メモリアクセス制御部１２０からデータバスインターフェイス１３０への送受信データから上述のトレース情報を抽出する。スタックトレースインターフェイス１６０は、抽出したスタックアクセスのトレース情報（スタックアクセスの種類（リード、ライト）、アクセスアドレス、及び書き込み（または読み出し）データ）をデバッグ部２００に供給する。
【００３０】
なお、特許文献１の図１９に示す構成と同様に、スタックトレースインターフェイス１６０は、スタックアクセス情報、スタックアクセス付加情報、及びスタックアクセスのデータを出力する構成としてもよい。
【００３１】
続いて、トレース部２１０について図３を参照して説明する。トレース部２１０は、データトレース部２１１、データトレース許可レジスタ２１２、分岐トレース部２１３、分岐トレース許可レジスタ２１４、ＳＰ値選択トレース部２１５、ＳＰ値選択許可レジスタ２１６、及び多重化部２１７を有する。
【００３２】
データトレース許可レジスタ２１２は、一般的なデータトレース機能を有効にするか否かを設定するレジスタである。データトレース部２１１は、データトレース許可レジスタ２１２にデータトレースを許可する値が書き込まれているかを判定する。許可する値が書き込まれている場合、データトレース部２１１は、ＣＰＵ１０から出力されたデータアクセスの種類（リード・ライド情報、サイズ情報等）、データアクセスのアドレス及びデータアクセスのデータを基に、通常のデータアクセスのトレース情報（データアクセストレース情報）を多重化部２１７に供給する。
【００３３】
分岐トレース許可レジスタ２１４は、分岐トレースを有効にするか否かを設定するレジスタである。分岐トレースとは、分岐命令（ＩＦ文実行、関数コール、割り込み実行等のアセンブラレベルで処理が分岐する命令）が行われた場合のスタックポインタ値をトレースする処理である。分岐トレース許可レジスタ２１４に分岐トレースを許可する値が書き込まれている場合、分岐トレース部２１３は、分岐が生じた際のスタックポインタ値、分岐元アドレス、分岐先アドレスを含む分岐トレース情報を多重化部２１７に出力する。
【００３４】
ＳＰ値選択トレース許可レジスタ２１６は、分岐命令の実行中のスタックポインタの最大値をトレースするか否かを設定するレジスタである。ＳＰ値選択トレース許可レジスタ２１６に許可を示す値が設定されている場合、ＳＰ値選択トレース部２１５は、分岐命令実行中のスタックポインタ最大値のトレース処理を行う。ＳＰ値選択トレース部２１５の処理の詳細は、図４を参照して説明する。
【００３５】
ユーザは、各レジスタ（データトレース許可レジスタ２１２、分岐トレース許可レジスタ２１４、ＳＰ値選択トレース許可レジスタ２１６）の値を書き換えることが可能である。しかしながらスタックオーバーフローを解析する場合には、分岐トレース許可レジスタ２１４及びＳＰ値選択トレース許可レジスタ２１６には、共に許可を示す値が書き込まれている必要がある。
【００３６】
次に、図４を参照してＳＰ値選択トレース部２１５の詳細構成について説明する。ＳＰ値選択トレース部２１５は、変化毎にＣＰＵ１００から入力されるスタックポインタ値から所定の条件に従って出力すべきスタックポインタ値を選択する。ＳＰ値選択トレース部２１５は、比較部２１５１、及びスタックポインタ管理部２１５２を備える。
【００３７】
比較部２１５１には、ＣＰＵ１００からＳＰ変化タイミング信号、及び変化毎のスタックポインタ値が入力される。スタックポインタ管理部２１５２には、分岐発生タイミング信号、及び変化毎のスタックポインタ値が入力される。
【００３８】
比較部２１５１は、スタックポインタ値が変化したタイミング（ＳＰ変化タイミング信号がハイレベルとなったタイミング）でスタックポインタ管理部２１５２が保持する最大スタックポインタ値と、ＣＰＵ１００から入力されたスタックポインタ値と、を比較する。ＣＰＵ１００から入力されたスタックポインタ値の方が大きな値である場合、比較部２１５１は、最大値更新信号をスタックポインタ管理部２１５２に供給する。ＣＰＵ１００から入力されたスタックポインタ値の方が小さな値である場合、比較部２１５１は最大値更新信号を出力しない。比較部２１５１は、ＳＰ変化タイミング信号がハイレベルとなるタイミング毎に上述の比較処理を行う。
【００３９】
スタックポインタ管理部２１５２は、内部のレジスタに保持している最大スタックポインタ値を、最大値更新信号が入力されたタイミングでＣＰＵ１００から入力されたスタックポンタ値によって上書きする。スタックポインタ管理部２１５２は、分岐発生タイミング信号がハイレベルとなった場合に、内部のレジスタで管理する最大スタックポインタ値（分岐間のスタックポインタ最大値）を多重化部２１７に供給するとともに、当該最大スタックポインタ値をリセットする。
【００４０】
ＳＰ値選択トレース部２１５の各処理部の処理を図５のタイミングチャートを参照して
説明する。図５のタイミングチャートにおいて、ＳＰ値１＞ＳＰ値２、及びＳＰ値５＞ＳＰ値４＞ＳＰ値３の関係が成り立つものとする。
【００４１】
スタックポインタ値は、それぞれタイミングｔ１〜ｔ５において変化している（ＳＰ変化タイミング信号がハイレベルとなっている）。スタックポインタ管理部２１５２は、初期状態ではデフォルト値（"００００"）を管理している。比較部２１５１は、ＳＰ変化タイミング信号がハイレベルとなるタイミングで、スタックポインタ管理部２１５２が保持するスタックポインタ値と、ＣＰＵ１００から入力されるスタックポインタ値と、を比較する。例えばタイミングｔ１において、比較部２１５１は、"ＳＰ値１"と"００００"を比較し、"ＳＰ値１"が大きいと判断して最大値更新信号を出力する。スタックポインタ管理部２１５２は、この最大値更新信号の出力に応じてｔ１の直後に管理する最大スタックポインタ値を"ＳＰ値１"に更新する。
【００４２】
スタックポインタ管理部２１５２は、分岐発生タイミング信号がハイレベルとなった場合（すなわちタイミングｔ６）に管理する最大スタックポインタ値を多重化部２１７に供給する。これにより分岐間の最大スタックポインタ値、すなわち分岐命令実行中の最大スタックポインタ値を出力することができる。
【００４３】
再び図３を参照する。多重化部２１７には、データアクセストレース情報、分岐トレース情報、及び分岐間の最大スタックポインタ値が入力される。多重化部２１７は、これらの情報を実行順序に応じて多重化する。多重化２１７は、多重化した情報（トレース情報）を外部デバッグ装置３０内のトレースメモリ３１０に書き込む。
【００４４】
続いて本実施の形態にかかるデバッグシステム１の効果について説明する。上述のようにトレース部２１０は、分岐命令実行時の分岐トレース情報を外部デバッグ装置３０に出力するとともに、分岐実行中の最大スタックポインタ値を外部デバッグ装置３０に出力している。これらの値は、スタック領域の使用状態を把握することができる情報である。すなわち外部デバッグ装置３０内のトレースメモリ３１０には、スタックポインタの使用状況の変化を示す値のみを格納することが可能となる。よってユーザは、トレースメモリ３１０を参照することにより、スタックの使用状態（スタック領域の内、どの程度の領域を使用しているか）を容易に把握することができる。
【００４５】
図６Ａ〜図６Ｃを参照して具体例を説明する。図６Ａは、本実施の形態にかかるマイクロコンピュータ１０が出力するトレース情報を示す概念図である。なお本例では、各レジスタ（データトレース許可レジスタ２１２、分岐トレース許可レジスタ２１４、ＳＰ値選択トレース許可レジスタ２１６）に全て許可を示す値が書き込まれているものとする。図６Ｂは、特許文献１にかかる手法を用いた場合のトレース情報を示す概念図である。図６Ｃは、特許文献２にかかる手法を用いた場合のトレース情報を示す概念図である。なお、図６Ａ〜図６Ｃでは、説明の便宜のため実際には出力されない行番号も合わせて表示している。
【００４６】
図６Ａに示すように、データトレース部２１１は、分岐命令を実行する際に分岐元のプログラムカウンタ及び分岐先のプログラムカウンタを出力する（１行目、２行目）。分岐トレース部２１３は、分岐命令の実行前のスタックポインタ値を出力する（３行目）。ＳＰ値選択トレース部２１５は、分岐命令の実行中の最大スタックポインタ値を出力する（４行目）。分岐トレース部２１３は、分岐命令の実行後のスタックポインタ値を出力する（５行目）。各トレース部（データトレース部２１１、分岐トレース部２１３、ＳＰ値選択トレース部２１５）は、以降の処理においても同様のトレース出力処理を継続する。
【００４７】
続いて特許文献１にかかる手法を用いた場合に出力されるトレース情報について図６Ｂを参照して説明する。当該手法では、一般的なデータトレース（１行目、２行目等に記載の情報。）に加えて、スタックアクセス情報（３行目〜１２行目に記載の情報。スタックアクセス内容（ＰＵＳＨ等）とスタックアクセスデータ内容（ＰＵＳＨ等を行ったデータ値））を出力している。当該手法では、一般的な手法では６６ビットとなるスタックアクセスのトレースを４０ビットに削減している。
【００４８】
次に特許文献２にかかる手法を用いた場合に出力されるトレース情報について図６Ｃを参照して説明する。当該手法では、一般的なデータトレース（１行目、２行目）と一部のスタックアクセス情報（３行目〜１０行目）を出力している。当該手法では一部のスタックアクセス情報の削減（図中の取り消し線部分）を図ることができる。
【００４９】
図６Ａ〜図６Ｃを参照すると明らかなように、特許文献１及び特許文献２の手法（図６Ｂ、図６Ｃ）では、スタックアクセス情報（スタック退避データ、スタック復帰データ）が数多く出力されている。一方、本手法（図６Ａ）では、データトレースに加えて分岐に関するスタックポインタ値が出力され、スタックアクセス情報（スタック退避データ、スタック復帰データ）は出力されない。上述のようにスタックアクセス情報は、スタック領域に書き込まれるデータであり、スタックオーバーフローの解析にはさほど重要ではない。一方、スタックポインタ値は、スタック領域の使用状況を把握できる情報である。ユーザは、本実施の形態にかかる手法により出力されたトレース情報を参照することにより、スタック領域の使用状態を容易に把握することができる。これによりユーザは、例えばスタックオーバーフローの原因追及を容易に行うことができる。
【００５０】
また本実施の形態にかかるトレース手法は、データトレース量の圧縮率にも優れている。本実施の形態にかかるマイクロコンピュータ１０は、スタックアクセス情報（スタック退避データ、スタック復帰データ）を出力しない。ここで一般的な手法においてスタックアクセス情報が分岐命令実行時に２０回出力される（６６ビット×２０行）と仮定すると、本実施の形態にかかるマイクロコンピュータ１０が出力するトレース情報の圧縮率は約２９％（約７１％のトレース情報を削減）となる。一方、特許文献１に記載の手法では圧縮率は約６０％程度（約４０％のトレース情報を削減）である。
【００５１】
上述のようにスタックポインタ値は、様々なパターンで変更され得る。またスタックオーバーフローの解析という点に着目すると、スタックポインタ値（すなわちスタック領域の使用割合）の最大値を参照することにより大半の解析を行うことができる。本実施の形態にかかるＳＰ値選択トレース部２１５は、スタックポインタ値をそのまま出力するのではなく、分岐実行時の最大スタックポインタ値のみを選択して出力している。そのため、ユーザは必要なスタックポインタ値のみを参照することができるとともに、トレースメモリ３１０に書き込まれるデータサイズをさらに削減することができる。
【００５２】
なお、上述の説明では分岐命令実行中の最大スタックポインタ値が出力対象となったが必ずしもこれに限られない。例えばＳＰ値選択トレース部２１５は、ＣＰＵ１００から入力されるスタックポインタ値が一定値よりも大きい場合、当該スタックポインタ値を多重化部２１７に出力してもよい。この場合にスタックポインタ管理部２１５２は、出力対象となる複数のスタックポインタ値を保持する。
【００５３】
またＳＰ値選択トレース部２１５は、一定時間内でスタックポインタ値の上昇率が一定値以上となった場合に当該スタックポインタ値を多重化部２１７に出力してもよい。すなわちＳＰ値選択トレース部２１５は、ＣＰＵ１００から入力されるスタックポインタ値が所定の条件を満たした場合に、スタックポインタ値を多重化部２１７に出力する構成であれば良い。
【００５４】
また上述の説明ではＣＰＵ１００がスタックポインタ値の変化毎に当該スタックポインタ値をトレース部２１０に出力するものとして説明したが必ずしもこれに限られない。たとえばＣＰＵ１００は、スタックポンタ値の変化がｎ回生じる毎にスタックポインタ値を出力するようにしてもよい。
【００５５】
＜実施の形態２＞
本実施の形態にかかるマイクロコンピュータ１０は、スタック領域に関するデータを書き込むデータも出力可能であることを特徴とする。本実施の形態にかかるマイクロコンピュータ１０について実施の形態１と異なる点を以下に説明する。
【００５６】
図７は、本実施の形態にかかるマイクロコンピュータ１０の構成を示すブロック図である。マイクロコンピュータ１０は、図３に示す構成に加えて、スタックトレース部２１８及びスタックトレース許可レジスタ２１９をトレース部２１０内部に有する。またＳＰ値選択トレース部２１５が出力制御信号をスタックトレース部２１８に出力する構成である。以下、詳細を説明する。
【００５７】
ＣＰＵ１００は、図２に示すように、スタックアクセス情報（スタック領域に書き込むデータ、スタック領域から読み出すデータ）をスタックトレース部２１８に供給する。詳細にはＣＰＵ１００内のスタックトレースインターフェイス１６０は、メモリ装置１００へのアクセスを監視し、スタックトレース情報をトレース部２１０に供給する。
【００５８】
ＳＰ選択トレース部２１５の構成は、図４に示す構成と略同一である。比較部２１５１は、上述の比較と共に、所定値（例えばスタック領域の８０％以上の領域使用に対応する値）とＣＰＵ１００から入力されるスタックポインタ値を比較する。所定値との比較においてＣＰＵ１００から入力されるスタックポインタ値の方が大きい場合、比較部２１５１は、出力制御信号をハイレベルにしてスタックトレース部２１８に出力する。出力制御信号は、スタックトレース部２１８にスタックアクセスデータ（スタック領域に書き込まれるデータ）の出力を指示する指示信号である。出力制御信号は、ハイレベルの場合に出力を指示し、ロウレベルの場合には出力禁止を指示する。比較部２１５１は、所定値とＣＰＵ１００から入力されるスタックポインタ値を比較し、所定値の方が大きい場合には出力制御信号をロウレベルに遷移させてスタックトレース部２１８に出力する。
【００５９】
スタックトレース許可レジスタ２１９は、スタックデータを出力するか否かを設定するレジスタである。ユーザは、当該レジスタを任意のタイミングで書き換えることができる。
【００６０】
スタックトレース部２１８には、スタックトレース情報（スタックアクセスの種類、スタックアクセスのアドレス、及びスタックアクセスのデータ）が入力される。スタックトレース部２１８は、これらの情報を基にスタックデータを生成する。スタックデータは、スタック領域に書き込まれるデータを含むものであれば、どのようなフォーマットで表現されていてもよい。スタックトレース部２１８は、スタックトレース許可レジスタ２１９に出力許可を示す値が書き込まれており、かつ出力制御信号がハイレベルの場合にスタックデータを多重化部２１７に出力する。スタックトレース部２１８は、スタックアクセスの種類、スタックアクセスのアドレス、及びスタックアクセスのデータから必要なデータを抽出することによりスタックデータを生成する。
【００６１】
なおスタックトレース部２１８は、必ずしも出力制御信号に応じてスタックデータを出力する必要はなく、スタックトレース許可レジスタ２１９に書き込まれた値のみを参照してスタックデータを出力してもよい。
【００６２】
またトレース部２１０は、各レジスタ（データトレース許可レジスタ２１２、分岐トレース許可レジスタ２１４、ＳＰ値選択トレース許可レジスタ２１６、スタックトレース許可レジスタ２１９）を有さない構成とすることも可能である。この場合、トレース部２１０は全てのトレース処理を行えばよい。
【００６３】
続いて本実施の形態にかかるデバッグシステム１の効果について説明する。本実施の形態にかかるマイクロコンピュータ１０は、スタックトレース部２１８を備え、スタックデータも出力できる構成である。これによりユーザは、スタック領域の使用状況（スタック領域の何％が使用されているのか）に加えて、スタック領域に書き込まれたデータも参照することができる。よってユーザは、より詳細にスタック領域の使用の把握を行うことができる。
【００６４】
またスタックトレース部２１８は、出力制御信号がハイレベルの場合にのみスタックデータを出力する。出力制御信号は、スタックポインタの値が所定値以上となった場合にのみハイレベルとなる信号である。これにより、スタックポインタの値が所定値以上となった場合にのみトレース部２１０からスタックデータが出力される。換言するとスタック領域の使用率が高い場合にのみトレース部２１０からスタックデータが出力される。このため、スタックオーバーフローが生じやすい状態となっている場合にのみ詳細なスタック領域への書き込みデータを参照することができることになり、状況確認が容易となるとともにトレースデータへの書き込みデータ量の増加も最小限に抑えることができる。
【００６５】
＜実施の形態３＞
本実施の形態にかかるデバッグシステム１は、スタック領域の使用量をグラフィカルに表示することを特徴とする。以下、本実施の形態にかかるデバッグシステム１について実施の形態１及び２と異なる点を説明する。
【００６６】
マイクロコンピュータ１０は、スタック領域のサイズ等の情報を外部デバッグ装置３０に供給する。またトレース部２１０内の各処理部（データトレース部２１１、分岐トレース部２１３、ＳＰ値選択トレース部２１５）は、各データ（データアクセストレース情報、分岐トレース情報、スタックポインタ値）の出力時に実行している関数名等の情報も合わせてトレースメモリ３１０に出力する。
【００６７】
外部デバッグ装置３０は、図示しないもののグラフ作成部を有する。当該グラフ作成部は、トレースメモリ３１０からトレース情報を読み出すとともに、上述のマイクロコンピュータ１０からスタック領域のサイズを受け付ける。グラフ作成部は、トレース情報に含まれる関数名やスタックポインタ値等の情報と、スタック領域のサイズと、から図８に示すようなグラフを生成する。
【００６８】
図８は、グラフ生成部が作成したスタック領域の使用状態を示すグラフである。図示するように、グラフ生成部は関数名とスタック領域の使用割合を折れ線で示したグラフを生成する。グラフ生成部は、外部デバッグ装置３０に内蔵または接続されたディスプレイ装置に対して図８に示すグラフを表示する。またグラフ生成部は、外部デバッグ装置３０に接続されたプリンタ装置等を介して図８に示すグラフを出力してもよい。
【００６９】
本実施の形態では、外部デバッグ装置３０は、図８に示すようにスタック使用量と関数遷移を同時に確認できるグラフを提供する。ユーザは、このグラフを参照することによりスタックオーバーフローの原因追及をより容易に行うことができる。
【００７０】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【００７１】
例えばマイクロコンピュータ１０が複数のＣＰＵ１００を有するマルチコア形式の場合についても上述の処理を適応することができる。この場合にトレース部２１０は、ＣＰＵコアＩＤを各行に付与した形でトレースデータを出力すればよい。
【００７２】
さらにまた、マイクロコンピュータ１０が複数のスタック領域を有する場合にも上述の処理を適用することができる。この場合にトレース部２１０は、タスクＩＤをトレース内に付加することにより、どのスタック領域への処理であるかを判別できるようにすればよい。
【００７３】
なお、ＣＰＵ１００が実行するプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（random access memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【符号の説明】
【００７４】
１  デバッグシステム
１０  マイクロコンピュータ
１００  ＣＰＵ（Central Processing Unit）
１１０  命令実行制御部
１２０  メモリアクセス制御部
１３０  データバスインターフェイス
１４０  ＣＰＵレジスタ
１５０  データトレースインターフェイス
１６０  スタックトレースインターフェイス
２００  デバッグ部
２１０  トレース部
２１１  データトレース部
２１２  データトレース許可レジスタ
２１３  分岐トレース部
２１４  分岐トレース許可レジスタ
２１５  ＳＰ値選択トレース部
２１６  ＳＰ最大値トレース許可レジスタ
２１７  多重化部
２１８  スタックトレース部
２１９  スタックトレース許可レジスタ
３０  外部デバッグ装置
３１０  トレースメモリ
【図１】
2014153970.tif 000003
【図２】
2014153970.tif 000004
【図３】
2014153970.tif 000005
【図４】
2014153970.tif 000006
【図５】
2014153970.tif 000007
【図６Ａ】
2014153970.tif 000008
【図６Ｂ】
2014153970.tif 000009
【図６Ｃ】
2014153970.tif 000010
【図７】
2014153970.tif 000011
【図８】
2014153970.tif 000012