Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Exception extraña.. (https://www.clubdelphi.com/foros/showthread.php?t=36011)

lag_0 28-09-2006 22:34:43

Exception extraña..
 
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

Cita:

Empezado por roman
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
Código Delphi [-]
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 Noteví 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 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 Noteví 29-09-2006 00:48:21

Cita:

Empezado por roman
Pues bueno, haz una copia del proyecto y reemplaza las componentes. Si usas las gexperts 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:
Código Delphi [-]
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


La franja horaria es GMT +2. Ahora son las 10:43:11.

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