PDA

Ver la versión completa : ¿Como localizar un error?



Eskema
10/05/2006, 13:13
Buenas gente, llevo unos dias probando pero no consigo dar con el fallo, el biohazard me funciona hasta el menu, luego se queda la consola colgada.

Tras el menu el juego carga, el mapa, jugador y enemigos, musica y por ultimo las fuentes para mostrar el texto.

¿Se os ocurre por donde puede fallar? ya se q sin ver el fuente es imposible decir nada, pero igual hay alguna norma basica en la 2x q me he saltado...

Primero pense en los mapas, son tiles de 32x32 y claro no son multiplos de 240, el tile de abajo sale a medias, pero he probado con un mapa de 16x16 de tiles para q sea multiplo, y el juego tampoco tira adelante.

Cargo todo el juego desde memoria, sonidos y graficos, dejando fuera del ejecutable la musica y unas imagenes del inventario(no voy a meter 3 mg de musica xD) y contando todas las cabeceras no pasan de 5mg, luego el gpe se queda en 2,8mg. Por lo q no deberia ser un problema de falta de memoria

No se me ocurre de momento q pueda ser..........

WinterN
10/05/2006, 13:58
Comprueba que no caiga en algún bucle infinito. Yo normalmente para depurar utilizo un método algo arcaico. Pon muchos "printf" por el código y lanzalo desde sterm, para ver donde llega. Si es necesario, redirige la salida del programa a un archivo de texto.

Puck2099
10/05/2006, 15:17
Comprueba que no caiga en algún bucle infinito. Yo normalmente para depurar utilizo un método algo arcaico. Pon muchos "printf" por el código y lanzalo desde sterm, para ver donde llega. Si es necesario, redirige la salida del programa a un archivo de texto.

WinterN, ¿por qué no usas el gdb? La verdad es que, teniendo un depurador en condiciones como él, no sé cómo os complicáis con printf y similares...

Saludos

BuD
10/05/2006, 18:07
WinterN, ¿por qué no usas el gdb? La verdad es que, teniendo un depurador en condiciones como él, no sé cómo os complicáis con printf y similares...

Saludos
Pero Puck2099, he visto la documentacion del gdb que me pasaste, pero... la has visto? con lo tocha que es dan ganas de continuar usando printf para depurar.
Sin embargo se que una vez dominado el gdb... [wei6]

Puck2099
10/05/2006, 18:18
Pero Puck2099, he visto la documentacion del gdb que me pasaste, pero... la has visto? con lo tocha que es dan ganas de continuar usando printf para depurar.
Sin embargo se que una vez dominado el gdb... [wei6]

Pero si no tiene nada...

Todo se resume en:

Compilas el programa con el flag -g (y preferiblemente sin optimizaciones) y no le metes el strip.

Ejecutas gdb nombredeprograma (o gdb --args nombredeprograma argumentos).

Ahora lo tienes arrancado pero sin iniciar. Pones los puntos de ruptura con b seguido del nombre de función, nombre de archivo:linea, etc.

Le das a r para reiniciar el programa y ya está, se parará la ejecución cuando llegue a un punto de ruptura o bien cuando pulses CTRL+C.

Una vez detenida la ejecución, puedes pulsar n para avanzar una línea, p variable para imprimir el valor de una variable, hacer asignaciones directamente a variables con el = o bien pulsar c para continuar hasta el próximo punto de ruptura.

Hay muchos más comandos, pero con esos poquitos ya puedes hacer una depuración más o menos avanzada para la mayoría de los programas.

Saludos

Uncanny
10/05/2006, 18:33
Una pregunta Puck, lo último que has dicho de GDB, ¿conectando al dispositivo serie en la GP2X y depurandolo desde el ordenador con un GDB ejecutable en x86 pero preparado para cargar y depurar codigo compilado para ARM? o ¿ejecutando un GDB compilado y ejecutable en ARM/GP2X y tirando de Telnet para ir manejando el GDB y depurando? lo digo porque creo que al principio, antes del firmware 2.0, el tema iba por usarlo via USB Serie ¿no?

El GDB lo uso para depurar cualquier programa compilado en PC + Linux, pero para la GP2X aun no lo he usado y no se cual es la mejor forma de hacerlo :confused:

Puck2099
10/05/2006, 18:38
Una pregunta Puck, lo último que has dicho de GDB, ¿conectando al dispositivo serie en la GP2X y depurandolo desde el ordenador con un GDB ejecutable en x86 pero preparado para cargar y depurar codigo compilado para ARM? o ¿ejecutando un GDB compilado y ejecutable en ARM/GP2X y tirando de Telnet para ir manejando el GDB y depurando? lo digo porque creo que al principio, antes del firmware 2.0, el tema iba por usarlo via USB Serie ¿no?

El GDB lo uso para depurar cualquier programa compilado en PC + Linux, pero para la GP2X aun no lo he usado y no se cual es la mejor forma de hacerlo :confused:

Yo, desde que tenemos el usb-serie y ahora con el telnet, ejecuto el GDB para ARM desde la propia consola.

Una-i me comentó que sería mejor ejecutar un gdbserver en la consola y conectar con el Insight desde PC para hacerlo más "bonito", pero todavía no he conseguido compilar el Insight con target arm-linux...

Saludos

Uncanny
10/05/2006, 18:46
Yo, desde que tenemos el usb-serie y ahora con el telnet, ejecuto el GDB para ARM desde la propia consola.

Una-i me comentó que sería mejor ejecutar un gdbserver en la consola y conectar con el Insight desde PC para hacerlo más "bonito", pero todavía no he conseguido compilar el Insight con target arm-linux...

SaludosOido cocinaaaa, gracias por la info :D

Pues si, usar Insight con GDB para depurar desde Linux aplicaciones en la GP2X sería MUCHO más comodo, si tengo tiempo luego intento yo también compilarlo a ver si hay suerte :)

Flush
10/05/2006, 19:29
Puck tiene razon. A pesar de que la documentación del GDB es infumable, en realidad solo utilizas 4 cosillas. Buscad tutoriales cortos como este http://www.geocities.com/chuidiang/herramientas/basico/debugger.html, que te resalta lo más importante.


PD:Yo hay veces que tambien recurro a lo de los printf

Eskema
10/05/2006, 20:03
Lo q me pica a mi del tema, es q el juego funciona perfectamente en win/linux/xbox y ahora tb dc sin embargo la 2x se queda al iniciar el juego despues del menu, por eso descarto lo de un bucle infinito o cosas asi. En fins tiraremos de printfs como siempre.

Foxandxss
23/05/2006, 06:41
Hombre, si vais a depurar desde el pc, yo preferiría DDD, que aunque es una GUI de gdb, es algo más comodo de usar.

Un saludo.