Como utilizar pageheap.exe no Windows XP, Windows 2000 e Windows Server 2003

Traduções de Artigos Traduções de Artigos
Artigo: 286470 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo descreve como utilizar a área página ferramenta (pageheap.exe) no Microsoft Windows XP, Microsoft Windows 2000 e Microsoft Windows Server 2003.

Mais Informação

Pageheap.exe define sinalizadores de pilha de página que ajudam a localizar danos relacionados com a pilha. Também pode ajudar a detectar fugas em programas que estão em execução no Windows 2000 Professional Service Pack 2 (SP2) e os sistemas Windows XP Professional.

Pageheap.exe introduz uma camada de validação de software (Gestor de área de página) entre a aplicação e o sistema verifica todas as operações de memória dinâmica (atribuições, liberta e outras operações da área de dados dinâmicos). Quando o Gestor de área de página está activado, a aplicação que está a ser testada, em seguida, é iniciada num depurador. Se for encontrado um problema, fará com que uma quebra de depurador.

importante Pageheap.exe não especificar o que é o erro, mas irá falhar o sistema quando é detectado um problema. Permite a uma camada de verificação que já existe nas bibliotecas Ntdll.dll sistema no Windows 2000 Professional SP2 e no Windows XP Professional. Pageheap.exe não funcionará em versões anteriores do Microsoft Windows.

Se a aplicação a ser testada não é iniciada num depurador e é detectado um erro, tal irá falhar sem quaisquer comentários.

Conceitos

Um problema comum no desenvolvimento de aplicações é os danos na área de dados dinâmicos. Normalmente, isto ocorre quando uma aplicação atribui um bloco de memória de pilha de um determinado tamanho e, em seguida, escreve a endereços de memória para além do pedido tamanho do bloco de memória. Também pode ocorrer corrupção da memória quando uma aplicação escreve para bloquear a memória que já foi libertada.

Dois conceitos são essenciais para compreender os comandos relacionados com pageheap.exe e a forma de utilizá-lo:
  • Danos em blocos de memória são detectados colocando ou uma página não acessível no fim da atribuição ou verificando os padrões de preenchimento quando o bloco é libertado.
  • Existem duas pilhas (pilha toda a página e da pilha de página normal) para cada pilha criada no processo que tem a pilha de página activada.
    • pilha de página inteira revela danos em blocos de memória, colocando uma página não acessível no fim da atribuição. A vantagem desta abordagem é que atingir "sudden morte," que significa que o processo irá aceder violar (AV) exactamente no ponto da falha. Este comportamento fácil falhas de depuração. A desvantagem é que cada atribuição utiliza, pelo menos, uma página de memória consolidada. Para um processo que utilizem muita memória, os recursos do sistema podem ser rapidamente esgotados.
    • pilha de página normal podem ser utilizados em situações onde limitações de memória inutilizar pilha página inteira. Verifica os padrões de preenchimento quando um bloco de memória é libertado. A vantagem deste método é que reduz drasticamente o consumo de memória. A desvantagem é que danos só serão detectados quando o bloco é libertado. Isto torna mais difícil depurar falhas.

Transferir localização para a ferramenta Pageheap

Para transferir o pacote de ferramentas de depuração mais recente, clique na seguinte hiperligação:
http://www.microsoft.com/whdc/devtools/debugging/default.mspx


Seleccione a versão mais recente das ferramentas de depuração. Quando instalar as ferramentas, seleccionar instalação personalizada e, em seguida, instalar um directório com um nome adequado. Por exemplo, instalar o ferramentas para C:\Debug ou C:\Debugtools.

Escolher um método para investigar Heap Block Corruptions

Maior parte dos danos em blocos de memória possa ser identificado das duas formas:
  • Página inteira de pilha: Coloque uma página não acessível no fim da atribuição.
  • Pilha de página normal: padrões de preenchimento de verificação quando o bloco é libertado.

Área dinâmica para dados full-Page

Página inteira pilha deve ser activada para processos individuais ou em parâmetros limitados para processos de grandes dimensões, devido os requisitos de memória alta. Não-é possível activar todo o sistema, porque é difícil avaliar o tamanho de ficheiro da página necessário. Utilizando um ficheiro página que é demasiado pequeno com pilha de página inteira de todo o sistema processe o sistema que não arranca.

A vantagem de pilha toda a página é o que faz com que um processo para acesso violar (AV) exactamente no ponto da falha. Isto facilita a falha depurar. Para conseguir identificar falhas, primeiro utilize pilha de página normal para determinar o intervalo em que está a falhar um processo e, em seguida, utilizar pilha página inteira processos individuais em larga escala para essa classe restrita de atribuições (ou seja, um intervalo de tamanho específico ou uma biblioteca específica).

Área de página normal

Pilha de página normal poderá utilizar para os testes de processos em larga escala sem o consumo de memória superior dessa página inteira pilha requer. No entanto, a pilha de página normal atrasa detecção até blocos são libertados, assim, tornando mais difícil depurar falhas.

Em geral, utilize pilha de página normal para processos em larga escala iniciais testar. Em seguida, se forem detectados problemas, Active a pilha de página inteira de uma classe restrita de atribuições nesses processos.

Pilha de página normal pode ser com segurança activado todo o sistema para todos os processos. Isto é muito útil no benches de teste que executam a validação gerais do sistema em vez de componente direccionada para a testar. Pilha de página normal também pode ser activada para um único processo.

Com GFlags a área de página de nível do sistema

A ferramenta GFlags é utilizada para activar a pilha de página de nível do sistema. De forma a um comando GFlags entrem em vigor, tem de reiniciar o computador depois de emitir o comando.

Para activar a pilha de página normal do sistema:
  1. Escreva o seguinte na linha de comandos: gflags - r + hpa

  2. Reinicie o computador.
Para desactivar a pilha de página normal do sistema:
  1. Escreva o seguinte na linha de comandos: gflags - r - hpa

  2. Reinicie o computador.
Nota Outras definições de GFlags são úteis quando activa a pilha de página. Se estiverem activadas outras definições que parecem estar relacionado com a pilha, erros de pilha de página podem ser introduzidos devido a conflitos entre o Gestor de memória de página e estes sinalizadores "inofensivo" pilha.

Utilizar GFlags com uma única área de página processo

Pode activar a pilha de página monitorizar um processo específico. Para o fazer, siga estes passos:
  1. Numa linha de comandos, altere o directório onde instalou as ferramentas de depuração.
  2. Na linha de comandos, escreva o seguinte e, em seguida, prima ENTER:
    Gflags.exe /p /enable lsass.exe
    Nota lsass.exe representa o nome do processo que pretende monitorizar com a ferramenta Pageheap.
  3. Quando já não necessitar de pilha de página de monitorização, desactive a monitorização. Para o fazer, escreva o seguinte numa linha de comandos e, em seguida, prima ENTER:
    Gflags.exe /p /disable lsass.exe
    Nota lsass.exe representa o nome do processo que pretende monitorizar com a ferramenta Pageheap.
  4. Para listar todos os programas que têm actualmente Pageheap verificação activada, escreva o seguinte numa linha de comandos e, em seguida, prima ENTER :
    /p Gflags.exe

Distribuições desalinhadas

Os gestores de área para dados dinâmicos do Windows (todas as versões) tiverem sempre garantido que as atribuições de pilha tem um endereço início é alinhado 8-byte (em plataformas de 64 bits o alinhamento é 16 bytes). O Gestor de pilha página garante o mesmo. É impossível, no entanto, se pretender que o fim-de-a-atribuição exactamente no fim de uma página. A atribuição de fim da página exacta é necessário para que um erro de desactivar-por-um byte irá accionar uma leitura ou escrita para a página não acessível e causar um erro de imediato.

Se o tamanho do pedido de utilizador para o bloco não 8 bytes alinhados, pilha de página não é possível satisfazer o "endereço 8 bytes alinhados iniciar" e as restrições de "fim endereço página alinhados". A solução é cumprir a restrição primeira e tornar o início do bloco de 8 bytes alinhados. Utilize um padrão de preenchimento pequeno entre o fim do bloco e o início da página não acessível. Este padrão de preenchimento pode ser de 0 bytes através de 7 bytes de comprimento em arquitecturas de 32 bits. O padrão de preenchimento é verificado após livre.

Se for necessário detecção de falha imediata para estas atribuições que caso contrário, terá um padrão de preenchimento no fim, tornar o Gestor de pilha página ignorar a regra de alinhamento de 8 bytes e alinhar sempre fim da atribuição a um limite de página utilizando os parâmetros / unaligned e / full . Para mais informações, consulte o parâmetro / desalinhada .

Nota : alguns programas efectuam suposições sobre Alinhamento de 8 bytes e podem deixam de funcionar correctamente com o parâmetro / desalinhada . Microsoft Internet Explorer é um programa desse tipo.

Páginas não consolidadas para atribuições de pilha Full-Page

A implementação de pilha toda a página principal consolida duas páginas para qualquer atribuição menor do que uma página. Uma página é utilizada para a atribuição de utilizador e o outro é efectuado não acessível no fim da memória intermédia.

Sobrecargas de fim de memória intermédia podem ser detectadas através de uma zona do espaço virtual reservado, em vez de uma página consolidada não acessível. Excepção de violação de acesso ocorre quando o processo de toca esse espaço virtual reservado. Esta abordagem pode reduzir o consumo de memória em até 50 por cento. Para mais informações, consulte o parâmetro / decommit .

Erro de introdução

Pode controlar o Gestor de memória de página para que algumas atribuições são deliberadamente falhou. Isto é útil para simular condições de falta de memória sem realmente utilizar todos os recursos do sistema.

Especificar um número entre 1 e 10.000 para representar a probabilidade de uma atribuição irá falhar. A utilização de uma probabilidade de 10.000 assegura que 100 por cento das atribuições falhará. Uma probabilidade de 2.000 Especifica que aproximadamente 20 por cento das atribuições falhará.

O Gestor de pilha página demora cuidados especiais para evitar falhas injecção em ambos os primeiros 5 segundos de vida do processo e o Windows NT loader caminhos de código (para exampole, LoadLibrary, FreeLibrary). Se não for suficiente para permitir que o processo seja concluído arranque 5 segundos, pode especificar um tempo limite maior no início do processo. Para mais informações, consulte o parâmetro / Falha .

Quando utiliza o parâmetro / Falha e o processo a ser testado tem um erro, uma excepção irá ser aumentada. Geralmente, o motivo é que a operação de atribuição devolvido um NULL e a aplicação mais tarde tentar aceder à memória atribuída. Porque falhou a atribuição, no entanto, não é possível aceder a memória e, por isso, ocorre uma violação de acesso.

O motivo que é accionada uma excepção é que a aplicação tenta lidar com a falha de atribuição, mas não liberta alguns recursos. Esta manifesta como uma fuga de memória e é mais difícil depurar.

Para ajudar a diagnosticar estas falhas, o Gestor de pilha página mantém um histórico de rastreios a partir do momento da falha de injecção. Estes rastreios podem ser apresentados com o seguinte comando de depurador:

! pilha -p -f [número de RASTREIOS]

Por predefinição, a extensão apresentará apenas os últimos quatro rastreios.

Anexar automaticamente um depurador quando a aplicação é iniciado

Algumas aplicações são difíceis de iniciar a partir de uma linha de comandos ou são geradas a partir de outros processos. Para estas aplicações, especificar que, sempre que forem iniciados, um depurador será anexado automaticamente aos mesmos. Isto é útil se a pilha de página estiver activada para que ocorrem falhas de processo e da pilha. Para mais informações, consulte o parâmetro /Debug .

Pageheap.exe é eficaz quando utilizada para verificar qualquer processo de atribuição de memória, incluindo estilos de C++ atribuições novas e eliminar, desde que as funções de atribuição/livre personalizado chamam eventualmente NT pilha interfaces de gestão (ou seja, RtlAllocateHeap, RtlFreeHeap). As seguintes funções são garantidas para o fazer:
  • Funciona como HeapAlloc , HeapFree , HeapReAlloc : estas funções são exportadas pelo kernel32.dll e chamada directamente para o NT pilha interfaces. Funciona como GlobalAlloc , GlobalFree , GlobalReAlloc : estas funções são exportadas pelo kernel32.dll e chamam as interfaces de pilha NT na directa ou indirectamente.
  • Funciona como LocalAlloc , LocalFree , LocalReAlloc : estas funções são exportadas pelo kernel32.dll e chamam as interfaces de pilha NT na directa ou indirectamente.
  • Funções malloc livre , realloc , msize , expanda : estas funções são exportadas pelo msvcrt.dll e chamam directa ou indirectamente a pilha de NT. Isto não sempre foi as maiúsculas e minúsculas. O C tempo de execução utilizado para ter uma implementação de pilha diferentes, mas as chamadas de tempo de execução C actuais directamente na pilha de NT.
  • Operadores de Novo , Eliminar , [novo] e Eliminar [] : estas funções são exportadas pelo msvcrt.dll e chamam directa ou indirectamente a pilha de NT.
Qualquer outro conjunto livre/atribuição de funções provavelmente é um esquema personalizado e não está assegurado chamam directa ou indirectamente NT pilha. Inspecção de código de origem apenas ou execução em depurador pode revelar a implementação actual.

Evite utilizar a ligação estática. Algumas aplicações foram estaticamente ligadas para old versões do tempo de execução C. Estas versões antigas não chamar a API do Windows NT pilha e pageheap.exe não pode ser utilizado para verificar estas atribuições. Ligação dinâmica garante que obterá a biblioteca de tempo de execução C (msvcrt.dll) mais recente.

Classes de erros encontrados pelo pageheap.exe

Pageheap.exe detectar a maioria dos erros relacionados com a pilha; no entanto, é aborda problemas de danos de pilha e não concentrado em fugas. Pageheap.exe limitou com êxito com localizar fugas de memória, embora que tem uma funcionalidade para orientar esta.

Uma das vantagens da pageheap.exe é que muitos erros são detectados quando estas ocorrem. Por exemplo, um erro de desactivar-por-um byte no final de uma memória intermédia alocada dinamicamente pode causar uma violação de acesso imediato. Existem poucos tipos de erros que não podem ser detectados quando ocorrem. Nesses casos, o relatório de erros é atrasado até o bloco é libertado.
  • ponteiro de pilha inválida : All Win32 e o Windows NT interfaces de pilha nível tomar como primeiro parâmetro um ponteiro para a pilha onde a operação deve ocorrer. O Gestor de pilha página detecta um ponteiro de pilha inválido de momento que a chamada é efectuada.
  • ponteiro de bloco de pilha inválida : depois de atribuído um bloco, pode ser utilizado como um parâmetro para várias interfaces, nomeadamente a classe free() das interfaces de pilha. O Gestor de pilha página imediatamente detecta um ponteiro de bloco de memória inválido. Consulte a depuração de área dinâmica para dados falhas de página para uma forma determinar se o endereço inválido alguns bytes desactivada, ou não está completamente correcta.
  • acesso não sincronizado multithread para a pilha : algumas aplicações chamam uma pilha de vários threads. Este tipo de cenário necessita de definir um sinalizador (por utilizador) que irá accionar a adquirir um bloqueio de pilha. O Gestor de pilha página detectará este tipo de violação quando dois threads tentam chamam a pilha em simultâneo.
  • suposições sobre reatribuição de um bloco no mesmo endereço : uma operação de reatribuição não está assegurada para devolver o mesmo endereço. Isto é especialmente verdade quando a reatribuição reduz o tamanho do bloco. Algumas aplicações partem do princípio que Realocação devolverá o mesmo endereço. O Gestor de memória de página sempre atribui um novo bloco durante uma reatribuição e liberta o bloco de antigo. O bloco livre está protegido para acesso de leitura/escrita e, por isso, qualquer acesso a ela irá aumentar uma violação de acesso.
  • duplo livre : Este erro, onde os blocos de memória mesmo são libertados várias vezes, é comum em algumas aplicações. Isto é detectado imediatamente pelo Gestor de memória de página porque, na segunda libertar, irá bloquear não tem o cabeçalho de prefixo correcto e não é possível encontrar entre os blocos atribuídos. Página da pilha depuração Consulte falhas de formas analisar o rastreio da pilha da primeira operação livre. Este erro pode ser uma variante do problema reatribuição porque, quando a aplicação liberta o considera que é o endereço do bloco de, esse bloco já foi libertado como parte de realocação.
  • acesso do bloco livre depois : blocos de memória libertada são mantidos durante um curto período de tempo pelo Gestor de memória de página num conjunto de memória protegida. Qualquer acesso a esses blocos vai aumentar uma violação de acesso. Com base no princípio "Localidade", a maior parte dos problemas deverá ser detectada se o conjunto disponível protegido for suficientemente grande. Se o bloco libertado ainda no conjunto de protegido, o erro é detectado instantaneamente. No entanto, se a memória foi reutilizada, em seguida, existe menos probabilidades de localizar o erro ou identificar o código que causou este.
  • acesso depois do fim do bloco atribuído : O Gestor de pilha página coloca uma página inacessível imediatamente a seguir o bloco atribuído. Qualquer acesso além do fim do bloco de vai aumentar uma violação de acesso. Algumas aplicações esperam atribuições seja alinhado 8-byte. Esta funcionalidade tiver sido suportada desde os gestores de pilha do Windows NT 3.5. Um pedido de tamanho não 8 bytes alinhados ainda irá obter um endereço de alinhado de 8 bytes, mas este deixa alguns bytes depois do fim do bloco de que estão ainda disponíveis. Se a aplicação danificar apenas os bytes alguns, o erro será detectado apenas verificando o padrão de sufixo bloco quando o bloco é libertado.
  • acesso antes do início do bloco atribuído : O Gestor de pilha de página pode ser indicado através de um sinalizador pode ser definido para colocar a página inacessível no início do bloco de, em vez no fim. Qualquer acesso antes do início do bloco de vai aumentar uma violação de acesso.
Reduzir esta tabelaExpandir esta tabela
FalhaPilha de página normalPilha de página inteira
Ponteiro de pilha inválidoDetectada instantaneamenteDetectada instantaneamente
Ponteiro de bloco de pilha inválidoDetectada instantaneamenteDetectada instantaneamente
Acesso não sincronizadoDetectada instantaneamenteDetectada instantaneamente
Pressupostos sobre endereços de reatribuição90 % até livre real90 % detectada instantaneamente
Libertar duplo90 % detectada instantaneamente90 % detectada instantaneamente
Reutilizar depois livre90 % até livre real90 % detectada instantaneamente
Acesso depois do fim do blocoDetectada após livreDetectada instantaneamente
Acesso antes do início do blocoDetectada após livreDetectada instantaneamente (sinalizador especial)

Falhas de página de área de depuração

Para obter mais informações sobre depuração falhas de área de página, consulte Referência de Tookit compatibilidade de aplicações disponíveis dentro do Application Compatibility Toolkit.

Para a sintaxe de pageheap.exe e exemplos de utilização pageheap.exe, consulte Tookit referência a compatibilidade de aplicações disponíveis dentro do Application Compatibility Toolkit.

Para obter informações adicionais consulte o seguinte artigo da base de dados de conhecimento da Microsoft:
294895Como obter o Windows Application Compatibility Toolkit

Propriedades

Artigo: 286470 - Última revisão: 14 de janeiro de 2009 - Revisão: 6.0
A informação contida neste artigo aplica-se a:
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003 Datacenter Edition
  • Microsoft Windows XP Professional Edition
  • Microsoft Windows XP Home Edition
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Datacenter Server
Palavras-chave: 
kbmt kbenv kbinfo KB286470 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 286470

Submeter comentários

 

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