Mejora automática de expresiones en la tabla de inspecciones
ZinjaI ofrece un funcionalidad que se encarga de reescribir automáticamente (y de forma transparente) las expresiones de la tabla de inspecciones cuando estas corresponden a ciertos tipos de datos determinados. El objetivo es visualizar solo la parte que sea de interés de un objeto complejo. El mecanismo detecta la forma de mejorar una inspección por su tipo, buscando aplicar algún patrón prestablecido que concuerde con el mismo. Los patrones que se utilizan para reconocer los tipos y para reescribir la expresión a evaluar son configurables.
Por ejemplo, al inspeccionar un objeto de tipo std::string, en general se pretende visualizar la cadena de texto que guarda/representa, pero al inspeccionar directamente un objeto de tipo std::string el resultado presentaría en realidad su estructura interna. En algún atributo de la clase (propio, heredado, o tal vez un atributo de un atributo) se encuentra la información buscada, pero no es directo llegar al mismo, y además la forma de hacerlo puede depender de una implementación particular (variar según el compilador o el sistema operativo). En el caso de un std::string en gcc, el puntero que apunta a la cadena que representa se encuentra en el atributo m_pchData, mientras que otros atributos como npos en general no serán de interés. Por ello, si se tiene un objeto de tipo std::string denominado s, la información útil del mismo se obtiene al evaluar "s.m_pchData", y no al evaluar "s". En ZinjaI, al introducir "s" en la tabla de inspecciones, se detecta que s es de tipo std::string y se evalúa internamente "s.m_pchData" en lugar de "s", mostrando así directamente el valor deseado, ahorrándole y ocultándole el trabajo adicional de recordar y utilizar la estructura de la clase al programador. En casos más complejos, extraer los datos relevantes puede requerir de varios pasos (un algoritmo especial que por ejemplo siga enlaces en una lista enlazada). En estos casos, se puede utilizar una macro gdb, que podría ser invocada automáticamente por este mismo mecanismo de mejora de inspecciones.
Las inspecciones que son mejoradas automáticamente de esta forma se marcan en la tabla con un signo más (+) junto a la expresión. Haciendo doble click sobre el mismo ZinjaI mostrará la verdadera expresión evaluada.
Para configurar los patrones con que se reconocen los tipos de inspecciones a mejorar, y las expresiones que deben utilizarse en cada caso, debe utilizar el botón "Configurar..." de la pestaña "Depuración" del cuadro de diálogo de Preferencias, o utilizar el submenú "Mejoras automáticas" del menú contextual de la tabla de inspecciones. El segundo mecanismo permite agregar directamente un patrón a la lista a partir de una inspección de la tabla.
Cada patrón consiste en dos líneas de texto, una con el tipo de dato y otra con la expresión. En la línea con el tipo de dato se puede reemplazar partes por variables de nombre arbitrario, que luego pueden utilizarse en la expresión, junto con la variable predefinida ${EXP} que corresponde a la expresión original. Por ejemplo:

- Para agregar ".m_pchData" a una expresión que representa un objeto de tipo "std::string" de modo de acceder directamente a ese atributo, se utiliza "std::string" como tipo y "${EXP}.m_pchData" como expresión.
- Para visualizar un vector de enteros (std::vector) mediante la macro gdb "pvector" (macro que se incluye en la configuración por defecto de ZinjaI, y se invoca en la tabla de inspeccion anteponiendo el signo mayor, ej: ">pvector v1") se introduce el tipo "std::vector >", y la expresión ">pvector ${EXP}".
- Para generalizar el ejemplo anterior de forma que se aplique para cualquier tipo de elemento que contenga la lista, se puede introducir el tipo "std::list<${TIPO}, std::allocator<${TIPO}> >" y la expresión ">plist ${EXPR}". Notar que en este caso, la variable "${TIPO}" (donde "TIPO" es un identificador arbitrario) equivale al tipo de dato del vector y puede utilizarse en la expresión.