PDA

Ver la Versión Completa : Problema con proyecto pasado a 2010


Winperfil
08-02-2013, 17:58:41
Muy buenas, aprovecho para presentarme, puesto que imagino que debe ser una norma como la de casi todos los foros. Mi nombre es Juan, tengo 21 años y trabajo como programador en una empresa llamada Winperfil.
El caso es que tenemos el código del programa picado en Delphi 2007, y bueno llevo unos días con la intención de tener una versión compilada en delphi 2010. Los únicos problemas que he tenido han sido unos componentes de FastReport, que también hemos aumentado de versión, y poca cosa mas con alguna librería por ahí perdida.
He visto que D2010 tiene una limitación mayor en el tema de longitud máxima en procedimientos y bueno, la ya parece conocida incompatibilidad con los pChar. En fin el problema es el siguiente, el código hace Build y compila sin errores ni problemas algunos ya, pero a la hora de ejecutar, el programa no comienza, queda como en un bucle y tras unos segundos desborda la pila dando el error de Stack Overflow. He intentado seguir los pasos un poco y bueno he tenido que añadir un BreakPoint en el primer begin del source del proyecto, porque ni siquiera llega a ejecutar la primera linea de código, y adentrándome por el mundo de las librerías System y demás, he descubierto que el problema "parece" ser cuando va a cargar los Units para inicializarlo o no se bien que...
La cosa esta en que llevo unos días desesperado buscando el problema, si era configuración de Delphi o cualquier otro tipo de historias... y nada..
He pensado también en la posibilidad de que en 2010 también se vea capado el tamaño máximo del programa a ejecutar, ya que nuestro código es muy muy extenso (casi 1.500.000 lineas) y tenemos mas de 400 forms entre units y datamodules... No se si el tamaño será un problema en esta versión.
En fin sin mas preámbulos, y agradeciendo de antemano vuestros sabios consejos, un saludo y un placer!

Casimiro Notevi
08-02-2013, 18:33:12
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)


Por cierto, no existe ningún tipo de limitaciones de las que hablas, ni incompatibilidades, ni nada de eso, deberías de explicarte mejor... tras leer nuestra guía de estilo. Gracias.

JXJ
12-02-2013, 02:06:11
ya probaste usar eurekalog?


tambien peude ser problema de la base de datos
como te conectas (algo de pchar puede ser )

y que tipo de componentes usas?

si a lo mejor estas usando alguna dll incompatible o la estas crgando mal

Winperfil
14-02-2013, 12:00:04
Buenas de nuevo, a ver intentare explicarlo de la forma más concisa que pueda:

Nosotros disponemos de un código que ahora mismo, actualmente, esta corriendo con Delphi 2007, y mi jefe me ha dicho que quiere el código en Delphi 2010 y posteriormente en XE3 (obviamente).
Cuando abrí el proyecto que tenemos compilado en Delphi 2010, pues obviamente empezaron a fallar algunos componentes que han cambiado y tal sobre todo de la FastReport, pero vamos sin mayor problema, he cambiado componentes y adaptado código.
Otro de los problemas mas repetidos son los ya famosos pChar, y todos lo que me ha saltado, han sido solucionados.
El problema reside al momento en el que el código esta aparentemente sin fallos ya, todos los errores bien corregidos, cuando dispongo a ejecutar, no llega a comenzar ni tan siquiera en la primera linea del código, se queda en Stack overflow en el primer begin. Os detallo una parte del código:


program winperfil;

uses
Forms,
Windows,
Dialogs,
UFpago in 'UFpago.pas' {FFpago},
Unos 400 formularios añadidos en el uses
.
.
UTraspasoPedProv in 'UTraspasoPedProv.pas' {FTraspasoPedidos},
UcacheArtAcc in 'UcacheArtAcc.pas',
UTarifas2 in 'UTarifas2.pas' {FTarifas2};

var
faccli:Integer=0;
// Mimutex, programa:Thandle;

{$R *.RES}
{$R comunes.RES}

const NombreMutex='Winperfil.exe';

begin EN ESTE BEGIN DESBORDA
Application.Initialize;
Application.Title := 'winperfil';
Application.HelpFile := 'Winperfil.chm';
FSplash:=TFSplash.Create(Application);
FSplash.Show;
FSplash.Update;

Application.CreateForm(TM, M);
FSplash.Hide;
FreeAndNil(FSplash);

Application.CreateForm(TFMenu, FMenu);
Application.Run;
end.

Prosigo, una vez adentrándome en dicho begin y ejecutando paso a paso, el problema se encuentra en una de las librerías del sistema, en la cual creo entender que carga los formularios antes de la ejecución, uno a uno, donde aparentemente, en el primero de todos, es donde desborda la pila al llegar a un valor de un bucle concreto.
¿Qué ideas podéis aportar?

Winperfil
14-02-2013, 12:08:10
ya probaste usar eurekalog?


tambien peude ser problema de la base de datos
como te conectas (algo de pchar puede ser )

y que tipo de componentes usas?

si a lo mejor estas usando alguna dll incompatible o la estas crgando mal

Buenas, pues hice seguimiento por la pila, y desborda al dar un salto a una dirección a partir de la cual, esta totalmente vacía, y claro, ya sigue recorriendo desesperada hasta que desborda.
En cuanto a componentes... una locura, de todos los que puedas imaginar...

nlsgarcia
15-02-2013, 01:19:10
Winperfil,


...el problema es el siguiente, el código hace Build y compila sin errores ni problemas algunos ya, pero a la hora de ejecutar, el programa no comienza, queda como en un bucle y tras unos segundos desborda la pila dando el error de Stack Overflow...



...nuestro código es muy muy extenso (casi 1.500.000 lineas) y tenemos mas de 400 forms entre units y datamodules...



...obviamente empezaron a fallar algunos componentes que han cambiado y tal sobre todo de la FastReport...



...Otro de los problemas mas repetidos son los ya famosos pChar...


Revisa este link:

Stack Overflow, Runtime error 202: http://www.esanu.name/delphi/Errors/Stack%20Overflow%20Runtime%20error%20202.html


Causas probables de un Stack Overflow:

1- Funciones Recursivas que no finalizan.

2- Procedimientos o Funciones muy extensos que llaman a su vez a otras rutinas.

3- Creación de muchas variables locales de gran tamaño dentro de una rutina.

4- Paso de parámetros de gran tamaño por valor entre rutinas.

5- Componentes de Terceros.

Te sugiero en función del diseño de la aplicación, compilar la misma por partes deshabilitando secciones del código e ir probando de lo más simple a lo más complejo para ir acotando la falla de Stack Overflow.

Espero sea útil :)

Nelson.

Winperfil
20-02-2013, 12:24:03
Pues podriais decirme porque instalo eurekalog y no termina de abrir delphi 2010?... se queda eternamente pillado con el splash de carga

Winperfil
20-02-2013, 13:30:13
Pues con eurekalog, no llega a escribir ninguna información en el registro, como bien comente, este desbordamiento de la pila ocurre ANTES de ejecutar la primera linea de código... seguimos encerrados...