04/02/03 1
INSURE ++ v6.0INSURE ++ v6.0
Salvador Benimeli Fenollar
Laboratorio de Sistemas de Información
Facultad de InformáticaUniversidad Politécnica de Valencia
04/02/03 2
INTRODUCCION (i)INTRODUCCION (i)
Los errores de corrupción de memoria y de posiciones de memoria no referenciadas pueden llegar a ser extremadamente difíciles de descubrir
Insure ++ examina y testea el código , y produce una serie de informes indicando la localización exacta de los errores.
Ayuda a que los costes de mantenimiento sean menores.
04/02/03 3
INTRODUCCION (ii)INTRODUCCION (ii)
Realiza un análisis de cobertura, indicando claramente que secciones del código han sido testeadas y cuales no.
En resumen, ayuda a evitarnos extensas sesiones de depuración de errores que resultan difíciles de encontrar en tiempo de compilación.
04/02/03 4
INTRODUCCION (iii)INTRODUCCION (iii) Dos de los problemas más serios en la producción de
problemas Software son: el tiempo que se emplea en la “depuración” del producto y el número de “bugs” que no son detectados durante la fase de pruebas.
Insure ++ trata : Corrupción de memoria debido a escrituras o
lecturas del variables globales, locales... Operaciones sobre punteros ilegales Lectura de variables no inicializadas Memory leaks Errores de asignación y liberación memoria
dinámica.
04/02/03 5
ANÁLISIS DE COBERTURAANÁLISIS DE COBERTURA
Análisis de Cobertura con TCA Total Coverage Analysis (TCA) integrado en
Insure+++ muestra que partes del código han sido testeadas y cuales no.
La finalidad de los test de cobertura es analizar cuantas funciones y instrucciones han sido ejecutadas.
04/02/03 6
ANÁLISIS DE COBERTURAANÁLISIS DE COBERTURA
Con TCA, nos podemos ahorrar mucho tiempo, evitándonos testear una y otra vez las mismas partes del código y empezar con las que realmente no han sido probadas.
Ayuda al usuario modificar los procedimientos de test para cubrir todas las partes
04/02/03 7
INUSEINUSE
Herramienta grafica diseñada para ayudar a evitar problemas de memoria, mostrando en tiempo real el uso de memoria que hace nuestra aplicación. Sabemos con certeza como nuestro programa
asigna y libera los bloques de memoria dinámica, lo que puede ayudarnos o optimizarla.
También nos ayuda a : Saber cuanta memoria usa nuestra aplicación
en función de eventos de usuario Determinar si diferentes estrategias de
asignación pueden mejorar el rendimiento.
04/02/03 8
INSRAINSRAInterfaz gráfica donde se muestran los mensajes de error generados por Insure++.El formato de los mensajes permiten la fácil localización en el código fuente permitiendo su correccción.
04/02/03 9
INUSURE ++. Control INUSURE ++. Control PanelPanel
04/02/03 10
Sistema de Posicionamiento Sistema de Posicionamiento en 2Den 2D
Integración de Insure ++ en el entorno Visual C++
04/02/03 11
Sistema de Posicionamiento Sistema de Posicionamiento en 2Den 2D
Si no se ha realizado algún avance, al intentar mostrar la ruta real o la ruta estimada se produce un error de ejecución.
04/02/03 12
Sistema de Posicionamiento Sistema de Posicionamiento en 2Den 2D
El error es detectado por Insure++ señalando la línea de código donde se ha producido.
04/02/03 13
Sistema de Posicionamiento Sistema de Posicionamiento en 2Den 2D
04/02/03 14
Sistema de Posicionamiento Sistema de Posicionamiento en 2Den 2D
Errores generados por Insure++ tras la traza realizada
04/02/03 15
Sistema de Posicionamiento Sistema de Posicionamiento en 2Den 2D
Informe generado tras la ejecución del programa
04/02/03 16
TEST DE COBERTURATEST DE COBERTURA
Representación gráfica del test de cobertura por funciones.
El test está basado en el log de las diversas ejecuciones.
04/02/03 17
04/02/03 18
TEST DE COBERTURATEST DE COBERTURA
04/02/03 19
SELECTIVE CHEKINGSELECTIVE CHEKING
Con el símbolo del pre-procesador _INSURE_ automáticamente definido, podemos insertar llamadas condicionales y habilitar o deshabilitar el chequeo en tiempo de ejecución.
grind_away() {
#ifdef __INSURE__ _Insure_set_option("runtime", "off"); #endif ... code ... #ifdef __INSURE__ _Insure_set_option("runtime", "on");
#endif }
04/02/03 20
INUSE : HISTORYINUSE : HISTORY
Muestra la cantidad de memoria asignada en el Heap. Este gráfico se actualiza periodicamente para mostrar el estado actual de la aplicación y suele ser usado para llevar un seguimiento del uso de la memoria que consume la aplicación
04/02/03 21
INUSE : BLOCK INUSE : BLOCK FRECUENCYFRECUENCY
Número de bloques de cada tamaño que han sido asignados. Esto suele ser útil para elegir una strategia de optimización de memoria frente a otra.
04/02/03 22
INUSE:TIME LAYOUT INUSE:TIME LAYOUT REPORTREPORT
Muestra como los bloques de memoria son asignados durante la ejecución del programa.
04/02/03 23
INUSE : HEAP LAYOUTINUSE : HEAP LAYOUT“Layout” de la memoria con los bloques que han sido asignados dinámicamente, incluyendo los espacios libres entre ellos. Sirve para ver la fragmentación y los “memory leaks”
04/02/03 24
INUSE : MEMORY USAGEINUSE : MEMORY USAGE
Representa cuantas veces cada una de las llamadas a memoria se han realizado. También muestra el tamaño actual del heap y la cantidad de memoria en uso.
04/02/03 25
INUSE: INUSE: Query ReportsQuery Reports
Con Query podemos saber con exactitud cuanta memoria se asigna a bloques de un determinado tamaño o lugar.
04/02/03 26
INUSE: INUSE: Query ReportsQuery Reports
Por ejemplo, la siguiente consulta obtiene de los bloques entre 60 y 70 bytes de tamñano obtenemos los ‘block id’ y las trazas de la pila de todos los bloques comprendidos entre ese tamaño
04/02/03 27