crt_dbg2, exemple : fonctions de raccordement du débogage du runtime C
Mise à jour : novembre 2007
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.
Remarque : |
---|
Cet exemple n'est pas pris en charge sur les processeurs Itanium d'Intel. |
Note de sécurité : |
---|
Cet exemple de code est fourni pour illustrer un concept et ne doit pas être utilisé dans des applications ou des sites Web, car il peut ne pas illustrer les pratiques de programmation les plus sûres. Microsoft n'assume aucune responsabilité pour tout dommage indirect ou consécutif en cas d'utilisation de l'exemple de code à des fins autres que celles prévues. |
Pour obtenir des exemples et des instructions d'installation :
Dans le menu Aide de Visual Studio, cliquez sur Exemples.
Pour plus d'informations, consultez Recherche des fichiers d'exemple.
La liste la plus récente et la plus complète d'exemples est disponible en ligne à partir de la page d'exemples Visual Studio 2008 (en anglais).
Des exemples sont également disponibles sur le disque dur de votre ordinateur. Par défaut, des exemples et un fichier Readme sont copiés dans un dossier sous \Program Files\Visual Studio 9.0\Samples\. Pour les éditions Express de Visual Studio, tous les exemples sont accessibles en ligne.
Génération et exécution de l'exemple
Pour générer et exécuter cet exemple
Ouvrez la solution crt_dbg2.sln.
Dans le menu Générer, cliquez sur Générer.
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