Ver Mensaje Individual
  #37  
Antiguo 11-05-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Reputación: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Bueno, no me leí todo pero quiero hacer una aclaración que quizá dé luz sobre por qué no funciona el depurador GDB con los programas FPC.

Como algunos ya sabéis, he estado los últimos años currándome la biblioteca Allegro.pas, la cual es una envolvente para poder utilizar Allegro (una biblioteca escrita en C) con Free Pascal (y en el futuro espero que también Delphi, pero no viene al caso). La cosa es que había cosas que no funcionaban a pesar de no existir una razón. Es decir, que coges un programa C que funciona perfectamente, haces una traducción literal a Pascal y falla: bien salta una excepción de sistema (no de Pascal), bien el resultado obtenido no es el esperado (por ejemplo, te cambia los colores).

Pues bien: investigando, uno de los desarrolladores de Allegro descubrió por casualidad que una excepción era lanzada en cierta línea de la biblioteca escrita en C, al hacer un cálculo. Al cambiar el tipo de una de las variables implicadas de 32 bit a 64 bit resultó que el programa en Pascal funcionaba perfectamente. ¿Por qué? Pues simple: Free Pascal activa una serie de excepciones y límites del microprocesador Intel que GCC (el compilador C que uso yo y los desarrolladores de Allegro) no activa, por lo que el programa C ignora el error pero el Pascal no, ya que saltaba la excepción.

Si ahora vamos al depurador vemos que está programado por los mismos que crearon los compiladores GCC. No sé cómo funciona algo a tan bajo nivel, pero es posible que alguna de las excepciones activadas por FPC entren en conflicto con los mecanismos que utiliza GCC para hacer el seguimiento, ya que supongo utilizará esas excepciones para monitorizar los eventos de depuración, puesto que GCC no las activa y están libres.

Como digo, no sé cómo trabajan las cosas a tan bajo nivel, así que no tengo ni idea de si se puede comprobar y encontrar una solución, que seguramente pase por modificar FPC o GDB. No sé si habría que comentarlo con los desarrolladores de FPC, ya que se supone que deberían estar ya al tanto de esto, ¿no? En cualquier caso siempre puedo dejarlo caer en la lista de correos en la que estoy apuntado y donde muchas veces se discuten estos temas de diseño del compilador.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 11-05-2010 a las 11:36:49.
Responder Con Cita