0Pricing
C Academy · Lección

Lectura de informes

Interprete la salida

Lectura de informes es una lección gratuita de C Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C Academy incluye 4 lecciones en total.

Anatomía de un informe

Un informe de Valgrind tiene tres partes:

  • El prefijo del ID del proceso en cada línea
  • Uno o más bloques de error a medida que se producen
  • Un HEAP and LEAK SUMMARY final al salir

Aprender a leer cada parte convierte un muro de texto en una lista de tareas precisa.

El prefijo del PID

Cada línea de Valgrind comienza con ==PID==, por ejemplo ==12345==.

Este es el ID del proceso, no forma parte de la salida de su programa. Permite separar los mensajes de Valgrind de los de printf cuando ambos comparten el terminal.

==12345== Memcheck, a memory error detector
==12345== Command: ./prog
==12345==

Un bloque de error de ejemplo

Este es un bloque real de escritura inválida:

==12345== Invalid write of size 4
==12345== at 0x4005A1: main (prog.c:6)
==12345== Address 0x520304c is 0 bytes after a block of size 20 alloc'd
==12345== at 0x4838B40: malloc
==12345== by 0x40058E: main (prog.c:5)

Lea la primera línea

La primera línea indica el tipo y el tamaño del error: 'Invalid write of size 4'.

El tamaño 4 significa que se trata de un acceso de 4 bytes, normalmente un int. Esta única línea le indica qué categoría de error debe esperar antes de continuar leyendo.

Lea la traza de la pila

La línea at corresponde al marco más interno, donde se produjo el error. Cada línea by corresponde a una función llamadora, un nivel más arriba.

Léala de arriba abajo, desde el marco más profundo hasta el más superficial. El primer marco que incluya el nombre de su archivo casi siempre indica dónde está el error.

==12345==    at 0x4005A1: do_work (work.c:12)
==12345==    by 0x4006F0: main (main.c:8)

Lea la nota de dirección

La línea Address ... sitúa el acceso en relación con un bloque conocido:

  • 0 bytes after a block of size 20 alloc'd — desbordamiento justo después del final
  • 4 bytes inside a block of size 4 free'd — uso después de liberar
  • on thread 1's stack — acceso a la pila

También muestra dónde se asignó o liberó ese bloque.

El HEAP SUMMARY

Al salir, obtiene información contable sobre las asignaciones:

==12345== HEAP SUMMARY:
==12345== in use at exit: 20 bytes in 1 blocks
==12345== total heap usage: 3 allocs, 2 frees, 1,044 bytes allocated

Un valor de 'in use at exit' mayor que cero significa que algo no se liberó.

El LEAK SUMMARY

Debajo del resumen del heap, las fugas se agrupan:

definitely lost: 20 bytes in 1 blocks
indirectly lost: 0 bytes in 0 blocks
possibly lost: 0 bytes in 0 blocks
still reachable: 0 bytes in 0 blocks

Añada --leak-check=full para incluir una traza de cada bloque perdido.

El ERROR SUMMARY

La última línea cuenta todos los errores:

ERROR SUMMARY: 2 errors from 2 contexts

Un 'context' es una ubicación de error única. Si una línea defectuosa se ejecuta un millón de veces dentro de un bucle, sigue siendo un solo contexto. Su objetivo es 0 errors from 0 contexts.

Orden de priorización

Analice el informe de forma metódica:

  • Corrija primero los errores de acceso no válido; provocan corrupción
  • Después, los errores de valor no inicializado
  • A continuación, las fugas definitely e indirectly lost
  • Vuelva a ejecutar el programa después de cada corrección; una causa raíz suele eliminar varios informes

Suprimir ruido conocido

Algunos errores proceden de bibliotecas que no puede corregir, como el tiempo de ejecución de C o un controlador gráfico. Genere un archivo de supresiones para silenciarlos sin ocultar sus propios errores.

--gen-suppressions=all muestra entradas de supresión listas para usar, que puede guardar y volver a pasar con --suppressions=file.

valgrind --gen-suppressions=all ./prog
valgrind --suppressions=mine.supp ./prog

Comprobación rápida

Interprete una línea de un informe.

Resumen

Ahora puede leer informes de Valgrind de principio a fin:

  • Los prefijos ==PID== identifican las líneas de Valgrind y las separan de la salida del programa
  • Cada bloque de error indica el tipo, el tamaño, la traza de la pila y una nota sobre la dirección
  • Los resúmenes HEAP/LEAK contabilizan las asignaciones y la memoria perdida
  • ERROR SUMMARY cuenta los contextos únicos; aspire a cero

Priorice primero los errores de acceso y después las fugas, volviendo a ejecutar el programa durante el proceso.

Preguntas frecuentes

¿La lección «Lectura de informes» es gratis?

Sí — el texto completo de «Lectura de informes» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C Academy, actualiza a CoddyKit PRO. El curso de C Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Lectura de informes»?

Interprete la salida Practicas C Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C Academy?

No se requiere experiencia previa. C Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Lectura de informes»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C Academy?

Sí. Cada lección de C Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Por qué usar Valgrind
  2. Detección de fugas
  3. Accesos no válidos
  4. Lectura de informes
← Volver a C Academy