Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   ¿Error de memoria? (https://www.clubdelphi.com/foros/showthread.php?t=92654)

strelok 19-12-2017 16:27:29

¿Error de memoria?
 
Desde que empecé con Delphi es impresionante la cantidad de veces que me salió error de memoria (uso la versión XE7), normalmente debo cerrar y abrir nuevamente para dar solución ¿existe alguna actualización/parche/configuración para dar solución total/parcial a este problema?:cool:

strelok 19-12-2017 16:59:40

Cita:

Empezado por strelok (Mensaje 523607)
Desde que empecé con Delphi es impresionante la cantidad de veces que me salió error de memoria (uso la versión XE7), normalmente debo cerrar y abrir nuevamente para dar solución ¿existe alguna actualización/parche/configuración para dar solución total/parcial a este problema?:cool:

Olvidé aclarar que esto sucede al momento de complicar

ecfisa 19-12-2017 17:25:26

Hola.

Por fafor, publica exáctamente el mensaje de error (copia/pega) para orientarnos mas acerca del problema.

Saludos :)

Casimiro Notevi 19-12-2017 18:50:41

Iba a hacer un chiste, pero mejor no :)

strelok 19-12-2017 18:54:33

Cita:

Empezado por Casimiro Notevi (Mensaje 523615)
Iba a hacer un chiste, pero mejor no :)

Hazlo por favor, después de mas de 9 horas trabajando, necesito reír un poco

Casimiro Notevi 19-12-2017 21:15:05

Cita:

Empezado por strelok (Mensaje 523607)
Desde que empecé con Delphi es impresionante la cantidad de veces que me salió error de memoria (uso la versión XE7), normalmente debo cerrar y abrir nuevamente para dar solución ¿existe alguna actualización/parche/configuración para dar solución total/parcial a este problema?:cool:

Cita:

Empezado por ecfisa (Mensaje 523610)
Hola.
Por favor, publica exactamente el mensaje de error (copia/pega) para orientarnos más acerca del problema.
Saludos :)

Nunca he usado la versión xe7, aunque los errores de memoria con otras versiones de delphi que he usado desde 1998, han sido casi ninguno, y siempre culpa mia.

ElKurgan 20-12-2017 08:01:25

Yo suelo usar XE7 y jamás he tenido un problema de esos

¿Qué versión estás usando?

Saludos

Neftali [Germán.Estévez] 20-12-2017 08:46:24

Cita:

Empezado por strelok (Mensaje 523607)
¿existe alguna actualización/parche/configuración para dar solución total/parcial a este problema?:cool:

¿Has revisado en la web de Borlan los updates para XE7?
¿Algo especial en tu proyecto?

strelok 20-12-2017 11:04:07

Pues parece ser común en proyectos grandes: miren https://forums.embarcadero.com/messa...ssageID=704148

Casimiro Notevi 20-12-2017 11:24:13

No, no es común, es un caso aislado. Casos aislados.
No te lo tomes como algo personal lo que voy a decir, pero yo revisaría bien a qué se deben esos errores y descubrirás que no son problemas de delphi.
He trabajado en proyectos bastante más grandes que el que comenta esa persona y te puedo asegurar que no existen esos problemas.
Es más, también puedo asegurarte que esos problemas están provocados normalmente por dos motivos:
  1. Mezcla de muchos componentes de dudoso origen y/o mal instalados, versiones mezcladas de unos componentes, etc.
  2. Errores de programación del propio programador.
Y en la inmensa mayoría de casos, el problema es el punto 2.

En el último proyecto delphi que trabajé me encontré con un sistema similar al que describe ese enlace que has puesto, tenían problemas que ni te puedes imaginar. Después de investigar un poco se podía deducir que el problema era provocado por una mezcla de los 2 puntos que he indicado antes. ¿Sabes cuál fue la solución? pues creo que han comprado un visual studio c# y unos componentes devexpress para cambiarle la apariencia externa.
Y lo único que repetían es: "la culpa es de delphi, la culpa es de delphi, ..."
Y todo por no reconocer que el problema estaba provocado por ellos mismos.

strelok 20-12-2017 11:34:25

Cita:

Empezado por Casimiro Notevi (Mensaje 523635)
No, no es común, es un caso aislado. Casos aislados.
No te lo tomes como algo personal lo que voy a decir, pero yo revisaría bien a qué se deben esos errores y descubrirás que no son problemas de delphi.
He trabajado en proyectos bastante más grandes que el que comenta esa persona y te puedo asegurar que no existen esos problemas.
Es más, también puedo asegurarte que esos problemas están provocados normalmente por dos motivos:
  1. Mezcla de muchos componentes de dudoso origen y/o mal instalados, versiones mezcladas de unos componentes, etc.
  2. Errores de programación del propio programador.
Y en la inmensa mayoría de casos, el problema es el punto 2.

En el último proyecto delphi que trabajé me encontré con un sistema similar al que describe ese enlace que has puesto, tenían problemas que ni te puedes imaginar. Después de investigar un poco se podía deducir que el problema era provocado por una mezcla de los 2 puntos que he indicado antes. ¿Sabes cuál fue la solución? pues creo que han comprado un visual studio c# y unos componentes devexpress para cambiarle la apariencia externa.
Y lo único que repetían es: "la culpa es de delphi, la culpa es de delphi, ..."
Y todo por no reconocer que el problema estaba provocado por ellos mismos.


Ambos puntos parecen ser lo mismo, a diferencia que uno fue programado por externos y el otro por nosotros, sin embargo, ¿qué es exactamente lo que provoca eso? ¿objetos no destruidos? ¿variables no inicializadas? ¿que cosa especifica?.

Por otro lado, el equipo de programación me comentó que en Delphi 2007 nunca sucedió el error, pasaba algo similar, cuando el proceso superaba 1GB, pero no es el mismo error, aquí no sucede cuando intentamos compilar, curiosamente con reiniciar delphi xe7 se soluciona

Casimiro Notevi 20-12-2017 12:12:41

Para encontrar el motivo del problema debes:
1. Centrarte en un caso en particular y poner "breakpoints" para seguir el código paso a paso, armarte de muchísima paciencia, no desesperar, poco a poco, hasta encontrarlo.
2. Una vez resuelto ese problema, goto 1 :D

No hay otra forma de hacerlo, es necesario decidirse y mentalizarse: "Ahora toca resolver estos problemas, no otras cosas, solamente resolver estos problemas."

strelok 20-12-2017 12:28:47

No me sirve lo que me dices jajaja, son mas de 2 millones de líneas, es inviable. Si me dijieras la razón de porque sucede o tiene más probabilidad de suceder, yo podría centrarme en una parte especifica del código:D:D:D:D

Casimiro Notevi 20-12-2017 12:35:30

Cita:

Empezado por strelok (Mensaje 523638)
No me sirve lo que me dices jajaja, son mas de 2 millones de líneas, es inviable. Si me dijieras la razón de porque sucede o tiene más probabilidad de suceder, yo podría centrarme en una parte especifica del código:D:D:D:D

Ya, pero lo mismo decían ellos:
Cita:

Empezado por Casimiro Notevi (Mensaje 523635)
Y lo único que repetían es: "la culpa es de delphi, la culpa es de delphi, ..."
Y todo por no reconocer que el problema estaba provocado por ellos mismos.

No hay otra forma, escoge uno de los errores y céntrate en él, hasta solucionarlo, así uno a uno. No hay milagros.

strelok 20-12-2017 12:43:04

Cita:

Empezado por ecfisa (Mensaje 523610)
Hola.

Por fafor, publica exáctamente el mensaje de error (copia/pega) para orientarnos mas acerca del problema.

Saludos :)

[dcc32 Error] E2161 Error: RLINK32: Out of memory!

strelok 20-12-2017 12:44:47

Cita:

Empezado por ElKurgan (Mensaje 523628)
Yo suelo usar XE7 y jamás he tenido un problema de esos

¿Qué versión estás usando?

Saludos

Embarcadero Delphi XE7 Version 21.0.17017.3725

strelok 20-12-2017 12:45:22

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 523630)
¿Has revisado en la web de Borlan los updates para XE7?
¿Algo especial en tu proyecto?

Solo encontré otras quejas: https://forums.embarcadero.com/messa...ssageID=704148

Casimiro Notevi 20-12-2017 12:53:03

Cita:

Empezado por strelok (Mensaje 523640)
[dcc32 Error] E2161 Error: RLINK32: Out of memory!

¿Ese es el único mensaje de error?

Como decías esto:
Cita:

Empezado por strelok
es impresionante la cantidad de veces que me salió error de memoria

pensaba que eran errores del programa en sí.

strelok 20-12-2017 12:54:27

Encontré algo, pero todos dicen soluciones diferentes, no entiendo nada

¿Me ayudarían?

https://www.clubdelphi.com/foros/showthread.php?t=49799

http://www.clubdelphi.com/foros/showthread.php?t=45406

Casimiro Notevi 20-12-2017 13:04:07

Es que tendríamos que ver el proyecto. De otra forma es dar palos de ciego, a ver si acertamos.
¿Ocurre en un solo equipo o en todos?
¿Tienes algo 'especial' en los ficheros de recursos?, elimínalos (renómbralos, por si acaso tienes que recuperarlo).
Si tienes un .dpr y un .dproj elimina el .dproj (o cámbiale la extensión) y abre el .dpr
Rebuild todo.

strelok 20-12-2017 13:07:03

Respondo a tus preguntas:

- Nos sucede a todos
- Si tiene .dpr y .dproj ¿influye esto?

Casimiro Notevi 20-12-2017 13:09:37

Algunas veces, si el .dproj está mal, es necesrio abrir el .dpr, pero si abre el .dpr y existe el .dproj, se abrirá este último, aunque tú hayas abierto el .dpr
Así que renombra el .dproj por .dproj.original (por ejemplo) y abre el .dpr
Ya te digo, esto es dar palos de ciego.
Pero lo más probable es que sea el fichero de recursos.

duilioisola 21-12-2017 09:32:41

¿Ocurre en la primera compilación o después de unas cuantas?
Puede ser que la aplicación o algún componente esté generando Memory Leaks y esté poco a poco consumiendo la memoria del ordenador.

Yo utilizo en mi proyecto la unidad MemCheck.pas que me deja un log al salir de la aplicación si hubo este tipo de errores.
No se si funcionará en XE7. Yo lo utilizo con Delphi 6.

Adicionalmente utilizo ExceptLog.pas para obtener un log de las excepciones que fueron saltando en la aplicación (capturadas o no).

Código Delphi [-]
program MiAplicacion;

uses
  {$IFDEF Debug}
  // Si agrego Memcheck, debo inicializarlo despues del begin en este .DPR
  // Si quiero un informe detallado de posibles fugas de memoria (Memory Leak)
  // es convieniente marcar la opción:
  // Project --> Options --> Linker --> Include TD32 Debug Info
  // En Project --> Options --> Compiler --> Debugging --> Marcar todo
  // Esto creará EXEs mucho más grandes
  MemCheck in '..\Utilidades\MemCheck.pas',
  // ExceptLog requiere MemCheck
  ExceptLog in '..\Utilidades\ExceptLog.pas',
  {$ENDIF}
  ...
begin
  {$IFDEF Debug}
  MemChk;
  {$ENDIF}
   ...
end.

Ñuño Martínez 21-12-2017 13:18:22

Cita:

Empezado por strelok (Mensaje 523638)
No me sirve lo que me dices jajaja, son mas de 2 millones de líneas, es inviable. Si me dijieras la razón de porque sucede o tiene más probabilidad de suceder, yo podría centrarme en una parte especifica del código:D:D:D:D

Esto no es verdad, y da igual cuántas líneas de código sean. Yo encontré un problema con Allegro, que tiene también cantidades ingentes de código repartido por varias DLL, y fue bastante rápido.

Primero, tienes que compilar quitando las optimizaciones, añadiendo la información de depuración y (si es posible) enlazando con las versiones de depuración de las bibliotecas que uses. Después ejecuta y cuando falle te dirá exactamente en qué unidad, archivo y línea de código ha fallado, así como el estado de la pila. Ahí descubrirás qué objeto es el que falla y de dónde viene, por lo que podrás establecer los puntos de ruptura (breack points) en los puntos clave (llamadas, constructores, destructores...), volver a ejecutar y encontrar el origen.

Como digo, da igual los miles de millones de líneas de código y de archivos que tengas: es fácil y rápido. Sólo hay que saber manejar las herramientas.

Casimiro Notevi 21-12-2017 13:33:01

Cita:

Empezado por Ñuño Martínez (Mensaje 523677)
..

+1 ^\||/

Neftali [Germán.Estévez] 21-12-2017 15:21:54

Cita:

Empezado por duilioisola (Mensaje 523668)
Yo utilizo en mi proyecto la unidad MemCheck.pas que me deja un log al salir de la aplicación si hubo este tipo de errores.
No se si funcionará en XE7. Yo lo utilizo con Delphi 6.

Supongo que debe ser algo parecido a si se escribe al principio del DPR lo siguiente:

Código Delphi [-]
    ReportMemoryLeaksOnShutdown := True;


Más info aquí:
http://docwiki.embarcadero.com/Libra...eaksOnShutdown

Al acabar el programa saca un pequeño reporte de MemoryLeaks.

strelok 21-12-2017 16:20:36

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 523682)
Supongo que debe ser algo parecido a si se escribe al principio del DPR lo siguiente:

Código Delphi [-]
    ReportMemoryLeaksOnShutdown := True;


Más info aquí:
http://docwiki.embarcadero.com/Libra...eaksOnShutdown

Al acabar el programa saca un pequeño reporte de MemoryLeaks.

Pero el error de memoria me sale cuando estoy compilando, según leí en internet, específicamente en el "enlazado", eso que tu me cuentas me da a entender que es para problemas de memoria en tiempo de ejecución :eek:

Casimiro Notevi 21-12-2017 16:31:00

Cita:

Empezado por strelok (Mensaje 523692)
Pero el error de memoria me sale cuando estoy compilando, según leí en internet, específicamente en el "enlazado", eso que tu me cuentas me da a entender que es para problemas de memoria en tiempo de ejecución :eek:

¿Has probado algo de lo que te he comentado antes?

ecfisa 22-12-2017 13:49:46

Hola.
Cita:

Empezado por strelok (Mensaje 523640)
[dcc32 Error] E2161 Error: RLINK32: Out of memory!

Revisa si algo de lo tratado en estos enlaces, se pudiera corresponder a tu situación:
Saludos :)

strelok 04-01-2018 12:53:02

Traigo información:

Encontré una forma de "solucionarlo" fácil cada vez que suceda, cambiar de pestaña "Code" a "Design" o vicersa
Al intentar compilar luego de hacer ese cambio, funciona perfecto.


La franja horaria es GMT +2. Ahora son las 02:43:32.

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