Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Depurar DLL con Lazarus (https://www.clubdelphi.com/foros/showthread.php?t=90867)

aggg63 23-09-2016 16:48:37

Depurar DLL con Lazarus
 
Hola.

Hace tiempo creé una DLL para jugar a las damas españolas con la interfície CheckerBoard. La desarrollé en D2005 y funciona perfectamente hasta ahora. Ha pasado el tiempo y ahora me gustaría hacerla con Lazarus. El problema que encuentro es que no puedo depurarla con Lazarus. He probado varias opciones: mode delphi/objfpc, usar sharemem y algún cambio en los parámetros de compilación. Los resultados son siempre iguales, salta una excepción: ,msg="Cannot find bounds of current function" en la función GenerarJugadaCB. He probado alguna sugerencia que he encontrado (http://bugs.freepascal.org/view.php?id=24208), pero sin resultados positivos. He probado stdcall y cdecl, pero esta ultima no esta soportada por CheckerBoard. Estoy probando con Lazarus de 32 bits para CheckerBoard de 32 bits en Windows 7 de 64 bits. También he probado con las versiones de 64 bits y no funciona la depuración.

Aquí tenéis enlaces para descargar CheckerBoard y un proyecto mínimo de la DLL que hace una única jugada. Ademas he puesto el motor de damas españolas. Agradecería cualquier ayuda para resolver el problema depurando la DLL. Gracias.

https://dl.dropboxusercontent.com/u/...73a-x32-EG.exe
https://dl.dropboxusercontent.com/u/...-1.18b-x32.exe
https://dl.dropboxusercontent.com/u/...7/CB/damas.zip

Ñuño Martínez 28-09-2016 17:47:34

Supongo que nunca has utilizado GDB. Es bastante más flexible que usar Lazarus (aunque en teoría Lazarus usa GDB :rolleyes: ). Con GDB puedes poner un punto de ruptura dentro de la DLL aunque no la haya cargado todavía. Por ejemplo:
Código:

(gdb) break ejemplo.pas:245
No hay un archivo fuente con el nombre ejemplo.pas.
¿Compilación de breakpoint pendiente hasta futura cargada de biblioteca
compartida? (y or [n]) ?

Ahí pulsas "y" y cuando cargue la DLL ya hará la parada correspondiente.

Ya, la pregunta es rara. Supongo que usaron Google translator o algo así.

aggg63 05-10-2016 23:32:51

Gracias Ñuño.

Efectivamente, no he utlizado GDB. Haré un esfuerzo y miraré cómo depurar la libreria con GDB, pero mi nivel de programación es bastante mediocre. Con Delphi me defendía, después de varios años sin programar me costará un poco.

Ñuño Martínez 08-10-2016 14:36:50

Te recomiendo que tengas paciencia. GDB tiene muchas opciones y puede costar aprenderlas. Pero con unos pocos tutoriales (creo que la wiki de Lazarus tiene alguno de esos) te manejarás bien.


La franja horaria es GMT +2. Ahora son las 08:42:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi