Cómo utilizar pageheap.exe en Windows XP, Windows 2000 y Windows Server 2003

Seleccione idioma Seleccione idioma
Id. de artículo: 286470 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo describe cómo utilizar el montón de página herramienta (pageheap.exe) en Microsoft Windows XP, Microsoft Windows 2000 y Microsoft Windows Server 2003.

Más información

Pageheap.exe establece indicadores de montón de páginas que ayudan a buscar daños relacionados con el montón. También puede ayudar a detectar pérdidas en programas que se ejecutan en Windows 2000 Professional Service Pack 2 (SP2) y los sistemas Windows XP Professional.

Pageheap.exe introduce una capa de validación de software (Administrador de pila de página) entre la aplicación y el sistema que comprueba todas las operaciones de memoria dinámica (las asignaciones, libera y otras operaciones de montón). Cuando se habilita el Administrador de pila de página, la aplicación que se está probando, a continuación, se inicia en un depurador. Si se encuentra un problema, provocará una interrupción del depurador.

importante Pageheap.exe no especifica el error está, sino bloqueará el sistema cuando se encuentra un problema. Permite una capa de comprobación que ya existe en las bibliotecas de sistema de Ntdll.dll en SP2 de Windows 2000 Professional y Windows XP Professional. Pageheap.exe no funcionará en versiones anteriores de Microsoft Windows.

Si la aplicación que se está probando no se inicia bajo un depurador y se encuentra un error, se bloqueará sólo sin sus comentarios.

Conceptos

Un problema común en el desarrollo de aplicaciones es el montón está dañado. Esto suele ocurrir cuando una aplicación asigna un bloque de memoria de montón de un tamaño determinado y, a continuación, se escribe en direcciones de memoria más allá del tamaño solicitado del bloque del montón. Daños en el montón también pueden producirse cuando una aplicación escribe bloque de memoria que ya se ha liberado.

Dos conceptos son fundamentales para comprender los comandos relacionados con pageheap.exe y la forma de utilizar:
  • Daños en bloques del montón son descubiertos colocando una página no accesible al final de la asignación o comprobando tramas de relleno cuando se libera el bloque.
  • Hay dos montones (montones de página completa y el montón de página normal) para cada montón creado dentro de un proceso que tiene habilitado el montón de página.
    • montones de página completa revela los daños de bloques del montón colocando una página no accesible al final de la asignación. La ventaja de este enfoque es que conseguir "sudden muerte," lo que significa que el proceso de tendrán acceso a infringir (va) exactamente en el punto de error. Este comportamiento facilita la depuración de errores. La desventaja es que cada asignación utiliza al menos una página de memoria asignada. Para un proceso intensivo de la memoria, los recursos del sistema se pueden agotar rápidamente.
    • montón de página normal puede utilizarse en situaciones donde las limitaciones de memoria inutilizable la montones de página completa. Tramas de relleno se comprueba cuando se libera un bloque del montón. La ventaja de este método es que reduce drásticamente el consumo de memoria. La desventaja es que sólo se detectarán daños cuando se libera el bloque. Esto dificulta errores depurar.

Ubicación de la herramienta de PageHeap de descarga

Para descargar el paquete de herramientas de depuración más reciente, haga clic en el vínculo siguiente:
http://www.microsoft.com/whdc/devtools/debugging/default.mspx


Seleccione la última versión de las herramientas de depuración. Cuando instala las herramientas, seleccione la instalación personalizada y, a continuación, instalar en un directorio con un nombre apropiado. Por ejemplo, instalar herramientas de C:\Debug o C:\Debugtools.

Elegir un método de Investigate Heap Block Corruptions

La mayoría de los daños en bloques del montón se puede descubrir de dos maneras:
  • Montones de página completa: colocar una página no accesible al final de la asignación.
  • Montón de página normal: patrones de relleno de comprobación cuando obtiene libera el bloque.

Montón full-Page

Montones de página completa deben estar habilitada para procesos individuales, o parámetros limitados para los procesos grandes, debido a de sus requisitos de memoria alta. No se puede habilitar todo el sistema, porque es difícil evaluar el tamaño de archivo de página necesarios. Utilizando un archivo de página que es demasiado pequeño con el montón de página completa de todo el sistema procesa el sistema de reinicio.

La ventaja de montones de página completa es la que hace que un proceso acceso infringen (va) exactamente en el punto de error. Esto facilita el error de depuración. Para poder detectar errores, utilice primero el montón de página normal para determinar el rango donde falla un proceso y, a continuación, utilizar montones de página completa en procesos individuales a gran escala para esa clase restringida de asignaciones (es decir, un intervalo de tamaño específico o una biblioteca específica).

Pila de página normal

Montón de página normal puede utilizarse para las pruebas de procesos a gran escala sin el consumo de memoria alta ese montón completa requiere. Sin embargo, el montón de página normal retrasa detección hasta que se liberan bloques, así lo hace errores más difícil de depurar.

En general, utilice el montón de página normal para procesos iniciales a gran escala pruebas. A continuación, si se detectan problemas, habilite montón completa para una clase restringida de las asignaciones en los procesos.

Montón de página normal puede ser habilitada de forma segura de todo el sistema para todos los procesos. Esto es muy útil en bancos de pruebas que realizan la validación general del sistema en lugar de pruebas de componente centrado. Montón de página normal también puede habilitarse para un único proceso.

Con GFlags montones de página del sistema

Se utiliza la herramienta GFlags para habilitar el montón de la página de todo el sistema. Para un comando GFlags surta efecto, debe reiniciar el equipo después de emitir el comando.

Para habilitar el montón de página normal de todo el sistema:
  1. Escriba lo siguiente en la línea de comandos: gflags - r + hpa

  2. Reinicie el equipo.
Para deshabilitar el montón de página normal de todo el sistema:
  1. Escriba lo siguiente en la línea de comandos: gflags - r - hpa

  2. Reinicie el equipo.
Nota Hay otras opciones GFlags son útiles cuando habilita el montón de la página. Si se habilitan otras configuraciones que parecen estar relacionado con el montón, se pueden introducir errores de página del montón debido a conflictos entre páginas Administrador del montón y estos indicadores de montón "inofensivo".

Utilizar GFlags con un montón de página de proceso único

Puede habilitar el montón de páginas supervisar un proceso específico. Para ello, siga estos pasos:
  1. En un símbolo del sistema, cambie el directorio donde instaló las herramientas de depuración.
  2. En el símbolo del sistema, escriba lo siguiente y presione ENTRAR:
    Gflags.exe /p /enable lsass.exe
    Nota lsass.exe es el nombre del proceso que desea supervisar con la herramienta de PageHeap.
  3. Cuando ya no necesita supervisar el montón de páginas, deshabilite la supervisión. Para ello, escriba lo siguiente en un símbolo del sistema y, a continuación, presione ENTRAR:
    Gflags.exe /p /disable lsass.exe
    Nota lsass.exe es el nombre del proceso que desea supervisar con la herramienta de PageHeap.
  4. Para enumerar todos los programas que actualmente tienen PageHeap comprobación habilitada, escriba lo siguiente en el símbolo del sistema y, a continuación, presione ENTRAR :
    /p Gflags.exe

Asignaciones Unaligned

Los administradores del montón de Windows (todas las versiones) siempre han garantizado que las asignaciones de montón tengan una dirección de inicio que es de 8 bytes alineado (en plataformas de 64 bits, la alineación es 16 bytes). El administrador del montón página hace que la garantía misma. Esto es imposible, sin embargo, si desea tener la final-de-la-asignación exactamente al final de una página. Es necesaria la asignación de página final exacta para que un error de cierre-por-un byte escribirá desencadenar una lectura o en la página no accesible y provocar un error de inmediato.

Si el tamaño de usuario solicitado para el bloque es no 8 bytes alineado, montón de página no puede cumplir tanto el "comienzo dirección 8 bytes alineado" y las restricciones "alineada la página de la dirección final". La solución es cumplir la primera restricción y realizar el inicio del bloque de 8 bytes alineado. Utilizar una trama de relleno pequeña entre el final del bloque y el comienzo de la página no accesible. Este patrón de relleno puede ser de 0 bytes a través de 7 bytes de longitud en arquitecturas de 32 bits. La trama de relleno se comprueba al libre.

Si detección de errores inmediata es necesaria para estas asignaciones que de lo contrario tendrá una trama de relleno al final, compruebe el administrador del montón de página omitir la regla de alineación de 8 bytes y siempre alinear el final de la asignación de un límite de página mediante los parámetros / unaligned y / completo . Para obtener más información, consulte el parámetro / unaligned .

Nota : algunos programas realizar suposiciones sobre alineación de 8 bytes y dejan de funcionar correctamente con el parámetro / unaligned . Microsoft Internet Explorer es un dicho programa.

Páginas sin confirmar para asignaciones de montón Full-Page

La implementación de montones de página completa principal confirma dos páginas para cualquier asignación de menor a una página. Una página se utiliza para la asignación de usuario y la otra es hacer no accesible al final del búfer.

Se pueden detectar saturaciones del final del búfer mediante una zona de espacio virtual reservado, en lugar de una página confirmada no accesible. Excepción de infracción de acceso se produce cuando el proceso toca ese espacio virtual reservado. Este enfoque puede reducir el consumo de memoria hasta un 50 por ciento. Para obtener más información, consulte el parámetro / decommit .

Inserción de errores

Puede controlar el administrador del montón de página para que algunas asignaciones se error deliberadamente. Esto es útil en simular condiciones de memoria baja sin utilizar realmente todos los recursos del sistema.

Especifique un número comprendido entre 1 y 10.000 para representar la probabilidad de que una asignación se producirá un error. El uso de una probabilidad de 10.000 garantiza que el 100 por ciento de las asignaciones fallará. Una probabilidad de 2.000 especifica que se conmutará aproximadamente el 20 por ciento de las asignaciones.

El administrador del montón página toma especial cuidado para evitar la inserción de errores en ambos los primeros segundos 5 de vida del proceso y Windows NT rutas de acceso de cargador de código (para exampole, LoadLibrary, FreeLibrary). Si no es suficiente para permitir que el proceso de completar el inicio 5 segundos, puede especificar un tiempo de espera más al principio del proceso. Para obtener más información, consulte el parámetro / errores .

Cuando utiliza el parámetro / errores y el proceso que se está probando tiene un error, se producirá una excepción. Generalmente, la razón es que la operación de asignación devuelve un valor NULL, y posteriormente la aplicación intenta tener acceso a la memoria asignada. Sin embargo, porque la asignación no se puede tener acceso a la memoria y, por lo tanto, se produce una infracción de acceso.

El otro motivo por el que se produce una excepción es que la aplicación intenta tratar el error de asignación, pero no libera algunos recursos. Esto se manifiesta como una pérdida de memoria y se es más difícil de depurar.

Para ayudar a diagnosticar estos errores, el administrador del montón página mantiene un historial de seguimientos de la pila desde el momento de la inserción de errores. Estas trazas se pueden mostrar con el siguiente comando del depurador:

! montón [NUMBER OF TRAZAS] -p -f

De manera predeterminada la extensión mostrará sólo los últimos cuatro seguimientos.

Asociar automáticamente un depurador cuando se inicia la aplicación

Algunas aplicaciones son difíciles de iniciar desde un símbolo del sistema o se generan desde otros procesos. Para estas aplicaciones, especificar que, siempre que se inician, un depurador se asociará automáticamente a ellos. Esto es útil si el montón de páginas está habilitado para que se producen errores de proceso y el montón. Para obtener más información, consulte el parámetro / debug .

Pageheap.exe es eficaz cuando se utiliza para comprobar cualquier proceso de asignación de memoria, incluido el estilo de C++ asignaciones nuevas y eliminar, siempre que las funciones de asignación y liberación personalizado llaman a finalmente en NT montón interfaces de administración (es decir, RtlAllocateHeap, RtlFreeHeap). Se garantiza que las siguientes funciones de hacerlo:
  • Funciona como HeapAlloc , HeapFree , HeapReAlloc : estas funciones se exportan por kernel32.dll y llamada directamente en el NT montón interfaces. Funciona como GlobalAlloc , GlobalFree , GlobalReAlloc : estas funciones se exportan por kernel32.dll y llamar directa o indirectamente a las interfaces de montón de NT.
  • Funciona como LocalAlloc , LocalFree , LocalReAlloc : estas funciones se exportan por kernel32.dll y llamar directa o indirectamente a las interfaces de montón de NT.
  • Las funciones malloc , libre , realloc , msize , expanda : estas funciones se exportan por msvcrt.dll y llamar directa o indirectamente al montón de NT. Esto no siempre ha sido el caso. El C tiempo de ejecución utilizado para tener una implementación diferente del montón, pero las llamadas de tiempo de ejecución C actuales directamente en el montón de NT.
  • Operadores nueva , Eliminar , nuevo [] , Eliminar [] : estas funciones se exportan por msvcrt.dll y llamar directa o indirectamente al montón de NT.
Cualquier otro conjunto de asignación y liberación de funciones probablemente es un esquema personalizado y no se garantiza que llame directa o indirectamente a NT montón. Inspección del código de origen sólo o ejecución en el depurador puede revelar la implementación real.

Evite utilizar la vinculación estática. Algunas aplicaciones han sido vinculadas estáticamente a antiguas versiones de C runtime. Estas versiones anteriores no llame a montón de Windows API y pageheap.exe no puede utilizarse para comprobar estas asignaciones. Vinculación dinámica garantiza que la biblioteca de tiempo de ejecución de C (msvcrt.dll) más reciente.

Clases de errores encontrados por pageheap.exe

Pageheap.exe detecta la mayoría de los errores de relacionados con el montón; sin embargo, es centrado en problemas de daños del montón y no se centra en pérdidas. Pageheap.exe ha limitado el éxito con buscar pérdidas de montón, aunque tiene funcionalidad de este destino.

Una de las ventajas de pageheap.exe es que muchos errores se detectan cuando se producen. Por ejemplo, un error de cierre-por-un byte al final de un búfer asignado dinámicamente puede provocar una infracción de acceso instantáneo. Hay algunos tipos de errores que no puede detectar cuando se producen. En esos casos, el informe de errores se retrasa hasta que se libera el bloque.
  • puntero de pila no válido : interfaces de montón nivel All Win32 y Windows NT toman como primer parámetro un puntero al montón donde debería ocurrir la operación. El administrador del montón página detecta un puntero de pila no válido en el momento en que se realiza la llamada.
  • puntero de bloque de montón no válido : se asigna un bloque, puede utilizarlo como parámetro para varias interfaces, especialmente la clase free() de interfaces del montón. El administrador del montón página detecta inmediatamente un puntero de bloque del montón no válido. Vea depurar errores de pila página una forma de determinar si la dirección no válida es unos pocos bytes desactivar, o completamente incorrecta.
  • acceso sin sincronizar multiproceso al montón : algunas aplicaciones llamar a un montón desde múltiples subprocesos. Este tipo de escenario requiere establecer un indicador (por el usuario) que se desencadenará adquirir un bloqueo de montón. El administrador del montón página detectará este tipo de infracción cuando dos subprocesos intentan llamar a simultáneamente en el montón.
  • suposiciones sobre la reasignación de un bloque en la misma dirección : no se garantiza una operación de reasignación para devolver la misma dirección. Esto es especialmente cierto cuando la reasignación reduce el tamaño del bloque. Algunas aplicaciones, se suponen que reasignarse devolverá la misma dirección. El administrador del montón página siempre asigna un nuevo bloque durante una reasignación y libera el bloque anterior. El bloque libre está protegido para acceso de lectura y escritura y, por lo tanto, cualquier acceso a él provocará una infracción de acceso.
  • doble libre : este error, donde los bloques del montón mismo se liberan varias veces, es común en algunas aplicaciones. Esto se detecta inmediatamente el administrador del montón de página porque, en la segunda libre, será de bloque no tener el encabezado prefijo correcto y no puede encontrarse entre los bloques asignados. Pila de página de depuración Vea errores formas de analizar el seguimiento de pila de la primera operación libre. Este error puede ser una variante del problema reasignación porque, cuando la aplicación libera qué piensa es la dirección del bloque, ese bloque ya liberado como parte de la reasignación.
  • acceso del bloque libre después : bloques de memoria liberada se mantienen durante un breve período de tiempo por el administrador del montón de página en un grupo de memoria protegida. Cualquier acceso a los bloques provocará una infracción de acceso. Según el principio "localidad", se debe detectar la mayoría de los problemas si el grupo libre protegido es suficientemente grande. Si el bloque liberado aún está en el grupo protegido, el error se captura al instante. Sin embargo, si se reutiliza la memoria, a continuación, hay menos posibilidades de encontrar el error o identificar el código que provocó.
  • acceso después del final del bloque asignado : Administrador del montón de página coloca una página inaccesible inmediatamente detrás del bloque asignado. Cualquier acceso más allá del final del bloque provocará una infracción de acceso. Algunas aplicaciones esperan que las asignaciones que 8 bytes alineado. Esta característica se ha admitido desde los administradores del montón de Windows NT 3.5. Un tamaño de solicitud que no es de 8 bytes alineado seguirán recibiendo una dirección de 8 bytes alineada, pero esto deja unos pocos bytes después del final del bloque que siguen siendo accesibles. Si la aplicación daña sólo esos pocos bytes, se capturar el error sólo comprobando el modelo de sufijo de bloque cuando se libera el bloque.
  • acceso antes del inicio del bloque asignado : Administrador del montón de páginas puede indicar a través de un indicador configurable para colocar la página inaccesible en el principio del bloque, en lugar de al final. Cualquier acceso antes de que el inicio del bloque provocará una infracción de acceso.
Contraer esta tablaAmpliar esta tabla
ErrorMontón de página normalMontones de página completa
Puntero de pila no válidoDetectar instantáneamenteDetectar instantáneamente
Puntero de bloque de montón no válidoDetectar instantáneamenteDetectar instantáneamente
Acceso sin sincronizarDetectar instantáneamenteDetectar instantáneamente
Suposición acerca de la reasignación de direcciones90 % hasta real libredetectada instantáneamente 90 %
Doble libredetectada instantáneamente 90 %detectada instantáneamente 90 %
Reutilizar después libre90 % hasta real libredetectada instantáneamente 90 %
Acceso después final del bloqueDetectada al libreDetectar instantáneamente
Acceso antes del inicio del bloqueDetectada al libreDetectar instantáneamente (indicador especial)

Depuración de errores de pila de página

Para obtener más información acerca de errores de pila de página de depuración, consulte Referencia de Tookit de compatibilidad de aplicaciones disponible dentro de Application Compatibility Toolkit.

Para la sintaxis de pageheap.exe y ejemplos del uso de pageheap.exe, consulte Referencia de Tookit de compatibilidad de aplicaciones disponible dentro de la compatibilidad de aplicaciones Toolkit.

Para obtener información adicional consulte el siguiente artículo de Knowledge Base:
294895Cómo obtener el Kit de herramientas de compatibilidad de aplicaciones de Windows

Propiedades

Id. de artículo: 286470 - Última revisión: miércoles, 14 de enero de 2009 - Versión: 6.0
La información de este artículo se refiere a:
  • 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
  • Microsoft Windows 2000 Datacenter Server
Palabras clave: 
kbmt kbenv kbinfo KB286470 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 286470

Enviar comentarios

 

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