PDA

Ver la Versión Completa : Exception extraña..


lag_0
28-09-2006, 22:34:43
Project Project1.exe raised exception class EAccesViolation with message 'Access violation at adress 0000004. Read of addres 0000004'. Process stopped. Use Step or Run To continue.

Toda la tarde y no se por que cojones me da esa excepction, perdon por la palabara pero es que estoy que no puedo más :mad: ... no tengo ni idea de exceptions i de debbugear a ver si alguien me ayuda un poco...
Me explico:
El programa es una calculadora que procesa unos numeros creados aleatoriamente y te calcula varios resultados, tiene muchos arrays, Tlist view que se llenan hasta 100000 o más, memos que tmb llenan eso... pero...
A veces cuando lleva más de 1000 numeros procesados me da except en el onmouse over de unas label que tengo que no tienen nada en onmouse over y borra la caption...
Otras veces al pasar de 10000 o así me da esa except y una y otra vez, vamos que no hay manera de seguir con el programa...

Estoy loco, no se que puede ser :mad: .
Son calculos muy muy simples.
Gracias por la ayuda...

maeyanes
28-09-2006, 22:41:14
El error que estás obteniendo es de acceso a memoria. Una de las causas más comunes de este error es tratar de usar un objeto que no ha sido creado o que ya fue destruido...

Ahora, si puedes poner algo de tu código tal vez se te puede ayudar de mejor forma...



Saludos...

lag_0
28-09-2006, 22:44:46
es que no se en que parte esta el error y hay mucho mucho codigo.. son 8 forms llenas de codigo con bucles y application procesmsg para poder interactuar entre ellas.. no sabria que pegar =(

Lo de objeto destruido no puede ser por que eneste proceso no se destruye nada y es totalmente aleatorio el momento que empieza el error ( oeso creo..) mas ideas? a ver si puedo pegar algo... :mad:

maeyanes
28-09-2006, 22:53:33
Coloca breakpoints (Tecla F5) donde sospeches que pueda estar el fallo y cuando la ejecución del programa llegue a uno de estos, ve haciendo un paso a paso (Tecla F7) hasta que te salga el error.

Entre las herramientas de depurado tienes la ventana Watch desde donde puedes agregar variables y ver que valores toman en determinado momento.

La verdad que aprender a depurar un programa es una de las tareas más importantes cuando se desarrolla una aplicación.


Saludos....

lag_0
28-09-2006, 23:00:42
voy a ello, gracias de nuevo =) nunca tube tantos problemas y por tanto no requerí aprender a debbugear :D cuando tenga algo cuento!

roman
28-09-2006, 23:05:44
También recomiendo que actives la opción Project|Options|Compiler|Use debug DCUs y hagas un Build del proyecto. Esto para que el debugger incluya las unidades de la vcl. Aunque seguramente el error no se genera ahí, posiblemente sí sea ahí, en la vcl, donde se muestra y eso te puede dar una idea del tipo de operación realizada para saber dónde buscar.

// Saludos

lag_0
28-09-2006, 23:13:34
No saco nada en claro :mad: realmente estoy perdido y desesperado.. incluso estoy planteandome volver a empezar la aplicación.. y no es una cosita pequeña .... Bueno... a ver si hay suerte =(

lag_0
28-09-2006, 23:16:57
También recomiendo que actives la opción Project|Options|Compiler|Use debug DCUs y hagas un Build del proyecto. Esto para que el debugger incluya las unidades de la vcl. Aunque seguramente el error no se genera ahí, posiblemente sí sea ahí, en la vcl, donde se muestra y eso te puede dar una idea del tipo de operación realizada para saber dónde buscar.

// Saludos

SIIIIIIIIIIIIIIIIIIIIIII señor XDDDDDDDDDDDDDd
procedure TWinControl.PaintControls(DC: HDC; First: TControl);
var
I, Count, SaveIndex: Integer;
FrameBrush: HBRUSH;
begin
if DockSite and UseDockManager and (DockManager <> nil) then
DockManager.PaintSite(DC);
if FControls <> nil then
begin
I := 0;
if First <> nil then
begin
I := FControls.IndexOf(First);
if I < 0 then I := 0;
end;
Count := FControls.Count;
while I < Count do
begin
with TControl(FControls[I]) do
if (Visible or (csDesigning in ComponentState) and
not (csNoDesignVisible in ControlStyle)) and
RectVisible(DC, Rect(Left, Top, Left + Width, Top + Height)) then
begin
if csPaintCopy in Self.ControlState then
Include(FControlState, csPaintCopy);
SaveIndex := SaveDC(DC);
MoveWindowOrg(DC, Left, Top);
IntersectClipRect(DC, 0, 0, Width, Height);
Perform(WM_PAINT, DC, 0);
RestoreDC(DC, SaveIndex);
Exclude(FControlState, csPaintCopy);
end;
Inc(I);
end;
end;
if FWinControls <> nil then
for I := 0 to FWinControls.Count - 1 do
with TWinControl(FWinControls[I]) do
if FCtl3D and (csFramed in ControlStyle) and
(Visible or (csDesigning in ComponentState) and
not (csNoDesignVisible in ControlStyle)) then
begin
FrameBrush := CreateSolidBrush(ColorToRGB(clBtnShadow));
FrameRect(DC, Rect(Left - 1, Top - 1, Left + Width, Top + Height),
FrameBrush);
DeleteObject(FrameBrush);
FrameBrush := CreateSolidBrush(ColorToRGB(clBtnHighlight));
FrameRect(DC, Rect(Left, Top, Left + Width + 1, Top + Height + 1),
FrameBrush);
DeleteObject(FrameBrush);
end;
end;

RestoreDC(DC, SaveIndex);

:D EN CONTROLS.DCU, gracias roman, por que puede seeeeeeeeeeeeer :confused:

lag_0
28-09-2006, 23:18:14
pd: me pasa en mientras se ejecuta un while y muevo las forms o paso el mouse por encima de las labels o... mil cosas, pasa nosé por que, ni como xDD a ver si alguien tiene una idea, dioooooooooooz ke alivio

roman
28-09-2006, 23:31:09
¿Todas tus componentes son estándar o usas alguna de terceros?

// Saludos

lag_0
28-09-2006, 23:36:10
solo uso las flatbox, y fixee el bug de delphi 6 de oscilación en las TImage, puede ser por eso?

roman
28-09-2006, 23:45:45
¡Válgame! ¿Qué #$%& es eso de fixear? Por favor, ¡utilicemos correctamente el castellano!

En fin, no conozco las FlatBox, y no sé a qué problema de oscilación te refieres pero ciertamente ambas cosas pueden estar influyendo.

Un método como PaintControls veo muy difícil que falle debido a programación que hagamos nosotros, a menos, claro está, que estemos programando cuestiones que involucren dibujado de elementos en el formulario. Vamos, que estamos hablando de métodos a bajo nivel por lo que no es frecuente que un error así esté en nuestro código.

Entonces mi principal sospechoso es alguna componente de terceros mal programada, y por el nombre, flatbox, sí suena a que sean componentes que se meten con la forma de dibujar las cosas.

Pero eso que mencionas de la oscilación también puede afectar. Si tiene que ver con un TImage es por que tiene que ver también con dibujado, y quiza el arreglo no sea del todo correcto.

¿Qué son las flatbox? ¿Te son imprescindibles? ¿Puedes reemplazarlas por componentes estándar y ver si siguen los problemas?

// Saludos

lag_0
28-09-2006, 23:51:42
Hola!!
Ante todo muchas gracias por tu ayuda, antes estaba desesperado, al menos ya tengo una linea en la que descargar mi furia.

A ver.. las flatbox son paneles, botones y demás que tienen borde de 1px.. no me son imprescindibles pero nunca dieron problemas...
Respecto a lo de la oscilación.. repuse las backup de los TImage de delphi y sigue dando lo mismo, de todos modos, no creo que sea por culpa de las flatbox, me explico:
Antes no podia identificar el error, pero ahora me di cuenta que que se produce al mover las ventanas y dejar presionado el raton durante unos segundos, o bien, al maximizar otra y minimizarla, vamos, cuando vuelve a ser la ventana focus me tirar el error, no puede dibujarla, peroooo, atencion: Esto solo pasa cuando el bucle está en proceso y lleva más de 1000 numeros calculados, hasta entonces no hay problema, y si lo dejas calculando sin probocar que nada se tenga que dibujar tampoco tiene problemas... :p

Total, no sé que hacer.
Se os ocurre algo :confused: muchas gracias de nuevo.

Un saludo,
lag, lag_0.

Casimiro Notevi
28-09-2006, 23:56:51
Si son las mismas "flatbox" que usé hace años... te digo lo que hice yo debido a los constantes errores que producían... ¡¡¡ las eliminé !!! y adiós problemas :D

Son unos componentes para poner controles típicos como botones, groupbox, etc... "planos", sin relieve.

Mi experiencia con ellos fue un desastre, aunque hace años.

lag_0
29-09-2006, 00:00:00
Hay varios FlatPacks, yo utilizo dos, un tal MXFlatPack y FlatStyle...
Nunca me dieron problemas, pero, que solo succeda el error durante el bucle no indica que sea un problema que no tiene nada que ver con los componentes :confused:

Gracias por todo de verdad ><

roman
29-09-2006, 00:12:46
Pues bueno, haz una copia del proyecto y reemplaza las componentes. Si usas las gexperts (http://www.gexperts.org) te será relativamente fácil.

Si ya no da errores pues ya tienes al culpable. Si no, a seguir buscando.

Casimiro: ¿Algunas de las componentes que menciona lag_o son las que tu utilizaste? Porque me gustaría probarlas pero si son las que dices mejor ni me gasto.

// Saludos

lag_0
29-09-2006, 00:14:25
Mañana me pongo, ya contare =) un saludo.

Casimiro Notevi
29-09-2006, 00:48:21
Pues bueno, haz una copia del proyecto y reemplaza las componentes. Si usas las gexperts (http://www.gexperts.org) te será relativamente fácil.

Si ya no da errores pues ya tienes al culpable. Si no, a seguir buscando.

Casimiro: ¿Algunas de las componentes que menciona lag_o son las que tu utilizaste? Porque me gustaría probarlas pero si son las que dices mejor ni me gasto.

// Saludos
No, no eran esos, creo que eran "flatcontrols" o algo así, no estoy seguro del todo, pero no me suenan los nombres mencionados por lag_o

lag_0
29-09-2006, 01:46:39
A ver xD
Lo remplase todo, vamos todo lo que era flat que son los únicos componentes de 3eros...
Compilo.. y cuando me tendria que dar el error....
El mismo error exactamente solo que ahora apunta a Classes.dcu y en la funcion:
function StdWndProc(Window: HWND; Message, WParam: Longint;
LParam: Longint): Longint; stdcall; assembler;
asm
XOR EAX,EAX
PUSH EAX
PUSH LParam
PUSH WParam
PUSH Message
MOV EDX,ESP
MOV EAX,[ECX].Longint[4]
CALL [ECX].Pointer
ADD ESP,12
POP EAX
end;

Me marca el error en: ADD ESP,12.
Alguien tiene idea... :confused: yo me pierdo, este error me supera :( y me da que no me va a quedar otra que empezar el programa de cero y rezar para que no pase está vez...

lag_0
29-09-2006, 19:28:43
Bueno...
Explico la conclusion xD (por si a alguien le interesa)
A la mierda todo el source. Empezaré de nuevo e intentaré hacerlo mejor más optimizado y con buena cara por que tengo muchas cosas pensadas para la nueva versión, pero...
A sido una gran putada, empezar de 0 ese programa es una jodienda bien grande, solo deciros que la culpa de lo de paint es de el FlatPack ese muy posiblemente, pero el otro error nosé de donde sale y cada vez peta por más lados así que... adios!

Gracias por la ayuda pero no pude hacer nada :p

jachguate
29-09-2006, 21:29:47
Creo que llego tarde, pero comento que es probable que se esté dando algún desbordamiento de memoria en alguna estructura tuya (por ejemplo escribiendo en un arreglo con un índice fuera de rango) y que esta sobreescritura, al corromper otros datos, provoca que otras rutinas fallen.

Lo comento porque he visto que sucede y por la naturaleza del error, que al hacer cambios salta de aquí para allá, pero el código donde se produce es código muy bien probado, por lo que es dificil de pensar que sea este por si mismo el que falle.

Yo me iría por revisar todas las escrituras a vectores y otras estructuras de longitud variable.

Hasta luego.

;)

roman
29-09-2006, 21:42:22
No creo que llegues tarde. Seguro que lag_0 hizo un respaldo antes de «mandar a la mierda todo el source» :D

Y lo que dices suena muy plausible. Si usa, por ejemplo, arreglos dinámicos y se pasa de los límites, es posible que los efectos no se noten de inmediato y revienten cuando menos uno se lo espera.

Sea lo que sea, no es recomendable simplemente recomenzar todo y esperar que esta vez salga bien. La programación no es cosa de suerte (http://www.clubdelphi.com/foros/showthread.php?t=161) y más vale pasarse horas y días revisando hasta entender qué sucede a que la aplicación naufrague en peores circunstancias el día menos pensado.

// Saludos

lag_0
30-09-2006, 16:03:28
bueno xD aun está por ahi el codigo pero prefiero empezarla de nuevo, la verdad es que ya le tenia ganas y con todo lo que me jodio ya le pueden dar :p