(57)【要約】【課題】従来のデバッグ方式では、未初期化領域を参照しているかどうかを検出するために、プログラムの実行を少なくとも２回行わなければならないなどの課題があった。【解決手段】カバレッジメモリと、スタック領域移動検出部と、書き込みのない読み込み検出部とを具備するスタック領域の未初期化参照検出装置によって解決することができる。カバレッジメモリは、メインメモリのスタック領域に、書き込みがあったか否か、及び、読み込みがあったか否かを記憶する。スタック領域移動検出部は、スタック領域におけるスタックの移動を検出すると共に、移動を検出した場合には、カバレッジメモリにおける領域であって、スタックの移動範囲に対応する領域をクリアする。書き込みのない読み込み検出部は、カバレッジメモリを参照することによって、未初期化参照を検出する。【選択図】図１
2010092252.tif 000002
【特許請求の範囲】
【請求項１】
メインメモリのスタック領域に、書き込みがあったか否か、及び、読み込みがあったか否かを記憶するカバレッジメモリと、
前記スタック領域におけるスタックの移動を検出すると共に、前記移動を検出した場合には、前記カバレッジメモリにおける領域であって、前記スタックの移動範囲に対応する領域をクリアするスタック領域移動検出部と、
前記カバレッジメモリを参照することによって、未初期化参照を検出する書き込みのない読み込み検出部とを具備する
スタック領域の未初期化参照検出装置。
【請求項２】
前記スタック領域移動検出部は、
前記領域をクリアすることを、前記スタック領域において、スタックが増える時のみ、又は、スタックが減る時のみに行う
請求項１記載のスタック領域の未初期化参照検出装置。
【請求項３】
前記カバレッジメモリは、
前記スタック領域に、書き込みがあったか否か、及び、読み込みがあったか否かを記憶すると共に、前記メインメモリにおける前記スタック領域以外の領域に、書き込みがあったか否か、及び、読み込みがあったか否かを記憶し、
前記書き込みのない読み込み検出部は、
未初期化参照を検出したときに、前記スタック領域で生じたものであるか、前記スタック領域以外の領域で生じたものであるかを判断する
請求項２記載のスタック領域の未初期化参照検出装置。
【請求項４】
前記メインメモリにおけるスタック先頭アドレスを記録する移動前のスタック先頭アドレス記録部を更に具備し、
前記スタック領域移動検出部は、
前記移動前のスタック先頭アドレス記録部に記録されたスタック先頭アドレスと、前記メインメモリにおける現在のスタック先頭アドレスとを比較し、異なっていた場合に、スタックが移動したと判断する
請求項３記載のスタック領域の未初期化参照検出装置。
【請求項５】
前記スタック領域移動検出部は、
前記異なっていた場合に、更に、前記移動前のスタック先頭アドレス記録部に記録されたスタック先頭アドレスを、前記現在のスタック先頭アドレスによって更新する
請求項４記載のスタック領域の未初期化参照検出装置。
【請求項６】
メインメモリのスタック領域に、書き込みがあったか否か、及び、読み込みがあったか否かをカバレッジメモリに記憶することと、
前記スタック領域におけるスタックの移動を検出すると共に、前記移動を検出した場合には、前記カバレッジメモリにおける領域であって、前記スタックの移動範囲に対応する領域をクリアすることと、
前記カバレッジメモリを参照することによって、書き込みのない読み込みがあるか否かをチェックし、未初期化参照を検出することとを具備する
スタック領域の未初期化参照検出方法。
【請求項７】
前記クリアすることにおいては、
前記領域をクリアすることを、前記スタック領域において、スタックが増える時のみ、又は、スタックが減る時のみに行うことを含む
請求項６記載のスタック領域の未初期化参照検出方法。
【請求項８】
前記記憶することにおいては、
前記スタック領域に、書き込みがあったか否か、及び、読み込みがあったか否かを記憶すると共に、前記メインメモリにおける前記スタック領域以外の領域に、書き込みがあったか否か、及び、読み込みがあったか否かを記憶することを含み、
前記検出することにおいては、
未初期化参照を検出したときに、前記スタック領域で生じたものであるか、前記スタック領域以外の領域で生じたものであるかを判断することを含む
請求項７記載のスタック領域の未初期化参照検出方法。
【請求項９】
前記メインメモリにおけるスタック先頭アドレスを、移動前のスタック先頭アドレス記録部に記録することを更に具備し、
前記クリアすることにおいては、
前記移動前のスタック先頭アドレス記録部に記録されたスタック先頭アドレスと、前記メインメモリにおける現在のスタック先頭アドレスとを比較し、異なっていた場合に、スタックが移動したと判断することを更に含む
請求項８記載のスタック領域の未初期化参照検出方法。
【請求項１０】
前記クリアすることにおいては、
前記異なっていた場合に、更に、前記移動前のスタック先頭アドレス記録部に記録されたスタック先頭アドレスを、前記現在のスタック先頭アドレスによって更新することを更に含む
請求項９記載のスタック領域の未初期化参照検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデバッグに関し、特にスタック領域の未初期化参照を検出する装置及び方法に関する。
【背景技術】
【０００２】
プログラム開発者が変数の初期化を忘れてしまった場合において、その初期化されていない変数を参照するステップが実行されると、プログラム開発者が意図していない実行結果が得られることがある。初期化されていない変数が参照されることを未初期化参照ということにする。未初期化参照を検出する方法がいくつか考えられる。静的な検出方法としては、コンパイラから、不足気味に、あるいは余分に警告メッセージを出力する方法が考えられる。しかし、コンパイラによる解析では、完璧な検出は期待できない。動的な検出方法としては、特開平８−１１０８６６号公報（特許文献１参照）に記載された「プログラム評価装置」の発明や、特開２００２−０４９５０６号公報（特許文献２参照）に記載された「デバッグ方式及びデバッグ装置」の発明によるものが知られる。
【０００３】
特許文献１に記載された「プログラム評価装置」の発明では、ハードウェアによって未初期化変数の参照を検出する。プログラム評価装置は、識別番号生成手段と、識別番号記憶手段と、変数領域記憶手段と、識別番号比較手段と、変数領域比較手段とを有する。識別番号生成手段は、情報処理装置が実行するプログラムを識別する識別番号を生成する。識別番号記憶手段は、識別番号を記憶する。変数領域記憶手段は、プログラム毎に変数の領域を記憶する。識別番号比較手段は、実行中のプログラムの識別番号と識別番号記憶手段に記憶された識別番号とを比較する。変数領域比較手段は、プログラム実行によるデータアドレスと変数領域記憶手段に記憶された変数領域とを比較する。プログラム評価装置は、識別番号比較手段の比較結果と変数領域比較手段の比較結果とにより、情報処理装置の未初期化変数の参照を検出する。
【０００４】
特許文献１の図１における符号を括弧付きで引用しながら、特許文献１に記載された発明を詳述する。この「プログラム評価装置」の発明では、コールカウンタ（２）およびサブプログラム識別番号スタック（３，４）は、評価用プロセッサ（１）からのＣＡＬＬストローブ信号（５）およびＲＥＴストローブ信号（６）に基づいて、サブプログラム識別番号をカウントアップし、かつスタックする。自動変数領域サイズメモリ（７）および自動変数判定回路（８，９，１０，１１）は、評価用プロセッサ（１）からのベースポインタの値（１２）およびプログラムカウンタの値（１３）に基づいて現在実行中のサブプログラムの自動変数であるかどうかを判定する。カバレッジメモリ（１４）および未初期化変数参照検出回路（１５，１６，１７，１８，１９）は、未初期化変数の参照を検出して外部インターフェース回路（２０）に通知する。
【０００５】
特許文献２に記載された「デバッグ方式」の発明においては、プログラムが未初期化領域を参照しているかどうかを検出するために、第１の初期値で初期化したのちプログラムを実行する。また、第１の初期値とは異なる第２の初期値で初期化したのちプログラムを実行する。そして、これらの結果を比較する。この比較結果が異なれば、未初期化領域を参照していると判定する。
【０００６】
すなわち、特許文献２の発明においては、命令を実行するプログラムをデバッグする。デバッグ方式は、変数領域と、初期化機構と、保管機構と、実行結果保管領域と、検出制御機構と、比較機構とを備える。変数領域は、プログラムが命令を実行するときにデータを記録する。初期化機構は、変数領域を所定の初期値を用いて初期化する。保管機構は、プログラムを実行後、変数領域に記録された実行結果を読み出し、読み出した実行結果を保管する。実行結果保管領域は、保管機構によって保管されるデータを記憶する。検出制御機構は、初期化機構によって初期化し、プログラムを実行させ、保管機構によって保管する処理を動作単位とし、動作単位を実行させることを制御する。比較機構は、実行結果保管領域に記憶されたデータを予め用意した期待値と比較する。
【０００７】
【特許文献１】特開平８−１１０８６６号公報
【特許文献２】特開２００２−０４９５０６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
特許文献１のプログラム評価装置では、サブプログラム識別番号が、コールカウンタ（２）のビット幅を超えてしまうと、サブプログラムを識別できなくなる。よって、固定アドレスを有しないローカル変数についての未初期化参照を検出できない場合があるという課題がある。それから、特許文献２のデバッグ方式では、未初期化領域を参照しているかどうかを検出するために、プログラムの実行を少なくとも２回行わなければならないという課題がある。
【課題を解決するための手段】
【０００９】
以下に、［発明を実施するための最良の形態］で使用される番号・符号を用いて、［課題を解決するための手段］を説明する。これらの番号・符号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］との対応関係を明らかにするために括弧付きで付加されたものである。ただし、それらの番号・符号を、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１０】
本発明の一つ目のアスペクトによるスタック領域（２３）の未初期化参照検出装置（１１）は、カバレッジメモリ（１４）と、スタック領域移動検出部（１３）と、書き込みのない読み込み検出部（１５）とを具備する。カバレッジメモリ（１４）は、メインメモリ（２２）のスタック領域（２３）に、書き込みがあったか否か、及び、読み込みがあったか否かを記憶する。スタック領域移動検出部（１３）は、スタック領域（２３）におけるスタックの移動を検出すると共に、移動を検出した場合には、カバレッジメモリ（１４）における領域であって、スタックの移動範囲に対応する領域をクリアする。書き込みのない読み込み検出部（１５）は、カバレッジメモリ（１４）を参照することによって、未初期化参照を検出する。
【００１１】
スタック領域移動検出部（１３）は、領域をクリアすることを、スタック領域（２３）において、スタックが増える時のみ、又は、スタックが減る時のみに行うとすることができる。また、カバレッジメモリ（１４）は、スタック領域（２３）に、書き込みがあったか否か、及び、読み込みがあったか否かを記憶すると共に、メインメモリ（２２）におけるスタック領域以外の領域に、書き込みがあったか否か、及び、読み込みがあったか否かを記憶するものとし、かつ、書き込みのない読み込み検出部（１５）は、未初期化参照を検出したときに、スタック領域（２３）で生じたものであるか、スタック領域以外の領域で生じたものであるかを判断するものとすることができる。
【００１２】
本発明の二つ目のアスペクトによるスタック領域（２３）の未初期化参照検出方法は、記憶することと、クリアすることと、検出することとを具備する。記憶することにおいては、メインメモリ（２２）のスタック領域（２３）に、書き込みがあったか否か、及び、読み込みがあったか否かをカバレッジメモリ（１４）に記憶する。クリアすることにおいては、スタック領域（２３）におけるスタックの移動を検出すると共に、移動を検出した場合には、カバレッジメモリ（１４）における領域であって、スタックの移動範囲に対応する領域をクリアする。検出することにおいては、カバレッジメモリ（１４）を参照することによって、書き込みのない読み込みがあるか否かをチェックし、未初期化参照を検出する。
【発明の効果】
【００１３】
本発明によれば、スタック領域において生じる未初期化参照が検出可能になる。
【発明を実施するための最良の形態】
【００１４】
本発明を実施するための最良の形態の一つについて、図面を用いて詳細に説明する。図１は、本実施の形態における未初期化参照検出装置を説明するブロック構成図である。図１において、未初期化参照検出装置１１は、評価用プロセッサ２１からスタック情報、書き込み情報、読み込み情報、メモリアクセスのアドレス情報などを受け取れるようになっている。評価用プロセッサ２１は、シミュレータエンジンあるいはエミュレータエンジンで実現されており、ここでは、理解を容易にするために、メインメモリ２２を含めて描いている。評価用プロセッサ２１では、被デバッグプログラムが実行され、メインメモリ２２では、被デバッグプログラムで用いられる変数の値が書き込まれたり、読み込まれたりする。
【００１５】
評価用プロセッサ２１は、現在実行中の関数について、スタック先頭アドレスを保持していて、所定のタイミングで、このスタック先頭アドレスを、未初期化参照検出装置１１に送出する。未初期化参照検出装置１１における移動前のスタック先頭アドレス記録部１２は、このスタック先頭アドレスを記録する。スタック領域移動検出部１３は、評価用プロセッサ２１からスタック先頭アドレスを受け取ると共に、移動前のスタック先頭アドレス記録部１２に記録されたスタック先頭アドレスを随時更新する。
【００１６】
評価用プロセッサ２１において、被デバッグプログラムが関数を呼び出したりすると、スタック先頭アドレスが移動する。このとき、評価用プロセッサ２１は、移動後のスタック先頭アドレスを、未初期化参照検出装置１１へ送出する。スタック領域移動検出部１３は、評価用プロセッサ２１から移動後のスタック先頭アドレスを受け取る。スタック領域移動検出部１３は、移動前のスタック先頭アドレス記録部１２に記録されたスタック先頭アドレスと、評価用プロセッサ２１から受け取ったスタック先頭アドレスとを比較することで、スタックの移動を検出することができる。
【００１７】
スタックの移動を検出すると、スタック領域移動検出部１３は、カバレッジメモリ１４におけるスタックの移動に対応する領域をクリアする。スタックの移動に対応する領域とは、スタックが増える場合には、その増えるスタックの先頭アドレスから最終アドレスまでに対応する領域とすればよく、スタックが減る場合には、その減ったスタックの先頭アドレスから最終アドレスまでに対応する領域とすればよい。すなわち、クリアする領域は、移動前のスタック先頭アドレス記録部１２に記録されているスタック先頭アドレスと、評価用プロセッサ２１から受け取るスタック先頭アドレスとの間の範囲に対応する領域とすることができる。
【００１８】
カバレッジメモリ１４は、メインメモリ２２のアドレス空間に対応する記憶容量を備えている。カバレッジメモリ１４は、評価用プロセッサ２１から、書き込み情報、読み込み情報、メモリアクセスのアドレス情報などを受け取り、メインメモリ２２のアドレスそれぞれについて、アクセス情報を記憶する。図２は、カバレッジメモリの説明図である。図示するように、メインメモリ２２にはスタック領域２３が確保され、このスタック領域２３には、実行される関数ごとに、変数や引数等の値が記録される。一方、カバレッジメモリ１４には、メインメモリ２２のスタック領域２３に対応させて、スタック領域２３のメモリアドレスに対する読み込みがあったかどうか、書き込みがあったかどうかの情報記録領域１８が確保される。
【００１９】
図１において、メモリの書き込みの無い読み込み検出部１５は、カバレッジメモリ１４を参照することによって、メインメモリ２２のそれぞれアドレスについて、書き込みの無い読み込みがあったか否かを検出する。カバレッジメモリ１４に、読み込みがあり、且つ、書き込みが無いことが記録されていた場合には、検出部１５は、未初期化参照が行われたと判断することができる。
【００２０】
図３は、本実施の形態における未初期化参照検出方法を説明する流れ図である。図３において、未初期化参照検出装置１１が動作を開始すると、スタック領域移動検出部１３の初期動作により、カバレッジメモリ１４等に初期値が設定される（Ｓ１）。評価用プロセッサ２１側では、被デバッグプログラムの実行が開始される（Ｓ２）。スタック領域移動検出部１３は、最初のスタック先頭アドレスを、移動前のスタック先頭アドレス記録部１２に記録する。評価用プロセッサ２１は、被デバッグプログラムの実行を継続する（Ｓ３）。スタック領域移動検出部１３は、移動前のスタック先頭アドレス記録部１２に記録されたスタック先頭アドレスを随時更新する。
【００２１】
被デバッグプログラムの実行継続中には、カバレッジメモリ１４にアクセス情報が記録される。スタック領域移動検出部１３は、スタックが移動したかをチェックする（Ｓ４）。移動していた場合（Ｓ４：イエス）には、移動範囲に対応するカバレッジメモリの領域をクリアする（Ｓ５）。移動していなかった場合（Ｓ４：ノー）には、書き込み無しの読み込みか否かをチェックする（Ｓ６）。書き込み無しの読み込みでは無い場合（Ｓ６：ノー）には、未初期化参照では無いと判断できるので、チェックを終了する。書き込み無しの読み込みであった場合（Ｓ６：イエス）には、未初期化参照と判断することができる。
【００２２】
図３において、未初期化参照が検出されたとき、そのアドレスがスタック領域内か否かをチェックする（Ｓ７）。スタック領域内で無ければ（Ｓ７：ノー）、スタック領域外におけるメモリの未初期化参照を検出したと判断できる（Ｓ８）。スタック領域内であれば（Ｓ７：イエス）、スタック領域の未初期化参照を検出したと判断できる（Ｓ９）。本実施の形態においては、カバレッジメモリ１４は、メインメモリ２２のアドレス空間に対応する記憶容量を備えているので、スタック領域内外の未初期化参照を検出できるようになっている。
【００２３】
シミュレータやエミュレータから得られるメモリの書き込み情報や読み込み情報により、固定アドレスに記憶されるグローバル変数の未初期化参照は検出可能である。しかし、スタック領域に関しては、スタックが移動するので、同一のメモリアドレスに対して書き込みと読み込みがあったとしても、未初期化参照が行われていた可能性がある。本実施の形態では、スタックが移動する度に、移動した領域のメモリ書き込み情報（読み込み情報を含んでも良い）を、カバレッジメモリからクリアすることにしているので、スタック領域の未初期化参照が検出できるようになっている。
【実施例１】
【００２４】
具体的な実施例を用いて、上記実施の形態における未初期化参照検出装置について更に説明する。図４は、ソースプログラムの一例を示す図であり、以下、このプログラムを被デバッグプログラムとして、未初期化参照を検出してみる。図４に示すソースプログラムをコンパイルし、評価用プロセッサ２１にインストールし、実行する（図３のＳ２，Ｓ３）。
【００２５】
図４において、被デバッグプログラムのステップ３０３で、関数ｇ（）から関数ｆ（１）が呼び出されている。関数ｆ（１）が呼び出されると、メインメモリ２２には関数ｆ（１）のスタックが確保される。関数ｆ（１）のスタックには、関数ｆ（１）で使用される変数ａ、変数ｉ、変数ｊの各値が記憶される。また、関数ｆ（１）のスタック先頭アドレスが、移動前のスタック先頭アドレス記録部１２に記録される。更に、スタック領域移動検出部１３は、カバレッジメモリ１４において、関数ｇ（）から関数ｆ（１）へ移動したスタックの範囲をクリアする（図３のＳ４，Ｓ５）。このクリアにより、関数ｆ（１）のスタックに対応するカバレッジメモリ１４の領域には、再び初期値が設定される。
【００２６】
関数ｆ（１）の実行が開始されると、ａ＝１なので、ｉｆ（ａ）が真となる。よって、被デバッグプログラムのステップ３０１で、ｉ＝０が実行される。このとき、スタック領域２３には、変数ｉの値である”０”が記憶され、カバレッジメモリ１４の情報記録領域１８には、変数ｉに対して書き込みがあったことが記録される。メモリの書き込みの無い読み込み検出部１５は、未初期化参照を検出しない（図３のＳ６）。
【００２７】
次に、被デバッグプログラムのステップ３０２で、ｊ＝ｉが実行される。このとき、スタック領域２３には、変数ｊの値である”０”が記憶され、カバレッジメモリ１４の情報記録領域１８には、変数ｊに対して書き込みがあったこと、及び、変数ｉに対して読み込みがあったことが記録される。メモリの書き込みの無い読み込み検出部１５は、未初期化参照を検出しない（図３のＳ６）。
【００２８】
図５Ａは、関数ｆ（１）の実行が終了したときのメモリ状態を示す説明図である。図５Ａにおいて、メインメモリ２２のスタック領域２３と、これに対応するカバレッジメモリ１４の情報記録領域１８とを左右に並べることで、対応関係を容易に把握できるようにしている。関数ｆ（１）のスタックには、変数ａの値である”１”と、変数ｉの値である”０”と、変数ｊの値である”０”とが記憶されている。カバレッジメモリ１４の情報記録領域１８を参照すると、変数ａに対して書き込みがあったこと、変数ｉに対して書き込みと読み込みがあったこと、変数ｊに対して書き込みがあったことが記録されている。未初期化参照の跡は記録されていない。
【００２９】
被デバッグプログラムは、関数ｆ（１）から関数ｇ（）へリターンする。このとき、スタック領域移動検出部１３は、スタックの移動を検出し、カバレッジメモリ１４におけるスタックの移動範囲をクリアする（図３のＳ４，Ｓ５）。この移動範囲は、関数ｆ（１）のスタック先頭アドレスから、関数ｇ（）のスタック先頭アドレスまでの範囲とすることができる。また、スタック領域移動検出部１３は、関数ｇ（）のスタック先頭アドレスを、移動前のスタック先頭アドレス記録部１２に上書きして更新する。
【００３０】
図５Ｂは、関数ｆ（１）から関数ｇ（）へリターンしたときのメモリ状態を示す説明図である。図５Ｂにおいて、メインメモリ２２側を参照すると、関数ｆ（１）のスタックが解放されている。カバレッジメモリ１４側を参照すると、関数ｆ（１）の変数ａ、変数ｉ、変数ｊについて、書き込みがあったことや読み込みがあったことを記憶していた領域がクリアされている。
【００３１】
更に、被デバッグプログラムの実行を継続する（図３のＳ３）。被デバッグプログラムのステップ３０４で、関数ｇ（）から関数ｆ（０）が呼び出される。関数ｆ（０）が呼び出されると、メインメモリ２２には関数ｆ（０）のスタックが確保される。関数ｆ（０）のスタックには、関数ｆ（０）で使用される変数ａ、変数ｉ、変数ｊの各値が記憶される。また、関数ｆ（０）のスタック先頭アドレスが、移動前のスタック先頭アドレス記録部１２に上書きされ更新される。更に、スタック領域移動検出部１３は、カバレッジメモリ１４において、関数ｇ（）から関数ｆ（０）へ移動したスタックの範囲をクリアする（図３のＳ４，Ｓ５）。
【００３２】
関数ｆ（０）の実行が始まると、ａ＝０なので、ｉｆ（ａ）が偽となる。よって、被デバッグプログラムのステップ３０１は、スキップされる。次に、被デバッグプログラムのステップ３０２で、ｊ＝ｉが実行される。このとき、スタック領域２３には、変数ｊの値として不定値が記憶され、カバレッジメモリ１４の情報記録領域１８には、変数ｊに対して書き込みがあったこと、及び、変数ｉに対して読み込みがあったことが記録される。メモリの書き込みの無い読み込み検出部１５は、変数ｉに対して未初期化参照が行われたことを検出する（図３のＳ６）。続けて、メモリの書き込みの無い読み込み検出部１５は、そのアドレスが関数ｆ（０）のスタック領域内か否かをチェックし（Ｓ７）、スタック領域の未初期化参照を検出したと判断する（Ｓ９）。
【００３３】
図５Ｃは、関数ｆ（０）の実行が終了したときのメモリ状態を示す説明図である。図５Ｃにおいて、関数ｆ（０）のスタック領域には、変数ａの値である”０”と、変数ｉの値である不定値と、変数ｊの値である不定値とが記憶されている。カバレッジメモリ１４の情報記録領域１８を参照すると、変数ａに対して書き込みがあったこと、変数ｉに対して読み込みがあったこと、変数ｊに対して書き込みがあったことが記録されている。変数ｉに対しては、書き込みが無く、かつ、読み込みがあったことが記録されているので、未初期化参照が行われたことが分かる。
【実施例２】
【００３４】
実施例１においては、スタック領域移動検出部１３は、スタックが移動するたびにカバレッジメモリ１４のクリアを行った。しかし、カバレッジメモリ１４のクリアは、関数ｆ（１）から関数ｇ（）へリターンしたとき、関数ｆ（０）から関数ｇ（）へリターンしたときなど、リターン時のみ行うこととし、関数ｇ（）から関数ｆ（１）を呼び出したとき、関数ｇ（）から関数ｆ（０）を呼び出したときなど、呼び出し時には行わないとすることもできる。スタック移動の原理に鑑みると、カバレッジメモリのクリアは、スタックが増える時のみ、又は、スタックが減る時のみに行うことでも同様の効果が得られると考えられる。
【図面の簡単な説明】
【００３５】
【図１】本実施の形態における未初期化参照検出装置を説明するブロック構成図。
【図２】カバレッジメモリの説明図。
【図３】本実施の形態における未初期化参照検出方法を説明する流れ図。
【図４】ソースプログラムの一例を示す図。
【図５Ａ】関数ｆ（１）の実行が終了したときのメモリ状態を示す説明図。
【図５Ｂ】関数ｆ（１）から関数ｇ（）へリターンしたときのメモリ状態を示す説明図。
【図５Ｃ】関数ｆ（０）の実行が終了したときのメモリ状態を示す説明図。
【符号の説明】
【００３６】
１１  未初期化参照検出装置
１２  移動前のスタック先頭アドレス記録部
１３  スタック領域移動検出部
１４  カバレッジメモリ
１５  メモリの書き込みの無い読み込み検出部
１８  スタック領域のメモリアドレスに対する読み込みがあったかどうか、書き込みがあったかどうかの情報記録領域
２１  評価用プロセッサ
２２  メインメモリ
２３  スタック領域
【図１】
2010092252.tif 000003
【図２】
2010092252.tif 000004
【図３】
2010092252.tif 000005
【図４】
2010092252.tif 000006
【図５Ａ】
2010092252.tif 000007
【図５Ｂ】
2010092252.tif 000008
【図５Ｃ】
2010092252.tif 000009