Compartilhar via


Exemplo do crt_dbg2: Funções de gancho de depuração c em tempo de execução

O exemplo crt_dbg2 ilustra várias maneiras de usar funções de gancho de depurar com as versões de depurar de C em tempo de execução biblioteca.Para adicionar alguns realismo, ele tem alguns elementos de um aplicativo real, incluindo bugs de dois.

Observação:

Não há suporte para esse exemplo os processadores Itanium da Intel.

Observação de segurança:

Este código de exemplo é fornecido para ilustrar um conceito e não deve ser usado em aplicativos ou sites da Web, pois ele não pode ilustrar sistema autônomo práticas de codificação mais seguras.Microsoft sistema autônomo sumes nenhuma responsabilidade por danos incidentais ou conseqüenciais deve o código de exemplo ser usado para fins diferentes de sistema autônomo se destina.

Para obter exemplos e instruções para instalá-los:

  • Sobre o Visual Studio Ajuda menu, clicar Exemplos.

    Para obter mais informações, consulte Localizando arquivos de exemplo.

  • A versão mais recente e a lista completa das Exemplos está disponível online a partir de O Visual Studio 2008 Exemplos página.

  • Você também pode localizar exemplos no disco rígido do seu computador.Por padrão, exemplos e um arquivo Leiame são copiados para uma pasta sob \programa Files\Visual Studio 9.0\Samples\.Para edições Express do Visual Studio, todos os exemplos estão localizados online.

Criando e executando o exemplo

Para compilação e executar esse exemplo

  1. Abra a solução crt_dbg2.sln.

  2. From a Compilação menu, clicar Compilação.

  3. No menu Debug, selecione Start Without Debugging.

Como funciona o exemplo

O programa armazena informações de data de nascimento em uma lista vinculada de blocos do cliente.Uma função de gancho de despejo de cliente valida os dados de aniversário e relata o Sumário dos blocos de cliente.Uma função de gancho de alocação efetua operações de heap para um arquivo de texto e a função de gancho de relatório login relatórios selecionados no mesmo arquivo de texto.

Observe que a função de gancho de alocação explicitamente exclui blocos CRT (a memória alocada internamente pela biblioteca de time de execução C) do seu registro.A função de gancho usa fprintf para gravar o arquivo de log e fprintf aloca um bloco de CRT. Se CRT blocos não foram excluídos nesse caso, um loop infinito seria estourar a pilha: fprintf fará com que a função de gancho a ser telefonar, o gancho por sua vez seria telefonar fprintf, que por sua vez causaria o gancho a ser chamado novamente, e assim por diante.

Ser capaz de blocos de tipo CRT relatório no gancho de alocação, funções da API do Windows podem ser usadas em vez de C em time de execução funções.Como as APIs do Windows não usam a CRT heap, eles não seriam interceptar o gancho em um loop infinito.

A pilha de depurar captura dois bugs e um erro de dados no segundo exemplo.Um bug é que o campo de nome não é grande o suficiente para armazenar vários nomes de testes de aniversário.O campo deve ser maior e funções strncpy deve ser usado em vez de strcpy.O segundo bug é o loop do while no printRecords função não deve terminar até que o HeadPtr propriamente dito é igual a nulo. Esse bug resultados não apenas em uma exibição de aniversários incompleta, mas também em um perda de memória.Por fim, aniversário de Gauss deve ser 30 de abril não abril de 32.

Palavras-chave

Este exemplo utiliza as seguintes palavras-chave:

_assert _asserte _crtcheckmemory; _crtmemcheckpoint; _crtmemdumpallobjectssince; _crtmemdumpstatistics; _crtsetallochook; _crtsetdbgflag; _crtsetdumpclient; _crtsetreportfile; _crtsetreporthook; _crtsetreportmode; _free_dbg; _malloc_dbg; _rpt4; _strdate; _strtime; aboutbox; clear_crt_debug_field; createinstance; createrecord; displaystring; donttouch; sair; fatalerror; fclose; fflush; fopen; fprintf; fputs; get_size; helpstring; id; iid_is; módulo; myallochook; mydumpclienthook; myreporthook; pointer_default; printf; printrecords; put_size; set_crt_debug_field; strcpy_s; strstr; uuid

Consulte também

Outros recursos

Exemplos Geral