(57)【特許請求の範囲】
【請求項１】
オペレーティングシステムに起動制御され、複数のモジュールが階層的に実行され得るアプリケーションプログラムにおけるメモリ領域の解放漏れを検出するメモリリーク検出システムであって、
起動したアプリケーションプログラムからの要求に従って、所定のメモリ領域を確保するメモリ領域確保手段と、
前記メモリ領域確保手段がメモリ領域を確保した時点でのアプリケーションプログラムにおける各モジュールの実行履歴を得るためのスタック情報を取得するスタック情報取得手段と、
前記スタック情報取得手段が取得したスタック情報を、前記メモリ領域確保手段が確保したメモリ領域と対応付けて記憶するスタック情報記憶手段と、
前記メモリ領域確保手段が確保したメモリ領域を、アプリケーションプログラムからの要求に従って解放するメモリ領域解放手段と、
前記メモリ領域解放手段により解放されたメモリ領域に対応するスタック情報を前記スタック情報記憶手段から削除するスタック情報削除手段と、
アプリケーションプログラムの起動が完了すると、前記スタック情報記憶手段にスタック情報が記憶されているか否かを判別するスタック情報判別手段と、
前記スタック情報判別手段によりスタック情報が前記スタック情報記憶手段に記憶されていると判別された場合に、前記スタック情報記憶手段からスタック情報を抽出し、各モジュールの実行履歴を表示するスタック情報表示手段と、
を備えることを特徴とするメモリリーク検出システム。
【請求項２】
前記スタック情報取得手段が取得するスタック情報は、少なくともスタック上の一群のデータからなるスタックフレームを含み、
前記スタック情報表示手段は、スタック情報に含まれるスタックフレームに従って、前記メモリ領域確保手段にメモリ領域の確保を要求したアプリケーションプログラムにおけるモジュール階層を表示する、
ことを特徴とする請求項１に記載のメモリリーク検出システム。
【請求項３】
オペレーティングシステムに起動制御され、複数のモジュールが階層的に実行され得るアプリケーションプログラムにおけるメモリ領域の解放漏れを検出するメモリリーク検出システムであって、
起動したアプリケーションプログラムからの要求に従って、所定のメモリ領域を確保するメモリ領域確保手段と、
前記メモリ領域確保手段がメモリ領域を確保した時点でのスタックを解析し、メモリ領域の確保を要求したアプリケーションプログラムにおける各モジュールの実行履歴を得ることのできるスタック上の一群のデータからなるスタックフレームを特定するスタックフレーム特定手段と、
前記スタックフレーム特定手段により特定されたスタックフレーム及び、前記メモリ領域確保手段が確保したメモリ領域のアドレスからなるダンプ情報を生成するダンプ情報生成手段と、
前記ダンプ情報生成手段が生成したダンプ情報を逐次記憶するダンプ情報記憶手段と、
前記メモリ領域確保手段が確保したメモリ領域を、アプリケーションプログラムからの要求に従って解放するメモリ領域解放手段と、
前記メモリ領域解放手段により解放されたメモリ領域のアドレスに従って、前記ダンプ情報記憶手段に記憶された対応するダンプ情報を特定するダンプ情報特定手段と、
前記ダンプ情報特定手段により特定されたダンプ情報を前記ダンプ情報記憶手段から削除するダンプ情報削除手段と、
アプリケーションプログラムの起動が完了すると、前記ダンプ情報記憶手段にダンプ情報が記憶されているか否かを判別するダンプ情報判別手段と、
前記ダンプ情報判別手段によりダンプ情報が前記ダンプ情報記憶手段に記憶されていると判別された場合に、前記ダンプ情報記憶手段からダンプ情報を抽出するダンプ情報抽出手段と、
前記ダンプ情報抽出手段により抽出されたダンプ情報に含まれるスタックフレームの内容を所定の表示形式に加工し、各モジュールの実行履歴を表示するスタックフレーム表示手段と、
を備えることを特徴とするメモリリーク検出システム。
【請求項４】
オペレーティングシステムに起動制御され、複数のモジュールが階層的に実行され得るアプリケーションプログラムにおけるメモリ領域の解放漏れを検出するメモリリーク検出システムであって、
システムにおけるスタックを解析し、スタック上の一群のデータからなるスタックフレームを特定するスタック解析部と、
起動したアプリケーションプログラムから呼び出され、所定のメモリ領域を確保すると共に、前記スタック解析部により特定されるその時点でのアプリケーションプログラムにおける各モジュールの実行履歴を得るためのスタックフレームを取得するメモリ確保ライブラリと、
前記メモリ確保ライブラリが確保したメモリ領域のアドレス及び、取得したスタックフレームからなるダンプ情報を逐次記憶する管理テーブルと、
前記メモリ確保ライブラリが確保したメモリ領域を、アプリケーションプログラムからの要求に従って解放すると共に、前記管理テーブルに記憶されたダンプ情報を削除するメモリ解放ライブラリと、
アプリケーションプログラムの起動が完了すると、前記管理テーブルに記憶されているダンプ情報の有無を判別し、ダンプ情報が記憶されていると判別した場合に、ダンプ情報に含まれるスタックフレームの内容から、各モジュールの実行履歴を表示するテーブル表示部と、
を備えることを特徴とするメモリリーク検出システム。
【請求項５】
オペレーティングシステムに起動制御され、複数のモジュールが階層的に実行され得るアプリケーションプログラムにおけるメモリ領域の解放漏れを検出するメモリリーク検出方法であって、
起動したアプリケーションプログラムからの要求に従って、所定のメモリ領域を確保するメモリ領域確保ステップと、
前記メモリ領域確保ステップにてメモリ領域が確保された時点でのアプリケーションプログラムにおける各モジュールの実行履歴を得るためのスタック情報を取得するスタック情報取得ステップと、
前記スタック情報取得ステップにて取得されたスタック情報を、前記メモリ領域確保ステップにて確保されたメモリ領域と対応付けて所定の管理テーブルに格納するスタック情報格納ステップと、
前記メモリ領域確保ステップにて確保されたメモリ領域を、アプリケーションプログラムからの要求に従って解放するメモリ領域解放ステップと、
前記メモリ領域解放ステップにて解放されたメモリ領域に対応する管理テーブルに格納されたスタック情報を削除するスタック情報削除ステップと、
アプリケーションプログラムの起動が完了すると、前記スタック情報削除ステップにて管理テーブルから削除されずに残っているスタック情報の有無を判別するスタック情報判別ステップと、
前記スタック情報判別ステップにてスタック情報が管理テーブルに残っていると判別された場合に、管理テーブルに格納されたスタック情報を抽出し、各モジュールの実行履歴を表示するスタック情報表示ステップと、
を備えることを特徴とするメモリリーク検出方法。
【請求項６】
オペレーティングシステムに起動制御され、複数のモジュールが階層的に実行され得るアプリケーションプログラムにおけるメモリ領域の解放漏れを検出するメモリリーク検出方法をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
起動したアプリケーションプログラムからの要求に従って、所定のメモリ領域を確保するメモリ領域確保ステップと、前記メモリ領域確保ステップにてメモリ領域が確保された時点でのアプリケーションプログラムにおける各モジュールの実行履歴を得るためのスタック情報を取得するスタック情報取得ステップと、前記スタック情報取得ステップにて取得されたスタック情報を、前記メモリ領域確保ステップにて確保されたメモリ領域と対応付けて所定の管理テーブルに格納するスタック情報格納ステップと、前記メモリ領域確保ステップにて確保されたメモリ領域を、アプリケーションプログラムからの要求に従って解放するメモリ領域解放ステップと、前記メモリ領域解放ステップにて解放されたメモリ領域に対応する管理テーブルに格納されたスタック情報を削除するスタック情報削除ステップと、アプリケーションプログラムの起動が完了すると、前記スタック情報削除ステップにて管理テーブルから削除されずに残っているスタック情報の有無を判別するスタック情報判別ステップと、前記スタック情報判別ステップにてスタック情報が管理テーブルに残っていると判別された場合に、管理テーブルに格納されたスタック情報を抽出し、各モジュールの実行履歴を表示するスタック情報表示ステップとを有するメモリリーク検出方法をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、アプリケーションプログラム等のデバッグ時に、メモリ領域の解放漏れを検出し、さらにその要因を的確に特定することのできるメモリリーク検出システム、メモリリーク検出方法及び記録媒体に関する。
【０００２】
【従来の技術】
コンピュータシステムのＯＳ（Operating System）上で実行されるアプリケーションプログラムは、一般に、ＯＳの機能の一つであるシステムコールやＡＰＩ（Application Program Interface）等を介して、例えば、所定のメモリ領域を動的に確保し、確保したメモリ領域を使用して情報処理等を行う。そして、アプリケーションプログラムは、情報処理等を終えると、確保したメモリ領域を解放し、ＯＳに返却する。
この際、アプリケーションプログラムに、何らかのバグがあり、メモリ領域の解放が行われないと、いわゆるメモリリークが発生する。すなわち、この場合、メモリリークとは、アプリケーションプログラム等が不要となったメモリ領域を適切に解放しない（システムに返還しない）ため、使用されないメモリ領域がメモリ空間に残ってしまう状態をいう。
【０００３】
このようなメモリリークが発生すると、ＯＳが、メモリ空間に残ったメモリ領域を他のアプリケーションプログラムに割り当てることができなくなり、システム全体として、使用可能なメモリの総量が減少することとなる。そして、使用可能なメモリの総量が、限界まで減少すると、アプリケーションプログラム等が異常終了してしまう。そのため、アプリケーションプログラムの開発において、メモリリークを発生させるようなバグを適切に取り除くように、テスト工程にて、デバッグされる。
【０００４】
近年、ユーザの操作性の向上や多機能性等を実現するため、アプリケーションプログラムは、一般に、その規模が大きくなっている。アプリケーションプログラムの規模が、大きくなるに従って、プログラム中にメモリリークを発生するようなバグを含む可能性が高くなるだけでなく、メモリリークを検出することや、メモリリークを生じるバグの要因を特定することが困難となっている。
【０００５】
このようなアプリケーションプログラムのメモリリークを、実用的に検出する技術が、特開平９−２４４９４８号公報に開示されている。この技術は、メモリ領域の割り当て時に割当情報を、またメモリ領域の解放時に解除情報をそれぞれ記憶し、解放されないメモリ領域が、プログラムのどの箇所で割り当てられたものかを調査するものである。
【０００６】
【発明が解決しようとする課題】
しかし、特開平９−２４４９４８号公報に開示されている技術では、アプリケーションプログラムにおけるメモリ領域を割り当てた箇所を特定することができても、さらにその箇所を呼び出した関数の呼び出し経路を特定することはできない。
そのため、階層的に関数の呼び出しが行われているアプリケーションプログラム等では、十分な情報が得られないこととなり、メモリリークの原因を的確に特定することができなかった。
【０００７】
この発明は、上記実状に鑑みてなされたもので、メモリ領域の解放漏れを検出し、さらにその要因を的確に特定することのできるメモリリーク検出システム、メモリリーク検出方法及び記録媒体を提供することを目的とする。
【０００８】
【課題を解決するための手段】
上記目的を達成するため、本発明の第１の観点に係るメモリリーク検出システムは、
オペレーティングシステムに起動制御され、複数のモジュールが階層的に実行され得るアプリケーションプログラムにおけるメモリ領域の解放漏れを検出するメモリリーク検出システムであって、
起動したアプリケーションプログラムからの要求に従って、所定のメモリ領域を確保するメモリ領域確保手段と、
前記メモリ領域確保手段がメモリ領域を確保した時点でのアプリケーションプログラムにおける各モジュールの実行履歴を得るためのスタック情報を取得するスタック情報取得手段と、
前記スタック情報取得手段が取得したスタック情報を、前記メモリ領域確保手段が確保したメモリ領域と対応付けて記憶するスタック情報記憶手段と、
前記メモリ領域確保手段が確保したメモリ領域を、アプリケーションプログラムからの要求に従って解放するメモリ領域解放手段と、
前記メモリ領域解放手段により解放されたメモリ領域に対応するスタック情報を前記スタック情報記憶手段から削除するスタック情報削除手段と、
アプリケーションプログラムの起動が完了すると、前記スタック情報記憶手段にスタック情報が記憶されているか否かを判別するスタック情報判別手段と、
前記スタック情報判別手段によりスタック情報が前記スタック情報記憶手段に記憶されていると判別された場合に、前記スタック情報記憶手段からスタック情報を抽出し、各モジュールの実行履歴を表示するスタック情報表示手段と、
を備えることを特徴とする。
【０００９】
この発明によれば、メモリ領域確保手段は、起動したアプリケーションプログラムからの要求に従って、所定のメモリ領域を確保する。スタック情報取得手段は、メモリ領域確保手段がメモリ領域を確保した時点でのアプリケーションプログラムにおける各モジュールの実行履歴を得るためのスタック情報を取得する。スタック情報記憶手段は、スタック情報取得手段が取得したスタック情報を、メモリ領域確保手段が確保したメモリ領域と対応付けて記憶する。メモリ領域解放手段は、メモリ領域確保手段が確保したメモリ領域を、アプリケーションプログラムからの要求に従って解放する。スタック情報削除手段は、メモリ領域解放手段により解放されたメモリ領域に対応するスタック情報をスタック情報記憶手段から削除する。スタック情報判別手段は、アプリケーションプログラムの起動が完了すると、スタック情報記憶手段にスタック情報が記憶されているか否かを判別する。スタック情報表示手段は、スタック情報判別手段によりスタック情報がスタック情報記憶手段に記憶されていると判別された場合に、スタック情報記憶手段からスタック情報を抽出し、各モジュールの実行履歴を表示する。この結果、アプリケーションプログラムにおけるメモリ領域の解放漏れを検出し、さらに、メモリリークの要因を的確に特定することができる。
【００１０】
前記スタック情報取得手段が取得するスタック情報は、少なくともスタック上の一群のデータからなるスタックフレームを含み、
前記スタック情報表示手段は、スタック情報に含まれるスタックフレームに従って、前記メモリ領域確保手段にメモリ領域の確保を要求したアプリケーションプログラムにおけるモジュール階層を表示してもよい。この場合、メモリ領域の解放漏れを検出すると、表示されたアプリケーションプログラムにおけるモジュール階層から、メモリリークの要因を的確に特定することができる。
【００１１】
上記目的を達成するため、本発明の第２の観点に係るメモリリーク検出システムは、
オペレーティングシステムに起動制御され、複数のモジュールが階層的に実行され得るアプリケーションプログラムにおけるメモリ領域の解放漏れを検出するメモリリーク検出システムであって、
起動したアプリケーションプログラムからの要求に従って、所定のメモリ領域を確保するメモリ領域確保手段と、
前記メモリ領域確保手段がメモリ領域を確保した時点でのスタックを解析し、メモリ領域の確保を要求したアプリケーションプログラムにおける各モジュールの実行履歴を得ることのできるスタック上の一群のデータからなるスタックフレームを特定するスタックフレーム特定手段と、
前記スタックフレーム特定手段により特定されたスタックフレーム及び、前記メモリ領域確保手段が確保したメモリ領域のアドレスからなるダンプ情報を生成するダンプ情報生成手段と、
前記ダンプ情報生成手段が生成したダンプ情報を逐次記憶するダンプ情報記憶手段と、
前記メモリ領域確保手段が確保したメモリ領域を、アプリケーションプログラムからの要求に従って解放するメモリ領域解放手段と、
前記メモリ領域解放手段により解放されたメモリ領域のアドレスに従って、ダンプ情報記憶手段に記憶された対応するダンプ情報を特定するダンプ情報特定手段と、
前記ダンプ情報特定手段により特定されたダンプ情報を前記ダンプ情報記憶手段から削除するダンプ情報削除手段と、
アプリケーションプログラムの起動が完了すると、前記ダンプ情報記憶手段にダンプ情報が記憶されているか否かを判別するダンプ情報判別手段と、
前記ダンプ情報判別手段によりダンプ情報が前記ダンプ情報記憶手段に記憶されていると判別された場合に、前記ダンプ情報記憶手段からダンプ情報を抽出するダンプ情報抽出手段と、
前記ダンプ情報抽出手段により抽出されたダンプ情報に含まれるスタックフレームの内容を所定の表示形式に加工し、各モジュールの実行履歴を表示するスタックフレーム表示手段と、
を備えることを特徴とする。
【００１２】
この発明によれば、メモリ領域確保手段は、起動したアプリケーションプログラムからの要求に従って、所定のメモリ領域を確保する。スタックフレーム特定手段は、メモリ領域確保手段がメモリ領域を確保した時点でのスタックを解析し、メモリ領域の確保を要求したアプリケーションプログラムにおける各モジュールの実行履歴を得ることのできるスタック上の一群のデータからなるスタックフレームを特定する。ダンプ情報生成手段は、スタックフレーム特定手段により特定されたスタックフレーム及び、メモリ領域確保手段が確保したメモリ領域のアドレスからなるダンプ情報を生成する。ダンプ情報記憶手段は、ダンプ情報生成手段が生成したダンプ情報を逐次記憶する。メモリ領域解放手段は、メモリ領域確保手段が確保したメモリ領域を、アプリケーションプログラムからの要求に従って解放する。ダンプ情報特定手段は、メモリ領域解放手段により解放されたメモリ領域のアドレスに従って、ダンプ情報記憶手段に記憶された対応するダンプ情報を特定する。ダンプ情報削除手段は、ダンプ情報特定手段により特定されたダンプ情報をダンプ情報記憶手段から削除する。ダンプ情報判別手段は、アプリケーションプログラムの起動が完了すると、ダンプ情報記憶手段にダンプ情報が記憶されているか否かを判別する。ダンプ情報抽出手段は、ダンプ情報判別手段によりダンプ情報がダンプ情報記憶手段に記憶されていると判別された場合に、ダンプ情報記憶手段からダンプ情報を抽出する。スタックフレーム表示手段は、ダンプ情報抽出手段により抽出されたダンプ情報に含まれるスタックフレームの内容を所定の表示形式に加工し、各モジュールの実行履歴を表示する。この結果、アプリケーションプログラムにおけるメモリ領域の解放漏れを検出し、さらに、メモリリークの要因を的確に特定することができる。
【００１３】
上記目的を達成するため、本発明の第３の観点に係るメモリリーク検出システムは、
オペレーティングシステムに起動制御され、複数のモジュールが階層的に実行され得るアプリケーションプログラムにおけるメモリ領域の解放漏れを検出するメモリリーク検出システムであって、
システムにおけるスタックを解析し、スタック上の一群のデータからなるスタックフレームを特定するスタック解析部と、
起動したアプリケーションプログラムから呼び出され、所定のメモリ領域を確保すると共に、前記スタック解析部により特定されるその時点でのアプリケーションプログラムにおける各モジュールの実行履歴を得るためのスタックフレームを取得するメモリ確保ライブラリと、
前記メモリ確保ライブラリが確保したメモリ領域のアドレス及び、取得したスタックフレームからなるダンプ情報を逐次記憶する管理テーブルと、
前記メモリ確保ライブラリが確保したメモリ領域を、アプリケーションプログラムからの要求に従って解放すると共に、前記管理テーブルに記憶されたダンプ情報を削除するメモリ解放ライブラリと、
アプリケーションプログラムの起動が完了すると、前記管理テーブルに記憶されているダンプ情報の有無を判別し、ダンプ情報が記憶されていると判別した場合に、ダンプ情報に含まれるスタックフレームの内容から、各モジュールの実行履歴を表示するテーブル表示部と、
を備えることを特徴とする。
【００１４】
この発明によれば、スタック解析部は、システムにおけるスタックを解析し、スタック上の一群のデータからなるスタックフレームを特定する。メモリ確保ライブラリは、起動したアプリケーションプログラムから呼び出され、所定のメモリ領域を確保すると共に、スタック解析部により特定されるその時点でのアプリケーションプログラムにおける各モジュールの実行履歴を得るためのスタックフレームを取得する。管理テーブルは、メモリ確保ライブラリが確保したメモリ領域のアドレス及び、取得したスタックフレームからなるダンプ情報を逐次記憶する。メモリ解放ライブラリは、メモリ確保ライブラリが確保したメモリ領域を、アプリケーションプログラムからの要求に従って解放すると共に、管理テーブルに記憶されたダンプ情報を削除する。テーブル表示部は、アプリケーションプログラムの起動が完了すると、管理テーブルに記憶されているダンプ情報の有無を判別し、ダンプ情報が記憶されていると判別した場合に、ダンプ情報に含まれるスタックフレームの内容から、各モジュールの実行履歴を表示する。この結果、アプリケーションプログラムにおけるメモリ領域の解放漏れを検出し、さらに、メモリリークの要因を的確に特定することができる。
【００１５】
上記目的を達成するため、本発明の第４の観点に係るメモリリーク検出方法は、
オペレーティングシステムに起動制御され、複数のモジュールが階層的に実行され得るアプリケーションプログラムにおけるメモリ領域の解放漏れを検出するメモリリーク検出方法であって、
起動したアプリケーションプログラムからの要求に従って、所定のメモリ領域を確保するメモリ領域確保ステップと、
前記メモリ領域確保ステップにてメモリ領域が確保された時点でのアプリケーションプログラムにおける各モジュールの実行履歴を得るためのスタック情報を取得するスタック情報取得ステップと、
前記スタック情報取得ステップにて取得されたスタック情報を、前記メモリ領域確保ステップにて確保されたメモリ領域と対応付けて所定の管理テーブルに格納するスタック情報格納ステップと、
前記メモリ領域確保ステップにて確保されたメモリ領域を、アプリケーションプログラムからの要求に従って解放するメモリ領域解放ステップと、
前記メモリ領域解放ステップにて解放されたメモリ領域に対応する管理テーブルに格納されたスタック情報を削除するスタック情報削除ステップと、
アプリケーションプログラムの起動が完了すると、前記スタック情報削除ステップにて管理テーブルから削除されずに残っているスタック情報の有無を判別するスタック情報判別ステップと、
前記スタック情報判別ステップにてスタック情報が管理テーブルに残っていると判別された場合に、管理テーブルに格納されたスタック情報を抽出し、各モジュールの実行履歴を表示するスタック情報表示ステップと、
を備えることを特徴とする。
【００１６】
この発明によれば、メモリ領域確保ステップは、起動したアプリケーションプログラムからの要求に従って、所定のメモリ領域を確保する。スタック情報取得ステップは、メモリ領域確保ステップにてメモリ領域が確保された時点でのアプリケーションプログラムにおける各モジュールの実行履歴を得るためのスタック情報を取得する。スタック情報格納ステップは、スタック情報取得ステップにて取得されたスタック情報を、メモリ領域確保ステップにて確保されたメモリ領域と対応付けて所定の管理テーブルに格納する。メモリ領域解放ステップは、メモリ領域確保ステップにて確保されたメモリ領域を、アプリケーションプログラムからの要求に従って解放する。スタック情報削除ステップは、メモリ領域解放ステップにて解放されたメモリ領域に対応する管理テーブルに格納されたスタック情報を削除する。スタック情報判別ステップは、アプリケーションプログラムの起動が完了すると、スタック情報削除ステップにて管理テーブルから削除されずに残っているスタック情報の有無を判別する。スタック情報表示ステップは、スタック情報判別ステップにてスタック情報が管理テーブルに残っていると判別された場合に、管理テーブルに格納されたスタック情報を抽出し、各モジュールの実行履歴を表示する。この結果、アプリケーションプログラムにおけるメモリ領域の解放漏れを検出し、さらに、メモリリークの要因を的確に特定することができる。
【００１７】
上記目的を達成するため、本発明の第５の観点に係る記録媒体は、
オペレーティングシステムに起動制御され、複数のモジュールが階層的に実行され得るアプリケーションプログラムにおけるメモリ領域の解放漏れを検出するメモリリーク検出方法をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
起動したアプリケーションプログラムからの要求に従って、所定のメモリ領域を確保するメモリ領域確保ステップと、前記メモリ領域確保ステップにてメモリ領域が確保された時点でのアプリケーションプログラムにおける各モジュールの実行履歴を得るためのスタック情報を取得するスタック情報取得ステップと、前記スタック情報取得ステップにて取得されたスタック情報を、前記メモリ領域確保ステップにて確保されたメモリ領域と対応付けて所定の管理テーブルに格納するスタック情報格納ステップと、前記メモリ領域確保ステップにて確保されたメモリ領域を、アプリケーションプログラムからの要求に従って解放するメモリ領域解放ステップと、前記メモリ領域解放ステップにて解放されたメモリ領域に対応する管理テーブルに格納されたスタック情報を削除するスタック情報削除ステップと、アプリケーションプログラムの起動が完了すると、前記スタック情報削除ステップにて管理テーブルから削除されずに残っているスタック情報の有無を判別するスタック情報判別ステップと、前記スタック情報判別ステップにてスタック情報が管理テーブルに残っていると判別された場合に、管理テーブルに格納されたスタック情報を抽出し、各モジュールの実行履歴を表示するスタック情報表示ステップとを有するメモリリーク検出方法をコンピュータに実行させるためのプログラムを記録する。
【００１８】
【発明の実施の形態】
本発明の実施の形態にかかるメモリリーク検出システムについて、以下図面を参照して説明する。
【００１９】
図１は、この発明の実施の形態に適用されるメモリリーク検出システムの一例を示す模式図である。このシステムは、所定のＯＳに起動制御されるアプリケーションプログラムにおけるメモリ領域の解放漏れを検出するメモリリーク検出システムであって、アプリケーションプログラム１と、メモリ管理ライブラリ２と、スタック解析部３と、管理テーブル４と、テーブル表示制御部５とを備える。
【００２０】
アプリケーションプログラム１は、メモリリークの検査対象となる所定のプログラムである。アプリケーションプログラム１は、メモリ管理ライブラリ２を介して、システムにおける所定のメモリ領域を動的に確保し、確保したメモリ領域を使用して情報処理等を行う。そして、アプリケーションプログラム１は、情報処理等を終えると、メモリ管理ライブラリ２を介して、確保したメモリ領域を解放する。
【００２１】
メモリ管理ライブラリ２は、メモリ領域の確保および解放を行うライブラリプログラムである。
メモリ管理ライブラリ２は、メモリ領域を確保する際に、スタック解析部３を呼び出して、処理中のアプリケーションプログラム１におけるスタックフレームを取得する。そして、取得したスタックフレームと確保されたメモリ領域のアドレスとを管理テーブル４に記憶する。なお、スタックフレームについては、後述する。
また、メモリ管理ライブラリ２は、確保したメモリ領域を解放する際に、管理テーブル４に記憶されている対象のスタックフレーム等を削除する。
【００２２】
スタック解析部３は、処理中のアプリケーションプログラム１におけるスタックの内容を解析し、スタックフレームを取得する。
【００２３】
なお、スタックフレームとは、プログラムの実行履歴情報を得ることのできるスタック上の一群のデータ（フレーム）であり、例えば、図２（ａ）に示すように、アプリケーションプログラム１を構成する複数のモジュール（関数等）のうち、１モジュールが実行されると、そのモジュールにて使用される１フレーム分のスタックが生成される。
そして、複数のモジュールが階層的に実行されると、図２（ｂ）に示すように、親フレームとその親フレームによって起動された子フレームというように、実行されたモジュールの履歴を示すスタックフレームが関連して生成される。
従って、スタックフレームの内容をトレースすることにより、例えば、どのような関数を経由してメモリ管理ライブラリ２が呼び出されたのか等、アプリケーションプログラム１の実行履歴が明確となる。
【００２４】
図１に戻って、管理テーブル４は、メモリ管理ライブラリ２がメモリ領域を確保する際に、メモリ管理ライブラリ２から供給されたスタックフレームと確保されたメモリ領域のアドレスとを１組としたダンプ情報を記憶する。また、メモリ管理ライブラリ２がメモリ領域を確保する際に、対象のダンプ情報がメモリ管理ライブラリ２によって削除される。
すなわち、管理テーブル４は、現在確保された状態となっているメモリ領域に対応したダンプ情報を記憶する。なお、確保されたメモリ領域と管理テーブル４に記憶されたダンプ情報とは、１対１に対応するため、複数のメモリ領域が確保されている場合、ダンプ情報も複数存在することとなる。
【００２５】
テーブル表示制御部５は、アプリケーションプログラム１の起動完了後（実行終了後）に、管理テーブル４にダンプ情報が記憶されている場合に、記憶されているダンプ情報抽出する。テーブル表示制御部５は、抽出したダンプ情報に含まれるスタックフレームの内容をユーザが容易にトレースできるように加工して、所定のディスプレイに表示する。
【００２６】
以下、この実施の形態に係るメモリリーク検出システムにおけるメモリリーク検出処理について図面を参照して説明する。図３は、メモリリーク検出処理を説明するためのフローチャートである。図３に示すメモリリーク検出処理は、検査対象のアプリケーションプログラム１の起動の準備をした後、ユーザから所定の入力デバイスを介して入力された指示情報に応答して開始する。
【００２７】
まず、テーブル表示制御部５は、管理テーブル４を初期化する（ステップＳ１）。すなわち、テーブル表示制御部５は、管理テーブル４に記憶されている情報を全てクリアする。
【００２８】
管理テーブル４の初期化後、ＯＳは、アプリケーションプログラム１の処理を起動する（ステップＳ２）。
【００２９】
アプリケーションプログラム１は、処理中にメモリ確保の要求が発生した場合（ステップＳ３）、メモリ管理ライブラリ２を呼び出す。
【００３０】
アプリケーションプログラム１に呼び出されたメモリ管理ライブラリ２は、所定のメモリ領域の確保と、スタックフレームの取得を行う（ステップＳ４）。すなわち、メモリ管理ライブラリ２は、アプリケーションプログラム１が要求したメモリ領域を確保すると共に、スタック解析部３を呼び出して、アプリケーションプログラム１におけるスタックの内容を解析し、スタック上の一群のデータからなるスタックフレームを取得する。
【００３１】
メモリ管理ライブラリ２は、取得したスタックフレームと確保したメモリ領域のアドレスとからなるダンプ情報を管理テーブル４に記憶する（ステップＳ５）。
【００３２】
アプリケーションプログラム１は、確保したメモリ領域を使用して、所定の情報処理を行う。アプリケーションプログラム１は、所定の情報処理を終え、確保したメモリ解放の要求が発生した場合（ステップＳ６）、メモリ管理ライブラリ２を呼び出す。
【００３３】
アプリケーションプログラム１に呼び出されたメモリ管理ライブラリ２は、確保されたメモリ領域の解放と、ダンプ情報の削除を行う（ステップＳ７）。すなわち、メモリ管理ライブラリ２は、アプリケーションプログラム１が確保していたメモリ領域を解放すると共に、管理テーブル４に記憶された対応するダンプ情報を削除する。
【００３４】
上記のステップＳ３〜Ｓ７の処理は、アプリケーションプログラム１の起動処理が完了するまで逐次繰り返される（ステップＳ８）。
【００３５】
アプリケーションプログラム１の起動処理が完了すると、テーブル表示制御部５は、管理テーブル４を参照し、ダンプ情報が記録されているか否かを判別する（ステップＳ９）。すなわち、テーブル表示制御部５は、メモリリークの発生を示すダンプ情報が管理テーブル４に記憶されているか否かを判別する。
【００３６】
テーブル表示制御部５は、管理テーブル４にダンプ情報が記録されていないと判別した場合、メモリリーク検出処理を終了する。この際、メモリリークが発生しなかった旨を表示してもよい。
一方、ダンプ情報が記録されていると判別した場合、テーブル表示制御部５は、ダンプ情報に含まれるスタックフレーム等を表示する（ステップＳ１０）。例えば、テーブル表示制御部５は、図４に示すように、スタックフレームの内容と共に、アプリケーションプログラム１のソースコードを表示して、ユーザがメモリリークの要因を把握できるように、所定のディスプレイに表示する。
【００３７】
この結果、メモリ領域の解放漏れを検出し、さらにその要因を的確に特定することができる。
【００３８】
上記の実施の形態では、テーブル表示制御部５が、管理テーブル４から削除されなかったダンプ情報に含まれるスタックフレーム等のみを表示したが、削除されなかったダンプ情報のスタックフレームから辿った呼び出し元である親フレームをも表示してもよい。この場合、メモリリークの要因を更に的確に特定することができる。
【００３９】
上記の実施の形態では、メモリ領域が解放された際に、管理テーブル４から対応するダンプ情報を削除したが、管理テーブル４からダンプ情報の削除を行わずに、全体のメモリ領域の確保と解放とを把握し、解放が行われなかったメモリ領域を検出してもよい。
【００４０】
なお、この発明の実施の形態にかかるメモリリーク検出システムは、専用のシステムによらず、通常のコンピュータシステムを用いて実現可能である。例えば、コンピュータに上述のいずれかを実行するためのプログラムを格納した媒体（フロッピーディスク、ＣＤ−ＲＯＭ等）から該プログラムをインストールすることにより、上述の処理を実行するメモリリーク検出システムを構成することができる。
【００４１】
また、コンピュータにプログラムを供給するための媒体は、通信媒体（通信回線、通信ネットワーク、通信システムのように、一時的かつ流動的にプログラムを保持する媒体）でも良い。例えば、通信ネットワークの掲示板（ＢＢＳ）に該プログラムを掲示し、これをネットワークを介して配信してもよい。
そして、このプログラムを起動し、ＯＳの制御下で、他のアプリケーションプログラムと同様に実行することにより、上述の処理を実行することができる。
【００４２】
【発明の効果】
以上説明したように、本発明によれば、メモリ領域の解放漏れを検出し、さらにその要因を的確に特定することができる。
【図面の簡単な説明】
【図１】本発明の実施の形態に係るメモリリーク検出システムの構成の一例を示す模式図である。
【図２】（ａ）がスタックフレームの一例を示す模式図であり、（ｂ）が親フレームと子フレームとの関係を表す模式図である。
【図３】本発明の実施の形態に係るメモリリーク検出処理を説明するためのフローチャートである。
【図４】テーブル表示制御部により所定の画面に表示されるメモリリーク検出画面の一例を示す模式図である。
【符号の説明】
１  アプリケーションプログラム
２  メモリ管理ライブラリ
３  スタック解析部
４  管理テーブル
５  テーブル表示制御部
【図１】
0003735484.tif 000002
【図２】
0003735484.tif 000003
【図３】
0003735484.tif 000004
【図４】
0003735484.tif 000005