lunes, 19 de noviembre de 2007

/debugger con delphi - caso omiso al breakpoint



Ingominia de los bugs!, escena: desarrollando con Delphi 7, no anda una función que acabo de desarrollar. Acción a seguir: poner un breakpoint para comenzar a 'seguir' la función y encontrar su error.
Compilo, ejecuto, espero que se detenga en el break, ¡chan! nada, sigue de largo, no respeta los breakpoints, mi programa sigue de largo con un 'Access violation....'

Delphi tiene la particularidad, cuando se compila, en el margen izquierdo al comienzo de cada línea aparecen unos puntitos azules.
Esta vez no estaban. Decido hacer un build, ya que lo que hace es un compilado total sobre escribiendo las unidades incluso ya compiladas. Nada, siguen sin aparecer los puntos azules, por lo tanto iba seguir sin
poder depurar el programa.

Línea en rojo, donde está el breakpoint, los puntos azules, no están :p



Al menú: Project->Otpions->Compiler


En el apartado de Debugg tengo todo seteado como corresponde, 'Debugg information' seleccionado (aunque luego lo saqué, no era ese el problema).

Nota:
Es importante que en la etapa de desarrollo la información de Debug esté disponible, facilita el seguimiento del código en eventuales fallas.
Una vez que el código esté pronto para ser liberado, es conveniente deshabilitar las opciones de debug, disminuye considerablemente el tamaño del ejecutable final (y dejamos menos rastros para la ingeniería inversa).

El problema estaba en 'Code generation', debí deshabilitar la casilla de 'optimization' (marcado dentro de un rectángulo rojo). Cuando lo seleccionamos, el compilador elimina bucles innecesarios, variables que no se usan, etc.
Pero es importante deshabilitarlo para poder detectar errores.

Es muy raro esto que pasó, ya que el código donde puse el breakpoint era en un evento que debía ejecutarse necesariamente, no veo porqué el compilador lo optimizaría.
Esas modificaciones de configuración funcionaron. Programar, entender compiladores, se está volviendo una cuestión de fe.

Pero he visto que este tipo de traspié también puede deberse a un bug que sale a flote cuando se están llegando a las 65000 líneas de código, que no era mi caso (apenas 260).
En este foro de Borland comentan acerca de ese bug.










No hay comentarios.: