Aprendiendo a depurar código
|
|
|
- Soledad Asunción Toledo Medina
- hace 9 años
- Vistas:
Transcripción
1 Aprendiendo a depurar código Borja Bergua Guerra Grupo de Usuarios de Linux de la UC3M 13 de Marzo de 2008
2 Parte I Valgrind
3 Valgrind - Tipos de error Tipos de error Lecturas/escrituras ilegales Uso de valores sin inicializar Liberaciones de memoria ilegales Cuando se libera un bloque con una llamada incorrecta Pasar parámetros a llamadas al sistema con permisos de lectura/escritura incorrectos Solapamiento de bloques origen y destino Detección de pérdidas de memoria
4 Valgrind - Tipos de error Lecturas/escrituras ilegales Invalid read of size 4 at 0x40F6BBCC: (within /usr/lib/libpng.so ) by 0x40F6B804: (within /usr/lib/libpng.so ) by 0x40B07FF4: read_png_image(qimageio *) (kernel/qpngio.cpp:326) by 0x40AC751B: QImageIO::read() (kernel/qimage.cpp:3621) Address 0xBFFFF0E0 is not stack d, malloc d or free d
5 Valgrind - Tipos de error Uso de valores sin inicializar Conditional jump or move depends on uninitialised value(s) at 0x402DFA94: _IO_vfprintf (_itoa.h:49) by 0x402E8476: _IO_printf (printf.c:36) by 0x : main (tests/manuel1.c:8)
6 Valgrind - Tipos de error Liberaciones de memoria ilegales Invalid free() at 0x4004FFDF: free (vg_clientmalloc.c:577) by 0x80484C7: main (tests/doublefree.c:10) Address 0x3807F7B4 is 0 bytes inside a block of size 177 free d at 0x4004FFDF: free (vg_clientmalloc.c:577) by 0x80484C7: main (tests/doublefree.c:10)
7 Valgrind - Tipos de error Cuando se libera un bloque con una llamada incorrecta Mismatched free() / delete / delete [] at 0x : free (vg_clientfuncs.c:171) by 0x4102BB4E: QGArray::~QGArray(void) (tools/qgarray.cpp:149) by 0x4C261C41: PptDoc::~PptDoc(void) (include/qmemarray.h:60) by 0x4C261F0E: PptXml::~PptXml(void) (pptxml.cc:44) Address 0x4BB292A8 is 0 bytes inside a block of size 64 alloc d at 0x C: operator new[](unsigned int) (vg_clientfuncs.c:152) by 0x4C21BC15: KLaola::readSBStream(int) const (klaola.cc:314) by 0x4C21C155: KLaola::stream(KLaola::OLENode const *) (klaola.cc:4 by 0x4C21788F: OLEFilter::convert(QCString const &) (olefilter.cc:2
8 Valgrind - Tipos de error Pasar parámetros a llamadas al sistema con permisos de lectura/escritura incorrectos Syscall param write(buf) points to uninitialised byte(s) at 0x25A48723: write_nocancel (in /lib/tls/libc so) by 0x259AFAD3: libc_start_main (in /lib/tls/libc so) by 0x : (within /auto/homes/njn25/grind/head4/a.out) Address 0x25AB8028 is 0 bytes inside a block of size 10 alloc d at 0x259852B0: malloc (vg_replace_malloc.c:130) by 0x80483F1: main (a.c:5) Syscall param exit(error_code) contains uninitialised byte(s) at 0x25A21B44: GI exit (in /lib/tls/libc so) by 0x : main (a.c:8)
9 Valgrind - Tipos de error Solapamiento de bloques origen y destino Source and destination overlap in memcpy(0xbffff294, 0xbffff280, 21) at 0x40026CDC: memcpy (mc_replace_strmem.c:71) by 0x804865A: main (overlap.c:40)
10 Valgrind - Tipos de error Detección de pérdidas de memoria 8 bytes in 1 blocks are definitely lost in loss record 1 of 14 at 0x...: malloc (vg_replace_malloc.c:...) by 0x...: mk (leak-tree.c:11) by 0x...: main (leak-tree.c:39) 88 (8 direct, 80 indirect) bytes in 1 blocks are definitely lost in loss record 13 of 14 at 0x...: malloc (vg_replace_malloc.c:...) by 0x...: mk (leak-tree.c:11) by 0x...: main (leak-tree.c:25)
11 Valgrind - Uso Cómo se usa Uso normal./myprog arg1 arg2 Uso con valgrind valgrind./myprog arg1 arg2 Con detección de pérdidas de memoria --leak-check=full Con más detección de (posible) memoria pérdida/malgastada --show-reachable=yes
12 Valgrind - Ejemplo Código: ejemplo-valgrind.c 1: #include <stdlib.h> 2: 3: void f(void) 4: { 5: int* x = malloc(10 * sizeof(int)); 6: x[10] = 0;// problem 1: heap block overrun 7: } // problem 2: memory leak -- x not freed 8: 9: int main(void) 10: { 11: f(); 12: return 0; 13: }
13 Valgrind - Ejemplo Salida: valgrind./ejemplo-valgrind Invalid write of size 4 at 0x804838F: f (ejemplo-valgrind.c:6) by 0x80483AC: main (ejemplo-valgrind.c:11) Address 0x is 0 bytes after a block of size 40 alloc d at 0x : malloc (vg_replace_malloc.c:149) by 0x : f (ejemplo-valgrind.c:5) by 0x80483AC: main (ejemplo-valgrind.c:11)
14 Valgrind - Ejemplo Salida: valgrind leak-check=full./ejemplo-valgrind 40 bytes in 1 blocks are definitely lost in loss record 1 of 1 at 0x : malloc (vg_replace_malloc.c:149) by 0x : f (ejemplo-valgrind.c:5) by 0x80483AC: main (ejemplo-valgrind.c:11)
15 Parte II GDB: The GNU Project Debugger
16 GDB Usando GDB Compilando el programa gcc -g Iniciando GDB gdb program Ejecutando el programa (gdb) run [args] Terminando GDB (gdb) quit
17 GDB - Comandos básicos Ejecutar el programa Argumentos (gdb) set args (gdb) show args Entorno (gdb) set environment varname [=value] (gdb) show environment [varname] Directorio de trabajo (gdb) cd directory (gdb) pwd Entada y salida estándar (gdb) run > outfile
18 GDB - Comandos básicos Parando y continuando Parando el progrma Breakpoints Watchpoints Catchpoints Continuando el programa continue step next
19 GDB - Comandos básicos Breakpoints Un breakpoint para el programa cuando se alcanza un punto concreto. (gdb) break [location] (gdb) info breakpoints location puede ser: linenum filename:linenum function filename:function etc.
20 GDB - Comandos básicos Watchpoints Un watchpoint para el programa cuando el valor de una expresión cambia, sin necesidad de predecir el lugar concreto en donde puede suceder. (gdb) watch expr (gdb) info watchpoints
21 GDB - Comandos básicos Catchpoints Un catchpoint para el programa cuando se produzcan ciertos tipos de eventos, como execepciones C++ o carga de bibliotecas dinámicas. (gdb) catch event (gdb) info breakpoints (gdb) info watchpoints event puede ser: throw catch exec fork etc.
22 GDB - Comandos básicos Examinando el código fuente list muestra el código fuente alrededor de la línea en la que nos encontramos. (gdb) list (gdb) list - (gdb) list linenum (gdb) list function
23 GDB - Comandos básicos Examinando los datos print muestra el valor de una variable o expresión. (gdb) print expr display muestra el valor de una variable o expresión cada vez que el programa se para. (gdb) display expr
24 GDB - Comandos básicos Examinando la pila de llamadas backtrace muestra la pila de llamdas, un resumen de cómo el programa llegó ahí. (gdb) backtrace (gdb) bt
25 GDB - Comandos básicos Core dumps En primer lugar debemos conocer el tamaño máximo permitido para ficheros core. ulimit -c Si es 0, no generará ficheros core. Debemos ampliarlo según nuestras necesidades. ulimit -c unlimited Para examinar un fichero core debemos abrir el programa junto con el fichero core generado. gdb program core Finalmente mostramos la pila de llamdas. (gdb) backtrace
26 GDB - Comandos básicos Continuando el programa continue continúa ejecutando el programa hasta que termine. step ejecuta la siguiente línea de código fuente (entra dentro de funciones). next ejecuta la siguiente línea de código de una vez (no entra dentro de funciones). finish continúa ejecutando el programa hasta que termine la función actual.
27 Interfaz gráfica - Kdbg
28 Enlaces Valgrind GDB
DEPURADOR GDB. Debugging de programas complejos con múltiples archivos.
Introducción DEPURADOR GDB GDB es el source debugger de GNU. Es un poderoso debugger que permite "ver" que esta sucediendo dentro de programas escritos en C, C++ y Modula-2. Entre las capacidades más notorias
Herramientas de programación C/C++
Julio M. Vega y José M. Cañas http://jde.gsyc.es Grupo de Robótica, 21 Mayo 2009 Contenidos 1 Contenidos Introducción Construcción de una aplicación Compilación y enlazado Bibliotecas dinámicas y estáticas
Daniel Serpell
Herramientas de Depuración Daniel Serpell [email protected] Introducción Por qué es necesario depurar Cómo depurar mensajes: printf / cout. depuradores (debuggers). depuradores de memoria. seguidores
Tutorial de GDB. Algoritmos y Estructuras de Datos II. Algoritmos y Estructuras de Datos II () Tutorial de GDB 1 / 1
Tutorial de GDB Algoritmos y Estructuras de Datos II Algoritmos y Estructuras de Datos II () Tutorial de GDB 1 / 1 Qué es gdb? GNU Debugger Es un depurador para varios lenguajes, incluyendo C y C++. Permite
Curso LINUX. AREA 2 : Depuración y optimización
Curso LINUX AREA 2 : Depuración y optimización Depuración Los errores de programación son inevitables La depuración es el proceso de localizar y eliminar los errores de los programas Cuando algo sale mal
Guía práctica de estudio: Depuración de programas
Guía práctica de estudio: Depuración de programas Elaborado por: M.C. Edgar E. García Cano Ing. Jorge A. Solano Gálvez Revisado por: Ing. Laura Sandoval Montaño Guía práctica de estudio: Depuración de
Herramienta de depuración GNU Debugger (GDB)
PIE Herramienta de depuración GNU Debugger (GDB) 1 Herramienta de depuración GNU Debugger (GDB) Programación para Ingeniería Eléctrica April 30, 2014 1 Introducción Llamamos depurador, debugger, a la herramienta
Práctica 2: Desarrollo de Programas C en un entorno UNIX
Práctica 2: Desarrollo de Programas C en un entorno UNIX 2.1. Compilación y montaje de ficheros El comando cc nos permite compilar y montar varios ficheros para obtener un programa ejecutable. La figura
Guía práctica de estudio 04. Almacenamiento en tiempo de ejecución
Guía práctica de estudio 04. Almacenamiento en tiempo de ejecución Elaborado por: M.C. Edgar E. García Cano Ing. Jorge A. Solano Gálvez Autorizado por: M.C. Alejandro Velázquez Mena Guía práctica de estudio
LA PILA DE EJECUCIÓN Y DEBBUGGING THREADS
UNIVERSIDAD NACIONAL DEL CENTRO DE LA PROVINCIA DE BUENOS AIRES FACULTAD DE CIENCIAS EXACTAS APUNTE DE CÁTEDRA LA PILA DE EJECUCIÓN Y DEBBUGGING THREADS por José A. Fernández León y José Macchi ANTES DE
Examen Teórico (1/3 de la nota final)
Examen Teórico (1/3 de la nota final) 105000016 - Programación para Sistemas Grado en Ingeniería Informática (2009) Lenguajes y Sistemas Informáticos e Ingeniería de Software Facultad de Informática Universidad
Compilando en Pascal
Compilando en Pascal Gonzalo Soriano [email protected] 28 de marzo de 2009 Resumen Este apunte no tiene la intensión de enseñarles a usar un compilador, sino mostrales como compilar y algunas herramientas
Biblioteca de sistema
* Para la realización del presente examen se aconseja un tiempo de 2 horas. Teoría 1. Explique en detalle cómo se pasa una llamada al sistema operativo. El sistema operativo se activa cuando debe responder
Programación (PRG) PRÁCTICA 5. Depuración de programas
Programación (PRG) PRÁCTICA 5. Depuración de programas Facultad de Informática Departamento de Sistemas Informáticos y Computación Universidad Politécnica de Valencia 1. Introducción El objetivo de esta
a) if (i==5){ j=2*k; k=k+1; } else { j=k; k=1; } c) for (i=0, i<5, i++){ j=k+m; m=2*m; } b) if (i<0){ i=i-5; } if (i==0){ i=4; }
Problemas IJVM MIC-1 EC2721 Arquitectura del computador I (Recopilación y adaptación resumida para Oct/2003 de problemas de los profesores Margarita Juanatey, Fidel Gil, Mónica Parada, Osberth De Castro,
Tema 18: Memoria dinámica y su uso en C
Tema 18: Memoria dinámica y su uso en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1
Examen de Fundamentos de sistemas distribuidos
Examen de Fundamentos de sistemas distribuidos Tiempo total: 2 horas Problema: Programa: Rendezvous con semáforos(5 puntos) Utilizando como único mecanismo de sincronización los semáforos descritos en
Xv6: Sistema operativo educacional
Xv6: Sistema operativo educacional 30 de agosto de 2017 1. Introducción Conocimiento requerido: Uso de consola/scripting. (Primera clase práctica) Xv6 1 es un sistema operativo educacional para la arquitectura
Introducción a XCode y Objective-C
Sesión 5: Depuración y pruebas 2012-2013 Depto. Ciencia de la Computación e IA Índice de contenidos Trazas de seguimiento NSLogs Asserts El depurador de XCode Breakpoints: Uso y tipos Acciones disponibles
Repaso 02: Apuntadores y manejo de memoria dinámica
Repaso 02: Apuntadores y manejo de memoria dinámica Solicitado: Ejercicios 02: Programación con memoria dinámica M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom
Entorno de Programación Visual C++ 6.0
Entorno de Programación Visual C++ 6.0 Informática II Fundamentos de Programación 18 de Febrero de 2002 1 Visual C++ 6.0 Es un IDE (Entorno de desarrollo integrado). Tiene editor, compilador, enlazador,
Memoria Dinámica en C++
Memoria Dinámica en C++ Algoritmos y Estructuras de Datos II DC-FCEyN-UBA 26 de Agosto de 2015 AED2 (DC-FCEyN-UBA) Memoria Dinámica en C++ 26 de Agosto de 2015 1 / 46 Repaso: Qué es una variable? Matemática:
Clases 04 y 05: Repaso de programación de sistemas basados en UNIX
Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Prof. Edgardo Adrián Franco Martínez http://computacion.cs.cinvestav.mx/~efranco [email protected] Estructuras de datos (Prof.
El lenguaje de Programación C. Fernando J. Pereda <[email protected]>
El lenguaje de Programación C Fernando J. Pereda Por qué aprender C? Portable y muy extendido Estándar (C89, C99) El lenguaje de los sistemas Un lenguaje fácil (no, no es broma) Por
Sistemas Operativos: Programación de Sistemas. Curso 2006-07. Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J.
Tema 2 : entorno programación linux Sistemas Operativos: Programación de Sistemas Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J. Santana Pérez Curso 2006-07 Francisco J. Santana 1 Programación
El entorno de desarrollo eclipse 3.0.1
escuela técnica superior de ingeniería informática El entorno de desarrollo eclipse 3.0.1 Departamento de Lenguajes y Sistemas Informáticos Ingeniería del Software de Gestión III Índice Introducción Perspectiva
Primeros pasos para utilizar el editor Code::Blocks para C
Primeros pasos para utilizar el editor Code::Blocks para C En esta edición del curso se utilizará un entorno para C llamado Code::Blocks (de libre distribución). Hay diferentes versiones para usar en distintos
EMC VNXe3200. Lista de verificación de solución de problemas. Número de referencia Rev. 02
EMC VNXe3200 Lista de verificación de solución de problemas Número de referencia 302-000-221 Rev. 02 Copyright 2015 EMC Corporation. Todos los derechos reservados. Publicado en México. Publicado en febrero
Memoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez
Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez 1. PUNTEROS 2. MEMORIA DINÁMICA 2 1. PUNTEROS 3 Qué es un puntero? Un tipo de variable cuyo valor es la dirección de memoria de otra variable.
COMUNICACIÓN CON PANTALLAS MP-MERCURY MEDIANTE PROTOCOLO TCP-ASCII
COMUNICACIÓN CON PANTALLAS MP-MERCURY MEDIANTE PROTOCOLO TCP-ASCII Manual Técnico Revisión del documento 1.0 Fecha: 29/06/2015 Nombre de fichero: Comunicación con Pantallas MP-MERCURY mediante Protocolo
Introducción al laboratorio de Programación I
Introducción al laboratorio de Programación I Manuel Montenegro [email protected] es Despacho B12 Compilación Es el proceso de transformación de un programa escrito en un lenguaje de alto nivel (en
Mi primer programa en Code::Blocks
Mi primer programa en Code::Blocks Introducción a la Computación Departamento de Computación - FCEyN - UBA Primer cuatrimestre de 2010 1. Antes de empezar 1.1. Cómo instalo el Code::Blocks en una computadora?
LENGUAJE DE PROGRAMACION C/C++.
LENGUAJE DE PROGRAMACION C/C++. Este sencillo apunte fue pensado para introducir a los alumnos que se inician en programación, tanto del lenguaje C como C++, con las características propias de cada uno,
Ingeniería Inversa. Clase 8. Exploit Writing I Stack and Integer Overflow. Ingeniería Inversa Clase 8 Martin Balao martin.uy/reverse v1.
Ingeniería Inversa Clase 8 Exploit Writing I Stack and Integer Overflow 1 Qué es un stack? (x86) Área de memoria donde se almacenan variables locales, parámetros de funciones, registros salvados, direcciones
Inicio de la sesión de trabajo
Programación 2 Sesión de prácticas Inicio de la sesión de trabajo Después de encender la máquina, se debe entrar en Linux y, una vez haya arrancado el sistema, introducir el usuario y contraseña del Campus
Tema 2: Programas y procesos
Tema 2: Programas y procesos Enrique Soriano Laboratorio de Sistemas, Grupo de Sistemas y Comunicaciones, URJC 15 de febrero de 2012 (cc) 2010 Grupo de Sistemas y Comunicaciones. Algunos derechos reservados.
Ingeniería del Software Swing
Introducción En este laboratorio, utilizaremos una interfaz gráfica que permita realizar una entrada y salida de datos. Para ello usaremos el plugin Visual Editor de Eclipse. También realizaremos un primer
Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++
Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++ OBJETIVO En este documento se presentan las construcciones básicas de orientación a objetos del lenguaje de programación C++, y recomendaciones
PRACTICA Nº 2. Puertos de Entrada Digital. Sistemas Electrónicos Digitales. Subgrupo: de febrero de 2.015
PRACTICA Nº 2 Puertos de Entrada Digital Sistemas Electrónicos Digitales Subgrupo: 1-8 23 de febrero de 2.015 Índice 1. Objetivos 2. Introducción 3. Desarrollo 4. Conclusiones 5. Bibliografía 6. Hojas
ALGORITMOS Y ESTRUCTURAS DE DATOS II
ALGORITMOS Y ESTRUCTURAS DE DATOS II PRÁCTICA 2ª ESTUDIO EXPERIMENTAL DE ALGORITMOS RECURSIVOS (Sesiones de laboratorio = 2, Total = 3 horas. Curso 2000/01) ÍNDICE 1.- Introducción. 2.- Soporte operacional
Sistemas Operativos sesión 12: tuberías
Sistemas Operativos sesión : tuberías Grado en Ingeniería Informática Universidad Carlos III de Madrid Agenda Linux Comunicación con tuberías Ejercicios Agenda Linux Comunicación con tuberías Ejercicios
Algoritmos y estructuras de datos
Algoritmos y estructuras de datos Estructuras, apuntadores y memoria dinámica Francisco Javier Zaragoza Martínez Universidad Autónoma Metropolitana Unidad Azcapotzalco Departamento de Sistemas 11 de mayo
Laboratorio 1 y 2: Programación en C, Assembler MIPS, y uso de Simulador MIPS32: PCSpim
Laboratorio 1 y 2: Programación en C, Assembler MIPS, y uso de Simulador MIPS32: PCSpim Objetivos. Estudiar algunos aspectos básicos de la programación en lenguaje C, y ambientes de programación integrados
CAPÍTULO III MENÚS DEL TURBO PASCAL. File Edit Search Run Compile Debug Tools Options Windows Help [ ] NONAME.PAS
CIENCIAS DE LA COMPUTACIÓN MAT 1104 17 CAPÍTULO III MENÚS DEL TURBO PASCAL 3.1 MENÚS Para activar los menús que turbo pascal tiene en la parte superior de la ventana principal pulse la tecla alt más la
Curso de Programación en C. Licenciatura FCQeI AMBIENTE DE DESARROLLO INTEGRADO (TC VER 2.0)
AMBIENTE DE DESARROLLO INTEGRADO (TC VER 2.0) Turbo C es básicamente un compilador de lenguaje de programación, tanto el compilador como la ayuda, el editor, el depurador y el resto de programas y archivos
Programación Concurrente
Master en Computación Programación Concurrente Bloque II: Programación concurrente en POSIX Tema 1. Introducción al estándar POSIX Tema 2. Sistema Operativo MaRTE OS Tema 4. Gestión del Tiempo Tema 5.
Introducción a Java LSUB. 15 de enero de 2015 GSYC
Introducción a LSUB GSYC 15 de enero de 2015 (cc) 2014 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial - SinObraDerivada
Prácticas de Sistemas operativos
Prácticas de Sistemas operativos David Arroyo Guardeño Escuela Politécnica Superior de la Universidad Autónoma de Madrid Segunda Semana: Procesos, Procesos Padre y Procesos Hijo, familia exec() 1 Entregas
Depuración de Node.js (práctica)
Depuración de Node.js (práctica) Tiempo estimado: 45min El objeto de esta práctica es afianzar, reforzar y consolidar los conocimientos teóricos presentados en la lección. Al finalizarla, el estudiante:
Fundamentos de Ordenadores. Depurar programas usando Nemiver
Fundamentos de Ordenadores Depurar programas usando Nemiver Departamento de Arquitectura de Computadores Autor: Mario Macias. Fecha de elaboración: 16/10/2015 1 Manual básico Nemiver Nemiver es un sencillo
Funciones POSIX (I): Introducción
Funciones POSIX I Funciones POSIX I Llamadas al Llamadas al Sistema Sistema Gestión Básica Gestión Básica de Procesos de Procesos Procesos Procesos fork fork Señales Señales getpid getpid Memoria Memoria
Procesos e hilos: el downloader
Departamento de Automática 1 / 8 Descarga de archivos con procesos en paralelo Objetivo principal: descarga de un archivo de gran tamaño de forma eficiente desde Internet Otros objetivos: Utilizar la biblioteca
