es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo encontrar la línea exacta de código de las fugas de memoria en Clion c++ utilizando MacOS Monterey 12.0.1 y “leaks”?

Estoy utilizando Clion y quiero encontrar una forma de detectar fugas de memoria en Mac M1. Valgrind aún no es compatible.

Veamos este código simple con una fuga de memoria:

“`c++
// Programa con fuga de memoria

#include <cstdlib>

using namespace std;

// función con fuga de memoria
void func_para_mostrar_fuga_de_memoria()
{
int* ptr = new int(5);

<pre><code>// cuerpo

// retorno sin desasignar ptr
return;
</code></pre>

}

// código del controlador
int main()
{
// Llamar a la función para obtener la fuga de memoria
func_para_mostrar_fuga_de_memoria();

<pre><code>system("leaks SimpleMemoryLeak");
return 0;
</code></pre>

}

<pre><code><br />He intentado usar "leaks":

</code></pre>

leaks <em>NombreDelProceso</em>

<pre><code><br />y estoy obteniendo esta salida:
</code></pre>

El proceso 70526 no es depurable. Debido a restricciones de seguridad, las fugas solo pueden mostrar o guardar el contenido de la memoria de solo lectura de procesos restringidos.

Proceso: SimpleMemoryLeak [70526]
Ruta: /Users/USUARIO/Documents/*/SimpleMemoryLeak
Dirección de carga: 0x100ec8000
Identificador: SimpleMemoryLeak
Versión: ???
Tipo de código: ARM64
Proceso principal: clion [39550]

Fecha/Hora: 2021-12-05 23:32:52.942 +0100
Tiempo de inicio: 2021-12-05 23:32:52.307 +0100
Versión de OS: macOS 12.0.1 (21A559)
Versión del informe: 7
Herramienta de análisis: /usr/bin/leaks

Huella física: 945K

Huella física (máxima): 945K

Versión del informe de fugas: 4.0
Proceso 70526: se asignaron 208 nodos para 12 KB
Proceso 70526: 1 fuga de memoria para un total de 16 bytes filtrados.

1 (16 bytes) FUGA RAÍZ: 0x6000003ac030 [16]
“`

¿Existe alguna forma de obtener la línea exacta de código donde se encuentra malloc? ¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, debido a que Valgrind aún no es compatible con Mac M1, no se puede encontrar la línea exacta de código donde se encuentra malloc utilizando las herramientas actuales disponibles. Sin embargo, existen algunas alternativas que pueden ayudar a encontrar posibles fugas de memoria:

    • La herramienta address sanitizer (ASAN), que está incluida en Clion, puede ayudar a detectar problemas de memoria en tiempo de ejecución. Para utilizar ASAN, habilítelo en el archivo CMakeLists.txt, reconstruya el proyecto y ejecute el ejecutable con ASAN habilitado. ASAN informará cualquier problema de memoria encontrado durante la ejecución, incluyendo fugas de memoria.
    • Otra opción es utilizar una biblioteca de detección de fugas de memoria de terceros como Mimalloc o Jemalloc. Estas bibliotecas pueden proporcionar más información sobre asignaciones y desasignaciones de memoria que las herramientas de administración de memoria predeterminadas, y pueden ser compatibles con Mac M1.

    Es importante tener en cuenta que aunque estas herramientas pueden ayudar a detectar fugas de memoria, no garantizan encontrar todos los problemas y también pueden reportar falsos positivos. Por lo tanto, sigue siendo necesario revisar manualmente el código y asegurarse de seguir las prácticas adecuadas de gestión de memoria.

Comments are closed.