Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2010-12

¿Sabotaje a Lazarus?

8 messages · 3 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Arturo Molina
Show quoted text 27 lines
On Wednesday 01 December 2010 18:22:56 Juan M Puertas wrote: > Hola amigos. > Hace una semana que un programa que estoy haciendo a ratos se ha vuelto > loco, incluso las versiones anteriores que iban bien. Por ejemplo dando > errores de memoria, petando en una l�nea sentencia como "end.", cerr�ndose > solo, dando error al hacer clic en el aspa superior derecha que cierra > cualquier programa... Lo tengo instalado en varios sistemas operativos. En > Windows 7, he mirado las propiedades de los ejecutables de la carpeta > principal: lazarus.exe, lazbuild.exe, etc.. En la opci�n "Versiones > anteriores" me salen 7 versiones de estos ejecutables desde Octubre de > este a�o. > Que yo sepa, no existen actualizaciones autom�ticas, adem�s en las > descargas de la Web oficial, la �ltima versi�n que aparece es la de > Octubre de 2009. �Est�n saboteando a L�zarus?. �Est� pas�ndome s�lo a mi?. > Gracias por las pistas que pod�is darme. :-) > > > > > > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lists.lazarus.freepascal.org > http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es >

Hola,
una pregunta �has instalado alg�n componente extra?

Cada vez que instalas un componente, el sistema se re-compila autom�ticamente.
Dado que windows no permite modificar el ejecutable que est� en uso, puede ser que no te des cuenta de que lo ha hecho. Cuando cierras el programa y vuelves a abrirlo, en realidad estas abriendo la nueva compilaci�n.

Si has instalado 7 componentes, tendr�s 7 versiones anteriores.

Un saludo
Arturo Molina

Reply by email

Juan M Puertas
to Arturo Molina: una pregunta �has instalado alg�n componente extra? Cada vez que instalas un…

Hola gente:
Cuando cierro una aplicaci�n que he desarrollado, me da el siguiente error: " Project raised exception class 'External: SIGKILL' ". Esto me sucede tanto al darle al "aspa" que se encuentra en la parte superior derecha de la ventana, como al hacer clic en el bot�n de salir mediante la sentencia "close;".
�A alguien m�s le pasa, o le ha pasado esto?.
Gracias :-)

Reply by email

José Mejuto
to Juan M Puertas

Hello Juan,

Thursday, December 9, 2010, 2:56:14 PM, you wrote:

JMP> Hola gente:
JMP> Cuando cierro una aplicaci�n que he desarrollado, me da el siguiente error: " JMP> Project raised exception class 'External: SIGKILL' ". JMP> Esto me sucede tanto al darle al "aspa" que se encuentra en la parte superior JMP> derecha de la ventana, como al hacer clic en el bot�n de salir mediante la JMP> sentencia "close;".
JMP> �A alguien m�s le pasa, o le ha pasado esto?. JMP> Gracias :-)

Tienes un "puntero loco", esto es, o liberas 2 veces un objeto en el close (algo que ya estaba liberado) o bien has provocado una corrupci�n de la memoria en alg�n punto del programa.

Comprueba el evento OnFormDestroy a ver que haces all� linea por linea. Tambi�n puedes compilar usando la opci�n "heaptrc" del men� "Enlazado" para que haga un seguimiento de los bloques de memoria.

Best regards, Jos�

Reply by email

Juan M Puertas
to José Mejuto

�Hola.
�Curiosamente se ha solucionado al desactivar la opci�n "heaptrc" del men� "Enlazado".
�Ser�a interesante saber si�a vosotros os da el mismo error si activ�is esta opci�n.�Supongo que no, que se debe a que tengo que liberar unos cuantos bytes de la pila, y por ser un novato con el freepascal no s� c�mo hacerlo. �Muchas gracias Jos� :-)

Reply by email

José Mejuto
to Juan M Puertas

Hello Juan,

Thursday, December 9, 2010, 9:29:59 PM, you wrote:

JMP> �Hola.
JMP> �Curiosamente se ha solucionado al desactivar la opci�n "heaptrc" del men� JMP> "Enlazado".
JMP> �Ser�a interesante saber si�a vosotros os da el mismo error si activ�is esta JMP> opci�n.�Supongo que no, que se debe a que tengo que liberar unos cuantos bytes JMP> de la pila, y por ser un novato con el freepascal no s� c�mo hacerlo. JMP> �Muchas gracias Jos� :-)

Si desactivas la opci�n y ya no da el error, entonces es seguro que tienes un puntero loco. El heaptrc una de las cosas que hace es que cuando liberas un bloque de memoria este asigna un valor de marcado, de modo que si intentas usar el bloque despu�s de liberarlo dar� un error con seguridad, cosa en en otro caso es incierta.

Imagina este programa:

----------------------------------------------------
program pruebamemoria;
uses classes;
var
  p: pchar;
begin
  getmem(p,256); //reservamos 256 bytes de memoria
  Fillchar(p,64,'A');
  p[64]:=#0;
  writeln(p);
  freemem(p);
  inc(p,8);
  writeln(p);
  readln();
end.
-----------------------------------------------------

Ejecuta ese programa con y sin heaptrc y ver�s el problema, y como el puntero loco es "p" ya que se usa despu�s de liberarlo.

Una buena t�cnica es que en vez de "Objeto.free" uses "FreeAndNil(Objeto)" y en los punteros en vez de "freemem(x)" uses "freemem(x);x:=nil;"

Best regards, Jos�

Reply by email

Juan M Puertas

Hola.
No he conseguido a�n encontrar el, en mi caso, "objeto loco" , sigue dando error con "FreeAndNil(Objeto)".
Quisiera aprovechar para felicitar a toda la gente de esta lista la Navidad y el 2011.
Gracias en especial a Jos�. :-)

Reply by email

José Mejuto
to Juan M Puertas

Hello Juan,

Friday, December 24, 2010, 1:15:41 PM, you wrote:

JMP> Hola.
JMP> No he conseguido a�n encontrar el, en mi caso, "objeto loco" , sigue dando JMP> error con "FreeAndNil(Objeto)".
JMP> Quisiera aprovechar para felicitar a toda la gente de esta lista la Navidad y JMP> el 2011.
JMP> Gracias en especial a Jos�. :-)

Felices fiestas tambi�n :)

Pasemos al plan B :) A�adir un writeln (y compilar como programa de consola).

Vas al destroy de ese objeto, y en la primera linea, antes del inherited a�ades un writeln en plan:

writeln(TimeToStr(Now),' destruyendo objeto ',Self.classname);

De este modo deber�as ver donde se va destroyendo ese objeto, si se hace mucho antes de intentar salir, varias veces en el intento de salir, etc.

Si ves el "destruyendo objeto" varias veces podemos a�adir c�digo para que nos diga desde donde se destruye cada vez, vamos ver el backtrace de cada destrucci�n, pero primero int�ntalo con el simple writeln.

Best regards, Jos�

Reply by email