JP4575252B2 - メモリリーク検出プログラム、メモリリーク検出装置およびメモリリーク検出方法 - Google Patents

メモリリーク検出プログラム、メモリリーク検出装置およびメモリリーク検出方法 Download PDF

Info

Publication number
JP4575252B2
JP4575252B2 JP2005227849A JP2005227849A JP4575252B2 JP 4575252 B2 JP4575252 B2 JP 4575252B2 JP 2005227849 A JP2005227849 A JP 2005227849A JP 2005227849 A JP2005227849 A JP 2005227849A JP 4575252 B2 JP4575252 B2 JP 4575252B2
Authority
JP
Japan
Prior art keywords
memory
computer program
memory leak
character string
contents
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2005227849A
Other languages
English (en)
Other versions
JP2007042007A5 (ja
JP2007042007A (ja
Inventor
勝 横井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yahoo Japan Corp
Original Assignee
Yahoo Japan Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Yahoo Japan Corp filed Critical Yahoo Japan Corp
Priority to JP2005227849A priority Critical patent/JP4575252B2/ja
Publication of JP2007042007A publication Critical patent/JP2007042007A/ja
Publication of JP2007042007A5 publication Critical patent/JP2007042007A5/ja
Application granted granted Critical
Publication of JP4575252B2 publication Critical patent/JP4575252B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Description

本発明は、メモリリークが発生したか否かを検出するメモリリーク検出プログラム、メモリリーク検出装置およびメモリリーク検出方法に関し、特に、検査対象となるコンピュータプログラムを変更することなく、メモリリークの発生を容易かつ効率的に検出することができるメモリリーク検出プログラム、メモリリーク検出装置およびメモリリーク検出方法に関する。
従来、コンピュータプログラムのソースコードに含まれる誤りを、コンピュータプログラムの開発者が容易に発見できるようにするために、デバッガとよばれるソフトウェアツールが利用されている。
このデバッガは、コンピュータプログラムの実行を、ブレークポイントと呼ばれるあらかじめ設定された位置で停止させながら、変数の内容などの情報を出力する。開発者は、出力された情報を参照することにより、ソースコードのどこに誤りがあるかを見つけ出す作業をおこなう。
このようなデバッガがブレークポイントを設定できる領域は、RAM領域に展開されたコンピュータプログラムに限定される。そのため、ROM領域に記憶されたコンピュータプログラムのデバッグをおこなう場合にはブレークポイントの設定が困難であるという問題があった。
この問題を解決するために、ROM領域に記憶されたコンピュータプログラムをRAM領域にコピーするとともに、RAM領域にコピーされたコンピュータプログラムにブレークポイントを設定し、さらにコンピュータプログラムの実行アドレスをRAM領域に設定することにより、あたかもROM領域にブレークポイントを設定したかのようにしてデバッグを実行する技術が開示されている(特許文献1を参照)。
特開2001−265620号公報
しかしながら、上述した従来技術では、コンピュータプログラムにより動的に確保されたメモリ領域が解放されないことによって生じるメモリリークを検出することが難しいという問題があった。
具体的には、コンピュータプログラムの実行をブレークポイントを設定することにより停止させ、各変数の内容を確認したとしても、その変数を格納しているメモリ領域が解放されるべきものであるか否かを変数の内容から判断することは難しく、メモリリークを検出する目的には適さないという問題があった。
また、従来、検査対象となるコンピュータプログラムがメモリ領域の確保や解放を実行した場合に、その情報をメモリ領域を確保または解放した回数だけ記録するようにコンピュータプログラムを変更し、メモリ領域の確保と解放とが対応しているか否かを確認することによりメモリリークを検出する方法が用いられているが、この方法では、検査対象となるコンピュータプログラムを変更しなければならないという問題があった。
このような場合、たとえば、メモリリークの発生原因であると予想されるコンピュータプログラムが変更困難な外部ライブラリであると、メモリリークの検出が非常に難しくなるという問題があった。
利用される頻度の少ないコンピュータプログラムでは、たとえメモリリークが発生したとしてもその影響は大きくないが、頻繁に利用されるコンピュータプログラムでメモリリークが発生すると、メモリが不足し、コンピュータがダウンするなどの障害を発生させてしまう。そのため、検査対象となるコンピュータプログラムを変更することなく、メモリリークの発生をいかに容易かつ効率的に検出することができるかが重要な課題として挙げられている。
この発明は、上述した従来技術による問題点を解消するためになされたものであり、検査対象となるコンピュータプログラムを変更することなく、メモリリークの発生を容易かつ効率的に検出することができるメモリリーク検出プログラム、メモリリーク検出装置およびメモリリーク検出方法を提供することを目的とする。
上述した課題を解決し、目的を達成するため、本発明は、コンピュータプログラムを実行した場合に当該コンピュータプログラムに割り当てられる範囲のメモリにおいてメモリリークが発生したか否かを検出するメモリリーク検出プログラムであって、前記コンピュータプログラムをp 1 回連続かつその間に前記メモリの内容を初期化することなく実行した時点の前記メモリの内容と、前記コンピュータプログラムをp 2 連続かつその間に前記メモリの内容を初期化することなく実行した時点前記メモリの内容とを読み出して出力するメモリ内容出力手順と、前記コンピュータプログラムをp 1 回実行した時点の前記メモリの内容から、前記コンピュータプログラムに含まれる関数の引数を表す文字列パターンの出現回数a 1 を文字列パターンごとに計測し、また、前記コンピュータプログラムをp 2 回実行した時点の前記メモリの内容から、前記コンピュータプログラムに含まれる関数の引数を表す文字列パターンの出現回数a 2 を文字列パターンごとに計測し、同一の文字列パターンの出現回数a 1 およびa 2 の差が、前記コンピュータプログラムの実行回数p 1 およびp 2 の差の整数倍となる文字列パターンがある場合に、メモリリークが発生したことを検出するメモリリーク検出手順と、をコンピュータに実行させることを特徴とする。
また、本発明は、コンピュータプログラムを実行した場合に当該コンピュータプログラムに割り当てられる範囲のメモリにおいてメモリリークが発生したか否かを検出するメモリリーク検出装置であって、前記コンピュータプログラムをp 1 回連続かつその間に前記メモリの内容を初期化することなく実行した時点の前記メモリの内容と、前記コンピュータプログラムをp 2 連続かつその間に前記メモリの内容を初期化することなく実行した時点前記メモリの内容とを読み出して出力するメモリ内容出力手段と、前記コンピュータプログラムをp 1 回実行した時点の前記メモリの内容から、前記コンピュータプログラムに含まれる関数の引数を表す文字列パターンの出現回数a 1 を文字列パターンごとに計測し、また、前記コンピュータプログラムをp 2 回実行した時点の前記メモリの内容から、前記コンピュータプログラムに含まれる関数の引数を表す文字列パターンの出現回数a 2 を文字列パターンごとに計測し、同一の文字列パターンの出現回数a 1 およびa 2 の差が、前記コンピュータプログラムの実行回数p 1 およびp 2 の差の整数倍となる文字列パターンがある場合に、メモリリークが発生したことを検出するメモリリーク検出手段と、を備えたことを特徴とする。
また、本発明は、上記発明において、前記メモリリーク検出手段によりメモリリークの発生が検出された場合に、前記パターンに基づいてメモリリークの原因に係る情報を抽出し、抽出した情報を出力するメモリリーク原因情報出力手段をさらに備えたことを特徴とする。
また、本発明は、コンピュータプログラムを実行した場合に当該コンピュータプログラムに割り当てられる範囲のメモリにおいてメモリリークが発生したか否かを検出するメモリリーク検出方法であって、前記コンピュータプログラムをp 1 回連続かつその間に前記メモリの内容を初期化することなく実行した時点の前記メモリの内容と、前記コンピュータプログラムをp 2 連続かつその間に前記メモリの内容を初期化することなく実行した時点前記メモリの内容とを読み出して出力するメモリ内容出力工程と、前記コンピュータプログラムをp 1 回実行した時点の前記メモリの内容から、前記コンピュータプログラムに含まれる関数の引数を表す文字列パターンの出現回数a 1 を文字列パターンごとに計測し、また、前記コンピュータプログラムをp 2 回実行した時点の前記メモリの内容から、前記コンピュータプログラムに含まれる関数の引数を表す文字列パターンの出現回数a 2 を文字列パターンごとに計測し、同一の文字列パターンの出現回数a 1 およびa 2 の差が、前記コンピュータプログラムの実行回数p 1 およびp 2 の差の整数倍となる文字列パターンがある場合に、メモリリークが発生したことを検出するメモリリーク検出工程と、を含んだことを特徴とする。
本発明によれば、コンピュータプログラムを複数回実行した場合のメモリの内容を読み出して出力し、出力したメモリの内容に基づいてメモリリークが発生したか否かを検出することとしたので、コンピュータプログラムが複数回実行された場合にメモリリークが発生するとメモリの内容が変化することを利用して、検査対象となるコンピュータプログラムを変更することなく、メモリリークの発生を容易かつ効率的に検出することができるという効果を奏する。
また、本発明によれば、コンピュータプログラムをp1回実行した場合のコンピュータプログラムに割り当てられている範囲のメモリの内容と、コンピュータプログラムをp2回実行した場合のコンピュータプログラムに割り当てられている範囲のメモリの内容とを読み出して出力することとしたので、コンピュータプログラムの実行回数が異なる場合にメモリリーク時のメモリの内容が変化することを利用して、メモリリークの発生を容易かつ効率的に検出することができるという効果を奏する。
また、本発明によれば、コンピュータプログラムをp1回実行した場合のメモリの内容から同一のパターンの出現回数a1を計測し、また、コンピュータプログラムをp2回実行した場合のメモリの内容から同一のパターンの出現回数a2を計測し、当該同一のパターンの出現回数a1およびa2に基づいてメモリリークが発生したか否かを検出することとしたので、メモリリーク発生時にコンピュータプログラムの実行回数に応じて同一のパターンの出現回数が異なることを利用して、メモリリークの発生を容易かつ効率的に検出することができるという効果を奏する。
また、本発明によれば、同一のパターンの出現回数a1およびa2の差が、コンピュータプログラムの実行回数p1およびp2の差の整数倍である場合に、メモリリークが発生したことを検出することとしたので、メモリリーク発生時に同一のパターンの出現回数a1およびa2の差が、コンピュータプログラムの実行回数p1およびp2の差の整数倍となることを利用して、メモリリークの発生を容易かつ効率的に検出することができるという効果を奏する。
また、本発明によれば、メモリリークの発生が検出された場合に、上記パターンに基づいてメモリリークの原因に係る情報を抽出し、抽出した情報を出力することとしたので、メモリリークを発生させるコンピュータプログラムの誤り部分を容易かつ効率的に検出することができるという効果を奏する。
また、本発明によれば、上記パターンは、コンピュータプログラムにおける関数の引数を表すパターンであることとしたので、メモリリークの発生回数に応じて引数を表すパターンがメモリに格納されることを利用して、メモリリークの発生を容易かつ効率的に検出することができるという効果を奏する。
以下に添付図面を参照して、本発明に係るメモリリーク検出プログラム、メモリリーク検出装置およびメモリリーク検出方法の好適な実施例を詳細に説明する。
なお、ここでは、ウェブブラウザを搭載したクライアント装置からHTTP(HyperText Transfer Protocol)リクエストを受け付けた場合に実行されるHTML情報処理プログラムのメモリリークを検出する場合について説明する。
このHTML情報処理プログラムは、HTTPリクエストによりリクエストされたHTML(HyperText Markup Language)文書をクライアント装置に出力することにより、クライアント装置に対してウェブページの閲覧サービスを提供するプログラムであり、ウェブサーバ装置に搭載されるプログラムである。ただし、メモリリークの検出対象となるプログラムは、これに限定されるものではなく、その他のプログラムであってもよい。
まず、本発明に係るメモリリーク検出処理について説明する。図1は、メモリリークを発生させるコンピュータプログラムの一例を示す図である。ここでは、プログラミング言語としてC言語を用いている。
図1に示すコンピュータプログラムは、memleak_func関数とmain関数とから構成されている。memleak_func関数は、解放しないメモリ領域を作り出し、メモリリークを発生させる関数である。具体的には、memleak_func関数は、strdup関数によりstrbufのメモリ領域を確保しているが、確保したメモリ領域の解放はおこなわない。
また、main関数は、メモリリークが発生した場合にメモリの内容をコアファイルに書き出す関数である。具体的には、main関数は、memleak_func関数をcnt回だけ呼び出して実行し、その後、abort関数を用いて当該プログラムを強制的に中止し、プログラムを中止した時点のメモリの内容をコアファイルに書き出す。
このメモリリーク検出処理では、cntを異なる値に設定してmain関数を2回実行し、2つのコアファイルを生成する。たとえば、1回目のmain関数の実行時にはcntを1,024に設定し、2回目のmain関数の実行時にはcntを1,234に設定する。
そして、以下のようなコマンドを実行することにより、2つのコアファイルにそれぞれ含まれる文字列パターンの出現回数を計測する。
(コマンド)strings corefile | sort | uniq -c | sort -r | head
具体的には、上記コマンドは、コアファイルから文字列パターンを抽出して並べ替え、重複した文字列パターンの数を計測し、さらに並び順を逆にして先頭から10行分を出力させるコマンドである。
このコマンドを2つのコアファイルに適用した出力結果が図2および図3に示したものとなる。図2は、memleak_func関数の実行回数を1,024に設定した場合のコアファイルに対して文字列パターンの出現回数の計測を実行した結果の一例を示す図であり、図3は、memleak_func関数の実行回数を1,234に設定した場合のコアファイルに対して文字列パターンの出現回数の計測を実行した結果の一例を示す図である。
図2に示した結果と図3に示した結果では、memleak_func関数の引数である「memleaked strings」という文字列パターンの出現回数のみが異なっている。具体的には、1回目にcntを1,024に設定してプログラムを実行した場合の文字列パターン「memleaked strings」の出現回数は1,025回となり、2回目にcntを1,234に設定してプログラムを実行した場合の文字列パターン「memleaked strings」の出現回数は1,235回となる。
すなわち、1回目と2回目のmemleak_func関数の実行回数の差が210回(=1,234−1,024)である場合に、文字列パターン「memleaked strings」の出現回数の差は210回(=1,235−1,025)となり、memleak_func関数の実行回数の差と同じ値になる。
なお、ここでは、1回のmemleak_func関数の処理でメモリリークが1回だけ発生する場合が示されているが、一般には、呼び出された関数内において、メモリリークが複数回発生する場合もある。
その場合には、1回の関数の処理で発生するメモリリークの回数をnとすると、当該関数の1回目と2回目の実行回数p1およびp2の差の絶対値|p1−p2|と、当該関数の1回目と2回目の実行時に、引数を現す文字列パターンがメモリ領域に出現する出現回数a1およびa2の差の絶対値|a1−a2|との間の関係は、
|p1−p2|×n=|a1−a2| ......(式1)
のようになる。
したがって、メモリリークが発生したか否かは、1回目と2回目の関数の実行回数p1およびp2、文字列パターンがメモリ領域に出現する出現回数a1およびa2が式1を満足するか否かを調べることにより判定することができる。
なお、本実施例では、HTTPリクエストをそれぞれp1回およびp2回生成し、そのHTTPリクエストによりリクエストされたHTML情報の処理をおこなうHTML情報処理プログラムを1回目と2回目とに分けてそれぞれp1回およびp2回実行することにより、メモリリークが発生しているか否かの検出をおこなう。このHTML情報処理プログラムは、図1に示したような関数を多数組み合わせることにより構成されたプログラムである。
図4は、ウェブサーバに搭載されるHTML情報処理プログラムの処理実行サイクルについて説明する図である。図4に示すように、HTML情報処理プログラムの処理実行サイクルは、ウェブブラウザを搭載したクライアント装置により送信されたHTTPリクエストを受け付け、リクエストされたHTML文書をHTTPレスポンスとしてクライアント装置に送信する処理を繰り返すものとなっている。
この場合、HTML情報処理プログラムにおいて、メモリの解放をおこなっていない関数があり、その関数がHTTPリクエストごとに変化しない場合には、HTTPリクエストにより確保されるメモリ領域の内容は同じ内容となる。
そのため、このメモリリーク検出処理では、HTML情報処理プログラムを1回目と2回目とに分けてそれぞれp1回およびp2回実行し、メモリ領域に出現する文字列パターンの出現回数a1,a2が式1を満足するか否かを調べることによりメモリリークが発生したか否かを検出することとしている。これにより、メモリリークの発生を容易かつ効率的に検出することができる。
つぎに、本実施例に係るメモリリーク検出装置の機能構成について説明する。図5は、本実施例に係るメモリリーク検出装置の機能構成を示す図である。
図5に示すように、このメモリリーク検出装置は、入力部10、表示部11、記憶部12、プログラム実行処理部13、メモリ内容出力部14、同一パターン出現回数計測部15、メモリリーク検出部16、メモリリーク原因情報出力部17および制御部18を有する。
入力部10は、キーボードやマウスなどの入力デバイスである。表示部11は、ディスプレイなどの表示デバイスである。記憶部12は、メモリやハードディスクなどの記憶デバイスである。
この記憶部12は、HTML情報処理プログラム12a、第1コアファイル12b、第2コアファイル12c、第1同一パターン出現回数データ12d、第2同一パターン出現回数データ12e、メモリリーク検出結果12f、および、メモリリーク原因データ12gを記憶している。
HTML情報処理プログラム12aは、ウェブブラウザを搭載したクライアント装置からHTTPリクエストを受け付けた場合に実行されるウェブサーバ用のプログラムである。このHTML情報処理プログラム12aは、リクエストされたHTML文書をクライアント装置に送信する処理をおこなう。
このHTML情報処理プログラム12aは、図1に示したような関数を多数組み合わせることにより構成されたプログラムであり、メモリリークを発生させるか否かが検査されるプログラムである。
第1コアファイル12bは、HTML情報処理プログラム12aがp1回実行された場合のメモリの内容を記憶したコアファイルである。第2コアファイル12cは、HTML情報処理プログラム12aがp2回実行された場合のメモリの内容を記憶したコアファイルである。
第1同一パターン出現回数データ12dは、第1コアファイル12bに含まれる文字列パターンの出現回数を記憶したものである。具体的には、第1同一パターン出現回数データ12dは、関数の引数などの文字列パターンが第1コアファイル12bに出現した出現回数を記憶したものである。
第2同一パターン出現回数データ12eは、第2コアファイル12cに含まれる文字列パターンの出現回数を記憶したものである。具体的には、第2同一パターン出現回数データ12eは、関数の引数などの文字列パターンが第2コアファイル12cに出現した出現回数を記憶したものである。
メモリリーク検出結果12fは、メモリリークが発生したか否かを判定した判定結果の情報を記憶したものである。メモリリーク原因データ12gは、メモリリークの発生原因となっている関数の関数名や位置などの情報を記憶したものである。
プログラム実行処理部13は、記憶部12からHTML情報処理プログラム12aを読み出して実行する処理部である。具体的には、プログラム実行処理部13は、HTTPリクエストをp1回生成することによりHTML情報処理プログラム12aをp1回実行し、また、HTTPリクエストをp2回生成することによりHTML情報処理プログラム12aをp2回実行する。
メモリ内容出力部14は、プログラム実行処理部13によりHTML情報処理プログラム12aが1回目と2回目とに分けてp1,p2回実行された場合に、メモリの内容をそれぞれ出力し、記憶部12に第1コアファイル12bおよび第2コアファイル12cとして記憶させる出力部である。
同一パターン出現回数計測部15は、記憶部12から第1コアファイル12bおよび第2コアファイル12cを読み出して、第1コアファイル12bおよび第2コアファイル12cに出現する関数の引数などの文字列パターンの出現回数をそれぞれ計測し、その出現回数の情報を記憶部12に、第1同一パターン出現回数データ12dおよび第2同一パターン出現回数データ12eとして記憶させる計測部である。
メモリリーク検出部16は、記憶部12から第1同一パターン出現回数データ12dおよび第2同一パターン出現回数データ12eを読み出して、文字列パターンの出現回数が式1を満足するか否かを調べることにより、メモリリークが発生したか否かを検出する検出部である。
メモリリーク原因情報出力部17は、メモリリーク検出部16によりメモリリークの発生が検出された場合に、式1を満足した文字列パターン(本実施例では、この文字列パターンは関数の引数である。)を基にして、HTML情報処理プログラム12a中からその文字列パターンを含んだ関数を探索し、探索された関数の関数名や位置の情報を出力する出力部である。
制御部18は、メモリリーク検出装置を全体制御する制御部であり、各機能部間のデータの授受などを司る。
つぎに、本実施例に係るメモリリーク検出処理の処理手順について説明する。図6は、本実施例に係るメモリリーク検出処理の処理手順を示すフローチャートである。
図6に示すように、まず、メモリリーク検出装置のプログラム実行処理部13は、p1回HTTPリクエストを生成してHTML情報処理プログラム12aを実行する(ステップS101)。
そして、メモリ内容出力部14は、メモリ領域に格納されているデータを第1コアファイル12bとして出力する(ステップS102)。続いて、同一パターン出現回数計測部15は、第1コアファイル12bにおける文字列パターンの出現回数a1を計測する(ステップS103)。
さらに、プログラム実行処理部13は、p2回HTTPリクエストを生成してHTML情報処理プログラム12aを実行する(ステップS104)。そして、メモリ内容出力部14は、メモリ領域に格納されているデータを第2コアファイル12cとして出力する(ステップS105)。続いて、同一パターン出現回数計測部15は、第2コアファイル12cにおける文字列パターンの出現回数a2を計測する(ステップS106)。
その後、メモリリーク検出部16は、p1,p2,a1およびa2の各値の間に式1の関係があるか否かを調べる(ステップS107)。各値の間に式1の関係がある場合には(ステップS107,Yes)、メモリリーク検出部16は、メモリリークが発生したと判定する(ステップS108)。
そして、メモリリーク原因情報出力部17は、式1の関係を満足した文字列パターン(本実施例の場合は、関数の引数)を含んでいる関数の関数名や位置の情報をHTML情報処理プログラム12aから抽出し(ステップS109)、抽出した関数名や位置の情報を表示部11に出力して(ステップS110)、このメモリリーク検出処理を終了する。
ステップS107において、各値の間に式1の関係がなかった場合には(ステップS107,No)、メモリリーク検出部16は、メモリリークの発生は無いと判定し(ステップS111)、その判定結果を表示部11に出力して(ステップS112)、このメモリリーク検出処理を終了する。
以上、上記実施例において、メモリリーク検出処理をコンピュータ上で実現する場合について説明してきたが、メモリリーク検出処理を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータに読み込ませ、実行することによりメモリリーク検出処理を実現してもよい。
図7は、メモリリーク検出処理を実現するコンピュータ100のハードウェア構成を示すブロック図である。
図7に示すように、このコンピュータ100は、上記プログラムを実行するCPU110と、データを入力する入力装置120と、各種データを記憶するROM130と、演算パラメータ等を記憶するRAM140と、メモリリーク検出処理を実現するためのプログラムを記録した記録媒体200からプログラムを読み取る読取装置150と、ディスプレイ等の出力装置160と、ネットワーク300を介して他のコンピュータとの間でデータの授受をおこなうネットワークインターフェース170とが、バス180で接続された構成となっている。
CPU110は、読取装置150を経由して記録媒体200に記録されているプログラムを読み込んだ後、メモリリーク検出プログラムを実行することにより、メモリリーク検出処理を実現する。
なお、記録媒体200としては、光ディスク、フレキシブルディスク、CD−ROM、ハードディスク等が挙げられる。また、このメモリリーク検出プログラムは、ネットワーク300を介してコンピュータ100に導入することとしてもよい。
上述してきたように、本実施例では、メモリリーク検出装置のメモリ内容出力部14が、HTML情報処理プログラム12aを複数回実行した場合のメモリの内容を読み出して出力し、メモリリーク検出部16が、出力したメモリの内容に基づいてメモリリークが発生したか否かを検出することとしたので、HTML情報処理プログラム12aが複数回実行された場合にメモリリークが発生するとメモリの内容が変化することを利用して、検査対象となるHTML情報処理プログラム12aを変更することなく、メモリリークの発生を容易かつ効率的に検出することができる。
また、本実施例では、メモリ内容出力部14が、HTML情報処理プログラム12aをp1回実行した場合のコンピュータプログラムに割り当てられている範囲のメモリの内容と、HTML情報処理プログラム12aをp2回実行した場合のコンピュータプログラムに割り当てられている範囲のメモリの内容とを読み出して出力することとしたので、HTML情報処理プログラム12aの実行回数が異なる場合にメモリリーク時のメモリの内容が変化することを利用して、メモリリークの発生を容易かつ効率的に検出することができる。
また、本実施例では、同一パターン出現回数計測部15が、HTML情報処理プログラム12aをp1回実行した場合のメモリの内容から同一の引数の出現回数a1を計測し、また、HTML情報処理プログラム12aをp2回実行した場合のメモリの内容から同一のパターンの出現回数a2を計測し、メモリリーク検出部16が、当該同一の引数の出現回数a1およびa2に基づいてメモリリークが発生したか否かを検出することとしたので、メモリリーク発生時にHTML情報処理プログラム12aの実行回数に応じて同一の引数の出現回数が異なることを利用して、メモリリークの発生を容易かつ効率的に検出することができる。
また、本実施例では、メモリリーク検出部16が、同一の引数の出現回数a1およびa2の差が、HTML情報処理プログラム12aの実行回数p1およびp2の差の整数倍である場合に、メモリリークが発生したことを検出することとしたので、メモリリーク発生時に同一の引数の出現回数a1およびa2の差が、HTML情報処理プログラム12aの実行回数p1およびp2の差の整数倍となることを利用して、メモリリークの発生を容易かつ効率的に検出することができる。
また、本実施例では、メモリリーク原因情報出力部17が、メモリリーク検出部16によりメモリリークの発生が検出された場合に、上記引数に基づいてメモリリークの発生原因に係る情報を抽出し、抽出した情報を出力することとしたので、メモリリークを発生させるHTML情報処理プログラム12aの誤り部分を容易かつ効率的に検出することができる。
また、本実施例では、HTML情報処理プログラム12aにおける関数の引数を表す文字列パターンの出現回数a1およびa2を用いてメモリリークの発生を検出することとしたので、メモリリークの発生回数に応じて引数がメモリに格納されることを利用して、メモリリークの発生を容易かつ効率的に検出することができる。
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、特許請求の範囲に記載した技術的思想の範囲内において種々の異なる実施例にて実施されてもよいものである。
たとえば、本実施例では、HTML情報処理プログラム12aを1回目と2回目とに分けてp1回およびp2回実行し、文字列パターンの出現回数a1およびa2が式1を満足するか否かを調べることによりメモリリークを検出することとしたが、本発明はこれに限定されるものではなく、HTML情報処理プログラム12aをp1回実行した際、引数などの文字列パターンが、たとえば、(p1の整数倍+1)回だけコアファイルに書き出されることがあらかじめ判明しているような場合には、文字列パターンが(p1の整数倍+1)回コアファイルに出現するか否かを検出することによりメモリリークを検出することとしてもよい。
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。
この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示したメモリリーク検出装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示のように構成されていることを要しない。すなわち、メモリリーク検出装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
さらに、メモリリーク検出装置にて行なわれる処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
以上のように、本発明に係るメモリリーク検出プログラム、メモリリーク検出装置およびメモリリーク検出方法は、検査対象となるコンピュータプログラムを変更することなく、メモリリークの発生を容易かつ効率的に検出することが必要なメモリリーク検出システムに有用である。
メモリリークを発生させるコンピュータプログラムの一例を示す図である。 memleak_func関数の実行回数を1,024に設定した場合のコアファイルに対して文字列パターンの出現回数の計測を実行した結果の一例を示す図である。 memleak_func関数の実行回数を1,234に設定した場合のコアファイルに対して文字列パターンの出現回数の計測を実行した結果の一例を示す図である。 ウェブサーバに搭載されるHTML情報処理プログラムの処理実行サイクルについて説明する図である。 本実施例に係るメモリリーク検出装置の機能構成を示す図である。 本実施例に係るメモリリーク検出処理の処理手順を示すフローチャートである。 メモリリーク検出処理を実現するコンピュータ100のハードウェア構成を示すブロック図である。
符号の説明
10 入力部
11 表示部
12 記憶部
12a HTML情報処理プログラム
12b 第1コアファイル
12c 第2コアファイル
12d 第1同一パターン出現回数データ
12e 第2同一パターン出現回数データ
12f メモリリーク検出結果
12g メモリリーク原因データ
13 プログラム実行処理部
14 メモリ内容出力部
15 同一パターン出現回数計測部
16 メモリリーク検出部
17 メモリリーク原因情報出力部
18 制御部

Claims (4)

  1. コンピュータプログラムを実行した場合に当該コンピュータプログラムに割り当てられる範囲のメモリにおいてメモリリークが発生したか否かを検出するメモリリーク検出装置であって、
    前記コンピュータプログラムをp 1 回連続かつその間に前記メモリの内容を初期化することなく実行した時点の前記メモリの内容と、前記コンピュータプログラムをp 2 連続かつその間に前記メモリの内容を初期化することなく実行した時点前記メモリの内容とを読み出して出力するメモリ内容出力手段と、
    前記コンピュータプログラムをp 1 回実行した時点の前記メモリの内容から、前記コンピュータプログラムに含まれる関数の引数を表す文字列パターンの出現回数a 1 を文字列パターンごとに計測し、また、前記コンピュータプログラムをp 2 回実行した時点の前記メモリの内容から、前記コンピュータプログラムに含まれる関数の引数を表す文字列パターンの出現回数a 2 を文字列パターンごとに計測し、同一の文字列パターンの出現回数a 1 およびa 2 の差が、前記コンピュータプログラムの実行回数p 1 およびp 2 の差の整数倍となる文字列パターンがある場合に、メモリリークが発生したことを検出するメモリリーク検出手段と、
    を備えたことを特徴とするメモリリーク検出装置。
  2. 前記メモリリーク検出手段によりメモリリークの発生が検出された場合に、前記パターンに基づいてメモリリークの原因に係る情報を抽出し、抽出した情報を出力するメモリリーク原因情報出力手段をさらに備えたことを特徴とする請求項に記載のメモリリーク検出装置。
  3. コンピュータプログラムを実行した場合に当該コンピュータプログラムに割り当てられる範囲のメモリにおいてメモリリークが発生したか否かを検出するメモリリーク検出プログラムであって、
    前記コンピュータプログラムをp 1 回連続かつその間に前記メモリの内容を初期化することなく実行した時点の前記メモリの内容と、前記コンピュータプログラムをp 2 連続かつその間に前記メモリの内容を初期化することなく実行した時点前記メモリの内容とを読み出して出力するメモリ内容出力手順と、
    前記コンピュータプログラムをp 1 回実行した時点の前記メモリの内容から、前記コンピュータプログラムに含まれる関数の引数を表す文字列パターンの出現回数a 1 を文字列パターンごとに計測し、また、前記コンピュータプログラムをp 2 回実行した時点の前記メモリの内容から、前記コンピュータプログラムに含まれる関数の引数を表す文字列パターンの出現回数a 2 を文字列パターンごとに計測し、同一の文字列パターンの出現回数a 1 およびa 2 の差が、前記コンピュータプログラムの実行回数p 1 およびp 2 の差の整数倍となる文字列パターンがある場合に、メモリリークが発生したことを検出するメモリリーク検出手順と、
    をコンピュータに実行させることを特徴とするメモリリーク検出プログラム。
  4. コンピュータプログラムを実行した場合に当該コンピュータプログラムに割り当てられる範囲のメモリにおいてメモリリークが発生したか否かを検出するメモリリーク検出方法であって、
    前記コンピュータプログラムをp 1 回連続かつその間に前記メモリの内容を初期化することなく実行した時点の前記メモリの内容と、前記コンピュータプログラムをp 2 連続かつその間に前記メモリの内容を初期化することなく実行した時点前記メモリの内容とを読み出して出力するメモリ内容出力工程と、
    前記コンピュータプログラムをp 1 回実行した時点の前記メモリの内容から、前記コンピュータプログラムに含まれる関数の引数を表す文字列パターンの出現回数a 1 を文字列パターンごとに計測し、また、前記コンピュータプログラムをp 2 回実行した時点の前記メモリの内容から、前記コンピュータプログラムに含まれる関数の引数を表す文字列パターンの出現回数a 2 を文字列パターンごとに計測し、同一の文字列パターンの出現回数a 1 およびa 2 の差が、前記コンピュータプログラムの実行回数p 1 およびp 2 の差の整数倍となる文字列パターンがある場合に、メモリリークが発生したことを検出するメモリリーク検出工程と、
    を含んだことを特徴とするメモリリーク検出方法。
JP2005227849A 2005-08-05 2005-08-05 メモリリーク検出プログラム、メモリリーク検出装置およびメモリリーク検出方法 Expired - Fee Related JP4575252B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005227849A JP4575252B2 (ja) 2005-08-05 2005-08-05 メモリリーク検出プログラム、メモリリーク検出装置およびメモリリーク検出方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005227849A JP4575252B2 (ja) 2005-08-05 2005-08-05 メモリリーク検出プログラム、メモリリーク検出装置およびメモリリーク検出方法

Publications (3)

Publication Number Publication Date
JP2007042007A JP2007042007A (ja) 2007-02-15
JP2007042007A5 JP2007042007A5 (ja) 2008-04-17
JP4575252B2 true JP4575252B2 (ja) 2010-11-04

Family

ID=37799904

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005227849A Expired - Fee Related JP4575252B2 (ja) 2005-08-05 2005-08-05 メモリリーク検出プログラム、メモリリーク検出装置およびメモリリーク検出方法

Country Status (1)

Country Link
JP (1) JP4575252B2 (ja)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000293400A (ja) * 1999-04-08 2000-10-20 Nec Corp メモリリーク検出システム、メモリリーク検出方法及び記録媒体
JP2001265620A (ja) * 2000-03-22 2001-09-28 Kyocera Corp Romのプログラムデバッグ方式
JP2001331368A (ja) * 2000-05-19 2001-11-30 Oki Electric Ind Co Ltd メモリ解放漏れ判定方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04135256A (ja) * 1990-09-27 1992-05-08 Nippon Telegr & Teleph Corp <Ntt> ガーベージ検出方法
JPH10269105A (ja) * 1997-01-27 1998-10-09 N T T Data Tsushin Kk トレースシステム、リソース解放漏れ検出システム及び記録媒体
JPH10269133A (ja) * 1997-03-25 1998-10-09 Hitachi Ltd 計算機システムのメモリ解放漏れ検証方式

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000293400A (ja) * 1999-04-08 2000-10-20 Nec Corp メモリリーク検出システム、メモリリーク検出方法及び記録媒体
JP2001265620A (ja) * 2000-03-22 2001-09-28 Kyocera Corp Romのプログラムデバッグ方式
JP2001331368A (ja) * 2000-05-19 2001-11-30 Oki Electric Ind Co Ltd メモリ解放漏れ判定方法

Also Published As

Publication number Publication date
JP2007042007A (ja) 2007-02-15

Similar Documents

Publication Publication Date Title
US9208057B2 (en) Efficient model checking technique for finding software defects
JP4148527B2 (ja) 機能テスト・スクリプト生成装置
CN101473301B (zh) 迭代静态和动态软件分析
US7849450B1 (en) Devices, methods and computer program products for reverse execution of a simulation
Hangal et al. TSOtool: A program for verifying memory systems using the memory consistency model
Costa et al. What's wrong with my benchmark results? Studying bad practices in JMH benchmarks
US9411616B2 (en) Classloader/instrumentation approach for invoking non-bound libraries
US8381175B2 (en) Low-level code rewriter verification
JP2006185211A (ja) プログラム解析装置、テスト実行装置、その解析方法及びプログラム
US8701084B1 (en) Preview of auto-fix changes to software code
US20080028378A1 (en) Utilizing prior usage data for software build optimization
JPWO2009075116A1 (ja) プログラムデバッグ方法、プログラム変換方法及びそれを用いるプログラムデバッグ装置、プログラム変換装置並びに記憶媒体
US20110067013A1 (en) Systems and methods for deferring software implementation decisions until load time
JP6303749B2 (ja) ソフトウェアプログラムを解析する方法及びシステム並びに非一時的なコンピュータ可読媒体
US20220335135A1 (en) Vulnerability analysis and reporting for embedded systems
JP5303795B2 (ja) アプリケーションの解析方法、解析システム及び解析プログラム
Winzinger et al. Model-based analysis of serverless applications
US7530060B1 (en) Methods and computer program product for optimizing binaries with coding style formalization
JP6878707B2 (ja) 試験装置、試験方法および試験プログラム
US8756580B2 (en) Instance-based field affinity optimization
JP4575252B2 (ja) メモリリーク検出プログラム、メモリリーク検出装置およびメモリリーク検出方法
Fedorova et al. Performance comprehension at WiredTiger
JP2006294019A (ja) 汎用ソフトウェア要件アナライザ
Karnick et al. A qualitative analysis of java obfuscation
Nagarajan et al. A system for debugging via online tracing and dynamic slicing

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080305

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080305

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20091020

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100518

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100720

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100810

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100819

R150 Certificate of patent or registration of utility model

Ref document number: 4575252

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130827

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees