Compartilhar via


Exemplo de crt_dbg2: Funções de gancho de depuração c Run-Time.

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

Dica

Este exemplo não é suportado nos processadores da Intel Itanium.

Observação de segurançaObservação sobre segurança

Este código de exemplo destina-se a ilustrar um conceito e mostra somente o código que é relevante para esse conceito. Ele pode não atender aos requisitos de segurança de um ambiente específico e não deve ser usado exatamente como mostrado. Recomendamos que você adicione código de segurança e tratamento de erros para tornar seus projetos tão seguros e robustos quanto for conveniente. A Microsoft fornece este código de exemplo "COMO ESTÁ" e sem garantias.

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

Para acessar exemplos do Visual Studio

  • No menu Ajuda, clique em Exemplos.

    Por padrão, esses exemplos são instalados em unidade:\Arquivos de Programas\Microsoft Visual Studio 10.0\Samples\.

  • Para a versão mais recente do que esse exemplo e uma lista de outros exemplos, consulte Amostras de Visual Studio no site do MSDN.

Criar e executar a amostra.

Para criar e executar esse exemplo.

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

  2. Do Build menu, clique em Build.

  3. From the Debug menu, select Start Without Debugging.

Como funciona a amostra

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 conteúdo dos blocos de cliente. Uma função de gancho de alocação registra as operações de pilha em um arquivo de texto e a função de gancho de relatório registra os relatórios selecionados para o mesmo arquivo de texto.

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

Para ser capaz de blocos de relatório tipo CRT no gancho sua alocação, funções de API do Windows podem ser usadas em vez de funções de tempo de execução C. Como as APIs do Windows não usam a pilha de CRT, eles seriam não ajuste de registro o gancho em um loop infinito.

A pilha de depuração 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 teste de aniversário. O campo deve ser maior, e strncpy deve ser usado em vez de strcpy. Segundo bug é que o loop while na printRecords função não pode terminar até o HeadPtr propriamente dito é igual a null. Esse bug resulta não apenas em uma exibição incompleta de aniversários, mas também em um vazamento de memória. Finalmente, o aniversário da Gauss deve ser 30 de abril não de 32 de abril.

Keywords

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

Amostras gerais