FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Debugear en tiempo de ejecucion ?
es esto posible de alguna forma ? .. ( me comentan que en VB se puede hacer ) ..
o al menos saber cual fue la LINEA en la que se produjo el error.. porque lo mejor que he logrado obtener es el mensaje de error y el modulo en el que se produce... pero a veces no es muy precisa esa info para localizar/reproducir la situacion de error. Saludos a todos y gracias Ingel |
#2
|
||||
|
||||
saludos
Podrías usar F7 o F8, linea por linea
__________________
Van Troi De León (Not) Guía, Code vB:=Delphi-SQL, ¿Cómo? Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto! |
#3
|
||||
|
||||
Hola,
Puedes establecer "puntos de ruptura", sencillamente, pulsando la tecla "F5" en la línea en que sea preciso. Luego puedes ir línea por línea con "F7", por ejemplo. Revisa el menú "Run" de Delphi y te toparás con distintas opciones para "debugear" tu programa. También echa un vistazo a las propias opciones del "debugger", en el menú "Tools -> Debugger options". Última edición por dec fecha: 05-10-2005 a las 16:55:05. Razón: Corrección del texto. |
#4
|
||||
|
||||
Hola Ingel
Nosotros usamos el EurekaLog (desgraciadamente es de pago). Cuando la aplicación "casca" un error, sustituye al mensaje habitual por una ventana en la que, entre otras cosas (es configurable), te muestra el número de línea (y la unit, y por dónde viene...) en el que ha habido el problema. Por si te interesa la web es www.eurekalog.com (¡qué originales! ) Saludos
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin) |
#5
|
|||
|
|||
quizas no me explique bien .. perdon .
yo no me referia debuguearlo desde el Delphi , sino SOLO ejecutando el el EXE desde una estacion de trabajo por ejemplo ..o por lo menos capturar la linea y .pas donde se produjo el error ..
Y a Ohcan , ahora 'chusmeo' un poco el eureka ... GRACIAS...y saludos .. |
#6
|
||||
|
||||
Cita:
http://www.dimusware.com/
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#7
|
||||
|
||||
Cita:
Por otro lado recuerda que el código compilado no tiene referencia a la "Línea de Código" no compilado, a no ser que compiles el EXE con información de Debug. Lo que lo hace mucho mas extenso. Te recomiendo probar esto que es gratuito, yo lo he utilizado sin problemas con aplicaciones en Delphi 7, y lo modifiqué a mi gusto sin problemas: http://www.jirihajek.net/delphi/ExceptLog.htm Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#8
|
||||
|
||||
Pues yo lo hago a través de la JVCL (componentes gratuitos) activando en las propiedades del proyecto la opción de menú "insert jclDebug".
Código:
00003: [18:52:55]Exception ENoResultSet: Error creating cursor handle Exception UnitName : DBTables Procedure : TBDEDataSet.OpenCursor Line : 4111 OffsetLine : 0 Deep of Except frame-dump : 7 UnitName : DBTables Procedure : TBDEDataSet.OpenCursor SourceName : DBTables.pas Line : 4112 UnitName : DB Procedure : TDataSet.SetActive SourceName : DB.pas Line : 8840 UnitName : SqlExplorer Procedure : TFRMSQL.btnAbrirClick SourceName : SqlExplorer.pas Line : 77 UnitName : SqlExplorer Procedure : TFRMSQL.btnAbrirClick SourceName : SqlExplorer.pas Line : 79 UnitName : Controls Procedure : TWinControl.MainWndProc SourceName : Controls.pas Line : 6137 UnitName : Controls Procedure : TWinControl.MainWndProc SourceName : Controls.pas Line : 6141 Última edición por Lepe fecha: 05-10-2005 a las 20:16:22. |
#9
|
||||
|
||||
Hola,
Lepe, muchas gracias por tu información, que me ha servido para probar el "JclDebug" e incluso implementarlo (a partir de uno de los ejemplos que se pueden encontrar) en XEditor. ¿Para qué demonios? Ahí está el caso. Este programa, cuando se produce una excepción, muestra al usuario un mensaje con la misma y le da la posibilidad de enviarme por correo un reporte de error. Entonces, me he dicho, hombre, si añades la información del "JclDebug" el reporte de error contendrá bastante más información, que podrá resultar muy útil para tratar de solucionar posibles problemas en el programa. Y dicho y hecho, más o menos, he conseguido que el reporte incluya la información que puede proporcionar en caso de excepción el "JclDebug". Ahora bien, parece ser que no puedo utilizar el compresor de ejecutables para comprimir el del programa susomentado, porque, entonces el "JclDebug" no funciona como debe y al producirse la excepción e intentar conseguir la información correspondiente se produce a su vez otra excepción y... para qué seguir. El programa ocupa ahora unos 3,44 MB, y comprimido se quedaba en menos de uno, pero, no es esto del todo importante, puesto que el programa instalador comprime el ejecutable (y el resto de archivos) sin que afecte al "JclDebug" y, al cabo, estamos hablando de que antes de implementar lo dicho el programa de instalación ocupaba unos 1,41 MB y ahora se quedaría en 1,95 MB. Puesto que la ejecución del programa no se ve ralentizada (es aquello de que ahora, incluso, no es preciso descomprimir el ejecutable cada que se pone en marcha el programa) y al convencerme el asunto como para pensar en publicar el programa de este modo, asumiendo que no irá comprimido y que el asistente de instalación ocupará un poco más, me pregunto todavía... ¿Merece la pena el reporte de error? ¿Es necesario o puede ser útil cuando el programa ya se ha publicado, quiero decir, cara al usuario? ¿Debería usar el "JclDebug" únicamente cuando esté trabajando yo mismo en el programa y dejar de usarlo a la hora de publicar el mismo? ¿Puedes tú mismo o alguien que esto lea decirme algo que me aclare un poco estas dudas que tengo? Muchas gracias de antemano. Si véis que me dejo algo en el tintero, me lo hacéis saber y veremos cómo hago para explicar lo que sea necesario explicar con más detalle. En todo caso, Lepe, gracias por la información, puesto que nada más sencillo que valerse uno del "JclDebug" (al menos para ciertas cosas, porque no es poco potente, a lo que se ve), sin olvidar el trabajo que les ha tenido que llevar a sus programadores el preparar algo así, claro está. Última edición por dec fecha: 06-10-2005 a las 02:50:07. Razón: Corrección del texto. |
#10
|
||||
|
||||
Como en este hilo se daba información general, eso mismo hice yo.
Para el caso de jclDebug, ha de tenerse en cuenta 2 cosas: - Hay que incluir en el primer formulario o Datamodule que crees el uses jclDebug, ya que realiza una inicialización en su unidad para empezar el "traceo" de excepciones. - En la distribución de tu ejecutable, tienes que distribuir un archivo .map que se crea al compilar, (abrelo con el bloc de notas para saber de que hablo). En este caso se tiene que distribuir un par de megas más, pero perece la pena. - Además de la información de jclDebug, se debe incluir las ventanas abiertas en tu aplicación (si son varias) para saber lo que hacia el usuario, (el objeto TScreen vale para eso). -En cuanto al uso de compresores de ejecutables, acabo de probarlo, y efectivamente el compresor elimina la información de debug, por lo que interfiere con JCLDEBUG, como ya sabemos: no se puede tener todo . Para el primer punto, yo me he construido mi propia jclDebug, que unicamente cambia los procedimientos por funciones y devuelve el error en una variable. Os lo dejo aqui: (El nombre de la unidad lleva el prefijo LP (Lepe) para que no interfiera con posibles modificaciones de la JCL) Saludos
saludos |
#11
|
||||
|
||||
Hola,
Cita:
|
#12
|
|||
|
|||
donde consigo los componentes
estoy buscandolos pero hasta ahora no los encuentro ..
y la ultima Lepe: a que te refieres con lo de las ventanas abiertas ? GRACIAS por tu ayuda Ingel |
#13
|
|||
|
|||
Un ejemplo, please
Que corcholis, estoy intentando obtener resultados como los que menciona Lepe, pero no consigo ver esta tipo de info:
Cita:
¿Pero como puedo recoger los errores de ejecución? ¿Podrías ponernos un ejemplo Lepe, de cómo utilizarlo?, ¿cómo llamar a la funciónLogException(ExceptObj: TObject; ExceptAddr: Pointer; IsOS: Boolean):string y recoger el string en el map o en un .log con el TJvLogFile? Gracias, profe... y perdona mi torpeza. |
#14
|
|||
|
|||
El ejemplo
Me voy a contestar a mi mismo, quizá para no darme vergüenza, ...pero alguien más puede caer. Me ha costado q en cupiera en la cabezota. Quizá por lo puramente simple.
Lepe: te mereces un altar, si me mandas una fotillo, así con un poco de aura, me la pego en el margen de mi pantalla. Esto es alu cinate e im presionante, chicos (y todo en 2 palabras, ;-) ) el resultado en el log: Código:
[10/10/2005 21:29:46]Exception EAccessViolation: Access violation at address 00524D84 in module 'PbaDBX.exe'. Write of address 00000000 (OS Exception) Exception UnitName : Unit1 Procedure : TForm1.BotonErrorClick Line : 210 OffsetLine : 4 Deep of Except frame-dump : 3 UnitName : Controls Procedure : TWinControl.MainWndProc SourceName : Line : 0 UnitName : Controls Procedure : TWinControl.MainWndProc SourceName : Line : 0 //Fin reporte// - ERROR > ...aaauuuuammmmm ...(te estoy cantando unos canticos) ...admirado y venerado Lepe. |
#15
|
||||
|
||||
Saludos
Cita:
__________________
Van Troi De León (Not) Guía, Code vB:=Delphi-SQL, ¿Cómo? Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto! |
|
|
|