С помощью класса докторскую степень по выявление утечек памяти

Переводы статьи Переводы статьи
Код статьи: 194655 - Vizualiza?i produsele pentru care se aplic? acest articol.
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Развернуть все | Свернуть все

В этой статье

Аннотация

Утечки памяти являются проблемы во многих приложениях. Конкретный способ определения утечек памяти является использование класса докторскую степень по Visual C++ Приведенные в этой статье. Выполнив вход статистика памяти приложения с помощью класса докторскую степень по, можно получить более точное представление о место утечка памяти происходит.

Самораспаковывающийся докторскую степень по.EXE — это пример, который демонстрирует использование включить докторскую степень по класс доказать/disprove утечка памяти. Имеет докторскую степень по классу Тонкие обертки для вспомогательных функций производительность систем Windows NT пакет Resource kit. Этот код работает только в Windows NT.

Дополнительная информация

Следующие файлы доступны для загрузки Майкрософт Центр загрузки:
PhD.exe
Дата выпуска: Окт-23-1998

Для получения дополнительных сведений о том, как загрузить файлы поддержки Майкрософт щелкните следующий номер статьи базы знаний Майкрософт:
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.
				

Для работы с классом докторскую степень по включите в проект файл RKLeak.cpp. По файл заголовка, в том числе вызовет компоновка библиотеки PDH.lib который поставляется с Visual C++ 6.0. Также необходимо добавить в файл PHD.dll на пути к приложению будет найти его.

Файл TestMain.cpp содержит следующий образец кода, демонстрирующий как использовать класс докторскую степень по:

Пример кода

   **************************************************
   #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);
      }

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

Первое использование конструктора докторскую степень по позволяет указать, какие элементы вы требуется наблюдать. Это те же элементы, доступные в Приложение Perfmon.exe.

Второй способ использования конструктора докторскую степень по (без аргументов) использует следующие по умолчанию столбец журналы: байтов исключительного пользования, байт файла подкачки, байты выгружаемого пула, пула байт в невыгружаемом страничном и рабочего набора.

Как видно из примера кода, докторскую степень по класс используется для размещения вызывает API возможную утечкой памяти в цикле и периодически PHD::logData метод. Данные заносятся в файл с именем «<your exe="" name="">_perf.log» в текущий каталог. Если полученный файл журнала показывает линейное увеличение байтов исключительного пользования, это увеличение не означает, что утечка памяти в API, но просто утечку памяти в приложении. Если используется интерфейс API неправильно (например, освободив неправильно ресурсы, выделенные первоначального вызова), в результатах отображаются только утечки памяти, не неисправный API. Чтобы сузить область проблемы создайте простой возможности приложения, пользующееся в вопросе API. </your>

Пользователи 5.x Visual C++ необходимо закомментировать следующие строки из RKLeak.h:
   #undef PdhOpenQuery      //          PdhOpenQueryA
   extern "C" long __stdcall
   PdhOpenQuery (
       IN      LPCSTR      szDataSource,
       IN      DWORD       dwUserData,
       IN      HQUERY      *phQuery
   );
				

Другие средства

Можно найти на веб-страницах часто задаваемые вопросы о различных третьей- отладчики сторонних производителей, которые помогут вам найти утечки памяти. Например следующие часто задаваемые вопросы упоминание нескольких продуктов:
http://docs.Linux.CZ/Programming/c/www.eskimo.com/~SCS/C-FAQ/q18.2.HTML
Примечание Продукты независимых производителей, рассматриваемые здесь упомянуты независимыми производителями. Мы не дает никаких подразумеваемых и прочих что касается производительности или надежности этих продуктов. Следует также отметить Иногда, эти продукты можно сделать отчеты об утечке, но они по-прежнему являются очень полезные инструменты.

Кроме того API отладки кучи Visual C++ является полезным инструментом для поиска утечки. К ним относятся функции, такие как _CrtMemDifference() и _CrtMemDumpAllObjectsSince(), описанные в Visual C++ Руководство программиста в разделе Отладка ссылка на функцию. Эти функции только обнаружение утечки в коде и не утечки в другие компоненты.

(c) Корпорация Майкрософт 1998 г. все права защищены. Отчисления по Рик Куликов, корпорация Майкрософт.

Свойства

Код статьи: 194655 - Последний отзыв: 23 февраля 2014 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual Studio 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
Ключевые слова: 
kbnosurvey kbarchive kbdownload kbfile kbinfo kbsample kbmt KB194655 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:194655

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