PHD クラスを使用してメモリ リークを特定するのには

文書翻訳 文書翻訳
文書番号: 194655
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
すべて展開する | すべて折りたたむ

目次

概要

メモリ リークが発生は、多くのアプリケーションで問題です。具体的な方法メモリ リークが発生を決定する、Visual C の PHD クラスを使用するにはこの資料で説明します。メモリ統計情報をアプリケーションにログオンすることでPHD クラスを使用するは、メモリ リークが発生するはより正確な考えを取得ことができます。発生しています。

自己解凍型の PHD で。EXE を使用する方法を例に示します証明 disprove でメモリ リークが発生する付属の PHD クラスです。PHD クラスでは、パフォーマンスのヘルパー関数は、Windows NT からのシン ラッパーリソース キットです。このコードは Windows NT のみで動作します。

詳細

次のファイルをマイクロソフトからダウンロード可能します。ダウンロード センター:
Phd.exe
リリース日: 1998-10 月 23 日

マイクロソフトのサポート ファイルをダウンロードする方法の詳細については、Knowledge Base の資料を参照するのには、次の資料番号をクリックしてください。
119591 オンライン サービスからマイクロソフトのサポート ファイルを入手する方法
マイクロソフトは、このファイルのウイルスをスキャンしました。マイクロソフトは、ファイルが転記された日付に利用可能な最新のウイルス検出ソフトウェアを使用します。ファイルは、ファイルに不正な変更を防止するのに役立つセキュリティが強化されたサーバーに格納されます。
サンプルでは、次のキー ファイルが含まれています。
    FileName                Description
    ---------------------------------------------------------
   PDH.dll                  Contains helper functions used by PHD.
   RKLeak.cpp               Contains the code for the PHD class.
   RKLeak.h                 Header file for the PHD class.
   TestMain.cpp             A simple program to demonstrate the PHD class.
				

PHD クラスを使用するには、RKLeak.cpp ファイルをプロジェクトに含めます。でヘッダー ファイルを含む、PDH.lib ライブラリへのリンクが、Visual C 6.0 に付属しています。PHD.dll ファイルを追加する必要があります。パスには、アプリケーションを検索するようにします。

TestMain.cpp ファイルには次のサンプル コードが含まれています。PHD クラスを使用する方法。

サンプル コード

   **************************************************
   #include "rkLeak.h"

   void main()
   {

      char *myCntrs[]={
         "\\Memory\\Available bytes",
         "\\Memory\\committed bytes",
         "\\Memory\\pool Paged bytes",
         "\\Memory\\pool Nonpaged bytes",
      };

      PHD mphd2(myCntrs,sizeof(myCntrs)/sizeof(myCntrs[0]));
      PHD mphd;

      const int arSize=4096;
      for (int i=0;i<5;i++){
         double *d = new double[arSize];
         d[0]= 1.;      d[arSize-1] = 2.;  // Force to committed mem.
         mphd.logData(i);
         mphd2.logData(i);
      }

   ***************************************************
				

PHD コンス トラクターの最初の使用で品目を指定することができます。監視します。これらの同じ項目は、Perfmon.exe アプリケーションです。

PHD コンス トラクター (引数なし) の 2 番目の使用は、次を使用してください。既定列ログ: private bytes、ページ ファイル バイト、ページ プールのバイト、プール非ページ バイトとワーキング セット。

サンプル コードからわかるように、PHD クラスを使用してには、リークが疑われる場合の API をループし、定期的に、PHD::logData を呼び出すメソッドです。データがログに記録されるファイル名に"<your exe="" name="">_perf.log"で、現在のディレクトリです。場合は、ログ ・ ファイルが線形に増加を示しています。プライベート バイトの増加は意味しません、API でメモリ リークが、メモリ リーク アプリケーションだけです。API の使い方が間違っている場合(たとえば、正しくないによって最初に割り当てられたリソース解放します。コール) のみ、メモリ リークが、API は問題がないの結果を示します。限定するには問題を最も簡単な実行可能なアプリケーションを作成します。該当する API。</your>

Visual の C++ 5.x ユーザーは、RKLeak.h から次の行をコメントにする必要があります。
   #undef PdhOpenQuery      //          PdhOpenQueryA
   extern "C" long __stdcall
   PdhOpenQuery (
       IN      LPCSTR      szDataSource,
       IN      DWORD       dwUserData,
       IN      HQUERY      *phQuery
   );
				

その他のツール

Web 上で FAQ ページのさまざまな情報を検索できます-メモリ リークが発生をすることができますパーティのデバッガーを検索します。たとえば、次のよく寄せられる質問にいくつかの製品について言及します。
http://docs.linux.cz/programming/c/www.eskimo.com/~scs/C-faq/q18.2.html
メモ ここで説明するサードパーティ製品のベンダーによって製造されていますマイクロソフトは無関係です。お保証、黙示またはそれ以外の場合にありません、これらの製品のパフォーマンスや信頼性についています。注意する必要があります。そのことがありますこれらの製品、リークが、不正確なレポートをすることができます。非常に便利なツールですが。

また、API のデバッグ、Visual C のヒープを検出するための便利なツールです。リークが発生します。これらの関数は、_CrtMemDifference() などがあります、_CrtMemDumpAllObjectsSince() では、Visual C では、記載されています。プログラマ ガイド」を関数参照をデバッグします。これらの関数だけで、コードとその他のコンポーネントでのリークいないリークを検出します。

(c) Microsoft Corporation 1998 年、すべての権利予約します。中田が貢献マイクロソフトでは、鈴木。

プロパティ

文書番号: 194655 - 最終更新日: 2014年2月22日 - リビジョン: 4.0
キーワード:?
kbnosurvey kbarchive kbinfo kbdownload kbfile kbsample kbmt KB194655 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:194655
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com