PurifyPlus は、ソフトウェア開発者がプログラム、特にCまたはC++で書かれたプログラムのメモリ アクセス エラーを検出するために使用するメモリ デバッガプログラムです。元々はPure SoftwareのReed Hastingsによって作成されました。[ 1 ] Pure Software は後に Atria Software と合併して Pure Atria Software となり、その後Rational Software に買収され、さらにIBMに買収され、 2014 年 12 月 31 日にUNICOM Systems , Inc. に売却されました。機能的には、 Insure++、Valgrind、 BoundsCheckerなどの他のメモリ デバッガと似ています。
PurifyPlusは動的検証を可能にします。これは、デバッガのように、プログラムの実行中に発生するエラーを検出するプロセスです。一方、静的検証または静的コード解析は、ソースコードをコンパイルしたり実行したりすることなく、論理的な矛盾を発見することによってエラーを検出します。Cコンパイラによる型チェックは、 静的検証の一例です。
プログラムがPurifyPlus とリンクされると、ライブラリを含むオブジェクトコードを解析して追加することで、修正された検証コードが実行ファイルに自動的に挿入されます。これにより、メモリエラーが発生した場合、プログラムはエラーの正確な位置、関連するメモリ アドレス、およびその他の関連情報を出力します。PurifyPlus はメモリ リークも検出します。デフォルトでは、プログラム終了時にリーク レポートが生成されますが、計測対象アプリケーション内から PurifyPlus リーク検出 API を呼び出すことによっても生成できます。
PurifyPlus が検出するエラーには、配列境界の読み書き、未割り当てメモリへのアクセス試行、未割り当てメモリの解放 (通常は同じメモリを 2 回解放するため)、メモリ リーク (ポインタ参照のない割り当て済みメモリ) などがあります。これらのエラーのほとんどは致命的ではありません (少なくともエラー発生箇所では)。また、プログラムを実行するだけでは、プログラムの動作が間違っているために何かがおかしいことに気づく以外に、これらのエラーを検出する方法がない場合がよくあります。そのため、PurifyPlus はこれらのエラーを検出し、プログラマにエラーが発生した場所を正確に知らせることで役立ちます。PurifyPlus はすべてのオブジェクト コードに計測を施すことで動作するため、サードパーティ ライブラリやオペレーティングシステムライブラリ内で発生するエラーを検出します。これらのエラーは、プログラマがライブラリ呼び出しに誤った引数を渡したり、ライブラリで使用されるデータ構造を解放するためのプロトコルを誤解したりすることが原因で発生することがよくあります。これらは、見つけて修正するのが最も難しいエラーであることがよくあります。
PurifyPlusと一般的なデバッガとの大きな違いは、致命的ではないエラーを検出できる点にあります。これに対し、デバッガは通常、ヌルポインタの逆参照によるプログラムクラッシュなど、致命的なエラーの原因を迅速に特定することしかできず、致命的ではないメモリエラーの検出には役立ちません。デバッガは、コードを一行ずつステップ実行したり、実行中の特定の時点でプログラムのメモリを手動で調べたりといった、PurifyPlusの想定とは異なる用途にも役立ちます。つまり、熟練した開発者にとっては、これらのツールは互いに補完し合うことができるのです。
PurifyPlusには、高性能なウォッチポイントなど、コードに対してデバッガを使用する際に一般的に役立つその他の機能も含まれています。
PurifyPlusは、メモリ管理をプログラマに任せるプログラミング言語で最も効果を発揮します。例えば、Java、Lisp、Visual Basicなどでは、自動メモリ管理によってメモリリークの発生が抑制されます。しかし、これらの言語でもメモリリークが発生する可能性はあります。オブジェクトへの不要な参照があると、メモリの再割り当てが妨げられるためです。IBMは、このようなエラーを検出するためのRational Application Developerという製品を提供しています。