(57)【要約】【課題】実行プログラムの実行速度の低下や実行プログラムのメモリ容量の増大を抑制して、メモリ破壊を検出することができる方法およびその方法を使用するメモリ破壊検出装置を提供する。【解決手段】本発明のメモリ破壊検出方法は、メモリへのアクセスを伴って、プログラムを実行するプログラム実行工程と、プログラム実行工程においてメモリ中のいずれの領域がアクセスされたかを示すメモリアクセスログ情報を取得する、メモリアクセスログ情報取得工程と、メモリの中でアクセスが許容される、アクセス許容メモリ領域を算出する、アクセス許容メモリ領域算出工程と、プログラム実行工程の後に、メモリアクセスログ情報に基づいて、プログラム実行工程においてアクセスされたメモリの領域がアクセス許容メモリ領域内であるか否かを判定する、判定工程と、を備える。【選択図】図１
2007199845.tif 000002
【特許請求の範囲】
【請求項１】
メモリへのアクセスを伴って、プログラムを実行するプログラム実行工程と、
前記プログラム実行工程において前記メモリ中のいずれの領域がアクセスされたかを示すメモリアクセスログ情報を取得する、メモリアクセスログ情報取得工程と、
前記メモリの中でアクセスが許容される、アクセス許容メモリ領域を算出する、アクセス許容メモリ領域算出工程と、
前記プログラム実行工程の後に、前記メモリアクセスログ情報に基づいて、前記プログラム実行工程においてアクセスされた前記メモリの領域が前記アクセス許容メモリ領域内であるか否かを判定する、判定工程と、を備える、メモリ破壊検出方法。
【請求項２】
前記プログラムの実行経過を示すトレース情報情報を取得するトレース情報取得工程を更に備え、
前記アクセス許容メモリ領域算出工程は、前記トレース情報を用いて前記アクセス許容メモリ領域を算出する工程を含む、請求項１に記載のメモリ破壊検出方法。
【請求項３】
前記メモリアクセスログ情報および前記トレース情報は、それぞれ、時刻情報を含み、
前記アクセス許容メモリ領域算出工程は、前記メモリアクセスログ情報に含まれる前記時刻情報と、前記トレース情報に含まれる前記時刻情報とを関連付けて、前記メモリアクセスログ情報と前記トレース情報とを同期させる工程を含む、請求項１または２に記載のメモリ破壊検出方法。
【請求項４】
第1の装置を用いて前記プログラム実行工程および前記メモリアクセスログ情報取得工程が行われ、かつ、第２の装置を用いて前記判定工程が行われ、
前記判定工程で用いる前記メモリアクセスログ情報は、前記第１の装置から前記第２の装置に転送されたものである、請求項１から３のいずれかに記載のメモリ破壊検出方法。
【請求項５】
前記プログラム実行工程は、前記プログラムの実行中に発生したエラーの検出を行うエラー検出工程を含む、請求項１から４のいずれかに記載のメモリ破壊検出方法。
【請求項６】
請求項１から５のいずれかに記載のメモリ破壊検出方法を使用する、メモリ破壊検出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ破壊検出方法およびその方法を使用する装置に関し、特に、許容領域外のメモリ領域がアクセスされてメモリ上に格納されたデータが破壊するのを検出する方法およびその方法を使用する装置に関する。
【背景技術】
【０００２】
ソフトウェア開発において、プログラム中の配列や文字列に不正な添え字を代入してしまい、コーディングミスや論理設計ミスを起こすと、アクセス許容領域外のメモリ領域がアクセスされてしまう場合がある。メモリの許容領域外アクセスは、メモリ破壊を引き起こし、プログラム実行時に重大なエラーを発生させてしまう。また、動的に確保したメモリ領域（例えば、プログラミング言語Cにおいてmalloc関数等で確保した領域）が不正なポインタ変数で参照された場合にも、アクセス許容領域外のメモリ領域がアクセスされてしまう場合がある。この場合も上記と同様にプログラム実行時に重大なエラーを発生させてしまう。
【０００３】
FORTRAN等のプログラム言語では、メモリのアクセス許容領域外のアクセスを検出するための特別なプログラムがオプションとして用意されており、上記検出プログラムはコンパイル時に指定されると実行プログラムに組み込まれる。上記検出プログラムは、実行プログラムにおける配列の上限値および下限値を参照しながら、メモリのアクセス許容領域外のアクセスを検出する。具体的には、コンパイラは、プログラムユニットに含まれる配列について、配列の上限値および下限値を記載したテーブルを別途用意する。さらに、このテーブルを参照して、プログラム中でアクセスされる配列の要素がテーブルに記載された配列の上限値および下限値を超えていないかを、逐次チェックする。アクセスされた配列の要素がテーブルに記載された配列の上限値または下限値を超えていると検出された場合、すなわち、アクセス許容領域外のメモリ領域へのアクセスが検出された場合には、ユーザーに警告を出すようになっている（例えば、特許文献１参照）。
【０００４】
図６は、従来のメモリ破壊を検出する方法の基本的な処理の手順を示すフローを示す図である。まず、ステップS０では、プログラムコンパイル時における処理を行う。具体的には、後述のステップＳ４’およびステップＳ５’のステップを実行するためのコードを、プログラムに付加し、実行プログラムを生成する。
【０００５】
次に、ステップＳ１では、デバッグ対象である、Ｓ１で生成されたプログラムの実行を開始する。プログラム実行中、ステップS４’では、アクセスが許容されるメモリ領域の範囲を算出する。具体的には、例えば、メモリにおけるアクセス可能な配列の範囲、メモリにおけるアクセス可能な文字列の範囲、または、動的に確保されたメモリ領域の範囲を算出する。
【０００６】
次に、ステップS5’で、実行プログラムにおいてアクセスされた配列、文字列または、ポインタによるメモリアクセスが範囲外であるか否かを判定し、領域外アクセスが発生した場合には、エラーを警告する。ステップＳ３でプログラムの実行を終了する。
【０００７】
プログラミング言語CあるいはＣ++では、上記FORTRAN等のような領域外アクセスを検出するためのコードは、通常、用意されていないが、領域外アクセスを検出するためのコードを組み込むオプションを付加するよう拡張されたコンパイラが公開されている（例えば、非特許文献１参照）。
【０００８】
【特許文献１】特許１７０８３５５号公報
【非特許文献１】Andrew Suffield、“Bounds checking for C and C++”、[online]、[平成18年1月23日]、インターネット〈ＵＲＬ：http://www.doc.ic.ac.uk/teaching/projects/Distinguished03/AndrewSuffield.pdf〉
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、特許文献１や非特許文献１に記載される従来技術では、実行プログラムに領域外アクセスを検出するためのコードを付加する必要があるので、コードサイズが増大してしまうという問題がある。例えば、あるプログラムに対してBounds checking for C and C++を適用した例では、コードサイズが非適用時と比較して7〜14倍にも増大してしまう。プログラムの実行コードを格納するメモリ容量には上限があるので、領域外アクセスを検出するコードを付加したプログラムをメモリに格納できない場合がある。
【００１０】
また、プログラム実行時に領域外アクセスがあるかを逐次チェックするため、プログラムの実行速度が低下してしまうという問題がある。例えば、あるプログラムに対してBounds checking for C and C++を適用した例では、プログラムの実行速度が1.2〜3.3分の１にも低下してしまう。プログラムの実行速度が低下すると、例えば、入出力を処理するプログラムを実行するケースにおいて、プログラムが実行する入出力命令と入出力装置からのデータの入出力とのタイミングが通常のプログラム実行時と相違することとなり、正常にプログラムを実行できない場合がある。また、同様な理由により、リアルタイム処理を行うプログラムでも、正常にプログラムを実行できない場合がある。
【００１１】
本発明は上記課題に鑑みてなされたものであり、実行プログラムの実行速度の低下や実行プログラムのメモリ容量の増大を抑制して、メモリ破壊を検出することができる方法およびその方法を使用するメモリ破壊検出装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の一実施形態のメモリ破壊検出方法は、メモリへのアクセスを伴って、プログラムを実行するプログラム実行工程と、前記プログラム実行工程において前記メモリ中のいずれの領域がアクセスされたかを示すメモリアクセスログ情報を取得する、メモリアクセスログ情報取得工程と、前記メモリの中でアクセスが許容される、アクセス許容メモリ領域を算出する、アクセス許容メモリ領域算出工程と、前記プログラム実行工程の後に、前記メモリアクセスログ情報に基づいて、前記プログラム実行工程においてアクセスされた前記メモリの領域が前記アクセス許容メモリ領域内であるか否かを判定する、判定工程と、を備える。このメモリ破壊検出方法では、プログラムを実行した後に、プログラム実行中にアクセスされたメモリの領域がアクセス許容メモリ領域内であるか否かを判定するので、上記判定を行うためのプログラムを上記実行プログラムに組み込む必要がない。従って、上記判定を行うためのプログラムを上記実行プログラムに組み込む場合に比べて、実行プログラムの実行速度の低下を抑制してメモリ破壊を検出できる。また、上記判定を行うためのプログラムを上記実行プログラムに組み込む場合に比べて、実行プログラムのメモリ容量が大きくなるのを抑制してメモリ破壊を検出できる。
【００１３】
前記プログラムの実行経過を示すトレース情報情報を取得するトレース情報取得工程を更に備え、前記アクセス許容メモリ領域算出工程は、前記トレース情報を用いて前記アクセス許容メモリ領域を算出する工程を含むことが好ましい。メモリアクセスログ情報に加えてトレース情報を用いれば、より確実にアクセス許容メモリ領域を算出できる。
【００１４】
前記メモリアクセスログ情報および前記トレース情報は、それぞれ、時刻情報を含み、前記アクセス許容メモリ領域算出工程は、前記メモリアクセスログ情報に含まれる前記時刻情報と、前記トレース情報に含まれる前記時刻情報とを関連付けて、前記メモリアクセスログ情報と前記トレース情報とを同期させる工程を含むことが好ましい。メモリアクセスログ情報とトレース情報とを同期させることができれば、より確実にアクセス許容メモリ領域を算出できる。
【００１５】
第1の装置を用いて前記プログラム実行工程および前記メモリアクセスログ情報取得工程が行われ、かつ、第２の装置を用いて前記判定工程が行われ、前記判定工程で用いる前記メモリアクセスログ情報は、前記第１の装置から前記第２の装置に転送されたものであってもよい。プログラム実行工程およびメモリアクセスログ情報取得工程を行う装置から、判定工程を行う装置に、メモリアクセスログ情報を転送すれば、プログラム実行工程およびメモリアクセスログ情報取得工程を行う装置と、判定工程を行う装置とを異なる装置で行うことができるので、プログラム実行工程およびメモリアクセスログ情報取得工程を行う装置から遠隔した場所で、上記装置のメモリ破壊を検出できる。
【００１６】
前記プログラム実行工程は、前記プログラムの実行中に発生したエラーの検出を行うエラー検出工程を含んでもよい。これにより、例えば、エラーが検出された場合にのみ、選択的に、本発明のメモリ破壊検出方法を実行することができる。
【００１７】
本発明の一実施形態のメモリ破壊検出装置は、上記に記載のメモリ破壊検出方法を使用する。
【発明の効果】
【００１８】
本発明のメモリ破壊検出方法およびこの方法を使用するメモリ破壊検出装置では、プログラムを実行した後に、プログラム実行中にアクセスされたメモリの領域がアクセス許容メモリ領域内であるか否かを判定するので、上記判定を行うためのプログラムを上記実行プログラムに組み込む必要がない。従って、上記判定を行うためのプログラムを上記実行プログラムに組み込む場合に比べて、実行プログラムの実行速度の低下を抑制してメモリ破壊を検出できる。また、上記判定を行うためのプログラムを上記実行プログラムに組み込む場合に比べて、実行プログラムのメモリ容量が大きくなるのを抑制してメモリ破壊を検出できる。
【発明を実施するための最良の形態】
【００１９】
本発明の実施形態のメモリ破壊検出方法は、メモリへのアクセスを伴って、プログラムを実行するプログラム実行工程と、プログラム実行工程においてメモリ中のいずれの領域がアクセスされたかを示すメモリアクセスログ情報を取得するメモリアクセスログ情報取得工程と、メモリの中でアクセスが許容される、アクセス許容メモリ領域を算出する、アクセス許容メモリ領域算出工程とを有し、さらに、上記プログラム実行工程の後に、メモリアクセスログ情報に基づいて、プログラム実行工程においてアクセスされたメモリの領域がアクセス許容メモリ領域内であるか否かを判定する判定工程を有している。
【００２０】
図６を参照して説明した従来技術では、プログラム実行中にアクセスされたメモリの領域がアクセス許容メモリ領域内であるか否かを判定する判定を行うためのプログラムを実行プログラムに組み込み、プログラムを実行しながら、逐次、プログラム実行中にアクセスされたメモリの領域がアクセス許容メモリ領域内であるか否かを判定していた。上記判定を行うためのプログラムを実行プログラムに組み込んでいたために、実行プログラムのメモリサイズが増大してしまうという問題があった。また、プログラムを実行しながら、逐次、上記判定を行っていたために、プログラムの実行速度が低下してしまうという問題があった。
【００２１】
これに対して本発明の実施形態のメモリ破壊検出方法では、プログラムを実行した後に、プログラム実行中にアクセスされたメモリの領域がアクセス許容メモリ領域内であるか否かを判定するので、上記判定を行うためのプログラムを上記実行プログラムに組み込む必要がない。従って、従来よりも、実行プログラムの実行速度の低下を抑制してメモリ破壊を検出できる。また、実行プログラムのメモリ容量が大きくなるのを抑制してメモリ破壊を検出できる。なお、メモリ破壊とは、メモリ上に格納されたデータが破壊することを意味する。
【００２２】
本発明の実施形態のメモリ破壊検出方法は、プログラムの実行経過を示すトレース情報を取得するトレース情報取得工程を更に備え、アクセス許容メモリ領域算出工程が、トレース情報を用いてアクセス許容メモリ領域を算出する工程を含むことが好ましい。ここで、トレース情報とは、プログラムのコードなどがプログラムの実行順に示されるものであり、トレース情報を用いればプログラムの実行経過を解析することができる。本発明の実施形態のメモリ破壊検出方法は、前述の特許文献１あるいは非特許文献１に記載される従来技術とは異なり、プログラム実行工程の後に、プログラム実行工程中にアクセスされたメモリの領域がアクセス許容メモリ領域内であるか否かを判定を行う。アクセス許容か否かは実行プログラムの状態遷移に依存するケースもあるという理由から、アクセス許容メモリ領域を算出する際、メモリアクセスログ情報に加えてトレース情報を用いれば、より確実にアクセス許容メモリ領域を算出することが可能となる。
【００２３】
典型的には、メモリアクセスログ情報およびトレース情報はいずれも時刻情報を含んでいる。時刻情報を含むメモリアクセスログ情報は、プログラムを実行するためにメモリ中のどの領域がいつアクセスされたかを示す。また、時刻情報を含むトレース情報は、実行プログラムのどのコードがいつ実行されたかを示す。アクセス許容メモリ領域算出工程において、メモリアクセスログ情報に含まれる時刻情報と、トレース情報に含まれる時刻情報とを関連付けて、メモリアクセスログ情報とトレース情報とを同期させることができる。これにより、メモリアクセスログ情報とトレース情報とのタイミングを合わせることができ、より確実に精度良くアクセス許容メモリ領域を算出できる。
【００２４】
プログラム実行工程およびメモリアクセスログ情報取得工程を行う装置（第１の装置）から、判定工程を行う装置（第２の装置）に、メモリアクセスログ情報を転送すれば、第１の装置と、第２の装置とを異なる装置で行うことができる。転送方法は特に限定されない。例えば、メモリカードなどの記憶媒体を用いてもよいし、ネットワークを用いても良い。第１の装置と、第２の装置とを異なる装置で行うことにより、第１の装置から遠隔した場所で、第１の装置のメモリ破壊を検出できる。
【００２５】
プログラム実行工程は、プログラムの実行中に発生した、セグメンテーションフォルトなどのエラーの検出を行うエラー検出工程を含むことが好ましい。これにより、例えば、第１の装置と、第２の装置とを異なる装置で行った場合に、第１の装置がエラーを検出したことをトリガとして、第２の装置が本発明のメモリ破壊検出方法を実行することができる。
【００２６】
本発明の実施形態のメモリ破壊検出方法を使用する装置は、典型的には、デバッグ対象のプログラムを実行する組み込み装置に、物理的にまたは電気的に接続される。組み込み装置は、例えば、携帯電話端末、ディジタルTV、DVDレコーダー、またはセットトップボックス等である。
【００２７】
以下、図面を参照しながら、本発明の実施形態のメモリ破壊検出方法およびその方法を使用する装置をより具体的に説明する。
（第１の実施形態）
【００２８】
図１は、本発明の第１の実施形態のメモリ破壊検出方法を説明するためのフローチャートであり、図２はその検出方法を使用するメモリ破壊検出装置を説明するためのブロック図である。
【００２９】
図２に示すように、メモリ破壊検出装置２は、デバッグ対象のプログラムを実行する組み込み装置１に接続される。以下、本実施形態のメモリ破壊検出方法を説明する。
【００３０】
まず、図１のステップS１において、組み込み装置１のCPU１０が、メモリ１３に記憶されているデバッグ対象のプログラムの実行を開始させる。
【００３１】
ステップS３においてプログラムの実行が終了するまでの間、すなわちプログラム実行中に、ステップS２において、メモリ破壊検出装置２のトレーサー２１はコードトレース情報を収集し、メモリアクセスロガー２３はメモリアクセスログ情報を収集する。なお、コードトレース情報の収集は必ずしも必要でないため、必要に応じて行えばよい。
【００３２】
ステップＳ３のプログラム実行終了後、ステップS４において、メモリ破壊検出装置２の判定部３０は、アクセスが許容されたメモリ領域の範囲を算出する。具体的には、例えば、アクセス可能な配列の範囲、アクセス可能な文字列の範囲、または、動的に確保されたメモリ領域の範囲を算出する。
【００３３】
ステップＳ５において、メモリ破壊検出装置２の判定部３０は、実行プログラムにおける配列、またはポインタによるメモリアクセスが、Ｓ４で算出したアクセス許容メモリ領域の範囲外であるか否かを判定する。領域外アクセスが発生した場合には、エラーを警告する。
【００３４】
以上、本実施形態のメモリ破壊検出方法では、デバッグ対象のプログラムを実行した後に、領域外アクセスを判定する処理を行うので、領域外アクセスを検出するコードをユーザープログラムに組み込むことなく、領域外アクセスを検出することが可能となる。
【００３５】
以下、本実施形態のメモリ破壊検出方法を使用するための装置２を説明する。
【００３６】
図２に示すように、メモリ破壊検出装置２は、デバッグ対象のプログラムを実行する組み込み装置１に接続される。組み込み装置１はトレースインタフェース１６（以下、インタフェースをI/Fと略す）を有し、メモリ破壊検出装置２はトレースI/F２７を有する。また、組み込み装置１はバスI/F１５を有し、メモリ破壊検出装置２はバスI/F２６を有する。メモリ破壊検出装置２と組み込み装置１とは、トレースI/F１６とトレースI/F２７との接続およびバスI/F１５とバスI/F２６との接続によって接続されている。
【００３７】
組み込み装置１は、デバッグ対象のプログラムを実行するＣＰＵ１０、上記プログラムが記憶されたメモリ１３、I/O１４を有する。ＣＰＵ１０、メモリ１３、I/O１４、およびバスI/F１５は、アドレス・データバス１２により、それぞれ接続されている。ＣＰＵ１０は、コードトレース情報を出力するトレースポート１１を備え、トレースポート１１はトレースI/F１６に接続されている。
【００３８】
コードトレース情報とは、ＣＰＵ１０で実行しているプログラムのコードが実行順に、所定のフォーマットで出力されるものであり、プログラムの実行の経過を順にトレースして、解析するための情報である。たとえば、組み込み機器向けのプロセッサとして一般的に使用されているARM社のCPUでは、ETM（Embedded Trace Macrocell）として規格化されており、CPUにおいて分岐命令を実行すると、実行した分岐命令と分岐先の命令が格納されたアドレス情報を、実行時刻を示すタイムスタンプとともに出力する。通常、CPUでは、実行プログラム中で配置された順に命令コードを実行し、分岐命令を実行したときにのみ分岐先アドレスにジャンプするので、プログラム実行中に出力されたETMデータをトレースメモリに蓄積しておけば、プログラム実行における全命令の実行の経過をトレースすることが可能となる。
【００３９】
メモリ破壊検出装置２は、ETM等のトレース情報を蓄積するためのトレースメモリ２２を備える。メモリ破壊検出装置２は、さらに、ETMデータを解析し、プログラム実行の経過をトレースするトレーサー２１と、メモリアクセスのログ情報を記録するメモリアクセスロガー２３と、プログラムのソースコードと、シンボルのアドレス情報や、命令コードのロードアドレス情報などを含むデバッグ情報を蓄積する、ソースコード・デバッグ情報蓄積部３１と、デバッグフローを制御して、領域外アクセスを判定する判定部３０とを有する。トレーサー２１はトレースI/F２７に接続される。また、メモリアクセスロガー２３は、トレースI/F27およびバスI/F26にそれぞれ接続される。判定部３０は、トレーサー２１、メモリアクセスロガー２３、およびソースコード・デバッグ情報蓄積部３１にそれぞれ接続される。
【００４０】
メモリアクセスロガー２３は、デコーダー２４および記録部２５を有する。メモリアクセスロガー２３は、バスI/F２６からアドレス・データバスの信号が入力されると、この信号をデコーダー２４でデコードする。メモリアクセスロガー２３はさらに、メモリアクセスが発生したときのメモリのアドレスおよびデータを、後述のタイムスタンプ（時刻情報）とアドレス・データの種別を識別するための識別子とともに記録部２５に記録する。デコーダー２４は、トレースI/F２７から出力されるETMデータからタイムスタンプを抽出し、記録部２５に記録する。この記録部２５に記録されたメモリアクセスログ情報のタイムスタンプと、トレースメモリ22に記録されたトレース情報のタイムスタンプとを比較すれば、コードの実行とメモリアクセスのタイミングとを同期させることができる。
【００４１】
図５は、記録部２５が記録するメモリアクセスログ情報の例を示す。図５中の識別子は、後続のログ情報がタイムスタンプであるか、または、メモリアクセスログ情報（アクセスしたメモリのアドレス情報とデータ値とのペア）であるかを識別するための符号である。
【００４２】
上記に説明したメモリ破壊検出装置２は、図１で示したステップＳ１からステップＳ５に該当する工程を実施する。
【００４３】
図１に示すように、デバッグ対象のプログラムの実行開始（ステップS１）から実行終了（ステップS３）までのの間に、トレーサー２１はトレース情報を収集し、トレースメモリ２２に記録し、メモリアクセスロガー２３はメモリアクセスログ情報を収集し、記録部２５に記録する（ステップS2）。
【００４４】
プログラム実行終了（ステップS３）後、判定部３０は、トレースメモリ２２に蓄積されたトレース情報をもとに、プログラムの実行の経過をトレースし、アクセス可能な配列または文字列の範囲、あるいは動的に確保したメモリ領域の範囲を算出する（ステップS４）。次に、プログラム実行の経過をトレースして、メモリアクセス命令実行時にアクセスしたメモリのアドレスとデータを記録部25に蓄積されたメモリアクセスログより参照し、該当アドレスが、アクセス許容領域内であるか否かを判定する。アクセス許容領域外であれば、領域外アクセスとしてエラーを出力する。判定部３０において、シンボルのアドレス情報や、命令コードのロードアドレス情報などを含むデバッグ情報を参照して、プログラムソースにおける当該エラーの発生箇所を表示することも可能である。
【００４５】
以上、説明したように、本実施形態によると、領域外アクセスを検出するためのコードをユーザープログラムに組み込むことなく実行して、領域外アクセスの検出を行うことが可能となる。
（第２の実施形態）
【００４６】
図４は、第２の実施形態のメモリ破壊検出方法を説明するためのフローチャートであり、図５は、この方法を使用する装置を説明するためのブロック図である。図５では、図２に示した構成要素と同様の機能を有する構成要素には同じ参照符号を付しており、以下、その詳細な説明は省略する。
【００４７】
図５のメモリ破壊検出装置２Ａの基本的な構成は、図２のメモリ破壊検出装置２と同じである。
【００４８】
図２のメモリ破壊検出装置２の場合と異なり、図５のメモリ破壊検出装置２Ａでは、トレーサー２１およびメモリアクセスロガー２３を組み込み装置１に実装している。また、組み込み装置１Ａとメモリ破壊検出装置２Ａとは、組み込み装置１Ａの二次記憶装置２８、およびメモリ破壊検出装置２Ａの二次記憶装置２９を介して接続される。二次記憶装置２８、２９は、例えばメモリカードなどの着脱可能な記憶装置で構成される。
【００４９】
また、メモリ破壊検出装置２Ａは、プログラム実行エラー検出部３２を有する。プログラム実行エラー検出部３２は、セグメンテーションフォルト等、プログラム（＝OS（Operating  System）が管理しているプロセス）に割り当てられたメモリ領域（セグメント）外にアクセスするとエラーを検出する。セグメンテーションフォルトは、配列等のアクセス許容メモリ領域外エラーが要因となって発生する場合や、スタック破壊等、またその他の要因によって発生する場合がある。また、配列等のアクセス許容メモリ領域外エラーがセグメンテーションフォルトの発生要因となる場合においても、配列等のアクセス許容メモリ領域外エラーにより直接生じる場合と、アクセス許容メモリ領域外エラーの発生から二次的に生じる場合（配列等のアクセス許容メモリ領域外エラーの発生により、ポインタ変数を破壊し、そのポインタ変数を参照することにより不正なメモリアクセスとなる場合等）とがある。このようなことから、セグメンテーションフォルト等ではエラーの発生を検出すること可能であるが、プログラムにおけるエラー発生個所を特定することは通常、容易ではない。
【００５０】
上記に説明したメモリ破壊検出装置２Ａは、図４に示したステップＳ１、Ｓ２、Ｓ６、Ｓ７およびステップＳ３、Ｓ４、Ｓ５に該当する工程を実施する。
【００５１】
図４に示すように、デバッグ対象のプログラムの実行開始（ステップS１）から実行終了（ステップS３）までの間に、トレーサー２１はトレース情報を収集し、トレースメモリ２２に記録し、メモリアクセスロガー２３はメモリアクセスログ情報を収集し、記録部２５に記録する（ステップS2）。また、ステップS６において、プログラムの実行中にプログラム実行エラー検出部３２は、例えばセグメンテーションフォルトなどのエラーを検出する（ステップS6）。
【００５２】
ステップS６でエラーを検出すると、このエラー検出をトリガとして、エラー処理を行うプログラムが起動し、ＣＰＵ１０はトレースメモリ２２に記録されたトレース情報および記録部２５に記録されたメモリアクセスログ情報を、二次記録装置２８（例えばメモリカード）に転送し、記録する（ステップS７）。
【００５３】
次に、二次記憶装置２８に記録されたトレースログ情報およびメモリアクセスログ情報を、メモリ破壊検出装置２Ａの二次記録装置２９（例えばメモリカード）に移動させる。プログラム実行終了（ステップS３）後、図1に記載したステップS４およびステップS５と同様の処理を行い、領域外アクセスが発生したプログラムの該当ヶ所の検出を行う。
【００５４】
組み込み装置１Ａ内で記録されたトレース情報およびメモリアクセスログ情報は、ネットワーク等を介して、組み込み装置１Ａから遠隔した場所に設置されたメモリ破壊検出装置２Ａに転送されてもよい。
【００５５】
以上、説明したように、本実施の形態では、組み込み装置１Ａからメモリ破壊検出装置２Ａに、メモリアクセスログ情報およびトレース情報を転送するので、組み込み装置１Ａの設置場所から離れた場所で組み込み装置１Ａのメモリ破壊を検出できる。具体的には、例えば、携帯電話端末等の組み込み装置を製品としてエンドユーザーに出荷後に、メモリ破壊による不具合が生じた際においても、リモートでメモリ破壊の検出を実施できる。また、組み込み装置１Ａが、プログラムの実行中に発生したセグメンテーションフォルトなどのエラーの検出を行うので、このエラー検出をトリガとして、メモリ破壊の検出方法を実行することができる。
【産業上の利用可能性】
【００５６】
本発明は、携帯電話端末、ディジタルTV、DVDレコーダー、およびセットトップボックス等の組み込み装置で動作するソフトウェアを開発する上でのデバッグシステムとして有用である。
【図面の簡単な説明】
【００５７】
【図１】本発明の第１の実施形態のメモリ破壊検出方法を説明するためのフローチャート。
【図２】本発明の第１の実施形態のメモリ破壊検出方法を使用する装置を説明するための模式図。
【図３】本発明の第１の実施形態のメモリ破壊検出方法に用いるメモリアクセスログの一例を示す図。
【図４】本発明の第２の実施形態のメモリ破壊検出方法を説明するためのフローチャート。
【図５】本発明の第２の実施形態のメモリ破壊検出方法を使用する装置を説明するための模式図。
【図６】従来のメモリ破壊検出方法を説明するためのフローチャート。
【符号の説明】
【００５８】
１  組み込み装置
２  メモリ破壊検出装置
１０  CPU
１１  トレースポート
１２  アドレス・データバス
１３  メモリ
１４  Ｉ/O
１５  バスI/F
２１  トレーサー
２２  トレースメモリ
２３  メモリアクセスロガー
２４  デコーダー
２５  記録部
２６  バスI/F
２７  トレースI/F
２８  二次記憶装置
２９  第二の二次記憶装置
３０  判定部
３１  ソースコード・デバッグ情報蓄積部
３２  プログラム実行エラー検出部
【図１】
2007199845.tif 000003
【図２】
2007199845.tif 000004
【図３】
2007199845.tif 000005
【図４】
2007199845.tif 000006
【図５】
2007199845.tif 000007
【図６】
2007199845.tif 000008