PurifyPlus es un programa depurador de memoria utilizado por los desarrolladores de software para detectar errores de acceso a la memoria en los programas, especialmente aquellos escritos en C o C++ . Fue escrito originalmente por Reed Hastings de Pure Software . [1] Pure Software luego se fusionó con Atria Software para formar Pure Atria Software, que a su vez fue adquirida por Rational Software , que a su vez fue adquirida por IBM , y luego vendida a UNICOM Systems , Inc. el 31 de diciembre de 2014. Es funcionalmente similar a otros depuradores de memoria, como Insure++ , Valgrind y BoundsChecker .
PurifyPlus permite la verificación dinámica, un proceso mediante el cual un programa descubre errores que ocurren cuando se ejecuta, de manera muy similar a un depurador . La verificación estática o análisis de código estático , por el contrario, implica detectar errores en el código fuente sin compilarlo ni ejecutarlo, simplemente descubriendo inconsistencias lógicas. La verificación de tipos por parte de un compilador de C es un ejemplo de verificación estática.
Cuando un programa se vincula con PurifyPlus, el código de verificación corregido se inserta automáticamente en el ejecutable mediante el análisis y la adición al código del objeto , incluidas las bibliotecas. De esa manera, si se produce un error de memoria, el programa imprimirá la ubicación exacta del error, la dirección de memoria involucrada y otra información relevante. PurifyPlus también detecta fugas de memoria . De forma predeterminada, se genera un informe de fugas al salir del programa, pero también se puede generar llamando a la API de detección de fugas de PurifyPlus desde una aplicación instrumentada.
Los errores que PurifyPlus descubre incluyen lecturas y escrituras de límites de matriz, intentos de acceder a memoria no asignada, liberación de memoria no asignada (generalmente debido a la liberación de la misma memoria por segunda vez), así como fugas de memoria (memoria asignada sin referencia de puntero). La mayoría de estos errores no son fatales (al menos no en el sitio del error), y a menudo cuando solo se ejecuta el programa no hay forma de detectarlos, excepto observando que algo está mal debido al comportamiento incorrecto del programa. Por lo tanto, PurifyPlus ayuda a detectar estos errores y decirle al programador exactamente dónde ocurren. Debido a que PurifyPlus funciona instrumentando todo el código objeto , detecta errores que ocurren dentro de bibliotecas de terceros o del sistema operativo . Estos errores a menudo son causados por el programador que pasa argumentos incorrectos a las llamadas de la biblioteca, o por malentendidos acerca de los protocolos para liberar estructuras de datos utilizadas por las bibliotecas. Estos son a menudo los errores más difíciles de encontrar y corregir.
La capacidad de detectar errores no fatales es una distinción importante entre PurifyPlus y programas similares de los depuradores habituales . Por el contrario, los depuradores generalmente solo permiten al programador encontrar rápidamente las fuentes de errores fatales, como un bloqueo del programa debido a la desreferenciación de un puntero nulo , pero no ayudan a detectar los errores de memoria no fatales. Los depuradores son útiles para otras cosas para las que PurifyPlus no está destinado, como para recorrer el código línea por línea o examinar la memoria del programa a mano en un momento particular de la ejecución. En otras palabras, estas herramientas pueden complementarse entre sí para un desarrollador experto.
PurifyPlus también incluye otras funcionalidades, como puntos de vigilancia de alto rendimiento , que son de uso general cuando se utiliza un depurador en el código.
Vale la pena señalar que el uso de PurifyPlus tiene más sentido en lenguajes de programación que dejan la gestión de la memoria en manos del programador. Por lo tanto, en Java , Lisp o Visual Basic , por ejemplo, la gestión automática de la memoria reduce la aparición de fugas de memoria . Sin embargo, estos lenguajes pueden tener fugas; las referencias innecesarias a objetos impedirán que se reasigne la memoria. IBM tiene un producto llamado Rational Application Developer para descubrir este tipo de errores.