c++ - utilizable - utilizar toda la memoria ram windows 10
¿Hay un depurador de memoria simple para Windows que(a) es gratis y(b) funciona? (4)
He intentado depurar un problema de memoria sutil en un proyecto grande. Han pasado semanas y todavía no he podido encontrarlo. Mi programa falla al azar después de ejecutarse durante un cierto período de tiempo. Como resultado, he estado tratando de obtener un tipo de depurador de memoria. Estas son las opciones que he considerado / probado:
- IBM Purify: detecta con éxito la pérdida de memoria, pero me pide que pague dinero para averiguar dónde está
- Valgrind: He escuchado cosas buenas sobre este programa, pero es para Linux y tendría que portar todo mi proyecto.
- MPatrol: una vez más, es principalmente para Linux. La versión de Windows es para MingGW y estoy usando Visual Studio. Encontré binarios para VC ++ en línea y seguí las instrucciones allí, pero el programa se negó a generar ningún archivo de registro.
- Application Verifier: lanza un punto de interrupción aleatorio al inicio, solicita un archivo fuente inexistente (sdk.cpp) en Visual Studio y luego muestra este error cada vez, sin importar el exe al que lo adjunte: "Violación de acceso de primera oportunidad para el actual rastro de pila
- WinDbg: ni siquiera sé si este programa hace lo que creo que hace. Siempre da "ERROR: archivo de símbolo no se pudo encontrar". Y no parece hacer nada cuando ejecuto mi exe.
He buscado todos estos errores en Google durante horas en vano. La documentación respectiva en estos paquetes no parece tener información sobre mis problemas particulares. ¿Hay algún depurador por ahí que funcione? ¿Realmente tengo que transferir mi programa a Linux? ¿Alguien puede indicarme una buena documentación sobre la depuración de memoria? Cualquier ayuda sería muy apreciada. ¡Gracias por adelantado!
Editar:
Gracias por todas las respuestas. Me doy cuenta de que el problema no es una pérdida de memoria. Después de correr por un tiempo, simplemente se congela. No hay mensaje de error Por lo general, sucede durante la escritura de cout. Así que pensé que era una corrupción de memoria de algún tipo. Supongo que buscaré características más detalladas de Visual Studio. En realidad, con la versión de prueba de Purify encontré algunos errores, pero no quiero gastar $ 1600 para la versión completa. En el peor de los casos, lo transferiré a Linux. Gracias de nuevo por la ayuda.
Editar 2:
Después de algunas pruebas más con Purify, parece que mi programa no tiene más errores de memoria. Noté que el programa se congela cuando hago clic en él, como en el propio símbolo del sistema. Por lo tanto, voy a suponer que no es un problema con mi código, sino más bien la forma en que interactúa con el texto seleccionado. (Editar 2a: se supone que la selección hace esa facepalm ) Gracias de nuevo por toda la ayuda.
Para referencia futura, ¿a dónde voy para aprender sobre la depuración más sofisticada? Utilicé puntos de interrupción y expresiones de observación, pero en la escuela solo enseñan el idioma en sí. ¿Debo aprender a ensamblar x86?
¿Quizás Gdb y Valgrind han sido portados a Windows?
Y si su aplicación no es específica de Windows o utiliza librerías (como, por ejemplo, Qt) que han sido portadas tanto en Windows como en Linux, podría considerar eliminarlas en Linux.
Visual Studio incluye detección de fuga de memoria en la versión de depuración de las bibliotecas C. Consulte esta página en MSDN para obtener más información.
Pero no parece estar seguro de que el bloqueo se deba a una pérdida de memoria. De hecho, las fugas de memoria normalmente no causarán bloqueos (a menos que el bloqueo ocurra porque el sistema se ejecuta completamente sin memoria). Es muy posible que tenga fugas, pero eso podría no estar relacionado con el colapso.
¿Has intentado ver el bloqueo con el depurador VS? Muchas veces eso te dará una idea de qué tipo de problema estás enfrentando. Si tiene fallas, sospecho que es más probable que esté corrompiendo la memoria, por ejemplo al escribir más allá del final de un bloque de memoria asignado o al usar la memoria después de que se haya liberado.
Este artículo tiene algunas ideas sobre cómo abordar los problemas de memoria, y esta página enumera algunos depuradores de memoria gratuitos y comerciales, algunos de los cuales no están en su lista.
Buena suerte.
Yo uso el detector de fuga Visual. Detecta fugas de memoria y le da la pila de llamadas para ellos. Funciona con Visual Studio, y es bastante confiable. Puede tomarlo desde aquí - http://vld.codeplex.com/
No sé si esto es exactamente lo que está buscando, pero es útil.