Cómo usar Valgrind C ++

Cómo usar Valgrind C ++
Valgrind es un detector de mala gestión de la memoria. Podemos saber sobre las filtraciones de memoria y los errores de desacuerdo. Es un código de usos múltiples. También se sabe que es una herramienta de depuración de memoria para Linux. Este detector tiene una característica importante de ejecutar su programa en el entorno de memoria de Valgrind y también monitorea el uso de la memoria. Si, en algunos casos de escribir un código, dicha situación ocurre cuando usa la memoria que aún no se inicializa, o se olvida de liberar el puntero, estos efectos que causan errores son detectados por Valgrind. Este artículo se centrará principalmente en el uso de Valgrind para detectar este tipo de problemas.

Valgrind depende del sistema operativo, ya que es ejecutable solo en el sistema operativo de Linux. Valgrind es una colección de herramientas de detección de memoria que son de código abierto. Es ampliamente utilizado y más potente que otras herramientas como MemWatch, Mtrace, etc., que realizan las mismas funciones que Valgrind. Aunque C ++ es un lenguaje de programación muy poderoso y útil, requiere mucho poder para la depuración y la ejecución. Aún así, a veces ocurren errores de memoria, que es un problema específico. Del mismo modo, existe otro error que es una fuga de memoria. Valgrind es un programa específico que lo ayuda a resolver ambos problemas.

Instalación de Valgrind

Al trabajar en la plataforma Linux, se necesitan muchos programas nuevos para ejecutar algunos programas particulares en ese sistema operativo. Por ejemplo, mientras usa un terminal, necesita un SNAP, apto para llevar a cabo muchas otras instalaciones de software. Del mismo modo, Valgrind también se instala en el terminal utilizando un comando 'sudo-apt'.

$ sudo apt install valgrind

Esto llevará algún tiempo, pero al final, se instala con éxito en su sistema.

Algunas instrucciones para el uso de Valgrind

El programa o aplicación que se evaluará se agrega a través de un compilador que compila el programa. "-G" se usa ya que también es un compilador para programas C ++.

El valor resultante del registro de detección se muestra como una salida en el terminal. Además de esto, el valor resultante se puede guardar en un archivo.

Si desea más instrucciones o necesita ayuda para usar algún comando específico, puede ejecutar valgrind -h, dándole una interfaz del terminal de ayuda.

Utilizamos un formato específico para la indicación de la detección de las filtraciones en la memoria: # Valgrind -tool = memcheck -leak -check = completo ./archivo, -leak -check = completo

Principio de detección de memoria de Valgrind

Valgrind utiliza un entorno virtual para la implementación de los programas. El programa o aplicación que se evaluará se ejecuta en este entorno prácticamente creado. La función de Valgrind es monitorear la aplicación, su uso y la versión de memoria en tiempo real y también registrar la información que puede mostrar algunas anormalidades en la memoria. En Valgrind, hay un componente de detección de memoria, MemCheck. Admite muchas funciones. Algunos de ellos se enumeran a continuación:

  • El espacio de memoria no está asignado.
  • El acceso al espacio de memoria excedió el límite dado.
  • El espacio de memoria se libera repetidamente.
  • La aplicación del espacio de memoria y la liberación de la memoria no coinciden.

MemCheck puede verificar muchos problemas, ya que es el componente más potente de Valgrind.

  • Variables que no se inicializan
  • Un malloc () con la funcionalidad de 'cualquier libre ()'
  • Puntero de montón que accede a la memoria no válida.
  • Ahora explicaremos el funcionamiento de Valgrind a través de algunos ejemplos

Memoria no inicializada

Este problema ocurre cuando escribe un programa con el uso de una sola variable o matriz. Y olvidó declarar e inicializar la matriz al principio. Y en el momento del uso, no es consciente de este problema de olvidar. Este error es identificado por Valgrind. Para explicar el ejemplo, hemos tomado un programa en C++.

El primer paso es usar la biblioteca STD.

# incluir

Aquí puede ver que el valor de una variable no está asignado y se da a la matriz, y de manera similar, estos valores se imprimen utilizando un bucle 'para'. Aquí olvidamos asignar un valor a una variable. El error ocurrirá cuando se opte una matriz vacía para mostrar los valores.

Ahora ejecutaremos este código en el terminal Ubuntu. Usaremos un compilador 'G ++' para compilar el código. A diferencia del código C simple, aquí usaremos la palabra clave de 'Valgrind's.

$ gcc -wall -pedantic -g file1.archivo c -o1
$ Valgrind ./archivo1

Ahora este comando traerá una porción desde la página utilizada de la memoria. Primero, obtendremos una descripción sobre 'MemCheck'. Luego se muestran los detalles sobre el valor no inicializado. En esta parte, puede ver que el número de línea se menciona donde ha ocurrido un error. Aquí el número de línea es '11'.

Detección de fugas de memoria

Supongamos que tiene un programa que contiene malloc () no Free (). Esto conducirá a una fuga de memoria. Hay un ejemplo de un código fuente de C ++.

En el programa principal, se utiliza un puntero de tipo de personaje con una función MALLOC. Incluso un pequeño programa también es responsable de la identificación de fuga de memoria. Ahora veremos la salida.

El contenido de salida coincide con la salida del anterior en algunos aspectos, por lo que solo hemos mostrado la porción de fugas de memoria para tener un enfoque completo.

Ahora compilaremos el código anterior y lo ejecutaremos a través de un comando.

$ Valgrind--Tool = MemCheck--Leak-check = YES --Track-Origins = Sí ./archivo1

Este comando mostrará los siguientes resultados. Puede observar aquí que se muestran los números de bytes que se pierden. La línea donde ha ocurrido el error también se muestra en la última línea de los valores resultantes.

Este resultado también contiene el resumen de la fuga, que explica los bytes totales perdidos directa o indirectamente; Cualquiera sea la descripción, se explica brevemente en el resultado.

Detección de acceso a la memoria no válida

A veces, tales condiciones se encuentran cuando el código fuente contiene un error, el puntero que usamos para acceder a la ubicación de la memoria límite. Este error es detectado por MemCheck.

Ptr [11] = 'z';

En este código mencionado anteriormente, puede ver que hemos usado un puntero 'PTR' que está tratando de acceder a una ubicación de memoria que excede el límite.

La salida muestra que el tamaño no es válido. Como hemos declarado una variedad de tamaño [10]. Y el puntero está accediendo a la ranura de 11, que está fuera de alcance que hemos declarado.

Detección de operaciones de puntería colgante

Estos son esos punteros que apuntan a la memoria que ya se libera.

Aquí tenemos primero liberar el espacio; Incluso después de liberar el espacio, el código está tratando de acceder a la memoria, lo que apunta por un puntero.

Conclusión

'Cómo usar Valgrind C ++' se implementa en el terminal de Linux. Comprende el concepto básico, los tipos de Valgrind, su instalación, instrucción de uso y algunas funciones importantes de sus componentes. MemCheck, como el componente principal de Valgrind, detecta el error en el programa, ya sea el caso de la fuga de memoria o la memoria no inicializada. Todos los ejemplos mencionados muestran el funcionamiento de Valgrind, incluido Malloc (). Este artículo será beneficioso con respecto al trabajo y los principios de Valgrind en el entorno de programación de C++.