(57)【要約】【課題】メモリリーク及び不正メモリアクセスを短時間で検出する。【解決手段】ソースコードに静的解析を実行するソースコード解析装置において、解放フラグ及びアクセスフラグがソースコードの各スレッド毎に生成される。解放フラグは、各スレッドにより共有される共有メモリ領域を対応するスレッドが記憶部から解放したか否かを示す。アクセスフラグは、対応するスレッドが共有メモリ領域にアクセスしたか否かを示す。共有メモリ領域を記憶部から解放したスレッドに対応する解放フラグには、共有メモリ領域を解放したことを示す値が設定される。共有メモリ領域にアクセスしたスレッドに対応するアクセスフラグには、共有メモリ領域にアクセスしたことを示す値が設定される。各スレッド毎の解放フラグ及びアクセスフラグに基づいて、メモリリークの有無及び不正メモリアクセスを行うスレッドが検出される。【選択図】図２
2014215812.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードに静的解析を実行するソースコード解析装置であって、
前記ソースコードの各スレッドにより共有される共有メモリ領域を対応するスレッドが記憶部から解放したか否かを示す解放フラグ、及び、対応するスレッドが前記共有メモリ領域にアクセスしたか否かを示すアクセスフラグを各スレッド毎に生成するフラグ生成部と、
前記共有メモリ領域を前記記憶部から解放したスレッドに対応する解放フラグに共有メモリ領域を解放したことを示す値を設定する解放フラグ設定部と、
前記共有メモリ領域にアクセスしたスレッドに対応するアクセスフラグに共有メモリ領域にアクセスしたことを示す値を設定するアクセスフラグ設定部と、
各スレッド毎の前記解放フラグ及び前記アクセスフラグに基づいて、メモリリークの有無、及び不正メモリアクセスを行うスレッドを検出する解析部と、
を備えることを特徴とするソースコード解析装置。
【請求項２】
前記記憶部をさらに備え、
前記記憶部は、各スレッド毎の前記解放フラグ及び前記アクセスフラグと、前記メモリリークの有無、及び不正メモリアクセスを行うスレッドとが対応付けられた解析結果テーブルを格納することを特徴とする請求項１に記載のソースコード解析装置。
【請求項３】
ソースコードを静的に解析するソースコード解析方法であって、
前記ソースコードの各スレッドにより共有される共有メモリ領域を対応するスレッドが記憶部から解放したか否かを示す解放フラグ、及び、対応するスレッドが前記共有メモリ領域にアクセスしたか否かを示すアクセスフラグを各スレッド毎に生成するステップと、
前記共有メモリ領域を前記記憶部から解放したスレッドに対応する解放フラグに共有メモリ領域を解放したことを示す値を設定するステップと、
前記共有メモリ領域にアクセスしたスレッドに対応するアクセスフラグに共有メモリ領域にアクセスしたことを示す値を設定するステップと、
各スレッド毎の前記解放フラグ及び前記アクセスフラグに基づいて、メモリリークの有無、及び不正メモリアクセスを行うスレッドを検出するステップと、
を備えることを特徴とするソースコード解析方法。
【請求項４】
ソースコード解析装置の制御部にソースコードに静的に解析する機能を実行させるソースコード解析プログラムであって、
前記ソースコードの各スレッドにより共有される共有メモリ領域を対応するスレッドが記憶部から解放したか否かを示す解放フラグ、及び、対応するスレッドが前記共有メモリ領域にアクセスしたか否かを示すアクセスフラグを各スレッド毎に生成するステップと、
前記共有メモリ領域を前記記憶部から解放したスレッドに対応する解放フラグに共有メモリ領域を解放したことを示す値を設定するステップと、
前記共有メモリ領域にアクセスしたスレッドに対応するアクセスフラグに共有メモリ領域にアクセスしたことを示す値を設定するステップと、
各スレッド毎の前記解放フラグ及び前記アクセスフラグに基づいて、メモリリークの有無、及び不正メモリアクセスを行うスレッドを検出するステップと、
を前記制御部に実行させることを特徴とするソースコード解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコードを解析するソースコード解析装置、ソースコード解析方法及びソースコード解析プログラムに関する。
【背景技術】
【０００２】
一般に、コンピュータシステムでは、スレッドを生成する際、内部変数を用いてメモリに記憶領域を確保する。図４Ａは、生成したスレッド間でのメモリアクセスの一例を示すＰＡＤ（Problem Analysis Diagram）である。また、図４Ｂは、生成したスレッド間でのメモリアクセスの他の一例を示すＰＡＤである。
【０００３】
図４Ａによれば、起動した親スレッドにおいて、メモリ領域が確保され（Ｓ１０）、書き込み処理のためにメモリ領域がアクセスされ（Ｓ１１）、さらに、子スレッドが生成される（Ｓ１２）。生成された子スレッドでは、読み出し処理のためにメモリ領域がアクセスされ（Ｓ１３）、メモリ領域が解放される（Ｓ１４）。
【０００４】
また、図４Ｂによれば、起動した親スレッドにおいて、メモリ領域が確保され（Ｓ２０）、書き込み処理のためにメモリ領域がアクセスされ（Ｓ２１）、さらに、子スレッドが生成される（Ｓ２２）。生成された子スレッドでは、読み出し処理のためにメモリ領域がアクセスされる（Ｓ２３）。そして、親スレッドにおいて、メモリ領域が解放される（Ｓ２４）。
【０００５】
これらの処理により、スレッド間でデータが伝達される。たとえば、特許文献１では、スレッド間でデータの送受信を行う際、送信側のスレッドは、メモリ領域を確保してデータを記録する。また、受信側のスレッドは、メモリ領域に記録されたデータを取り出してメモリ領域を解放する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−２８２３８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来では、スレッド間でメモリ領域を共有する際、メモリリーク及び不正メモリアクセスが発生する場合がある。メモリリークは、使用可能なメモリ容量が減少する現象であり、確保したメモリ領域の解放し忘れなどによって発生する。たとえば、図４Ａにおいて、子スレッドにてメモリ領域を解放する処理（Ｓ１４）が実行されない場合、メモリ領域は確保された状態が維持される。そのため、他のスレッドは使用できない。
【０００８】
また、不正メモリアクセスは、解放されたメモリ領域にスレッドがアクセスすることにより発生する。たとえば、図４Ｂにおいて、親スレッドのメモリ領域の解放処理（Ｓ２４）が実行される時点が、子スレッドのメモリ領域へのアクセス処理（Ｓ２３）が実行される時点よりも早い場合、子スレッドは解放済みのメモリ領域に不正なアクセスを実行することになる。
【０００９】
このようなメモリリーク及びメモリの不正メモリアクセスを検出することは、従来の静的解析システムでは十分にできなかった。また、これらを動的解析にて検出する場合、静的解析にて検出する場合と比べて、非常に長い解析時間が必要であった。
【００１０】
また、特許文献１では、静的解析を行う際に、識別子を記録しておくことにより、送信側のスレッドで確保したメモリ領域を受信側のスレッドで解放することを認識できるようにしている。ところが、このような処理は、並行処理が可能なマルチスレッド間において、送信側のスレッドで確保したメモリ領域を受信側のスレッドで解放する場合にしか適用できない。
【００１１】
本発明は、このような状況を鑑みてなされたものであり、メモリリーク及び不正メモリアクセスを短時間で検出することができるソースコード解析装置、ソースコード解析方法、及びソースコード解析プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記目的を達成するために、本発明の一の局面によるソースコード解析装置は、ソースコードに静的解析を実行するソースコード解析装置であって、ソースコードの各スレッドにより共有される共有メモリ領域を対応するスレッドが記憶部から解放したか否かを示す解放フラグ、及び、対応するスレッドが共有メモリ領域にアクセスしたか否かを示すアクセスフラグを各スレッド毎に生成するフラグ生成部と、共有メモリ領域を記憶部から解放したスレッドに対応する解放フラグに共有メモリ領域を解放したことを示す値を設定する解放フラグ設定部と、共有メモリ領域にアクセスしたスレッドに対応するアクセスフラグに共有メモリ領域にアクセスしたことを示す値を設定するアクセスフラグ設定部と、各スレッド毎の解放フラグ及びアクセスフラグに基づいて、メモリリークの有無、及び不正メモリアクセスを行うスレッドを検出する解析部と、を備える。
【００１３】
上記構成によれば、ソースコードを静的に解析することにより、たとえば動的に解析するよりも短時間で解析を行うことができる。また、静的解析中に、ソースコードの各スレッドにより共有される共有メモリ領域が記憶部から解放されると、解放したスレッドに対応する解放フラグに、共有メモリ領域を解放したことを示す値が設定される。また、スレッドが共有メモリ領域にアクセスすると、アクセスしたスレッドに対応するアクセスフラグに、共有メモリ領域にアクセスしたことを示す値が設定される。そのため、各スレッド毎の解放フラグ及びアクセスフラグに設定された各値に基づいて、共有メモリ領域を解放したスレッド、或いは共有メモリ領域が解放されていないことが検出できる。さらに、解放された共有メモリ領域にアクセスするスレッドも検出することができる。従って、共有メモリ領域の解放し忘れによるメモリリーク、及び、共有メモリ領域を解放した後の不正メモリアクセスを短時間で検出することができる。
【００１４】
上記構成のソースコード解析装置は、記憶部をさらに備え、該記憶部は、各スレッド毎の解放フラグ及びアクセスフラグと、メモリリークの有無、及び不正メモリアクセスを行うスレッドとが対応付けられた解析結果テーブルを格納してもよい。
【００１５】
上記構成によると、解析結果テーブルを参照すれば、各スレッド毎の解放フラグ及びアクセスフラグに設定された各値に基づいて、メモリリーク及び不正メモリアクセスを簡便に検出することができる。
【００１６】
また、上記目的を達成するために、本発明の一の局面によるソースコード解析方法は、ソースコードを静的に解析するソースコード解析方法であって、ソースコードの各スレッドにより共有される共有メモリ領域を対応するスレッドが記憶部から解放したか否かを示す解放フラグ、及び、対応するスレッドが共有メモリ領域にアクセスしたか否かを示すアクセスフラグを各スレッド毎に生成するステップと、共有メモリ領域を記憶部から解放したスレッドに対応する解放フラグに共有メモリ領域を解放したことを示す値を設定するステップと、共有メモリ領域にアクセスしたスレッドに対応するアクセスフラグに共有メモリ領域にアクセスしたことを示す値を設定するステップと、各スレッド毎の解放フラグ及びアクセスフラグに基づいて、メモリリークの有無、及び不正メモリアクセスを行うスレッドを検出するステップと、を備える
【００１７】
上記構成によれば、ソースコードを静的に解析することにより、たとえば動的に解析するよりも短時間で解析を行うことができる。また、静的解析中に、ソースコードの各スレッドにより共有される共有メモリ領域が記憶部から解放されると、解放したスレッドに対応する解放フラグに、共有メモリ領域を解放したことを示す値が設定される。また、スレッドが共有メモリ領域にアクセスすると、アクセスしたスレッドに対応するアクセスフラグに、共有メモリ領域にアクセスしたことを示す値が設定される。そのため、各スレッド毎の解放フラグ及びアクセスフラグに設定された各値に基づいて、共有メモリ領域を解放したスレッド、或いは共有メモリ領域が解放されていないことが検出できる。さらに、解放された共有メモリ領域にアクセスするスレッドも検出することができる。従って、共有メモリ領域の解放し忘れによるメモリリーク、及び、共有メモリ領域を解放した後の不正メモリアクセスを短時間で検出することができる。
【００１８】
また、上記目的を達成するために、本発明の一の局面によるソースコード解析プログラムは、ソースコード解析装置の制御部にソースコードに静的に解析する機能を実行させるソースコード解析プログラムであって、ソースコードの各スレッドにより共有される共有メモリ領域を対応するスレッドが記憶部から解放したか否かを示す解放フラグ、及び、対応するスレッドが共有メモリ領域にアクセスしたか否かを示すアクセスフラグを各スレッド毎に生成するステップと、共有メモリ領域を記憶部から解放したスレッドに対応する解放フラグに共有メモリ領域を解放したことを示す値を設定するステップと、共有メモリ領域にアクセスしたスレッドに対応するアクセスフラグに共有メモリ領域にアクセスしたことを示す値を設定するステップと、各スレッド毎の解放フラグ及びアクセスフラグに基づいて、メモリリークの有無、及び不正メモリアクセスを行うスレッドを検出するステップと、を制御部に実行させる。
【００１９】
上記構成によれば、ソースコードを静的に解析することにより、たとえば動的に解析するよりも短時間で解析を行うことができる。また、静的解析中に、ソースコードの各スレッドにより共有される共有メモリ領域が記憶部から解放されると、解放したスレッドに対応する解放フラグに、共有メモリ領域を解放したことを示す値が設定される。また、スレッドが共有メモリ領域にアクセスすると、アクセスしたスレッドに対応するアクセスフラグに、共有メモリ領域にアクセスしたことを示す値が設定される。そのため、各スレッド毎の解放フラグ及びアクセスフラグに設定された各値に基づいて、共有メモリ領域を解放したスレッド、或いは共有メモリ領域が解放されていないことが検出できる。さらに、解放された共有メモリ領域にアクセスするスレッドも検出することができる。従って、共有メモリ領域の解放し忘れによるメモリリーク、及び、共有メモリ領域を解放した後の不正メモリアクセスを短時間で検出することができる。
【発明の効果】
【００２０】
本発明によれば、メモリリーク及び不正メモリアクセスを短時間で検出することができるソースコード解析装置、ソースコード解析方法、及びソースコード解析プログラムを提供することができる。
【図面の簡単な説明】
【００２１】
【図１】本実施形態に係る情報機器の構成を示すブロック図である。
【図２】静的解析プロセスを示すＰＡＤである。
【図３】解析結果テーブルの一例を示す図である。
【図４Ａ】生成したスレッド間でのメモリアクセスの一例を示すＰＡＤである。
【図４Ｂ】生成したスレッド間でのメモリアクセスの他の一例を示すＰＡＤである。
【発明を実施するための形態】
【００２２】
以下に、本発明の実施形態について、図面を参照し、情報機器１を例として説明する。
【００２３】
図１は、本実施形態に係る情報機器の構成を示すブロック図である。情報機器１は、ソースコードを静的に解析するソースコード解析装置であり、メモリリーク及び不正メモリアクセスの発生の有無、及び不正メモリアクセスの発生箇所を検出する。なお、ソースコードとは、プログラム言語で書かれたコンピュータプログラムである。図１に示すように、情報機器１は、記憶部１１と、ＣＰＵ１２と、表示部１３と、入力部１４と、通信部１５と、を含んで構成されている。
【００２４】
表示部１３は、たとえば液晶ディスプレイなどの表示装置であり、ソースコードの静的解析結果などが表示される。入力部１４は、たとえばキーボード、マウスなどであり、ユーザ入力を受け付ける。通信部１５は、外部機器と通信するためのインターフェースである。
【００２５】
記憶部１１は、不揮発性の記憶媒体であり、ソースコードにより生成される各スレッド（プログラムの最小の実行単位）により共有される共有メモリ領域が確保される。また、記憶部１１は、情報機器１を構成する各部（たとえばＣＰＵ１２など）が用いるプログラム及び制御情報を格納する。特に、記憶部１１は、静的解析プログラムＰ、解析結果テーブルＴ（後述の図３参照）、メモリ確保フラグＭ、ソースコードの各スレッド毎に対応する解放フラグ及びアクセスフラグを格納している。このほか、記憶部１１は、静的解析の対象となるソースコードを格納していてもよい。
【００２６】
静的解析プログラムＰは、ソースコードを静的に解析するソースコード解析プログラムであり、メモリリーク及び不正メモリアクセスなどを検出する。また、静的解析プログラムＰは、解析したソースコードに不正メモリアクセスが発生する場合、その発生箇所（スレッド）を特定することもできる。この静的解析プログラムＰの静的解析プロセスについては後に詳述する。
【００２７】
メモリ確保フラグＭは、ソースコードにより生成される１又は複数のスレッドがアクセスする共有メモリ領域が記憶部１１に確保されたか否かを示す。メモリ確保フラグＭは、ＯＮ（すなわち”ＴＲＵＥ”）を示す値が設定されている場合、共有メモリ領域が記憶部１１に確保したことを示す。また、メモリ確保フラグＭは、ＯＦＦ（すなわち”ＦＡＬＳＥ”）を示す値が設定されている場合、共有メモリ領域が記憶部１１に確保していないことを示す。
【００２８】
解放フラグは、対応するスレッドが共有メモリ領域を記憶部１１から解放（すなわち確保した状態の解除）をしたか否かを示す。解放フラグは、ＯＮ（すなわち”ＴＲＵＥ”）を示す値が設定されている場合、対応するスレッドが共有メモリ領域を解放したことを示す。一方、解放フラグは、ＯＦＦ（すなわち”ＦＡＬＳＥ”）を示す値が設定されている場合、対応するスレッドが共有メモリ領域を解放していないことを示す。なお、以下では、親スレッドに対応する解放フラグを親スレッド解放フラグＬｐと呼び、子スレッドに対応する解放フラグを子スレッド解放フラグＬｃと呼ぶ。
【００２９】
アクセスフラグは、対応するスレッドが共有メモリ領域にアクセスしたか否かを示す。スレッドアクセスフラグは、ＯＮ（すなわち”ＴＲＵＥ”）を示す値が設定されている場合、対応するスレッドが共有メモリ領域にアクセスしたことを示す。また、スレッドアクセスフラグは、ＯＦＦ（すなわち”ＦＡＬＳＥ”）を示す値が設定されている場合、対応するスレッドが共有メモリ領域にアクセスしなかったことを示す。なお、以下では、親スレッドに対応するアクセスフラグを親スレッドアクセスフラグＡｐと呼び、子スレッドに対応するアクセスフラグを子スレッドアクセスフラグＡｃと呼ぶ。
【００３０】
ＣＰＵ１２は、情報機器１の各部を制御する制御部であり、記憶部１１に格納されたプログラム及び制御情報を用いた様々な機能部を有する。たとえば、ＣＰＵ１２の機能部は、フラグ生成部１２１と、確保フラグ設定部１２２と、解放フラグ設定部１２３と、アクセスフラグ設定部１２４と、解析部１２５と、を含んで構成されている。
【００３１】
フラグ生成部１２１は、静的解析プログラムＰを用いて所定のソースコードを静的に解析する際、メモリ確保フラグＭを生成するとともに、解放フラグ及びアクセスフラグを各スレッド毎に生成する。生成されたこれらのフラグは、初期値としてＯＦＦ（すなわち”ＦＡＬＳＥ”）を示す値を設定され、前述のように、記憶部１１に格納される。
【００３２】
確保フラグ設定部１２２は、共有メモリ領域が記憶部１１に確保されると、メモリ確保フラグＭにＯＮ（すなわち”ＴＲＵＥ”）を示す値を設定する。また、共有メモリ領域が記憶部１１から解放されると、メモリ確保フラグＭにＯＦＦ（すなわち”ＦＡＬＳＥ”）を示す値を設定する。
【００３３】
解放フラグ設定部１２３は、共有メモリ領域が記憶部１１から解放される際、共有メモリ領域を記憶部１１から解放したスレッドに対応する解放フラグに所定値を設定する。この所定値は、対応するスレッドが共有メモリ領域を解放したことを示す値であり、通常、ＯＮ（すなわち”ＴＲＵＥ”）を示す値である。
【００３４】
アクセスフラグ設定部１２４は、共有メモリ領域にスレッドがアクセスした際、共有メモリ領域にアクセスしたスレッドに対応するアクセスフラグに所定値を設定する。この所定値は、対応するスレッドが共有メモリ領域にアクセスしたことを示す値であり、通常、ＯＮ（すなわち”ＴＲＵＥ”）を示す値である。
【００３５】
解析部１２５は、ユーザ入力などに基づいて所定のソースコードの静的解析が指示されると、静的解析プログラムＰを用いて、ソースコードの静的解析を行う。ソースコードの静的解析後、解析部１２５は解析結果を表示部１３に表示する。或いは、通信部１５を介して外部機器に出力してもよい。
【００３６】
また、解析部１２５は、ソースコードの静的解析の際、解析結果テーブルＴ（後述の図３参照）を参照し、各スレッド毎の解放フラグ及びアクセスフラグに設定された値に基づいて、メモリリークの有無、及び不正メモリアクセスを行うスレッドを検出する。この検出結果により、静的解析したソースコードが、共有メモリ領域の解放し忘れによるメモリリークが発生するか否か、解放済みの共有メモリ領域にスレッドがアクセスする不正メモリアクセスが発生するか否かを検出することができる。さらに、不正メモリアクセスが発生する場合にはその発生箇所（すなわち、不正メモリアクセスを行うスレッド）を検出することもできる。
【００３７】
次に、本実施形態の静的解析プログラムＰの解析手順について説明する。図２は、静的解析プロセスを示すＰＡＤ（Problem Analysis Diagram）である。
【００３８】
図２に示すように、静的解析プログラムＰでは、静的解析の対象であるソースコードの先頭行から最終行の読み込みが終了するまで、以下のＳ１０２〜Ｓ１０５の処理が反復して実行される（Ｓ１０１）。言い換えると、以下に説明するＳ１０２〜Ｓ１２６の処理が実行される。
【００３９】
まず、ソースコードが１行ずつ読み込まれ（Ｓ１０２）、読み込んだ行において、内部変数により記憶部１１に共有メモリ領域が確保されるか否かが判定される（Ｓ１０３）。確保されると判定される場合（Ｓ１０３でＹＥＳ）、メモリ確保フラグＭがＯＮに設定される（Ｓ１０６）。
【００４０】
次に、スレッドが生成されたか否かの検出が実行される（Ｓ１０４）。スレッドの生成が検出された場合（Ｓ１０４でＹＥＳ）、メモリ確保フラグＭがＯＮに設定されているか否かが判定される（Ｓ１０７）。ＯＮに設定されていると判定される場合（Ｓ１０７でＹＥＳ）、親スレッド解放フラグＬｐ、親スレッドアクセスフラグＡｐ、子スレッド解放フラグＬｃ、及び子スレッドアクセスフラグＡｃがそれぞれ生成されるとともにＯＦＦに設定される（Ｓ１０９）。
【００４１】
そして、親スレッドの先頭行（すなわち、Ｓ１０２の処理にて読み込み済みの行番号）から最終行の読み込みが終了するまで、Ｓ１１１〜Ｓ１１４の処理が反復して実行される（Ｓ１１０）。言い換えると、以下に説明するＳ１１１〜Ｓ１２６の処理が実行される。
【００４２】
まず、親スレッドが１行ずつ読み込まれ（Ｓ１１１）、読み込んだ行において、共有メモリ領域の解放が検出されるか否かが判定される（Ｓ１１２）。解放が検出されると判定される場合（Ｓ１１２でＹＥＳ）、親スレッド解放フラグＬｐがＯＮに設定される（Ｓ１１５）。
【００４３】
次に、親スレッドが共有メモリ領域にアクセスしたことが検出されるか否かが判定される（Ｓ１１３）。アクセスしたことが検出されると判定された場合（Ｓ１１３でＹＥＳ）、親スレッド解放フラグＬｐがＯＦＦであるか否かが判定される（Ｓ１１６）。ＯＦＦであると判定される場合（Ｓ１１６でＹＥＳ）、親スレッドアクセスフラグＡｐがＯＮに設定される（Ｓ１１８）。
【００４４】
そして、親スレッドの関数の最後まで読み込みが終了したか否かが判定される（Ｓ１１４）。読み込みが終了したと判定される場合（Ｓ１１４でＹＥＳ）、子スレッドの先頭から最終の関数の読み込みが終了するまで、Ｓ１１９〜Ｓ１２２の処理が反復して実行される（Ｓ１１７）。言い換えると、以下に説明するＳ１１９〜Ｓ１２６処理が実行される。
【００４５】
まず、子スレッドが１行ずつ読み込まれ（Ｓ１１９）、共有メモリ領域の解放が検出されるか否かが判定される（Ｓ１２０）。解放が検出されると判定される場合（Ｓ１２０でＹＥＳ）、子スレッド解放フラグＬｃがＯＮに設定される（Ｓ１２３）。
【００４６】
次に、子スレッドが共有メモリ領域にアクセスしたことが検出されるか否かが判定される（Ｓ１２１）。アクセスしたことが検出されると判定された場合（Ｓ１２１でＹＥＳ）、子スレッド解放フラグＬｃがＯＦＦであるか否かが判定される（Ｓ１２４）。ＯＦＦであると判定される場合（Ｓ１２４でＹＥＳ）、子スレッドアクセスフラグＡｃがＯＮに設定される（Ｓ１２６）。
【００４７】
そして、子スレッドの関数の最後まで読み込みが終了したか否かが判定される（Ｓ１２２）。読み込みが終了したと判定される場合（Ｓ１２２でＹＥＳ）、静的解析によるメモリリーク及び不正メモリアクセスの検出結果が記憶部１１に記録される（Ｓ１２５）。この検出結果は、図３の解析結果テーブルＴを参照して、親スレッド解放フラグＬｐ、親スレッドアクセスフラグＡｐ、子スレッド解放フラグＬｃ、及び子スレッドアクセスフラグＡｃが示す各設定値に基づいて求められる。
【００４８】
そして、ソースコードの関数の最後（すなわちソースコードの最終行）まで読み込みが終了したか否かが判定される（Ｓ１０５）。読み込みが終了したと判定される場合（Ｓ１０５）、メモリ確保フラグＭがＯＦＦに設定され（Ｓ１０８）、Ｓ１０１の反復処理が完了する。
【００４９】
Ｓ１０１の反復処理が完了すると、静的解析の結果が記憶部１１から読み出され、表示部１３に出力される（Ｓ２００）。そして、静的解析プロセスが終了する。
【００５０】
以上のように、本実施形態の情報機器１は、ソースコードに静的解析を実行するソースコード解析装置であって、フラグ生成部１２１と、解放フラグ設定部１２３と、アクセスフラグ設定部１２４と、解析部１２５と、を備える。フラグ生成部１２１は、解放フラグ及びアクセスフラグをソースコードの各スレッド毎に生成する。解放フラグは、各スレッドにより共有される共有メモリ領域を対応するスレッドが記憶部１１から解放したか否かを示す。アクセスフラグは、対応するスレッドが共有メモリ領域にアクセスしたか否かを示す。解放フラグ設定部１２３は、共有メモリ領域を記憶部１１から解放したスレッドに対応する解放フラグに、共有メモリ領域を解放したことを示す値を設定する。アクセスフラグ設定部１２３は、共有メモリ領域にアクセスしたスレッドに対応するアクセスフラグに、共有メモリ領域にアクセスしたことを示す値を設定する。解析部１２５は、各スレッド毎の解放フラグ及びアクセスフラグに基づいて、メモリリークの有無、及び不正メモリアクセスを行うスレッドを検出する。
【００５１】
また、本実施形態の情報機器１に用いられる静的解析プログラムＰは、情報機器１のＣＰＵ１２にソースコードに静的に解析する機能を実行させるソースコード解析プログラムであり、ソースコードを静的に解析するソースコード解析方法をＣＰＵ１２に実行させる。ソースコード解析方法では、解放フラグ及びアクセスフラグが各スレッド毎に生成される。なお、解放フラグは、ソースコードの各スレッドにより共有される共有メモリ領域を対応するスレッドが記憶部１１から解放したか否かを示し、アクセスフラグは、対応するスレッドが共有メモリ領域にアクセスしたか否かを示す。共有メモリ領域を記憶部１１から解放したスレッドに対応する解放フラグには、共有メモリ領域を解放したことを示す値が設定される。共有メモリ領域にアクセスしたスレッドに対応するアクセスフラグには、共有メモリ領域にアクセスしたことを示す値が設定される。そして、各スレッド毎の解放フラグ及びアクセスフラグに基づいて、メモリリークの有無、及び不正メモリアクセスを行うスレッドが検出される。
【００５２】
これらの構成によると、ソースコードを静的に解析することにより、たとえば動的に解析するよりも短時間で解析を行うことができる。また、静的解析中に、ソースコードの各スレッドにより共有される共有メモリ領域が記憶部１１から解放されると、解放したスレッドに対応する解放フラグに、共有メモリ領域を解放したことを示す値が設定される。また、スレッドが共有メモリ領域にアクセスすると、アクセスしたスレッドに対応するアクセスフラグに、共有メモリ領域にアクセスしたことを示す値が設定される。そのため、各スレッド毎の解放フラグ及びアクセスフラグに設定された各値に基づいて、共有メモリ領域を解放したスレッド、或いは共有メモリ領域が解放されていないことが検出できる。さらに、解放された共有メモリ領域にアクセスするスレッドも検出することができる。従って、共有メモリ領域の解放し忘れによるメモリリーク、及び、共有メモリ領域を解放した後の不正メモリアクセスを短時間で検出することができる。
【００５３】
また、本実施形態の情報機器１は、記憶部１１をさらに備える。記憶部１１は、各スレッド毎の解放フラグ及びアクセスフラグと、メモリリークの有無、及び不正メモリアクセスを行うスレッドとが対応付けられた解析結果テーブルＴを格納する。
【００５４】
こうすることにより、解析結果テーブルＴを参照すれば、各スレッド毎の解放フラグ及びアクセスフラグに設定された各値に基づいて、メモリリーク及び不正メモリアクセスを簡便に検出することができる。
【００５５】
以上、本発明の実施形態について説明した。なお、上述の実施形態は例示であり、その各構成要素や各処理の組み合わせに色々な変形が可能であり、本発明の範囲にあることは当業者に理解されるところである。
【００５６】
たとえば、上述の実施形態では、親スレッドが１つの子スレッドを生成する例を挙げて説明しているが、本発明の適用範囲はこの例に限定されない。ソースコードのスレッドの階層構造は特に限定されない。たとえば、親スレッドが複数の子スレッドを生成していてもよい。その場合には、各子スレッド毎に、子スレッド解放フラグ及び子スレッドアクセスフラグを設定する。また、上述の実施形態では、親スレッドとその子スレッドとから成る２階層構造のソースコードに対して本発明を適用しているが、本発明の適用範囲はこの例に限定されない。ｎ階層構造（ｎは１以上の正の整数）のソースコードに対しても、本発明は適用可能である。その場合には、各階層の各スレッド毎に解放フラグ及びアクセスフラグが設定される。
【００５７】
また、上述の実施形態では、フラグ生成部１２１、確保フラグ設定部１２２、解放フラグ設定部１２３、アクセスフラグ設定部１２４、及び解析部１２５はＣＰＵ１２の機能部として実現されているが、本発明の適用範囲はこの例に限定されない。これらは、ＣＰＵ１２とは異なる物理的な構成部（たとえば電気回路など）で実現されていてもよい。さらに、それらのうちの少なくとも１つは独立した構成部であってもよい。
【００５８】
また、上述の実施形態では、記憶部１１に共有メモリ領域が確保されるが、本発明の適用範囲はこの例に限定されない。共有メモリ領域は記憶部１１と異なる記憶媒体に確保されてもよい。
【符号の説明】
【００５９】
１      情報機器
１１      記憶部
１２      ＣＰＵ
１２１      フラグ生成部
１２２      確保フラグ設定部
１２３      解放フラグ設定部
１２４      アクセスフラグ設定部
１２５      解析部
１３      表示部
１４      入力部
１５      通信部
Ｍ        メモリ確保フラグ
Ｌｐ      親スレッド解放フラグ
Ａｐ      親スレッドアクセスフラグ
Ｌｃ      子スレッド解放フラグ
Ａｃ      子スレッドアクセスフラグ
Ｔ        解析結果テーブル
Ｐ        静的解析プログラム
【図１】
2014215812.tif 000003
【図２】
2014215812.tif 000004
【図３】
2014215812.tif 000005
【図４Ａ】
2014215812.tif 000006
【図４Ｂ】
2014215812.tif 000007