Comment détecter les fuites de mémoire dans QtCreator sur Windows?
Comment puis-je détecter les fuites de mémoire dans QtCreator sur Windows? Sur la doc, ils recommandent Memcheck, mais il ne fonctionne que sur Mac et Linux. Toute suggestion pour Windows?
Après plusieurs essais j'ai enfin trouvé une méthode pour détecter les fuites de mémoire d'un projet Qt sous Windows:
1) tout d'Abord, il ne peut être fait directement dans Qt Creator, donc vous avez besoin pour créer un projet Visual C++ pour faire de la détection fuite de mémoire. Heureusement, qmake rend cela facile. Ouvrez le Qt SDK outil de ligne de commande et l'exécuter:
qmake -spec win32-msvc2008 -tp vc
Cela vous permettra de transformer votre projet pour une .vcproj.
2) Ouvrir ce projet et ajouter le code nécessaire pour la mémoire de détection de fuite:
À votre main.cpp fichier:
//Necessary includes and defines for memory leak detection:#ifdef _MSC_VER
#define _CRTDBG_MAP_ALLOC
#include<crtdbg.h>#endif//_MSC_VER#if defined(_MSC_VER)//Code to display the memory leak report//We use a custom report hook to filter out Qt's own memory leaks//Credit to Andreas Schmidts - http://www.schmidt-web-berlin.de/winfig/blog/?p=154
_CRT_REPORT_HOOK prevHook;int customReportHook(int/* reportType */,char* message,int*/* returnValue */){//This function is called several times for each memory leak.//Each time a part of the error message is supplied.//This holds number of subsequent detail messages after//a leak was reportedconstint numFollowupDebugMsgParts =2;staticbool ignoreMessage =false;staticint debugMsgPartsCount =0;//check if the memory leak reporting startsif((strncmp(message,"Detected memory leaks!\n",10)==0)|| ignoreMessage){//check if the memory leak reporting endsif(strncmp(message,"Object dump complete.\n",10)==0){_CrtSetReportHook(prevHook);
ignoreMessage =false;}else
ignoreMessage =true;//something from our own code?if(strstr(message,".cpp")== NULL){if(debugMsgPartsCount++< numFollowupDebugMsgParts)//give it back to _CrtDbgReport() to be printed to the consolereturn FALSE;elsereturn TRUE;//ignore it}else{
debugMsgPartsCount =0;//give it back to _CrtDbgReport() to be printed to the consolereturn FALSE;}}else//give it back to _CrtDbgReport() to be printed to the consolereturn FALSE;}#endifint main(int argc,char*argv[]){#if defined(_MSC_VER)_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
prevHook =_CrtSetReportHook(customReportHook);//_CrtSetBreakAlloc(157); //Use this line to break at the nth memory allocation#endifQApplication* app =newQApplication(argc, argv);int appError = app->exec();delete app;#if defined(_MSC_VER)//Once the app has finished running and has been deleted,//we run this command to view the memory leaks:_CrtDumpMemoryLeaks();#endifreturn appError;}
3) Avec cela, votre projet doit maintenant être en mesure de détecter les fuites de mémoire. Remarque le _MSC_VER définit de sorte que ce code n'est exécuté lors de votre course à partir de Visual C++ (pas de Qt Creator). Cela signifie que vous pouvez toujours faire du développement avec Qt Creator et ré-exécutez l'étape 1 à chaque fois que vous devez vérifier pour les fuites de mémoire.
Tout d'abord, il ne peut être fait directement dans Qt Creator, donc vous avez besoin pour créer
un projet Visual C++ pour faire de la détection fuite de mémoire. Heureusement,
qmake rend cela facile.
1) Ouvrez le Qt SDK outil de ligne de commande et l'exécuter:
Les deux réponses sont excellentes, je voulais juste ajouter que dans les versions ultérieures de l'intervalle QT remplacer la ligne de commande qmake -spec win32-msvc2015 -tp vc avec qmake -tp vc l'air de fonctionner. Le -spec argument a changé.
Voici une bien plus récente réponse. Qt Creator 4.7.1 prend désormais en charge heob, qui est un détecteur de fuite de trop. Vous pouvez le descendre pour Windows à partir d'ici: "heob télécharger | SourceForge.net". Extrait de quelque part, d'obtenir une version récente de Qt Creator, et aller à Analyser | heob. Direct à yer .exe, choisissez yer options, cliquez sur la petite icône représentant une disquette pour enregistrer yer opte, et cliquez sur OK pour exécuter yer proggie. Il donne u une jolie petite memcheck fenêtre qui semble vous donner les vidages de pile au moment où les objets ont été alloués, où u peut se produire, et voir la délinquance des objets; lorsque vous utilisez le Détecter une Fuite Types d'option. Vous pouvez même, pour accéder à la ligne de source où la nouvelle s'est produite en cliquant sur le lien.
Après plusieurs essais j'ai enfin trouvé une méthode pour détecter les fuites de mémoire d'un projet Qt sous Windows:
1) tout d'Abord, il ne peut être fait directement dans Qt Creator, donc vous avez besoin pour créer un projet Visual C++ pour faire de la détection fuite de mémoire. Heureusement, qmake rend cela facile. Ouvrez le Qt SDK outil de ligne de commande et l'exécuter:
Cela vous permettra de transformer votre projet pour une .vcproj.
2) Ouvrir ce projet et ajouter le code nécessaire pour la mémoire de détection de fuite:
À votre main.cpp fichier:
3) Avec cela, votre projet doit maintenant être en mesure de détecter les fuites de mémoire. Remarque le
_MSC_VER
définit de sorte que ce code n'est exécuté lors de votre course à partir de Visual C++ (pas de Qt Creator). Cela signifie que vous pouvez toujours faire du développement avec Qt Creator et ré-exécutez l'étape 1 à chaque fois que vous devez vérifier pour les fuites de mémoire.4) à un particulier, l'allocation de la mémoire, utilisez
_CrtSetBreakAlloc()
Plus d'informations de la mémoire de détection des fuites sur le site de Microsoft: http://msdn.microsoft.com/en-us/library/e5ewb1h3%28v=vs.80%29.aspxOriginalL'auteur this.lau_
Nouveau 2017 solution
devis par
@this.lau_
1) Ouvrez le Qt SDK outil de ligne de commande et l'exécuter:
qmake -spec win32-msvc2015 -tp vc
2) Installer Visual Détecteur de Fuite pour Visual C++
3) Ouvrir un .vcxproj qui a été créé à l'étape
1
4) Inclure dans votre
main.cpp
#include <vld.h>
5) Lancer DebugView v4.81
6) De exécuter votre projet
ctrl + F5
qmake -spec win32-msvc2015 -tp vc
avecqmake -tp vc
l'air de fonctionner. Le-spec
argument a changé.OriginalL'auteur Mikhail
Voici une bien plus récente réponse. Qt Creator 4.7.1 prend désormais en charge heob, qui est un détecteur de fuite de trop. Vous pouvez le descendre pour Windows à partir d'ici: "heob télécharger | SourceForge.net". Extrait de quelque part, d'obtenir une version récente de Qt Creator, et aller à Analyser | heob. Direct à yer .exe, choisissez yer options, cliquez sur la petite icône représentant une disquette pour enregistrer yer opte, et cliquez sur OK pour exécuter yer proggie. Il donne u une jolie petite memcheck fenêtre qui semble vous donner les vidages de pile au moment où les objets ont été alloués, où u peut se produire, et voir la délinquance des objets; lorsque vous utilisez le Détecter une Fuite Types d'option. Vous pouvez même, pour accéder à la ligne de source où la nouvelle s'est produite en cliquant sur le lien.
OriginalL'auteur CodeLurker