ERROR Mnemonic

Started by Hola, December 13, 2017, 01:21:59 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Hola

Hola, buenas a todos..., recién me di cuenta que un user acaba de postear un problema similar..(así como de que sale la ventanita de error de bennu). Leì las sugerencias que se dieron en el tema pero igualmente quería solicitar su ayuda o alguna idea para solucionar mi cuestión. La cosa es que a mi me saltaba la ventanita esa de error pero después de un rato de ejecución del código. El problema real es que, tras modificar algunas cosas en mi código, dos segundos después de la ejecución me salta el "ERROR: Runtime error in ...bla bla Mnemonic 0x3D59 not implemented" en la consola de comandos. No sale la ventana de error, sino el Mnemonic.


Lo que yo quiero saber es a qué puede deberse este error?


Grax de antemano..

SplinterGU

gracias por el reporte, ya lo veo...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

definitivamente ese codigo no existe... y no es posible, ya que 59, esta libre, sin uso... podrias compartir el codigo?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Hola

Gracias por responder..., mm que sería 59? por cierto, cuando borro un par de say del codigo surgen mnemonics de este tipo: Mnemonic 0x6D8A ó Mnemonic 0x3625..

SplinterGU

59 es el codigo del opcode que pusiste, y no existe. y 3D la descripcion de los parametros, tampoco es posible ese valor.

necesitaria ver codigo de ejemplo... para poder ver que pasa.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Wow, la última vez que pasó creo recordar que fue algo de versiones incompatibles... ¿o fue un bug suelto? Sea lo que sea, eso es una modificación de los datos en memoria, por lo que lo más probable es que tengas un puntero mal puesto por ahí, o algún unload o delete_text con valores no válidos.
De todas formas, mándale el código a Splinter porque si es cosa de Bennu, se soluciona en lo que lo dejen sentarse a pensar (siempre que no toques más el código). Pero mi apuesta es esa: punteros, y si no usas punteros, delete_text :D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Hola

#6
Hola, que tal, disculpas por no responder antes, es que me encontraba tratando de resolver este asunto una y otra vez. De entrada cuando publiqué mi problema había decidido no poner código porque tendría que publicar todo el programa entero, y..no quiero que nadie se vuelva loco la verdad..., pero estuve últimamente probando mi código con unas modificaciones en algunas lineas y ahí se ejecuta (quiero decir que pongo como 'comentario' algunas lineas asi: //bla bla codigo). O sea, tengo mi prg y lo ejecuto y se ejecuta bien, pero aquí viene lo raro. Tomo este prg y lo guardo con otro nombre, es el mismo prg con diferente nombre..., ejecuto y paf 2 segundos y ventana de error. Repito, es el mismo prg.


PROGPROG.prg y lo guardo como PROGPROGX.prg  , mismo contenido..., el primero se ejecuta, el segundo tira error.


Quería comentar que yo uso Notepad++ que viene con el Bennupack..., lo que me gustaría saber ahora es cómo ejecutar mi prog desde la ventana de comandos... (que lo pusieron como sugerencia en el otro hilo..). Es lo que se me ocurre.., o sino no sé qué podría ser?


Bueno, eso.., gracias de antemano.

panreyes

La verdad es que no tengo ni idea de a qué puede deberse, pero se me ocurre que pueda tener que ver con algún fallo de memoria, tipo memory leak o desbordamiento de buffer.

SplinterGU

seguramente estas usando algun puntero y pisando el area donde se aloja el dcb...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Hola

Gracias por responder.., uhm.., Splinter, a que te refieres cuando dices 'pisando el area donde se aloja el dcb'?

SplinterGU

bgdc programa.prg, genera programa.dcb

bgdi programa.dcb ejecuta el juego

para ejecutar el juego, dcb se tiene que cargar en memoria, son datos... puede ser que tengas un puntero sin control, accediendo o pisando el area de memoria donde el dcb esta alojado... quizas uses un puntero, o quizas pases como parametro un puntero o un area un buffer mas chico que este recibiendo mas datos de los que puede... pueden ser mil cosas...

sin codigo de ejemplo, no se puede hacer mucho para ayudarte con el problema.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Cuando tienes un puntero con una dirección de memoria erronea, esta puede apuntar a cualquier parte. Puede que esté intentando modificar la memoria del SO, o de algún programa que tengas funcionando, en cuyo caso, el sistema de protección de memoria del Sistema Operativo anula la operación y lanza un aviso (típica ventana de Widows de "aplicación tal ha ejecutado una operación no válida y debe cerrarse", o en el caso de Linux, un Segmentation Fault).
En otros casos, modifica la memoria del propio programa: puede apuntar a una variable que no es, a una parte de un fichero cargad, o como es tu caso, al código binario que se ha cargado en memoria.

Y hay otros casos en los que apunta a una dirección válida, pero no tiene un efecto visible ni incumple ninguna regla de protección, y todo va bien hasta que deja de ir. Unas veces se pueden repetir los pasos para que de el error, otras el fallo sale de forma "aleatoria", y estos últimos son dificiísimos de corregir.
En casos rarísimos, el código da fallo, pero al usar herramientas de debug, la inclusión de más datos en memoria hace que el error apunte a otro lado y funciona. Creo que sólo se ha dado un caso que yo conozca, a Momia si no me equivoco, hace cosa de un año o dos :D

Por eso te decía que comprobases punteros, valores que les pasas a las funciones UNLOAD_* y qué ID de texto le estás pasando a los DELETE_TEXT. Son las tres fuentes más probables de errores con punteros. Y después, el uso de arrays de Strings.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Hola

Entiendo, gracias y teneis razón porque lo acabo de solucionar.., efectivamente se trataba de un caso de punteros incorrectos como dijo Drumpi y Splinter.., bueno la cuestión es que tengo una STRUCT pos[30] y al parecer en un proceso análisis de recorrido (que recorro esas posiciones), superaba ese numero y tiraba error..., vaya, luego cambié el valor (de la struct) a uno mas alto y ahí ya todo bien. Así que nada, gracias por las respuestas.


Salu2..

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Para eso estamos :)
Hemos sufrido ya tantos errores que podemos identificarlos casi sin mirar el código (o eso o es que hemos desarrollado superpoderes ¿a ver? (ruido de algo rompiéndose). No, es por experiencia. ¿Un médico?
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)