(57)【要約】      （修正有）【課題】プログラムのバグを速やかに特定するデバッグシステムの提供。【解決手段】デバッグシステムＳＹＳ１は、マイコン１１と、デバッガ１２を備える。マイコンは、ＣＰＵコア１１１と、ＪＳＲ命令実行監視部１１２を有する。ＪＳＲ命令実行監視部は、ＪＳＲ命令判定部１１２１と、飛び先アドレス取得部１１２２と、飛び先アドレス送信部１１２３を有する。ＪＳＲ命令判定部は、実行対象の命令が関数呼び出し命令であるか否かを判定する。飛び先アドレス取得部は、実行対象の命令が関数呼び出し命令であると判定された場合、関数呼び出し命令の飛び先アドレスを取得する。デバッガにおいて比較部１２２は、取得された飛び先アドレスと、リスト格納部１２１に格納された、予め指定された複数の関数の先頭アドレスのそれぞれと比較する。ブレーク判定部１２３は、比較結果に基づいて、プログラムの実行を停止させるための命令信号を出力するか否かを制御する。【選択図】図１
2019204196.tif 000002
【特許請求の範囲】
【請求項１】
実行対象の命令が関数呼び出し命令であるか否かを判定する第１命令判定部と、
前記第１命令判定部によって前記実行対象の命令が関数呼び出し命令であると判定された場合、当該関数呼び出し命令の飛び先アドレスを取得する飛び先アドレス取得部と、
前記飛び先アドレス取得部によって取得された前記飛び先アドレスと、予め指定された複数の関数の先頭アドレスのそれぞれと、を比較する第１比較部と、
前記第１比較部による比較結果に基づいて、プログラムの実行を停止させるための命令信号を出力するか否かを制御するブレーク判定部と、
を備えた、デバッグシステム。
【請求項２】
前記ブレーク判定部は、前記飛び先アドレスが予め指定された前記複数の関数の先頭アドレスの何れとも一致しない場合、プログラムの実行を停止させるための前記命令信号を出力するように構成されている、
請求項１に記載のデバッグシステム。
【請求項３】
マイクロコンピュータと、
デバッガと、を備え、
前記マイクロコンピュータは、
前記第１命令判定部と、前記飛び先アドレス取得部と、を含み、
さらに、前記飛び先アドレス取得部によって取得された前記飛び先アドレスを前記デバッガに送信する飛び先アドレス送信部を有し、
前記デバッガは、
前記第１比較部と、前記ブレーク判定部と、を含み、
前記ブレーク判定部は、前記マイクロコンピュータに対して前記プログラムの実行を停止させるための前記命令信号を送信するか否かを制御する、
請求項１に記載のデバッグシステム。
【請求項４】
前記マイクロコンピュータにおいて、
前記飛び先アドレス送信部は、前記飛び先アドレスとともに、前記飛び先アドレスが関数の先頭アドレスであるか否かの判断の対象であることを示すフラグを前記デバッガに送信するように構成され、
前記デバッガにおいて、
前記第１比較部は、前記フラグとともに前記マイクロコンピュータから受け取った前記飛び先アドレスと、予め指定された複数の関数の先頭アドレスのそれぞれと、を比較するように構成されている、
請求項３に記載のデバッグシステム。
【請求項５】
前記マイクロコンピュータは、
前記第１命令判定部によって前記実行対象の命令が関数呼び出し命令であると判定された場合にスタック領域に格納される戻りアドレスを第１戻りアドレスとして取得する第１戻りアドレス取得部と、
前記第１戻りアドレス取得部によって取得された前記第１戻りアドレスを前記デバッガに送信する第１戻りアドレス送信部と、
実行対象の命令が関数からの復帰命令であるか否かを判定する第２命令判定部と、
前記第２命令判定部によって前記実行対象の命令が関数からの復帰命令であると判定された場合、前記スタック領域から読み出された前記戻りアドレスを第２戻りアドレスとして取得する第２戻りアドレス取得部と、
前記第２戻りアドレス取得部によって取得された前記第２戻りアドレスを前記デバッガに送信する第２戻りアドレス送信部と、をさらに備え、
前記デバッガは、
前記マイクロコンピュータから受け取った前記第１戻りアドレスを格納する戻りアドレス格納部と、
前記戻りアドレス格納部に格納された前記第１戻りアドレスと、前記マイクロコンピュータから受け取った前記第２戻りアドレスと、を比較する第２比較部と、をさらに備え、
前記ブレーク判定部は、さらに、前記第２比較部による比較結果に基づいて、前記マイクロコンピュータに対して前記プログラムの実行を停止させるための前記命令信号を送信するか否かを制御するように構成されている、
請求項３に記載のデバッグシステム。
【請求項６】
前記戻りアドレス格納部は、ＬＩＦＯ方式の格納部である、
請求項５に記載のデバッグシステム。
【請求項７】
マイクロコンピュータと、
デバッガと、を備え、
前記マイクロコンピュータは、
前記第１命令判定部と、前記飛び先アドレス取得部と、前記第１比較部と、前記ブレーク判定部と、を含む、
請求項３に記載のデバッグシステム。
【請求項８】
前記マイクロコンピュータは、
前記第１命令判定部によって前記実行対象の命令が関数呼び出し命令であると判定された場合にスタック領域に格納される戻りアドレスを第１戻りアドレスとして取得する第１戻りアドレス取得部と、
前記第１戻りアドレスを格納する戻りアドレス格納部と、
実行対象の命令が関数からの復帰命令であるか否かを判定する第２命令判定部と、
前記第２命令判定部によって前記実行対象の命令が関数からの復帰命令であると判定された場合、前記スタック領域から読み出された前記戻りアドレスを第２戻りアドレスとして取得する第２戻りアドレス取得部と、
前記戻りアドレス格納部に格納された前記第１戻りアドレスと、前記第２戻りアドレス取得部によって取得された前記第２戻りアドレスと、を比較する第２比較部と、をさらに備え、
前記ブレーク判定部は、さらに、前記第２比較部による比較結果に基づいて、プログラムの実行を停止させるための命令信号を出力するか否かを制御するように構成されている、
請求項７に記載のデバッグシステム。
【請求項９】
前記戻りアドレス格納部は、ＬＩＦＯ方式の格納部である、
請求項８に記載のデバッグシステム。
【請求項１０】
実行対象の命令が関数呼び出し命令であるか否かを判定する第１命令判定部と、
前記第１命令判定部によって前記実行対象の命令が関数呼び出し命令であると判定された場合にスタック領域に格納される戻りアドレスを第１戻りアドレスとして取得する第１戻りアドレス取得部と、
前記第１戻りアドレスを格納する戻りアドレス格納部と、
実行対象の命令が関数からの復帰命令であるか否かを判定する第２命令判定部と、
前記第２命令判定部によって前記実行対象の命令が関数からの復帰命令であると判定された場合、前記スタック領域から読み出された前記戻りアドレスを第２戻りアドレスとして取得する第２戻りアドレス取得部と、
前記戻りアドレス格納部に格納された前記第１戻りアドレスと、前記第２戻りアドレス取得部によって取得された前記第２戻りアドレスと、を比較する比較部と、
前記比較部による比較結果に基づいて、プログラムの実行を停止させるための命令信号を出力するか否かを制御するブレーク判定部と、
を備えた、デバッグシステム。
【請求項１１】
前記ブレーク判定部は、前記戻りアドレス格納部に格納された前記第１戻りアドレスと、前記第２戻りアドレス取得部によって取得された前記第２戻りアドレスと、が一致しない場合、プログラムの実行を停止させるための前記命令信号を出力するように構成されている、
請求項１０に記載のデバッグシステム。
【請求項１２】
前記戻りアドレス格納部は、ＬＩＦＯ方式の格納部である、
請求項１０に記載のデバッグシステム。
【請求項１３】
マイクロコンピュータと、
デバッガと、を備え、
前記マイクロコンピュータは、
前記第１命令判定部と、前記第１戻りアドレス取得部と、前記第２命令判定部と、前記第２戻りアドレス取得部と、を含み、
さらに、前記第１戻りアドレス取得部によって取得された前記第１戻りアドレスを前記デバッガに送信する第１戻りアドレス送信部と、
前記第２戻りアドレス取得部によって取得された前記第２戻りアドレスを前記デバッガに送信する第２戻りアドレス送信部と、を備え、
前記デバッガは、
前記戻りアドレス格納部と、前記比較部と、前記ブレーク判定部と、を含み、
前記ブレーク判定部は、前記マイクロコンピュータに対して前記プログラムの実行を停止させるための前記命令信号を送信するか否かを制御する、
請求項１０に記載のデバッグシステム。
【請求項１４】
前記マイクロコンピュータにおいて、
前記第１戻りアドレス送信部は、前記第１戻りアドレスと、前記第１戻りアドレスが前記第２戻りアドレスとの比較の対象であることを示す第１フラグと、を前記デバッガに送信するように構成され、
前記第２戻りアドレス送信部は、前記第２戻りアドレスと、前記第２戻りアドレスが前記第１戻りアドレスとの比較の対象であることを示す第２フラグと、を前記デバッガに送信するように構成され、
前記デバッガにおいて、
前記比較部は、第１フラグとともに前記戻りアドレス格納部された前記第１戻りアドレスと、前記第２フラグとともに前記マイクロコンピュータから受け取った前記第２戻りアドレスと、を比較するように構成されている、
請求項１３に記載のデバッグシステム。
【請求項１５】
マイクロコンピュータと、
デバッガと、を備え、
前記マイクロコンピュータは、
前記第１命令判定部と、前記第１戻りアドレス取得部と、前記戻りアドレス格納部と、前記第２命令判定部と、前記第２戻りアドレス取得部と、前記比較部と、前記ブレーク判定部と、を含む、
請求項１０に記載のデバッグシステム。
【請求項１６】
実行対象の命令が関数呼び出し命令であるか否かを判定する第１判定処理と、
前記第１判定処理によって前記実行対象の命令が関数呼び出し命令であると判定された場合、当該関数呼び出し命令の飛び先アドレスを取得する第１取得処理と、
前記第１取得処理によって取得された前記飛び先アドレスと、予め指定された複数の関数の先頭アドレスのそれぞれと、を比較する第１比較処理と、
前記第１比較処理による比較結果に基づいて、プログラムの実行を停止させるための命令信号を出力するか否かを制御するブレーク判定処理と、
をコンピュータに実行させるデバックプログラム。
【請求項１７】
前記ブレーク判定処理では、前記飛び先アドレスが予め指定された前記複数の関数の先頭アドレスの何れとも一致しない場合、プログラムの実行を停止させるための前記命令信号を出力する、
請求項１６に記載のデバッグプログラム。
【請求項１８】
前記第１判定処理によって前記実行対象の命令が関数呼び出し命令であると判定された場合にスタック領域に格納される戻りアドレスを第１戻りアドレスとして取得する第２取得処理と、
前記第２取得処理によって取得された前記第１戻りアドレスを戻りアドレス格納部に格納する処理と、
実行対象の命令が関数からの復帰命令であるか否かを判定する第２判定処理と、
前記第２判定処理によって前記実行対象の命令が関数からの復帰命令であると判定された場合、前記スタック領域から読み出された前記戻りアドレスを第２戻りアドレスとして取得する第２取得処理と、
前記戻りアドレス格納部に格納された前記第１戻りアドレスと、前記第２取得処理によって取得された前記第２戻りアドレスと、を比較する第２比較処理と、をさらに備え、
前記ブレーク判定処理では、さらに、前記第２比較処理による比較結果に基づいて、プログラムの実行を停止させるための前記命令信号を出力するか否かを制御する、
請求項１６に記載のデバッグプログラム。
【請求項１９】
前記ブレーク判定処理では、前記飛び先アドレスが予め指定された前記複数の関数の先頭アドレスの何れとも一致しない場合、及び、前記戻りアドレス格納部に格納された前記第１戻りアドレスと、前記第２取得処理によって取得された前記第２戻りアドレスと、が一致しない場合、の何れの場合にも、プログラムの実行を停止させるための前記命令信号を出力する、
請求項１８に記載のデバッグプログラム。
【請求項２０】
前記戻りアドレス格納部は、ＬＩＦＯ方式の格納部である、
請求項１８に記載のデバッグプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデバッグシステム及びデバッグプログラムに関し、例えばプログラムのバグを速やかに特定するのに適したデバッグシステム及びデバッグプログラムに関する。
【背景技術】
【０００２】
特許文献１には、マイクロコンピュータと、当該マイクロコンピュータによって実行されるプログラムのバグを発見してデバッグ処理を行うデバッガと、を備えたデバッグシステムの構成が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平９−１４６７８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１に開示された構成では、例えばプログラムのバグによってマイクロコンピュータが暴走した場合、トレース情報を記憶するトレースバッファがオーバーフローしてしまう可能性が高いため、暴走の原因となったプログラムのバグをトレース情報から特定することが困難であるという問題があった。換言すると、特許文献１に開示された構成では、暴走の原因となったプログラムのバグを速やかに特定することができない、という問題があった。その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００５】
一実施の形態によれば、デバッグシステムは、実行対象の命令が関数呼び出し命令であるか否かを判定する第１命令判定部と、前記第１命令判定部によって前記実行対象の命令が関数呼び出し命令であると判定された場合、当該関数呼び出し命令の飛び先アドレスを取得する飛び先アドレス取得部と、前記飛び先アドレス取得部によって取得された前記飛び先アドレスと、予め指定された複数の関数の先頭アドレスのそれぞれと、を比較する第１比較部と、前記第１比較部による比較結果に基づいて、プログラムの実行を停止させるための命令信号を出力するか否かを制御するブレーク判定部と、を備える。
【０００６】
また、他の実施の形態によれば、デバッグシステムは、実行対象の命令が関数呼び出し命令であるか否かを判定する第１命令判定部と、前記第１命令判定部によって前記実行対象の命令が関数呼び出し命令であると判定された場合にスタック領域に格納される戻りアドレスを第１戻りアドレスとして取得する第１戻りアドレス取得部と、前記第１戻りアドレスを格納する戻りアドレス格納部と、実行対象の命令が関数からの復帰命令であるか否かを判定する第２命令判定部と、前記第２命令判定部によって前記実行対象の命令が関数からの復帰命令であると判定された場合、前記スタック領域から読み出された前記戻りアドレスを第２戻りアドレスとして取得する第２戻りアドレス取得部と、前記戻りアドレス格納部に格納された前記第１戻りアドレスと、前記第２戻りアドレス取得部によって取得された前記第２戻りアドレスと、を比較する比較部と、前記比較部による比較結果に基づいて、プログラムの実行を停止させるための命令信号を出力するか否かを制御するブレーク判定部と、を備える。
【０００７】
また、他の実施の形態によれば、デバッグプログラムは、実行対象の命令が関数呼び出し命令であるか否かを判定する第１判定処理と、前記第１判定処理によって前記実行対象の命令が関数呼び出し命令であると判定された場合、当該関数呼び出し命令の飛び先アドレスを取得する第１取得処理と、前記第１取得処理によって取得された前記飛び先アドレスと、予め指定された複数の関数の先頭アドレスのそれぞれと、を比較する第１比較処理と、前記第１比較処理による比較結果に基づいて、プログラムの実行を停止させるための命令信号を出力するか否かを制御するブレーク判定処理と、をコンピュータに実行させる。
【発明の効果】
【０００８】
前記一実施の形態によれば、プログラムのバグを速やかに特定することが可能なデバッグシステム及びデバッグプログラムを提供することができる。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１にかかるデバッグシステムの構成例を示すブロック図である。
【図２】図１に示すデバッグシステムの動作を示すフローチャートである。
【図３】実施の形態２にかかるデバッグシステムの構成例を示すブロック図である。
【図４】図３に示すデバッグシステムの動作を示すフローチャートである。
【図５】実施の形態３にかかるデバッグシステムの構成例を示すブロック図である。
【図６】図５に示すデバッグシステムの動作を示すフローチャートである。
【図７】実施の形態４にかかるデバッグシステムの構成例を示すブロック図である。
【図８】図７に示すデバッグシステムの動作を示すフローチャートである。
【発明を実施するための形態】
【００１０】
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００１１】
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００１２】
＜実施の形態１＞
図１は、実施の形態１にかかるデバッグシステムＳＹＳ１の構成例を示すブロック図である。本実施の形態にかかるデバッグシステムＳＹＳ１は、実行対象の命令が関数呼び出し命令である場合、当該関数呼び出し命令の飛び先アドレスが関数の先頭アドレスであるか否かを判定し、その判定結果に基づいてプログラムの実行を停止させるか否かを制御する。それにより、本実施の形態にかかるデバッグシステムＳＹＳ１は、例えばポインタ変数の誤設定によって関数呼び出し命令の飛び先アドレスが関数の先頭アドレスでない場合でも、トレース情報を記憶するトレースバッファがオーバーフローする前に、プログラムの実行を停止させることができるため、当該トレース情報から速やかにプログラムのバグを特定することができる。以下、具体的に説明する。
【００１３】
（デバッグシステムＳＹＳ１の構成）
図１に示すように、デバッグシステムＳＹＳ１は、マイクロコンピュータ１１と、デバッガ１２と、を備える。
【００１４】
マイクロコンピュータ１１は、ＣＰＵコア１１１と、ＪＳＲ命令実行監視部１１２と、を有する。ＣＰＵコア１１１は、メモリ（不図示）に格納されたプログラムのうち、プログラムカウンタによって指定されたアドレスの記憶領域に格納されたプログラム（命令列）を実行する。
【００１５】
ＪＳＲ命令実行監視部１１２は、関数呼び出し命令（以下、単にＪＳＲ命令と称す）の実行を監視する部である。
【００１６】
具体的には、ＪＳＲ命令実行監視部１１２は、ＪＳＲ命令判定部１１２１と、飛び先アドレス取得部１１２２と、飛び先アドレス送信部１１２３と、を有する。これらの構成要素の詳細については後述する。
【００１７】
デバッガ１２は、リスト格納部１２１と、比較部１２２と、ブレーク判定部１２３と、を有する。リスト格納部１２１には、複数の関数の先頭アドレスのリストが格納されている。これらの構成要素の詳細については後述する。
【００１８】
（デバッグシステムＳＹＳ１の動作）
続いて、図１及び図２を用いて、デバッグシステムＳＹＳ１の動作を説明する。
図２は、デバッグシステムＳＹＳ１の動作を示すフローチャートである。
【００１９】
マイクロコンピュータ１１において、ＣＰＵコア１１１は、プログラムカウンタによって指定されたアドレスのプログラム（命令列）を実行する（ステップＳ１０１）。デバッグ機能が有効である場合（ステップＳ１０２のＹＥＳ）、ＪＳＲ命令判定部１１２１は、実行対象の命令がＪＳＲ命令（関数呼び出し命令）であるか否かを判定する（ステップＳ１０３）。
【００２０】
なお、デバッグ機能が有効でない場合（ステップＳ１０２のＮＯ）、マイクロコンピュータ１１は、次の命令が発行されるまで待機する（ステップＳ１１１）。次の命令が発行された場合（ステップＳ１１１のＹＥＳ）、当該次の命令の実行に処理が移る（ステップＳ１０１）。次の命令が発行されない場合（ステップＳ１１１のＮＯ）、デバッグシステムＳＹＳ１の動作は終了する。
【００２１】
ＪＳＲ命令判定部１１２１によって実行対象の命令がＪＳＲ命令であると判定された場合（ステップＳ１０３のＹＥＳ）、飛び先アドレス取得部１１２２は、ＪＳＲ命令の飛び先アドレスを取得する（ステップＳ１０４）。飛び先アドレス送信部１１２３は、飛び先アドレス取得部１１２２によって取得された飛び先アドレスをデバッガ１２に送信する（ステップＳ１０５）。このとき、飛び先アドレス送信部１１２３は、飛び先アドレスとともに、当該飛び先アドレスが関数の先頭アドレスであるか否かの判断の対象であることを示すフラグ（例えば値１を示すフラグ）を、デバッガ１２に送信する。
【００２２】
なお、ＪＳＲ命令判定部１１２１によって実行対象の命令がＪＳＲ命令でないと判定された場合（ステップＳ１０３のＮＯ）、マイクロコンピュータ１１は、次の命令が発行されるまで待機する（ステップＳ１１１）。次の命令が発行された場合（ステップＳ１１１のＹＥＳ）、当該次の命令の実行に処理が移る（ステップＳ１０１）。次の命令が発行されない場合（ステップＳ１１１のＮＯ）、デバッグシステムＳＹＳ１の動作は終了する。
【００２３】
デバッガ１２において、リスト格納部１２１には、例えばコンパイラから出力されたデバッグ情報等に基づいて作成された複数の関数の先頭アドレスのリスト、が格納されている（ステップＳ１０６）。比較部１２２は、値１のフラグを受け取ると（ステップＳ１０７のＹＥＳ）、マイクロコンピュータ１１から受け取った飛び先アドレスと、リストアップされた複数の関数の先頭アドレスのそれぞれと、を比較する（ステップＳ１０８）。
【００２４】
例えば、飛び先アドレスが複数の関数の先頭アドレスの何れかと一致する場合（ステップＳ１０９のＹＥＳ）、ブレーク判定部１２３は、飛び先アドレスが正常なアドレスと判断し、マイクロコンピュータ１１に対してプログラムの実行を停止させるための命令信号の送信（ブレーク通知）を行わない。
【００２５】
それに対し、飛び先アドレスが複数の関数の先頭アドレスの何れとも一致しない場合（ステップＳ１０９のＮＯ）、ブレーク判定部１２３は、飛び先アドレスが不正アドレスと判断し、マイクロコンピュータ１１に対してプログラムの実行を停止させるための命令信号を送信する（ブレーク通知を行う）。
【００２６】
具体的には、例えばポインタ変数に関数の先頭アドレス以外の値（例えばＮＵＬＬ）が誤設定された場合、飛び先アドレスが複数の関数の先頭アドレスの何れとも一致しなくなるため、ブレーク判定部１２３は、マイクロコンピュータ１１に対してプログラムの実行を停止させるための命令信号を送信する（ブレーク通知を行う）。
【００２７】
なお、比較部１２２は、マイクロコンピュータ１１から飛び先アドレスを受け取ったとしても、値１のフラグを受け取っていない場合には（ステップＳ１０７のＮＯ）、比較動作を行わない。
【００２８】
マイクロコンピュータ１１（例えばＣＰＵコア１１１）は、デバッガ１２からブレーク通知を受け取った場合（ステップＳ１１０のＹＥＳ）、プログラムの実行を停止させる（ステップＳ１１２）。それにより、デバッグシステムＳＹＳ１は、マイクロコンピュータ１１の暴走によってトレースバッファがオーバーフローする前に、プログラムの実行を停止させることができるため、トレースバッファのトレース情報から速やかにプログラムのバグを特定することができる。
【００２９】
なお、デバッガ１２からブレーク通知を受け取っていない場合（ステップＳ１１０のＮＯ）、マイクロコンピュータ１１は、次の命令が発行されるまで待機する（ステップＳ１１１）。次の命令が発行された場合（ステップＳ１１１のＹＥＳ）、当該次の命令の実行に処理が移る（ステップＳ１０１）。次の命令が発行されない場合（ステップＳ１１１のＮＯ）、デバッグシステムＳＹＳ１の動作は終了する。
【００３０】
このように、本実施の形態にかかるデバッグシステムＳＹＳ１は、実行対象の命令が関数呼び出し命令である場合、当該関数呼び出し命令の飛び先アドレスが関数の先頭アドレスであるか否かを判定し、その判定結果に基づいてプログラムの実行を停止させるか否かを制御する。それにより、本実施の形態にかかるデバッグシステムＳＹＳ１は、例えばポインタ変数の誤設定によって関数呼び出し命令の飛び先アドレスが関数の先頭アドレスでない場合でも、トレース情報を記憶するトレースバッファがオーバーフローする前に、プログラムの実行を停止させることができるため、当該トレース情報から速やかにプログラムのバグを特定することができる。
【００３１】
＜実施の形態２＞
図３は、実施の形態２にかかるデバッグシステムＳＹＳ２の構成例を示すブロック図である。本実施の形態にかかるデバッグシステムＳＹＳ２は、実行対象の命令が関数呼び出し命令である場合にスタック領域に格納される戻りアドレスと、その後の実行対象の命令が関数からの復帰命令である場合にスタック領域から読み出された戻りアドレスと、を比較し、その比較結果に基づいてプログラムの実行を停止させるか否かを制御する。それにより、本実施の形態にかかるデバッグシステムＳＹＳ２は、スタック領域に格納された戻りアドレスが破壊された場合でも、トレース情報を記憶するトレースバッファがオーバーフローする前にプログラムの実行を停止させることができるため、当該トレース情報から速やかにプログラムのバグを特定することができる。以下、具体的に説明する。
【００３２】
（デバッグシステムＳＹＳ２の構成）
図３に示すように、デバッグシステムＳＹＳ２は、マイクロコンピュータ２１と、デバッガ２２と、を備える。マイクロコンピュータ２１及びデバッガ２２は、それぞれマイクロコンピュータ１１及びデバッガ１２に対応する。
【００３３】
マイクロコンピュータ２１は、ＣＰＵコア２１１と、ＪＳＲ命令実行監視部２１２と、ＲＳＲ命令実行監視部２１３と、を有する。ＣＰＵコア２１１については、ＣＰＵコア１１１と同様であるため、その説明を省略する。
【００３４】
ＪＳＲ命令実行監視部２１２は、関数呼び出し命令であるＪＳＲ命令の実行を監視する部である。ＲＳＲ命令実行監視部２１３は、関数からの復帰命令（以下、単にＲＳＲ命令と称す）の実行を監視する部である。
【００３５】
具体的には、ＪＳＲ命令実行監視部２１２は、ＪＳＲ命令判定部２１２１と、戻りアドレス取得部２１２２と、戻りアドレス送信部２１２３と、を有する。ＲＳＲ命令実行監視部２１３は、ＲＳＲ命令判定部２１３１と、戻りアドレス取得部２１３２と、戻りアドレス送信部２１３３と、を有する。これらの構成要素の詳細については後述する。
【００３６】
デバッガ２２は、戻りアドレス格納部２２１と、比較部２２２と、ブレーク判定部２２３と、を有する。これらの構成要素の詳細については後述する。
【００３７】
（デバッグシステムＳＹＳ２の動作）
続いて、図３及び図４を用いて、デバッグシステムＳＹＳ２の動作を説明する。
図４は、デバッグシステムＳＹＳ２の動作を示すフローチャートである。
【００３８】
マイクロコンピュータ２１において、ＣＰＵコア２１１は、プログラムカウンタによって指定されたアドレスのプログラム（命令列）を実行する（ステップＳ２０１）。デバッグ機能が有効である場合（ステップＳ２０２のＹＥＳ）、まず、ＪＳＲ命令判定部２１２１は、実行対象の命令がＪＳＲ命令（関数呼び出し命令）であるか否かを判定する（ステップＳ２０３）。
【００３９】
なお、デバッグ機能が有効でない場合（ステップＳ２０２のＮＯ）、マイクロコンピュータ２１は、次の命令が発行されるまで待機する（ステップＳ２１５）。次の命令が発行された場合（ステップＳ２１５のＹＥＳ）、当該次の命令の実行に処理が移る（ステップＳ２０１）。次の命令が発行されない場合（ステップＳ２１５のＮＯ）、デバッグシステムＳＹＳ２の動作は終了する。
【００４０】
ＪＳＲ命令判定部２１２１によって実行対象の命令がＪＳＲ命令であると判定された場合（ステップＳ２０３のＹＥＳ）、戻りアドレス取得部２１２２は、ＪＳＲ命令実行時にスタック領域に格納される戻りアドレスを取得する（ステップＳ２０４）。ここで、戻りアドレスとは、サブルーチンプログラムからメインルーチンプログラムに復帰する場合における戻り先のアドレスのことである。
【００４１】
戻りアドレス送信部２１２３は、戻りアドレス取得部２１２２によって取得された戻りアドレスを第１戻りアドレスとしてデバッガ２２に送信する（ステップＳ２０５）。このとき、戻りアドレス送信部２１２３は、第１戻りアドレスとともに、当該第１戻りアドレスが後述する第２戻りアドレスとの比較の対象であることを示す第１フラグ（例えば値１を示すフラグ）を、デバッガ２２に送信する。その後、マイクロコンピュータ２１は、次の命令が発行されるまで待機する（ステップＳ２１５）。
【００４２】
なお、ＪＳＲ命令判定部２１２１によって実行対象の命令がＪＳＲ命令でないと判定された場合（ステップＳ２０３のＮＯ）、かつ、ＲＳＲ命令判定部２１３１によって実行対象の命令がＲＳＲ命令でないと判定された場合（ステップＳ２０８のＮＯ）、マイクロコンピュータ２１は、次の命令が発行されるまで待機する（ステップＳ２１５）。次の命令が発行された場合（ステップＳ２１５のＹＥＳ）、当該次の命令の実行に処理が移る（ステップＳ２０１）。次の命令が発行されない場合（ステップＳ２１５のＮＯ）、デバッグシステムＳＹＳ２の動作は終了する。
【００４３】
デバッガ２２において、戻りアドレス格納部２２１は、値１の第１フラグを受け取ると（ステップＳ２０６のＹＥＳ）、マイクロコンピュータ２１から受け取った第１戻りアドレスを記憶領域に格納する（ステップＳ２０７）。なお、戻りアドレス格納部２２１は、例えば、ＬＩＦＯ（Ｌａｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）方式の格納部である。
【００４４】
なお、戻りアドレス格納部２２１は、マイクロコンピュータ２１から第１戻りアドレスを受け取ったとしても、値１の第１フラグを受け取っていない場合には（ステップＳ２０６のＮＯ）、第１戻りアドレスを記憶領域に格納しない。
【００４５】
その後、マイクロコンピュータ２１において、別の実行対象の命令がＲＳＲ命令判定部２１３１によってＲＳＲ命令（関数からの復帰命令）であると判定された場合（ステップＳ２１５のＹＥＳ→Ｓ２０１→Ｓ２０２のＹＥＳ→Ｓ２０３のＮＯ→Ｓ２０８のＹＥＳ）、戻りアドレス取得部２１３２は、ＲＳＲ命令実行時にスタック領域から読み出される戻りアドレスを第２戻りアドレスとして取得する（ステップＳ２０９）。
【００４６】
戻りアドレス送信部２１３３は、戻りアドレス取得部２１３２によって取得された戻りアドレスを第２戻りアドレスとしてデバッガ２２に送信する（ステップＳ２１０）。このとき、戻りアドレス送信部２１３３は、第２戻りアドレスとともに、当該第２戻りアドレスが第１戻りアドレスとの比較の対象であることを示す第２フラグ（例えば値１を示すフラグ）を、デバッガ２２に送信する。
【００４７】
なお、ＪＳＲ命令判定部２１２１によって実行対象の命令がＪＳＲ命令でないと判定された場合（ステップＳ２０３のＮＯ）、かつ、ＲＳＲ命令判定部２１３１によって実行対象の命令がＲＳＲ命令でないと判定された場合（ステップＳ２０８のＮＯ）、マイクロコンピュータ２１は、次の命令が発行されるまで待機する（ステップＳ２１５）。次の命令が発行された場合（ステップＳ２１５のＹＥＳ）、当該次の命令の実行に処理が移る（ステップＳ２０１）。次の命令が発行されない場合（ステップＳ２１５のＮＯ）、デバッグシステムＳＹＳ２の動作は終了する。
【００４８】
デバッガ２２において、比較部２２２は、値１の第２フラグを受け取ると（ステップＳ２１１のＹＥＳ）、戻りアドレス格納部２２１に格納されている第１戻りアドレスと、マイクロコンピュータ２１から受け取った第２戻りアドレスと、を比較する（ステップＳ２１２）。
【００４９】
例えば、第１戻りアドレスと第２戻りアドレスとが一致する場合（ステップＳ２１３のＹＥＳ）、ブレーク判定部２２３は、スタック領域に格納されていた戻りアドレスが正常なアドレスと判断し、マイクロコンピュータ２１に対してプログラムの実行を停止させるための命令信号を送信しない。
【００５０】
それに対し、第１戻りアドレスと第２戻りアドレスとが一致しない場合（ステップＳ２１３のＮＯ）、ブレーク判定部２２３は、スタック領域に格納されている戻りアドレスが不正アドレスと判断し、マイクロコンピュータ２１に対してプログラムの実行を停止させるための命令信号を送信する（ブレーク通知を行う）。
【００５１】
なお、比較部２２２は、マイクロコンピュータ２１から第２戻りアドレスを受け取ったとしても、値１の第２フラグを受け取っていない場合には（ステップＳ２１１のＮＯ）、比較動作を行わない。
【００５２】
マイクロコンピュータ２１（例えばＣＰＵコア２１１）は、デバッガ２２からブレーク通知を受け取った場合（ステップＳ２１４のＹＥＳ）、プログラムの実行を停止させる（ステップＳ２１６）。それにより、デバッグシステムＳＹＳ２は、マイクロコンピュータ２１の暴走によってトレースバッファがオーバーフローする前にプログラムの実行を停止させることができるため、トレースバッファのトレース情報から速やかにプログラムのバグを特定することができる。
【００５３】
なお、デバッガ２２からブレーク通知を受け取っていない場合（ステップＳ２１４のＮＯ）、マイクロコンピュータ２１は、次の命令が発行されるまで待機する（ステップＳ２１５）。次の命令が発行された場合（ステップＳ２１５のＹＥＳ）、当該次の命令の実行に処理が移る（ステップＳ２０１）。次の命令が発行されない場合（ステップＳ２１５のＮＯ）、デバッグシステムＳＹＳ２の動作は終了する。
【００５４】
このように、本実施の形態にかかるデバッグシステムＳＹＳ２は、実行対象の命令が関数呼び出し命令である場合にスタック領域に格納される戻りアドレスと、その後の実行対象の命令が関数からの復帰命令である場合にスタック領域から読み出された戻りアドレスと、を比較し、その比較結果に基づいてプログラムの実行を停止させるか否かを制御する。それにより、本実施の形態にかかるデバッグシステムＳＹＳ２は、スタック領域に格納された戻りアドレスが破壊された場合でも、トレース情報を記憶するトレースバッファがオーバーフローする前にプログラムの実行を停止させることができるため、当該トレース情報から速やかにプログラムのバグを特定することができる。
【００５５】
なお、デバッグシステムＳＹＳ１，ＳＹＳ２のそれぞれのデバッグ機能は組み合わせて用いられてもよい。
【００５６】
＜実施の形態３＞
図５は、実施の形態３にかかるデバッグシステムＳＹＳ３の構成例を示すブロック図である。本実施の形態にかかるデバッグシステムＳＹＳ３では、マイクロコンピュータ３１が、マイクロコンピュータ１１のみならず、デバッガ１２のリスト格納部１２１、比較部１２２及びブレーク判定部１２３の機能も備える。以下、具体的に説明する。
【００５７】
（デバッグシステムＳＹＳ３の構成）
図５に示すように、デバッグシステムＳＹＳ３は、マイクロコンピュータ３１と、デバッガ３２と、を備える。マイクロコンピュータ３１及びデバッガ３２は、それぞれマイクロコンピュータ１１及びデバッガ１２に対応する。
【００５８】
マイクロコンピュータ３１は、ＣＰＵコア３１１と、ＪＳＲ命令実行監視部３１２と、リスト格納部３１３と、を有する。ＪＳＲ命令実行監視部３１２は、ＪＳＲ命令実行監視部１１２に対応するものであって、ＪＳＲ命令判定部３１２１と、飛び先アドレス取得部３１２２と、比較部３１２３と、ブレーク判定部３１２４と、を有する。
【００５９】
ＣＰＵコア３１１については、ＣＰＵ１１１と同様であるため、その説明を省略する。また、ＪＳＲ命令判定部３１２１、飛び先アドレス取得部３１２２、比較部３１２３、ブレーク判定部３１２４及びリスト格納部３１３は、それぞれＪＳＲ命令判定部１１２１、飛び先アドレス取得部１１２２、飛び先アドレス取得部１１２２、比較部１２２、ブレーク判定部１２３及びリスト格納部１２１と同様であるため、その説明を省略する。
【００６０】
（デバッグシステムＳＹＳ３の動作）
続いて、図５及び図６を用いて、デバッグシステムＳＹＳ３の動作を説明する。
図６は、デバッグシステムＳＹＳ３の動作を示すフローチャートである。
【００６１】
まず、デバッグ機能が有効である場合（ステップＳ３０１のＹＥＳ）、マイクロコンピュータ３１のリスト格納部３１３には、例えばコンパイラから出力されたデバッグ情報等に基づいて作成された複数の関数の先頭アドレスのリスト、が格納される（ステップＳ３０２）。
【００６２】
その後、ＣＰＵコア３１１は、プログラムカウンタによって指定されたアドレスのプログラム（命令列）を実行する（ステップＳ３０３）。デバッグ機能が有効である場合（ステップＳ３０４のＹＥＳ）、ＪＳＲ命令判定部３１２１は、実行対象の命令がＪＳＲ命令（関数呼び出し命令）であるか否かを判定する（ステップＳ３０５）。
【００６３】
なお、デバッグ機能が有効でない場合（ステップＳ３０４のＮＯ）、マイクロコンピュータ３１は、次の命令が発行されるまで待機する（ステップＳ３０９）。次の命令が発行された場合（ステップＳ３０９のＹＥＳ）、当該次の命令の実行に処理が移る（ステップＳ３０３）。次の命令が発行されない場合（ステップＳ３０９のＮＯ）、デバッグシステムＳＹＳ３の動作は終了する。
【００６４】
ＪＳＲ命令判定部３１２１によって実行対象の命令がＪＳＲ命令であると判定された場合（ステップＳ３０５のＹＥＳ）、飛び先アドレス取得部３１２２は、ＪＳＲ命令の飛び先アドレスを取得する（ステップＳ３０６）。
【００６５】
なお、ＪＳＲ命令判定部３１２１によって実行対象の命令がＪＳＲ命令でないと判定された場合（ステップＳ３０５のＮＯ）、マイクロコンピュータ３１は、次の命令が発行されるまで待機する（ステップＳ３０９）。次の命令が発行された場合（ステップＳ３０９のＹＥＳ）、当該次の命令の実行に処理が移る（ステップＳ３０３）。次の命令が発行されない場合（ステップＳ３０９のＮＯ）、デバッグシステムＳＹＳ３の動作は終了する。
【００６６】
比較部３１２３は、飛び先アドレス取得部３１２２によって取得された飛び先アドレスと、リスト格納部３１３に格納された複数の関数の先頭アドレスのそれぞれと、を比較する（ステップＳ３０７）。
【００６７】
例えば、飛び先アドレスが複数の関数の先頭アドレスの何れかと一致する場合（ステップＳ３０８のＹＥＳ）、ブレーク判定部３１２４は、飛び先アドレスが正常なアドレスと判断し、マイクロコンピュータ３１によるプログラムの実行を停止させるための命令信号の出力を行わない。この場合、マイクロコンピュータ３１は、次の命令が発行されるまで待機する（ステップＳ３０９）。次の命令が発行された場合（ステップＳ３０９のＹＥＳ）、当該次の命令の実行に処理が移る（ステップＳ３０３）。次の命令が発行されない場合（ステップＳ３０９のＮＯ）、デバッグシステムＳＹＳ３の動作は終了する。
【００６８】
それに対し、飛び先アドレスが複数の関数の先頭アドレスの何れとも一致しない場合（ステップＳ３０８のＮＯ）、ブレーク判定部３１２４は、飛び先アドレスが不正アドレスと判断し、マイクロコンピュータ３１によるプログラムの実行を停止させるための命令信号を出力する。
【００６９】
具体的には、例えばポインタ変数に関数の先頭アドレス以外の値（例えばＮＵＬＬ）が誤設定された場合、飛び先アドレスが複数の関数の先頭アドレスの何れとも一致しなくなるため、ブレーク判定部３１２４は、マイクロコンピュータ３１によるプログラムの実行を停止させるための命令信号を出力する（ブレーク通知を行う）。このブレーク通知はデバッガ３２にも転送される。
【００７０】
マイクロコンピュータ３１（例えばＣＰＵコア３１１）は、ブレーク通知を受けて、プログラムの実行を停止させる（ステップＳ３１０）。それにより、デバッグシステムＳＹＳ３は、マイクロコンピュータ３１の暴走によってトレースバッファがオーバーフローする前に、プログラムの実行を停止させることができるため、トレースバッファのトレース情報から速やかにプログラムのバグを特定することができる。
【００７１】
このように、本実施の形態にかかるデバッグシステムＳＹＳ３は、デバッグシステムＳＹＳ１と同等程度の効果を奏することができる。さらに、デバッグシステムＳＹＳ３は、デバッガ３２として汎用的なデバッガを用いることができる。
【００７２】
＜実施の形態４＞
図７は、実施の形態４にかかるデバッグシステムＳＹＳ４の構成例を示すブロック図である。本実施の形態にかかるデバッグシステムＳＹＳ４では、マイクロコンピュータ４１が、マイクロコンピュータ２１のみならず、デバッガ２２の戻りアドレス格納部２２１、比較部２２２及びブレーク判定部２２３の機能も備える。以下、具体的に説明する。
【００７３】
（デバッグシステムＳＹＳ４の構成）
図７に示すように、デバッグシステムＳＹＳ４は、マイクロコンピュータ４１と、デバッガ４２と、を備える。マイクロコンピュータ４１及びデバッガ４２は、それぞれマイクロコンピュータ２１及びデバッガ２２に対応する。
【００７４】
マイクロコンピュータ４１は、ＣＰＵコア４１１と、ＪＳＲ命令実行監視部４１２と、ＲＳＲ命令実行監視部４１３と、戻りアドレス格納部４１４と、を有する。ＪＳＲ命令実行監視部４１２は、ＪＳＲ命令実行監視部２１２に対応するものであって、ＪＳＲ命令判定部４１２１と、戻りアドレス取得部４１２２と、を有する。ＲＳＲ命令実行監視部４１３は、ＲＳＲ命令実行監視部２１３に対応するものであって、ＲＳＲ命令判定部４１３１と、戻りアドレス取得部４１３２と、比較部４１３３と、ブレーク判定部４１３４と、を有する。
【００７５】
ＣＰＵコア４１１については、ＣＰＵ２１１と同様であるため、その説明を省略する。また、ＪＳＲ命令判定部４１２１、戻りアドレス取得部４１２２、戻りアドレス格納部４１４、ＲＳＲ命令判定部４１３１、戻りアドレス取得部４１３２、比較部４１３３、及び、ブレーク判定部４１３４は、それぞれＪＳＲ命令判定部２１２１、戻りアドレス取得部２１２２、戻りアドレス格納部２２１、ＲＳＲ命令判定部２１３１、戻りアドレス取得部２１３２、比較部２２２、及び、ブレーク判定部２２３と同様であるため、その説明を省略する。
【００７６】
（デバッグシステムＳＹＳ４の動作）
続いて、図７及び図８を用いて、デバッグシステムＳＹＳ４の動作を説明する。
図８は、デバッグシステムＳＹＳ４の動作を示すフローチャートである。
【００７７】
マイクロコンピュータ４１において、ＣＰＵコア４１１は、プログラムカウンタによって指定されたアドレスのプログラム（命令列）を実行する（ステップＳ２０１）。デバッグ機能が有効である場合（ステップＳ４０２のＹＥＳ）、まず、ＪＳＲ命令判定部２１２１は、実行対象の命令がＪＳＲ命令（関数呼び出し命令）であるか否かを判定する（ステップＳ４０３）。
【００７８】
なお、デバッグ機能が有効でない場合（ステップＳ４０２のＮＯ）、マイクロコンピュータ４１は、次の命令が発行されるまで待機する（ステップＳ４１０）。次の命令が発行された場合（ステップＳ４１０のＹＥＳ）、当該次の命令の実行に処理が移る（ステップＳ４０１）。次の命令が発行されない場合（ステップＳ４１０のＮＯ）、デバッグシステムＳＹＳ４の動作は終了する。
【００７９】
ＪＳＲ命令判定部４１２１によって実行対象の命令がＪＳＲ命令であると判定された場合（ステップＳ４０３のＹＥＳ）、戻りアドレス取得部４１２２は、ＪＳＲ命令実行時にスタック領域に格納される戻りアドレスを第１戻りアドレスとして取得する（ステップＳ４０４）。この第１戻りアドレスは、戻りアドレス格納部４１４に格納される（Ｓ４０５）。なお、戻りアドレス格納部４１４は、例えば、ＬＩＦＯ方式の格納部である。その後、マイクロコンピュータ４１は、次の命令が発行されるまで待機する（ステップＳ４１０）。
【００８０】
その後、別の実行対象の命令がＲＳＲ命令判定部４１３１によってＲＳＲ命令（関数からの復帰命令）であると判定された場合（ステップＳ４１０のＹＥＳ→Ｓ４０１→Ｓ４０２のＹＥＳ→Ｓ４０３のＮＯ→Ｓ４０６のＹＥＳ）、戻りアドレス取得部４１３２は、ＲＳＲ命令実行時にスタック領域から読み出される戻りアドレスを第２戻りアドレスとして取得する（ステップＳ４０７）。
【００８１】
なお、ＪＳＲ命令判定部４１２１によって実行対象の命令がＪＳＲ命令でないと判定された場合（ステップＳ４０３のＮＯ）、かつ、ＲＳＲ命令判定部４１３１によって実行対象の命令がＲＳＲ命令でないと判定された場合（ステップＳ４０６のＮＯ）、マイクロコンピュータ４１は、次の命令が発行されるまで待機する（ステップＳ４１０）。次の命令が発行された場合（ステップＳ４１０のＹＥＳ）、当該次の命令の実行に処理が移る（ステップＳ４０１）。次の命令が発行されない場合（ステップＳ４１０のＮＯ）、デバッグシステムＳＹＳ４の動作は終了する。
【００８２】
比較部４１３３は、戻りアドレス格納部４１４に格納されている第１戻りアドレスと、戻りアドレス取得部４１３２によって取得された第２戻りアドレスと、を比較する（ステップＳ４０８）。
【００８３】
例えば、第１戻りアドレスと第２戻りアドレスとが一致する場合（ステップＳ４０９のＹＥＳ）、ブレーク判定部４１３４は、スタック領域に格納されていた戻りアドレスが正常なアドレスと判断し、マイクロコンピュータ４１によるプログラムの実行を停止させるための命令信号を出力しない。
【００８４】
それに対し、第１戻りアドレスと第２戻りアドレスとが一致しない場合（ステップＳ４０９のＮＯ）、ブレーク判定部４１３４は、スタック領域に格納されている戻りアドレスが不正アドレスと判断し、マイクロコンピュータ４１によるプログラムの実行を停止させるための命令信号を出力する（ブレーク通知を行う）。
【００８５】
マイクロコンピュータ４１（例えばＣＰＵコア４１１）は、ブレーク通知を受けて、プログラムの実行を停止させる（ステップＳ４１１）。それにより、デバッグシステムＳＹＳ４は、マイクロコンピュータ４１の暴走によってトレースバッファがオーバーフローする前に、プログラムの実行を停止させることができるため、トレースバッファのトレース情報から速やかにプログラムのバグを特定することができる。
【００８６】
このように、本実施の形態にかかるデバッグシステムＳＹＳ４は、デバッグシステムＳＹＳ２と同等程度の効果を奏することができる。さらに、デバッグシステムＳＹＳ４は、デバッガ４２として汎用的なデバッガを用いることができる。
【００８７】
なお、デバッグシステムＳＹＳ３，ＳＹＳ４のそれぞれのデバッグ機能は組み合わせて用いられてもよい。
【００８８】
以上のように、上記実施の形態１〜４にかかるデバッグシステムＳＹＳ１〜ＳＹＳ４は、プログラムのバグ等によってマイクロコンピュータが暴走し始めた場合でも、トレース情報を記憶するトレースバッファがオーバーフローする前に、プログラムの実行を停止させることができるため、トレースバッファのトレース情報から速やかにプログラムのバグを特定することができる。
【００８９】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【００９０】
上記実施の形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
【００９１】
（付記１）
実行対象の命令が関数呼び出し命令であるか否かを判定する第１命令判定部と、
前記第１命令判定部によって前記実行対象の命令が関数呼び出し命令であると判定された場合、当該関数呼び出し命令の飛び先アドレスを取得する飛び先アドレス取得部と、
前記飛び先アドレス取得部によって取得された前記飛び先アドレスと、前記飛び先アドレスが関数の先頭アドレスであるか否かの判断の対象であることを示すフラグと、をデバッガに送信する飛び先アドレス送信部と、
を備えた、マイクロコンピュータ。
【００９２】
（付記２）
実行対象の命令が関数呼び出し命令であるか否かを判定する第１命令判定部と、
前記第１命令判定部によって前記実行対象の命令が関数呼び出し命令であると判定された場合、当該関数呼び出し命令の飛び先アドレスを取得する飛び先アドレス取得部と、
前記飛び先アドレス取得部によって取得された前記飛び先アドレスと、予め指定された複数の関数の先頭アドレスのそれぞれと、を比較する第１比較部と、
前記第１比較部による比較結果に基づいて、プログラムの実行を停止させるための命令信号を出力するか否かを制御するブレーク判定部と、
を備えた、マイクロコンピュータ。
【００９３】
（付記３）
前記ブレーク判定部は、前記飛び先アドレスが予め指定された前記複数の関数の先頭アドレスの何れとも一致しない場合、プログラムの実行を停止させるための前記命令信号を出力するように構成されている、
付記２に記載のマイクロコンピュータ。
【００９４】
（付記４）
実行対象の命令が関数呼び出し命令であるか否かを判定する第１命令判定部と、
前記第１命令判定部によって前記実行対象の命令が関数呼び出し命令であると判定された場合にスタック領域に格納される戻りアドレスを第１戻りアドレスとして取得する第１戻りアドレス取得部と、
前記第１戻りアドレス取得部によって取得された前記第１戻りアドレスと、前記第１戻りアドレスが第２戻りアドレスとの比較の対象であることを示す第１フラグと、をデバッガに送信する第１戻りアドレス送信部と、
実行対象の命令が関数からの復帰命令であるか否かを判定する第２命令判定部と、
前記第２命令判定部によって前記実行対象の命令が関数からの復帰命令であると判定された場合、前記スタック領域から読み出された前記戻りアドレスを前記第２戻りアドレスとして取得する第２戻りアドレス取得部と、
前記第２戻りアドレス取得部によって取得された前記第２戻りアドレスと、前記第２戻りアドレスが前記第１戻りアドレスとの比較の対象であることを示す第２フラグと、を前記デバッガに送信する第２戻りアドレス送信部と、
を備えた、マイクロコンピュータ。
【００９５】
（付記５）
実行対象の命令が関数呼び出し命令であるか否かを判定する第１命令判定部と、
前記第１命令判定部によって前記実行対象の命令が関数呼び出し命令であると判定された場合にスタック領域に格納される戻りアドレスを第１戻りアドレスとして取得する第１戻りアドレス取得部と、
前記第１戻りアドレスを格納する戻りアドレス格納部と、
実行対象の命令が関数からの復帰命令であるか否かを判定する第２命令判定部と、
前記第２命令判定部によって前記実行対象の命令が関数からの復帰命令であると判定された場合、前記スタック領域から読み出された前記戻りアドレスを第２戻りアドレスとして取得する第２戻りアドレス取得部と、
前記戻りアドレス格納部に格納された前記第１戻りアドレスと、前記第２戻りアドレス取得部によって取得された前記第２戻りアドレスと、を比較する比較部と、
前記比較部による比較結果に基づいて、プログラムの実行を停止させるための命令信号を出力するか否かを制御するブレーク判定部と、
を備えた、マイクロコンピュータ。
【００９６】
（付記６）
前記ブレーク判定部は、前記戻りアドレス格納部に格納された前記第１戻りアドレスと、前記第２戻りアドレス取得部によって取得された前記第２戻りアドレスと、が一致しない場合、プログラムの実行を停止させるための前記命令信号を出力するように構成されている、
付記５に記載のマイクロコンピュータ。
【００９７】
（付記７）
実行対象の命令が関数呼び出し命令であるか否かを判定する第１判定処理と、
前記第１判定処理によって前記実行対象の命令が関数呼び出し命令であると判定された場合にスタック領域に格納される戻りアドレスを第１戻りアドレスとして取得する第１取得処理と、
前記第１取得処理によって取得された前記第１戻りアドレスを戻りアドレス格納部に格納する処理と、
実行対象の命令が関数からの復帰命令であるか否かを判定する第２判定処理と、
前記第２判定処理によって前記実行対象の命令が関数からの復帰命令であると判定された場合、前記スタック領域から読み出された前記戻りアドレスを第２戻りアドレスとして取得する第２取得処理と、
前記戻りアドレス格納部に格納された前記第１戻りアドレスと、前記第２取得処理によって取得された前記第２戻りアドレスと、を比較する比較処理と、
前記比較処理による比較結果に基づいて、プログラムの実行を停止させるための命令信号を出力するか否かを制御するブレーク判定処理と、
をコンピュータに実行させるデバックプログラム。
【００９８】
（付記８）
前記ブレーク判定処理では、前記戻りアドレス格納部に格納された前記第１戻りアドレスと、前記第２取得処理によって取得された前記第２戻りアドレスと、が一致しない場合、プログラムの実行を停止させるための前記命令信号を出力する、
付記７に記載のデバッグプログラム。
【００９９】
（付記９）
前記戻りアドレス格納部は、ＬＩＦＯ方式の格納部である、
付記７に記載のデバッグプログラム。
【符号の説明】
【０１００】
ＳＹＳ１〜ＳＹＳ４  デバッグシステム
１１，２１，３１，４１  マイクロコンピュータ（マイコン）
１２，２２，３２，４２  デバッガ
１００  コンピュータ
１０１  ＣＰＵ
１０２  ＲＡＭ
１０３  ＲＯＭ
１０４  ＩＦ
１０５  ＨＤＤ
１０６  デバッグプログラム
１１１  ＣＰＵコア
１１２  ＪＳＲ命令実行監視部
１２１  リスト格納部
１２２  比較部
１２３  ブレーク判定部
２１１  ＣＰＵコア
２１２  ＪＳＲ命令実行監視部
２１３  ＲＳＲ命令実行監視部
２２１  戻りアドレス格納部
２２２  比較部
２２３  ブレーク判定部
３１１  ＣＰＵコア
３１２  ＪＳＲ命令実行監視部
３１３  リスト格納部
４１２  ＪＳＲ命令実行監視部
４１３  ＲＳＲ命令実行監視部
４１４  戻りアドレス格納部
１１２１  ＪＳＲ命令判定部
１１２２  飛び先アドレス取得部
１１２３  飛び先アドレス送信部
２１２１  ＪＳＲ命令判定部
２１２２  戻りアドレス取得部
２１２３  戻りアドレス送信部
２１３１  ＲＳＲ命令判定部
２１３２  戻りアドレス取得部
２１３３  戻りアドレス送信部
３１２１  ＪＳＲ命令判定部
３１２２  飛び先アドレス取得部
３１２３  比較部
３１２４  ブレーク判定部
４１２１  ＪＳＲ命令判定部
４１２２  戻りアドレス取得部
４１３１  ＲＳＲ命令判定部
４１３２  戻りアドレス取得部
４１３３  比較部
４１３４  ブレーク判定部
【図１】
2019204196.tif 000003
【図２】
2019204196.tif 000004
【図３】
2019204196.tif 000005
【図４】
2019204196.tif 000006
【図５】
2019204196.tif 000007
【図６】
2019204196.tif 000008
【図７】
2019204196.tif 000009
【図８】
2019204196.tif 000010