Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Warchief en 06 de Abril de 2005, 03:42:07 AM

Título: Purificador De Memoria? (debug)
Publicado por: Warchief en 06 de Abril de 2005, 03:42:07 AM
 Pues algo tipo purify, valgrind, electric fence, pero para Windows. Quiero saber si tengo pérdidas de memoria (bueno yo no, el programa), porque no termina bien a veces; cosa harto difícil de depurar a pelo.

Gracias de antemano.
Título: Purificador De Memoria? (debug)
Publicado por: Jikan en 06 de Abril de 2005, 09:27:07 AM
 

        NuMega (Compuware) BoundsChecker (ó el DevPartner Studio que incluye este producto)

               - Jikan  
Título: Purificador De Memoria? (debug)
Publicado por: zupervaca en 06 de Abril de 2005, 12:11:18 PM
 si es c++ y con visual c++ o .net puedes crear una clase estatica que son los ultimos objetos en destruirse y llamar a la funcion _CrtDumpMemoryLeaks(), para inicializar el sistema de depuracion del visual es con esto:
#define CRTDBG_MAP_ALLOC
#include    
#include

Te pongo un ejemplo de como lo puedes hacer:
#ifdef _DEBUG
#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
class UltimaClaseQueSeDestruye
{
public:
 ~UltimaClaseQueSeDestruye()
 {
  _CrtDumpMemoryLeaks();
 }
};
static UltimaClaseQueSeDestruye g_Ultima;
#endif _DEBUG


no obstante puedes usar el boundchequer, a mi hubo una temporada que me iva bien pero no es gratis  :(  
Título: Purificador De Memoria? (debug)
Publicado por: Warchief en 07 de Abril de 2005, 11:03:47 AM
 Gracias por las respuestas. No he podido probar aún nada, pero creo que servirá con _CrtDumpMemoryLeaks; (estoy en c++ con msvc sí).
Título: Purificador De Memoria? (debug)
Publicado por: Warchief en 09 de Abril de 2005, 12:06:50 AM
 Pues creo que la razón de que mis programas se queden colgaos al veces al salir es:


#include <allegro.h>

#ifdef _DEBUG               // only in debugmode (F5)
 #define DEBUGMODE         // some useless allegro thing
 #define _CRTDBG_MAP_ALLOC
 #include <stdlib.h>      
 #include <crtdbg.h>       // all this above for _CrtDumpMemoryLeaks()
#endif

int main(int argc, char* args[]) {

#ifdef _DEBUG
_CrtDumpMemoryLeaks();
#endif

return 0;
} END_OF_MAIN();


Esto me da leaks! Es normal??


Detected memory leaks!
Dumping objects ->
{47} normal block at 0x00981CA0, 256 bytes long.
Data: <                > D1 1D 98 00 00 00 00 00 CD CD CD CD CD CD CD CD
{46} normal block at 0x00981DD0, 65 bytes long.
Data: <"C:\DOCUMENTS AN> 22 43 3A 5C 44 4F 43 55 4D 45 4E 54 53 20 41 4E
Object dump complete.


Me extraña un poco porque el 46 es parte del path, pero estoy perdido.

Ayuda please?




Detected memory leaks!
Dumping objects ->
{53} normal block at 0x00991AF0, 256 bytes long.
Data: <a               > 61 1E 99 00 00 00 00 00 CD CD CD CD CD CD CD CD
{52} normal block at 0x00991E60, 50 bytes long.
Data: <"C:\Personales\R> 22 43 3A 5C 50 65 72 73 6F 6E 61 6C 65 73 5C 52
{47} normal block at 0x00990030, 33 bytes long.
Data: < C              > 00 43 00 CD CD CD CD CD CD CD CD CD CD CD CD CD
{46} normal block at 0x00991DB0, 40 bytes long.
Data: < |L             > 14 7C 4C 10 16 00 00 00 00 00 00 00 00 00 00 00
Object dump complete.

con este código:

#ifdef _DEBUG               // only in debugmode (F5)
 #define DEBUGMODE        
 #define _CRTDBG_MAP_ALLOC
 #include <stdlib.h>      
 #include <crtdbg.h>       // all this above for _CrtDumpMemoryLeaks()
#endif

int main(int argc, char* args[]) {
#ifdef _DEBUG
_CrtDumpMemoryLeaks();
#endif
return 0;
} END_OF_MAIN();

// pero en un proyecto distinto de msvc


:blink:
Título: Purificador De Memoria? (debug)
Publicado por: fiero en 09 de Abril de 2005, 01:01:59 AM
 Si haces doble click en la línea donde muestra el memory leak (donde pone {46}...) te lleva hasta donde se declaró la variable que no se libera.

un saludo
Título: Purificador De Memoria? (debug)
Publicado por: Warchief en 09 de Abril de 2005, 01:25:52 AM
 
Cita de: "fiero"Si haces doble click en la línea donde muestra el memory leak (donde pone {46}...) te lleva hasta donde se declaró la variable que no se libera.

un saludo
Uhm, no. Hablamos de la pestaña "debug" de la ventana output no? No me deja clickar, sólo seleccionar.


Vale, en cualquier caso me doy por estúpido yo mismo.  (nooo)  El primer ejemplo

Detected memory leaks!
Dumping objects ->
{47} normal block at 0x00981CA0, 256 bytes long.
Data: <                > D1 1D 98 00 00 00 00 00 CD CD CD CD CD CD CD CD
{46} normal block at 0x00981DD0, 65 bytes long.
Data: <"C:\DOCUMENTS AN> 22 43 3A 5C 44 4F 43 55 4D 45 4E 54 53 20 41 4E
Object dump complete.


47 es int argc
46 char* argv[]
XD, paré el debug en el return y lo vi.

Siento el post estúpido.   (rules)



Bueno, la verdad es que ya no estoy seguro porque con main(void) también me sale lo mismo, y 256 bytes para un entero me parece un poco excesivo.
Título: Purificador De Memoria? (debug)
Publicado por: Warchief en 09 de Abril de 2005, 01:54:02 AM
 Ya se pasó el tiempo de modificar.


Dije que eran int argc y char* argv pero lo del int no tiene sentido claro está.
Además con main(void) también me sale lo mismo, y 256 bytes para un entero... ya de por sí era estúpido.


@fiero
si pongo un int* x = (int*)malloc(10); sí me deja clickar, pero los otros errores no.


Es posible que sean del .lib de allegro?
Título: Purificador De Memoria? (debug)
Publicado por: TheAzazel en 09 de Abril de 2005, 02:17:36 AM
Cita de: "Warchief"Ya se pasó el tiempo de modificar.


Dije que eran int argc y char* argv pero lo del int no tiene sentido claro está.
Además con main(void) también me sale lo mismo, y 256 bytes para un entero... ya de por sí era estúpido.


@fiero
si pongo un int* x = (int*)malloc(10); sí me deja clickar, pero los otros errores no.


Es posible que sean del .lib de allegro?
tiene toda la pinta de venir de la lib de allegro....
Título: Purificador De Memoria? (debug)
Publicado por: zupervaca en 09 de Abril de 2005, 11:39:30 AM
 yo de la alegro ni idea pero uno es un path que no se libera despues de usarse, busca funciones como split o la constante MAX_PATH

saludos
Título: Purificador De Memoria? (debug)
Publicado por: zupervaca en 09 de Abril de 2005, 11:40:17 AM
 perdonar el segundo post seguido, si puedes haz que la alegro no se compile estaticamente

saludos