Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-04-2012
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 18
waremovil Va por buen camino
Hard debug :)

Esta consulta va a ser complicada, más que de programación es de debug ... pero me trae loco

Tengo un servidor funcionando 24/365 y tras unas actualizaciones importantes ha empezado a mostar mensajes de error (popups) del tipo "Access violation at address 0041BE9C"
cuando le da la gana, puede salir 5 veces en una mañana y estar luego dos días sin aparecer.

El problema es que he debugeado mil veces con y sin codegear y no consigo dar con el problema, he reproducido todas las situaciones pero no he
conseguido que el error salte.

El error no cierra la aplicación ni la interrumpe, tan sólo salta el popup y nada más. Siempre es en la misma dirección de memoria. ¿Podría debugear con Codegear a partir
de esa dirección de memoria? En caso negativo ¿algún consejo?

muchas gracias
__________________
http://www.qdsSoftware.com
Responder Con Cita
  #2  
Antiguo 11-04-2012
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.003
Poder: 26
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
No dices qué sistema operativo usas, pero con GDB (el depurador de GNU) puedes depurar programas que ya estén iniciados. Para ello hay que saber el identificador del proceso. Sabiendo la posición de memoria puedes iniciar GDB, "interceptar" el proceso del servidor y poner un "break" para que cuando el proceso acceda a la posición de memoria se active y empezar a depurar. Claro que si dices que puede tirarse varios días sin salir el error pues es un problema, aunque creo que también puedes hacer que GDB avise de algún modo (al menos en sistemas POSIX, como puedes encadenar procesos como te da la gana, puedes hacer que envíe un mensaje de correo cada vez que GDB pare un proceso).

Yo GDB lo uso sólo para depuraciones simples, es decir, ejecución paso a paso, ver el contenido de variables, y poco más, así que no sé cómo se hace exactamente. Tiene muchísimas opciones y comandos.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 11-04-2012
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 18
waremovil Va por buen camino
gracias por tu aporte, el SO es Windows

actualmente compilo en win7 y los servidores se ejecutan en winxp y win7

El problema es, una vez más, que no puedo reproducir el error... he debugeado un montón de veces y reproducido todas las situaciones que se me ocurren,
pero no salta.

Sería genial poder rastrear el error a partir de la dirección de memoria del código que está accediendo a ese puntero nulo, estoy tratando de inventar el "reverse debug"
__________________
http://www.qdsSoftware.com
Responder Con Cita
  #4  
Antiguo 11-04-2012
_cero_ _cero_ is offline
Miembro
 
Registrado: abr 2007
Posts: 147
Poder: 18
_cero_ Va por buen camino
Usas hilos? Quizás una mala sincronización entre ellos este causando el problema.

Mi recomendación es: desglosa el problema en problemas simples, hasta que encuentres cual da el problema (cuanto problema XD), es decir crea programas con partes de tu código que tu pienses que son las mas factibles de error y ejecútalas en bucle hasta que reproduzcas el error, de esta forma podrás ir acortando ese código hasta llegar ala función más simple. Esta forma de corrección me a ayudado en el mismo tipo de problemas (punteros inválidos debes en cuando), varias veces en el pasado.

También prueba en otra PC, cabe la posibilidad de que sea un problema de SO (a xp le encanta mostrar estos errores, casi sin justificación), o en el mas extraño de los casos, error de hardware.
Responder Con Cita
  #5  
Antiguo 11-04-2012
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Asi son los bugs, ocurren justamente por esa situación que no pensaste, asi que dificil que lo resuelvas sin saber exactamente cuales fueron esas condiciones.

Crea un log en tu aplicación y utiliza try catch

cuando entres a una función basicamente tendrias que escribir eso en tu log para saber por donde anda preferentemente con los datos de entrada, luego intenta capturar el error para lograr escribirlo en el log. A partir de ahi, empieza a aislarlo, agregando en tu log cada vez mas detalle.
__________________
[Crandel]
Responder Con Cita
  #6  
Antiguo 11-04-2012
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.927
Poder: 26
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Tambien puedes probar agregando http://madshi.net/madExceptDescription.htm o http://www.eurekalog.com/index_delphi.php. Delphi tiene un pesimo registro de excepciones, estos 2 productos agregan la habilidad de tener el stacktrace de estos asi sabes exactamente de donde viene el error.
__________________
El malabarista.
Responder Con Cita
  #7  
Antiguo 11-04-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 22
AzidRain Va camino a la fama
Huele a hilo chamuscado o memoria sin liberar. Aunque me inclino por lo primero ya que el programa sigue ejecutándose. Por lo recular las violaciones de acceso se deben a intentos de utilizar un objeto que ya se destruyó o bien que no ha sido creado (recordemos que una variable objeto es en realidad un vil puntero a un dirección de memoria). También puede ser una combinación de las 2 cosas, tal vez un hilo destruye un objeto que otro hilo trata de utilizar.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Debug de Delphi Athalon Varios 11 06-12-2007 21:58:00
debug en delphi 7 JoseAntonio Varios 5 27-07-2007 22:12:02
Debug en ActiveX Elenita Varios 2 17-01-2006 13:06:24
Problema DEBUG!!! neon Varios 1 06-04-2005 13:36:19
Debug agonzalez Varios 16 02-07-2004 17:42:07


La franja horaria es GMT +2. Ahora son las 00:58:59.


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
Copyright 1996-2007 Club Delphi