Bonjour,
je ne sais pas si je poste au bon endroi mais j'aimerai connaitre le nom de quelques freeware permettant de reperer les fuites memoires d'un programme C.
Merci!!
Version imprimable
Bonjour,
je ne sais pas si je poste au bon endroi mais j'aimerai connaitre le nom de quelques freeware permettant de reperer les fuites memoires d'un programme C.
Merci!!
Moi j'utilise cette technique(pas top, mais on peu deja voir si on a une fuite)
si tu est sous linux sous KDE tu peu faire CTRL + ESC ou sous Windows 2000 et XP tu fait CTRL + ALT + SUPPR et tu va dans l'onglet processu. Si tu as une fuite de mémoire ton programme dans la liste des processus à sa mémoire utilisée qui augmente.
Je sais c'est pas super mais ça ma permi de resoudre quelques problémes de ce genre. Il suffit de désactiver ensuite une à une les parties de ton programme pour voir d'ou viens la fuite.
En fait, en regle general, je declare un compteur en global et je fais ++ a chaque malloc et -- a chaque free. Puis j'affiche le resultat...
C'est assez efficace.
Sinon, je rajoute:
a la fin du main .Code:
1
2 while(1);
Et, en meme temps je fais un top pour voir ce qu'il reste a la fin...
ca marche bien aussi.
Mais la, je sais que j'ai enorme de fuite partout et j'ai pas super envie de me les resoudre a la main... donc un pitit soft serai le bienvenu!!!
Merci !!
Au lieu d'un while(1) qui va te bouffer toutes tes ressource fais un pause() sous linux ... (ctrl^C pour fermer le programme ensuite).Citation:
Envoyé par vince3320
allez puisque la recherche c'est pas ton fort visiblement :
valgrind
Alors tu sera interessé par ça:Citation:
Envoyé par vince3320
http://emmanuel-delahaye.developpez.com/clib.htm
Module SYSALLOC
Ca manque un peu de mode d'emploi !. Si ça t'intéresse, je peux m'y coller... j'ai du temps libre en ce moment (ma boite à brûlé).
ok ok
je regarde tt ca demain!!
Merci!!
PS desole pour ta boite... et bon courage a toi!!
Citation:
Envoyé par Emmanuel
Si ils avaient respecté la norme incendie ... ;) Ok désolé je :arrow:
Effectivement, il n'y aurait peut être pas eu 55 voitures brûlées dans la parking souterrain avec propagation au rez de chaussée... Une enquête est en cours, et je pense que le propriétaire des locaux va passer un sale quart d'heure...Citation:
Envoyé par Yabo
coucou!
Bon j'ai regarde ton code et c'est vrai que j'ai un peu de mal a bien saisir.
De plus, a un moment donne, tu fais
Je n'ai pas trouve ces fichiers.Code:
1
2
3 #include "ed/inc/sys.h" #include "ed/inc/cnt.h"
Je n'ai recupere que sysalloc.*
Je ne comprends pas tres tres bien la...
Merci de ton aide
Pour valgrind je le testerai ce WE, ici j'ai pas le droit......... :( :( :( :( :( :( :( :(
Merci encore!!
Ils sont dans les modules respectifs SYS et CNT sur la même page. Il faudra bien sûr ajouter les .c correspondants au projet...Citation:
Envoyé par vince3320
J'ai ajouté un lien 'mode d'emploi' (un peu spartiate) accessible à partir de la liste des fonctions (module CLIB)
http://emmanuel-delahaye.developpez.com/sysalloc_um.htm
C'est un peu fastidieux, mais on y arrive.
N'hésite pas à poser des questions.
Je ne trouve pas le module cnt.
Il est bien sense se trouver sur cette page?
http://emmanuel-delahaye.developpez.com/clib.htm
De plus, il a l'air de manquer ceci
#include </djgpp/include/sys/version.h>
Oui, mais j'ai rajouté le lien ce matin. Il faut recharger la page.Citation:
Envoyé par vince3320
Oui, c'est dans une partie un peu glauque de sys.h, qui n'est pas portable... Quel est ton compilateur ?Citation:
De plus, il a l'air de manquer ceci
#include </djgpp/include/sys/version.h>
Ben meme en rechargeant ta page, je ne le vois pas...
Il est entre quoi et quoi normalement?
C'est peut etre moi qui a du mal...
mon compilateur c'est gcc
apres je ne sais pas comment savoir quel version de gcc je possede...
Moi je le vois :
Fais bien "actualiser" (et pas simplement reclicker sur le lien).Citation:
CHRO Mesure du temps d'exécution chro.c chro.h ISO-C 90
CNT Compteurs cnt.c cnt.h cnt_err.itm ISO-C 90
CS8 Checksum 8-bit cs8.c cs8.h ISO-C 90
en fait, cela doit venir de l'endroi ou je me trouve car meme sur un autre post je ne voi pas le lien.
Je retenterai plus tard dans la journee!!!
Merci!!
gcc -VCitation:
Envoyé par vince3320
Essaie en effacant l'historique de ton navigateur.Citation:
Envoyé par vince3320
Sinon voici les liens (si ca te dérange Emmanuel je les enlève) :
cnt.c
cnt.h
cnt_err.itm
nickel
Donc j'ai tout recupere!!
merci bien!
La version de gcc est
gcc version 2.96
C'est en ordre alphabétique, donc entre CHRO et CS8Citation:
Envoyé par vince3320
http://emmanuel-delahaye.developpez....b/ed/src/CNT.C
http://emmanuel-delahaye.developpez....b/ed/inc/CNT.H
http://emmanuel-delahaye.developpez....nc/CNT_ERR.ITM
[EDIT]Citation:
mon compilateur c'est gcc
apres je ne sais pas comment savoir quel version de gcc je possede...
J'ai modifié sys.h et sys.c. Ca devrait regler le probleme avec DJGPP, mais je n'ai pas de machine Linux pour tester.
[/EDIT]
Tiens moi au courant.
Pas du tout. Rien de secret!Citation:
Envoyé par Yabo
C'est bon, je les ai!
Mais il reste ceci
sys.h:197:40: /djgpp/include/sys/version.h: Aucun fichier ou répertoire de ce type
avec gcc 2.96
Merci a toi
Normal. Recharge sys.c et sys.h, je les ai modifiés (voir post au dessus)Citation:
Envoyé par vince3320
Peux tu mettre les liens des 2 nouveaux fichier sur le forum car je n'arrive a recuperer que les anciens.?
C'est quand meme bizarre... j'ai pourtant efface l'historique, fait des refresh, taper en dur l'adresse, ... mais je n'ai pas le bon..
http://emmanuel-delahaye.developpez....b/ed/inc/SYS.HCitation:
Envoyé par vince3320
http://emmanuel-delahaye.developpez....b/ed/src/SYS.C
C'est vrai que c'est un peu bizarre... Avec Mozilla, quand je clique sur les liens, j'ai l'ancienne version (le cache, probablement), puis quand je clique sur 'réactualiser', la nouvelle version apparait (1.30)
ben j'ai mozilla aussi et je fais reactualiser pour voir les nouveau post sur le forum et ca marche tres bien... donc la :?: :?: :?:
Sinon j'ai regarde les liens et en le recuperant, j'obtiens toujours la meme erreur.
sys.h:197:40: /djgpp/include/sys/version.h: Aucun fichier ou répertoire de ce type
Quels sont les modifications que tu as apporte a sys.h.?
(pour etre sur que je possede le bon)
Dans l'entete des fichiers,Citation:
Envoyé par vince3320
Sinon :Code:Modification : 25-06-2004
devientCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 /* DJGPP */ #elif defined (__GNUC__) #include </djgpp/include/sys/version.h> #undef COMP_VER #undef COMP_NAME #define COMP_VER __DJGPP__ #define COMP_NAME "DJGPP" #define SIZE_T_BIT 32 #define SYS_CLR(p, T) \ do \ { \ static const T z = {0}; \ *(p) = z; \ } \ while(0) #define STACK_SET(a) #define STACK_CHK() #define STACK_PRINT()
C'est normalement cette partie là qui devrait être compilée chez toi. Pour le savoir, ajouter unCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 /* DJGPP */ #elif defined (__DJGPP__) #undef COMP_VER #undef COMP_NAME #include </djgpp/include/sys/version.h> #define COMP_VER __DJGPP__ #define COMP_NAME "DJGPP" #define SIZE_T_BIT 32 #define SYS_CLR(p, T) \ do \ { \ static const T z = {0}; \ *(p) = z; \ } \ while(0) #define STACK_SET(a) #define STACK_CHK() #define STACK_PRINT() /* GCC */ #elif defined (__GNUC__) #undef COMP_VER #undef COMP_NAME #define COMP_VER __GNUC__ #define COMP_NAME "GCC" #define SIZE_T_BIT 32 #define SYS_CLR(p, T) \ do \ { \ static const T z = {0}; \ *(p) = z; \ } \ while(0) #define STACK_SET(a) #define STACK_CHK() #define STACK_PRINT()
dans le bloc.Code:#error
ok
je n'ai pas le bon
Dans l'entete, j'ai:
Modification : 15-12-2003
Je fais les modifs et je te tiens au courant!
Je te garantis que le serveur est à jour. Tu dois utiliser un proxy qui stocke les pages. Une plaie...Citation:
Envoyé par vince3320
Ca c'est fort possible! lol
Mais je peux pas y faire grand chose... :cry:
En lancant le programme de test, j'obtiens les resultat suivant:
SYSALLOC Overload (5 rec)
SYSALLOC Successful initialization: 5 records available
SYSALLOC min=18446744073709551615 max=18446744073709551615 delta=0
SYSALLOC All-matched
SYSALLOC Released Memory
il me semble que ce ne sont pas les resultat que tu avais edite tout a l'heure...
Si ce n'est pas les meme, cela veut dire que j'ai fais une mauvaise manip?
[pas grand chose a voir avec le C, mais si ca peut aider]
Tu peux essayer en finissant ton adresse par le symbole . (point) -> cela force à remonter jusqu'au DNS primaire, et permettra peut etre de forcer la récupération des dernières versions des fichiers.Citation:
Envoyé par vince3320
Oui. Je pense que tu as oublié de définir la macro globale DBG_SYSALLOCCitation:
Envoyé par vince3320
Ok!
j'ai effectivement oublie de la définir.
Dois je l'initialiser?
Ou dois je la declarer?
Dans le programme de test? dans sysalloc.c ?
De façon globale. Par exemple sur la ligne de commande :Citation:
Envoyé par vince3320
gcc ... -DDBG_SYSALLOC
je ne connais pas les détails de ton compilateur.
Je savais pas que l'on pouvais faire comme cela!
Merci!!
Voila les nouveaux resultats:
Ils ont l'air plutot correct, non?Code:
1
2
3
4
5
6 SYSALLOC Successful initialization: 5 records available SYSALLOC min=18446744073709551615 max=18446744073709551615 delta=0 SYSALLOC Err: Not-matched list: SYSALLOC Bloc 0x6000000000007e90 (1 byte) malloc'ed at line 5 of 'test.c' not freed SYSALLOC Released Memory
Ok. Dans cette implementation, il n'y a pas pas de mécanisme pour mesurer la taille mémoire. Il faut donc ignorer les lignesCitation:
Envoyé par vince3320
etCode:SYSALLOC min=18446744073709551615 max=18446744073709551615
par contre le reste est très significatif (je suis un peu étonné par le format de l'adresse. C'est quelle architecture déjà ?)Code:SYSALLOC Released Memory
en fait, je suis sur un itanium. (machine 64 bits)
C'est peut etre pour ca que le format est etrange, non?
Je comprends mieux. Ouah, mon code tourne sur IA64, je suis impressioné!Citation:
Envoyé par vince3320
Je suis en train de tenter de coller ton programme a mon code.
J'espere que ca va fonctionner!!
Merci beaucoup de ton aide!
N'oublie pas qu'il faut inclure "ed/inc/sysalloc.h" partout où l'on utilise malloc() free(). Et j'espère que tu n'utilises pas strdup() ou autres, car évidemment, les appels à malloc() / free() de la bibliothèque ne sont pas instrumentables par mon système. Mais si c'était le cas, j'ai un STR_dup() dans mon module STR.Citation:
Envoyé par vince3320
je n'utilise pas strdup().
Par contre, j'ai des apels a des fonctions realisant des malloc et des free.
Donc, il me suffit simplement d'inclure sysalloc dans ses fichiers si j'ai bien compris.
En faite, il me marque une fois ca au debut du programme:
SYSALLOC Overload (5 rec)
SYSALLOC Successful initialization: 5 records available
Et ensuite, il ecrit enormement de fois:
SYSALLOC Overload (5 rec)
Et, a la fin, il ecrit:
SYSALLOC Overload (5 rec)
SYSALLOC min=18446744073709551615 max=18446744073709551615 delta=0
SYSALLOC Overload (no valid trace available)
SYSALLOC Released Memory
Ca veut dire qu'il n'a pas trouver de fuite?