Partager via


crt_dbg2, exemple : fonctions de raccordement du débogage du runtime C

L'exemple crt_dbg2 illustre plusieurs manières d'utiliser les fonctions de raccordement du débogage avec les versions debug de la bibliothèque Runtime C. Pour plus de réalisme, il comprend quelques éléments d'une application réelle, y compris deux bogues.

Notes

Cet exemple n'est pas pris en charge sur les processeurs Itanium d'Intel.

Note de sécuritéNote de sécurité

Cet exemple de code est destiné à illustrer un concept ; il présente uniquement le code qui se rapporte spécifiquement à ce concept. Il est possible qu'il ne réponde pas aux exigences de sécurité d'un environnement spécifique, et ne doit pas être utilisé exactement comme indiqué. Nous vous recommandons d'ajouter du code de sécurité et de gestion des erreurs afin de renforcer la sécurité et la fiabilité de vos projets. Microsoft fournit cet exemple de code « EN L'ÉTAT » sans aucune garantie.

Pour obtenir des exemples et des instructions d'installation :

Pour accéder aux exemples de Visual Studio

  • Dans le menu Aide, cliquez sur Exemples.

    Par défaut, ces exemples sont installés sous lecteur:\Program Files\Microsoft Visual Studio 10.0\Samples\.

Génération et exécution de l'exemple

Pour générer et exécuter cet exemple

  1. Ouvrez la solution crt_dbg2.sln.

  2. Dans le menu Générer, cliquez sur Générer.

  3. Dans le menu Déboguer, sélectionnez Exécuter sans débogage.

Fonctionnement de l'exemple

Ce programme stocke des dates de naissance dans une liste liée de blocs Client. Une fonction de raccordement du dump mémoire de Client valide les données relatives aux dates d'anniversaire et signale le contenu des blocs Client. Une fonction de raccordement d'allocation enregistre les opérations sur les tas dans un fichier texte et la fonction de raccordement de rapport enregistre les rapports sélectionnés dans le même fichier texte.

Notez que la fonction de raccordement d'allocation exclut explicitement de son journal les blocs CRT (mémoire allouée en mode interne par la bibliothèque Runtime C). La fonction de raccordement utilise fprintf pour écrire dans le fichier journal et fprintf alloue un bloc CRT (C Run-Time, runtime C). Si les blocs CRT n'étaient pas exclus dans ce cas, une boucle sans fin provoquerait un dépassement de la pile : fprintf provoquerait l'appel à la fonction de raccordement, laquelle appellerait à son tour fprintf qui entraînerait à nouveau l'appel à la fonction de raccordement, et ainsi de suite.

Pour utiliser des blocs de type CRT dans votre raccordement d'allocation, vous pouvez faire appel aux fonctions de l'API Windows à la place des fonctions du runtime C. Dans la mesure où les API Windows n'utilisent pas le tas CRT, il n'y a aucun risque de créer une boucle de raccordement sans fin.

Le tas de débogage intercepte deux bogues et une erreur de données dans le deuxième exemple. Le premier bogue est que le champ du nom n'est pas assez long pour contenir plusieurs noms de tests. Ce champ devrait être plus long et strncpy devrait remplacer strcpy. Le second bogue est que la boucle While de la fonction printRecords ne doit pas se terminer tant que HeadPtr n'est pas nul. Il se traduit par un affichage incomplet des dates de naissance et par une fuite de mémoire. Enfin, l'anniversaire de Gauss est le 30 avril et non le 32 avril.

Mots clés

Cet exemple utilise les mots clés suivants :

_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 ; exit ; fatalerror ; fclose ; fflush ; fopen ; fprintf ; fputs ; get_size ; helpstring ; id ; iid_is ; module ; myallochook ; mydumpclienthook ; myreporthook ; pointer_default ; printf ; printrecords ; put_size ; set_crt_debug_field ; strcpy_s ; strstr ; uuid

Voir aussi

Autres ressources

Exemples généraux