Использование Pageheap.exe в Windows XP, Windows 2000 и Windows Server 2003

Переводы статьи Переводы статьи
Код статьи: 286470 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

В данной статье описывается использование средства страницы кучи (Pageheap.exe) в Microsoft Windows XP, Microsoft Windows 2000 и Microsoft Windows Server 2003.

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

Pageheap.exe задает страницы кучи флаги, которые помогают найти с кучей повреждения. Они также могут помочь обнаружить утечки в программах, которые являются в Windows 2000 Professional с пакетом обновления 2 (SP2) и Windows XP Профессиональных систем.

Pageheap.exe представляет программное обеспечение проверки слой (диспетчер кучи страниц) между приложением и системы, которая проверяет все операции динамической памяти (распределений, освобождает и другие операции кучи). При включении диспетчера кучи страниц приложения, который проверяется, затем запуске отладчика. Если возникает проблема, он вызовет отладчик разрыв.

Важные Pageheap.exe не указан, является ошибкой, но оно произойдет сбой системы, когда возникает проблема. Включает проверку уровня, уже существует в системе библиотеки Ntdll.dll в Windows 2000 Professional 2 (SP2) и Windows XP Professional. Pageheap.exe не будет работать на предыдущей версии Microsoft Windows.

В случае тестируемых приложений запуске отладчика и обнаружил ошибку, он просто произойдет сбой без Любые отзывы.

Основные понятия

Общей проблемой при разработке приложения является повреждение кучи. Это обычно происходит, когда приложение выделяет блок памяти кучи Учитывая размер и затем записывает адреса памяти за пределами запрошенный размер из кучи. Повреждение кучи также может возникнуть при приложение записывает блокировать памяти, который уже был освобожден.

Два понятия являются основными для Общее представление о команд, относящихся к Pageheap.exe и способ его использования.
  • Обнаружение повреждения кучи блоками, либо поместив Доступные страницы в конце выделения или путем проверки заполнения шаблоны при освобождении блока.
  • Существуют две кучи (всей страницы кучи и обычной страницы кучи) для каждой кучи созданы внутри процесса, включил страницы кучи.
    • Во всю страницу кучи раскрывает повреждения кучи блоками, поместив не доступен страницы в конце выделения. Преимущество такого подхода в том, что вы достижения «внезапной смерти,» означает, что процесс будет обращаться к нарушению (AV) ровно за момент использования сбоя. Это упрощает отладки сбоев. Недостаток заключается в том что каждого выделения используется по крайней мере одна страница фиксации память. Для большого объема памяти процесса системные ресурсы могут быть быстро исчерпан.
    • Куча обычной страницы можно использовать в ситуациях, где визуализации ограничения памяти не может использоваться всей страницы кучи. Когда освобождается блок кучи проверяет узоров заливки. Преимуществом данного метода является его значительно сокращает потребление памяти. Недостаток заключается в том что повреждения будут обнаружены только после блока освобождены. Это делает отладке отказов.

Файлы для загрузки для инструмента «Pageheap»

Чтобы загрузить последнюю версию пакета средств отладки, нажмите кнопку ниже ссылки:

Выберите последний выпуск средства отладки. При установке средства выбора Настройка установки и установите в каталог с соответствующим именем. Например, установка средства для C:\Debug или C:\Debugtools.

Выбор метода для исследования повреждения кучи блок

Большинство повреждений в куче блоки можно обнаружить в одном из двух способов:
  • Во всю страницу кучи: Поместите страницы не доступны в конце распределение.
  • Обычной страницы кучи: проверка заполнения шаблонов при получении блокировки освобождены.

Во всю страницу кучи

Во всю страницу кучи должна быть включена для отдельных процессов, или в группе Ограниченные параметры для крупных процессов, из-за его высокой памяти требования. Его нельзя включить всей системы, так как трудно Оценка размера файла подкачки требуется. Использование файла подкачки слишком мал, с куча полностраничных всей системы визуализирует системы невозможной.

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

Обычные страницы кучи

Обычной страницы кучи может использоваться для тестирования крупномасштабных процессы без потребления памяти требуется, всей страницы кучи. Однако обычной страницы кучи откладывается обнаружения освобождения блоков, делая более трудным для отладки сбоев.

Как правило использование кучи обычной страницы для начального масштабных процессов тестирования. Затем, если возникли проблемы, Включение всей страницы кучи для ограниченного класса выделений в тех процессы.

Куча обычной страницы может быть безопасно поддержкой всей системы для всех процессы. Это очень полезно на benches теста, которые выполняют общие системы проверки, а не компонент фокус тестирования. Также может быть обычной страницы кучи включен для одного процесса.

С помощью GFlags с системным страницы кучи

В GFlags средство используется для включения общесистемных страницы кучи. Чтобы Команда GFlags вступили в силу, необходимо перезагрузить компьютер после ввода команда.

Чтобы включить общесистемных обычной страницы кучи.
  1. В командной строке введите следующую команду:Gflags - r + hpa

  2. Перезагрузите компьютер.
Чтобы отключить системные обычной страницы кучи.
  1. В командной строке введите следующую команду:-r - поточности Gflags

  2. Перезагрузите компьютер.
Примечание Никакие другие параметры GFlags полезны при включении страницы кучи. Если другие параметры, относящиеся к куче включены, а затем страницы можно представила кучу ошибок из-за конфликтов между диспетчер кучи страниц и Эти флаги «безвредны» кучи.

С помощью GFlags С одной страницы кучи процесса

Можно включить страницы кучи для мониторинга одного определенного процесса. Для этого Это, выполните следующие действия:
  1. В командной строке измените каталог, где установлен debug средства.
  2. В командной строке введите следующую команду и нажмите клавишу ВВЕДИТЕ:
    / Enable /p Gflags.exeLsass.exe
    Примечание Lsass.exe обозначает имя процесса, которые требуется отслеживать с помощью средства Pageheap.
  3. Когда отпадает необходимость мониторинга страницы кучи отключение наблюдения. Для этого в командной строке следующую команду и нажмите клавишу ВВЕДИТЕ:
    / Disable /p Gflags.exe Lsass.exe
    Примечание Lsass.exe обозначает имя процесса, которые требуется отслеживать с помощью средства Pageheap.
  4. Чтобы вывести список всех программ, которые в настоящее время имеют Pageheap верификацию, введите следующее в командной строке, а затем Сочетание ВВЕДИТЕ:
    Gflags.exe /p

Не выровненной распределения

Вы всегда гарантированно руководители кучи Windows (все версии) наличие выделений в куче начального адреса, размером 8 байт (по краю 64-разрядных платформах выравнивание составляет 16 байт). Диспетчер кучи страниц делает же гарантии. Это невозможно, однако, если вы хотите иметь конец элемента выделения точно в конце страницы. Точный end от страницы требуется выделение таким образом, ошибка off с однобайтовых запустит чтения или записать в не-страниц со специальными возможностями и вызвать немедленное сбоя.

Если Пользователь запросил размер блока не 8-байтовое выравнивание, выберите страницу кучи не удается выполнить все «Пуск адрес восьмибайтовый по краю» и «конечный адрес страницу выровненное» ограничений. Решением является соответствует первому ограничению и сделать начало блока 8-байтовые выравнивания. Затем с помощью узора заливки небольшой между конец блока и начальной страницы не доступны. Этот узор заливки может быть от 0 байт через 7 байтов длиной в 32-разрядной архитектуры. Заливка шаблон установлен после бесплатно.

Если требуется изменить определение сбоев немедленно для этих способов, которые в противном случае будут иметь узор заливки в конце диспетчер кучи страниц Пропустить правило 8-байтовое выравнивание и всегда выравнивания Конец выделения на границе страницы с помощью / unaligned и / full параметры. Для получения дополнительных сведений см. / unaligned параметр.

ПРИМЕЧАНИЕ: Некоторые программы делать предположения о выравнивании длиной 8 байт и они неправильной работе с / unaligned параметр. Microsoft Internet Explorer является одной из таких программ.

Незафиксированные страниц для всей страницы выделений в куче

Реализация всей страницы кучи core фиксирует две страницы для любого Распределение меньше, чем одну страницу. Одна страница используется для выделения пользователя и другой производится без доступного в конец буфера.

Конечный буфер переполнение могут быть обнаружены с помощью зон зарезервированных virtual места, вместо того, чтобы не доступный для выделенной страницы. Нарушение прав доступа исключение возникает, когда процесс обращается к этому зарезервированного виртуального пространства. Это подход для уменьшения потребления памяти до 50 процентов. Для получения дополнительных Информация, см. / снятия выделения параметр.

Вероятность внесения ошибок.

Диспетчер кучи страницы можно управлять таким образом, есть выделения намеренно не удалось. Это полезно в имитации условий нехватки памяти без Фактически, используя все ресурсы системы.

Укажите число от 1 до 10 000 представляет вероятность того, что произойдет сбой выделения ресурсов. С помощью вероятность 10 000 гарантирует, что произойдет сбой выделения памяти на 100%. A Определяет вероятность 2 000, приблизительно 20 процентов распределения не удастся.

Диспетчер кучи страницы занимает особое внимание во избежание сбоев Введение в обоих первые 5 секунд жизни процесса и Windows NT загрузчик пути кода (exampole, функция LoadLibrary, FreeLibrary). В случае 5 секунд достаточны для того, в процессе выполнения запуска, то можно задать длительного времени ожидания в начале процесса. Для получения дополнительных сведений см. /Fault параметр.

При использовании /Fault параметр процесса и тестируемой есть ошибка, исключение возникает. Как правило, причиной этого является операции выделения возвращается значение NULL, а позднее приложение пытается получить доступ к выделенной память. Из-за распределения, однако память недоступна, и поэтому нарушение прав доступа.

Другая причина, Исключение — это приложение пытается справиться с распределением сбой, но не освобождает некоторые ресурсы. Это манифесты утечку памяти и затрудняет отладку.

Чтобы помочь в выявлении этих сбои, диспетчер кучи страницы сохраняет журнал трассировки стека с момента из вероятность внесения ошибок. Трассировка может отображаться следующее отладчика команда:

! кучи -p -f [номер от ТРАССИРОВОК]

По умолчанию расширение будет отображать только последний четыре трассировок.

Автоматическое присоединение отладчика при запуске приложения

Некоторые приложения, сложно запустить из командной строки или они порожден от других процессов. Указывает, что, для этих приложений Каждый раз, когда они запущены, отладчик автоматически присоединяться к их. Это полезно, если страницы кучи включено для этого процесса и куча сбоев происходят. Для получения дополнительных сведений см. / Debug параметр.

Эффективен при использовании для Pageheap.exe Проверьте любой процесс выделения памяти, включая C++ стиль выделения новых и Удалите, до тех пор, пока в конечном счете вызов функции пользовательского выделения и освобождения в NT интерфейсы управления кучи (то есть, RtlAllocateHeap, RtlFreeHeap). В для этого гарантируется следующие функции:
  • Действует как HeapAlloc, HeapFree, HeapReAlloc: Эти функции экспортируются в файл kernel32.dll и прямого вызова интерфейсы кучи NT. Действует как GlobalAlloc, GlobalFree, GlobalReAlloc: Эти функции экспортируются в файл kernel32.dll и вызова прямо или косвенно в NT кучи интерфейсов.
  • Действует как LocalAlloc, LocalFree, LocalReAlloc: Эти функции экспортируются в файл kernel32.dll и вызова прямо или косвенно в NT кучи интерфейсов.
  • Функции с помощью функции malloc, Освободите, удалось перераспределить, Mзаданный размер, Откройте группу: Экспортируются по msvcrt.dll эти функции и вызова прямо или косвенно в кучи NT. Это всегда не так. C для реализации различных кучи, но текущий c во время выполнения во время выполнения вызовов непосредственно в кучи NT.
  • Операторы СОЗДАТЬ, Delete, [новое] , удалить] : Экспортируются по msvcrt.dll эти функции и вызова прямо или косвенно в кучи NT.
Любые другие выделения и освобождения набор функций, вероятно, является пользовательским схемы и, необязательно вызывать непосредственно или косвенно NT куча. Только те результаты проверки кода или выполнения в отладчике можно раскрывать Фактическая реализация.

Избегайте использования статической компоновки. Некоторые приложения были статически связываются с старой версии среды выполнения C. Эти старые версии вызывает кучи Windows NT API-интерфейсов, а Pageheap.exe не может использоваться для Проверьте эти распределения. Динамическая компоновка гарантирует, что вы получаете последние c Библиотека времени выполнения (msvcrt.dll).

Классы ошибок, найденных при Pageheap.exe

Pageheap.exe обнаруживает большинство ошибок, связанных с кучи; Тем не менее, главным образом не отрываясь от утечек и повреждения кучи. У Pageheap.exe ограниченный успех поиска утечек кучи, несмотря на то, что он имеет возможность Это назначения.

Одно из преимуществ Pageheap.exe столько При обнаружении ошибок, когда они происходят. Например ошибка off с один байт на конец динамически выделяемый буфера может привести к мгновенный доступ нарушение. Существует несколько типов ошибок, которые не могут быть обнаружены, когда они происходят. В этих случаях отчет об ошибке задерживается до освобождения блока.
  • Недопустимый кучи указатель: Интерфейсы уровня кучи все Win32 и Windows NT принимает в качестве первого параметр указателя на кучу, где должны быть выполнены операции. Страницы диспетчер кучи обнаруживает указатель недопустимый кучи в момент, когда вызов внесены.
  • Недопустимый кучи указатель блока: После выделенного блока, его можно использовать в качестве параметра для несколько кучи интерфейсов, особенно free() класса интерфейсов. Страницы кучи Диспетчер немедленно обнаруживает указатель блока недопустимый кучи. Отображается страница отладки Куча сбоев позволяет определить, является ли недопустимый адрес несколько байт либо полностью неверно.
  • Несинхронизированные доступ к куче: Некоторые приложения вызывают в куче с несколькими потоками. Это тип сценария требуется установка флага (пользователем), который будет запускать Получение блокировки кучи. Диспетчер кучи страниц будет определять тип нарушения Когда два потока будет пытаться вызвать одновременно в куче.
  • Предположения относительно перераспределения блок на тот же адрес: Операция перераспределение не гарантируется, что возвращает такой же адрес. Это особенно важно при перераспределении уменьшает размер блок. Некоторые приложения предполагается, что перераспределения возвратит тот же адрес. Диспетчер кучи страниц всегда выделяет новый блок во время перераспределения и Освобождает старый блок. Свободный блок защищен для чтения и записи, и Поэтому любой доступ к нему будет вызывать нарушение прав доступа.
  • Значение типа Double free: Это ошибка где же блоков кучи, освобождаются находится несколько раз Обычно в некоторых приложениях. Это сразу же обнаружены кучей страницы Диспетчер, поскольку на второй бесплатно, блок не будет иметь правильный префикс Заголовок и не удается найти среди выделенных блоков. Отладочной кучи страниц см. Отказов для способа анализа трассировки стека первого свободного операции. Это Ошибка может быть разновидностью проблема перераспределения, потому что, когда приложение освобождает, по мнению является адресом блока программы было этого блока уже освобождены в рамках перераспределения.
  • Доступ из блока после освобождения: Освобожденные блоки хранятся на короткое время кучей страницы Диспетчер в пуле защищенной памяти. Любой доступ к эти блоки будут вызывать Нарушение прав доступа. На основе принципа «размещение», большинство проблем следует ли перехватить Если защищенный пул свободных носителей должно быть достаточно большим. Если освобожденные блока Это остается в защищенном пула ошибка перехватывается немедленно. Тем не менее если память была повторно, то есть меньше шансов найти ошибки или идентификации код, вызвавший его.
  • Доступ в конце выделенного блока: Диспетчер кучи страницы сразу помещает недоступные страницы После выделенного блока. Вызывает доступа за пределами блока Нарушение прав доступа. Некоторые приложения ожидают распределения по краю 8 байтам. Эта функция поддерживается начиная с Windows NT 3.5 кучи руководителей. Запрос размер, который не является 8-байтовое выравнивание по-прежнему будет получить адреса выровнены длиной 8 байт, но При этом остается несколько байтов в конце блока, который по-прежнему доступны. Если приложение повреждает только те несколько байтов, затем сообщение об ошибке будет перехвачено только путем проверки узор суффикс, когда освобождается блок.
  • Доступ до начала выделенного блока: Диспетчер кучи страница может быть поручено через устанавливать флаг поместить в начале блока, а не с первой end. Любой доступ до начала блока будут вызывать доступа нарушение.
Свернуть эту таблицуРазвернуть эту таблицу
СбойКуча обычной страницыВо всю страницу кучи
Недопустимый кучи указательПерехваченные мгновенноПерехвачено мгновенно
Недопустимый кучи указатель блокаПерехвачено мгновенноПерехваченные мгновенно
Несинхронизированный доступПерехваченные мгновенноПерехвачено мгновенно
Предположение об адресе перераспределения90% до реального ОсвободитеПерехваченные мгновенно 90 %
Значение типа Double freeПерехваченные мгновенно 90 %Перехваченные 90 % мгновенно
Повторно использовать после освобождения90% до реальных бесплатно90 % Перехваченные мгновенно
Доступ после конца блокаПерехваченные после ОсвободитеПерехваченные мгновенно
Доступ до начала блокаПерехваченные после ОсвободитеПерехваченные мгновенно (специальный флаг)

Отладка ошибок страницы кучи

Дополнительные сведения для отладки сбоев кучи страницы поиска в Ссылка Tookit совместимости приложения доступны внутри совместимости приложений Набор средств.

Для Синтаксис от Pageheap.exe и ПРИМЕРЫ с помощью Pageheap.exe, Пожалуйста посмотрите Ссылка Tookit совместимости приложения доступны внутри совместимости приложений Набор средств.

Дополнительную информацию можно найти следующее Статьи базы знаний Майкрософт:
294895 Как получить набор средств обеспечения совместимости приложений Windows

Свойства

Код статьи: 286470 - Последний отзыв: 5 июня 2011 г. - Revision: 5.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Home Edition
  • Microsoft Windows 2000 Professional Edition
  • операционная система Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
Ключевые слова: 
kbenv kbinfo kbmt KB286470 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:286470

Отправить отзыв

 

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