Utiliser _crtBreakAlloc pour déboguer une allocation de mémoire


Résumé


Lorsque l’on effectue le suivi des fuites de mémoire à l’aide de la fonctionnalité de débogage C-Runtime (CRT), il est souvent utile de définir un point d’arrêt immédiatement avant d’allouer la mémoire entraînant la fuite. En définissant _crtBreakAlloc au moment de la compilation ou au moment de l’exécution, vous pouvez provoquer un point d’arrêt défini par l’utilisateur à un point spécifique d’allocation de mémoire.

Informations supplémentaires


Lors du suivi des fuites de mémoire avec des fonctions de débogage-CRT, telles que _CrtDumpMemoryLeaks, un numéro d’allocation placé entre accolades ({}) apparaît souvent. Par exemple, voici une fuite de mémoire au numéro d’attribution 18 :
   Detected memory leaks!   Dumping objects ->   {18} normal block at 0x00660BE4, 10 bytes long   Data: <          > CD CD CD CD CD CD CD CD CD CD   Object dump complete. 
Il est utile de définir un point d’arrêt juste avant que cette mémoire soit allouée pour vous permettre de parcourir la pile des appels et de déterminer les fonctions qui sont à l’origine de l’allocation de cette mémoire. La fonction de débogage-CRT _CrtSetBreakAlloc qui vous permet de spécifier un numéro d’allocation sur lequel annuler. Cette méthode nécessite que vous recompilez votre programme chaque fois que vous voulez définir un point d’arrêt d’allocation. Une autre méthode consiste à utiliser la fenêtre Espion et à définir le point d’arrêt d’allocation dynamiquement. Cette méthode présente l’avantage de ne pas nécessiter de modification ou de recompilation du code source. Si vous établissez une liaison statique vers la date d’exécution du C, la variable que vous voulez modifier s’appelle _crtBreakAlloc. Si vous effectuez une liaison dynamique vers le runtime C, la variable que vous voulez modifier dans la fenêtre Espion est {, msvcr40d. dll} * __p__crtBreakAlloc () si vous utilisez Visual C++ 4,0 ou 4,1. La variable que vous voulez modifier dans la fenêtre Espion doit être {,, msvcrtd. dll} * __p__crtBreakAlloc () si vous utilisez Visual C++ 4,2 ou une version ultérieure. Pour déterminer la version du CRT avec laquelle vous compilez les éléments suivants :
  1. Dans le menu Générer, choisissez Paramètres.
  2. Dans le volet Paramètres pour :, sélectionnez la configuration pour laquelle vous développez. Sélectionnez l’onglet C/C++, puis la catégorie génération de code.
La boîte de dialogue utiliser la bibliothèque d’exécution doit apparaître pour afficher la version du CRT que vous utilisez. (Si ce paramètre est vide, assurez-vous que vous avez sélectionné une seule configuration dans le volet Paramètres pour :.) Pour définir un point d’arrêt d’allocation de manière dynamique, procédez comme suit :
  1. Démarrez votre session de débogage. Dans le menu Générer, choisissez déboguer-> pas à pas. Si vous utilisez « déboguer un thread unique » ou « déboguer les CRT multithread », suivez l’étape 1a. Dans le cas contraire, suivez l’étape 1b.
    1. Tapez _crtBreakAlloc dans la fenêtre Espion. Le numéro d’allocation actuel auquel votre programme s’arrêtera. Ce numéro d’attribution doit être-1 lorsque votre programme démarre pour la première fois.
    2. Tapez {, msvcr40d. dll} * __p__crtBreakAlloc () dans la fenêtre Espion si vous utilisez Visual C++ 4,0 ou 4,1. Tapez {, msvcrtd. dll} * __p__crtBreakAlloc () si vous utilisez Visual C++ 4,2 ou une version ultérieure. Le numéro d’allocation actuel auquel votre programme s’arrêtera. Ce numéro d’attribution doit être-1 lorsque votre programme démarre pour la première fois.
  2. Double-cliquez sur la valeur-1, puis entrez le nouveau numéro d’allocation entraînant un point d’arrêt défini par l’utilisateur.
  3. Dans le menu Déboguer, choisissez déboguer-> Go.
Pour plus d’informations sur les _crtBreakAlloc, voir la section « suivi des demandes d’allocation de tas » dans l’aide en ligne.