Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   No hace caso a los puntos de interrupción en Delphi Berlin (https://www.clubdelphi.com/foros/showthread.php?t=91501)

newtron 20-02-2017 17:06:32

No hace caso a los puntos de interrupción en Delphi Berlin
 
Hola a tod@s.

Estoy intentando pasar un pequeño proyecto desde delphi 2007 a Delphi Berlin y, aparte de otros problemas que tengo que resolver, estoy viendo un comportamiento extraño relacionado con los "breakpoints" y es que, cuando quiere, no les hace caso. Hay veces que pongo alguno en alguna parte del código y se lo salta a la torera, o sea, que no se para. Sin embargo, si antes pongo un showmessage para probar si pasa por ahí, hace el showmessage y luego se para en el breakpoint.

¿Alguien me da algo de luz sobre este asunto?

Saludos

maeyanes 20-02-2017 17:58:35

Hola...

Podría ser que el compilador al optimizar el código elimina la línea de código donde tienes el break point y es por eso que al hacer el debug ya no se detiene ahí. Me llegó a pasar.



Saludos...

newtron 20-02-2017 18:24:56

Cita:

Empezado por maeyanes (Mensaje 513502)
Podría ser que el compilador al optimizar el código elimina la línea de código donde tienes el break point y es por eso que al hacer el debug ya no se detiene ahí. Me llegó a pasar.

Cierto, eso pasa, pero cuando es código que no se llega a ejecutar. En este caso que planteo si exactamente antes de la línea del breakpoint pongo un showmessage para parar el programa si que se para.

Saludos

Casimiro Notevi 20-02-2017 20:11:56

Ese comportamiento es así, de siempre, en todas las versiones de delphi.

bitbow 20-02-2017 20:13:10

cuando pones el showmessage si se detiene la ejecucion o solo el programa se queda en espera?

Y por pura casualidad, se tienen dos modos de ejecucion (hay dos botones de play), a cual le estas dando?

Saludos.

AgustinOrtu 20-02-2017 23:36:42

1. Abri el archivo de codigo fuente (.pas) en algun editor de texto (ej Notepad++)
2. Converti los "fin de linea" (si, asi les digo yo) a formato UNIX (CR)
3. Converti los "fin de linea" a formato Windows/MS-DOS (CRLF)
4. Elimina los dcu de tu proyecto
5. Build all (Shift+F9)
6. Intenta depurar

Los pasos 2 y 3 hacelos aunque el Notepadd++ te marque que el fin de linea este en formato Windows. Tambien es sano revisar que el encoding del archivo (no recuerdo cual era el bueno para el editor de Delphi, mis archivos .pas estan en ANSI)

Testimonios :D

https://plus.google.com/+MarcoCirinei/posts/HYkiV1dgyvE
https://plus.google.com/+MarcoCirinei/posts/5Jg7i2Ksiay

Reasen 21-02-2017 07:33:17

Para debuguear yo uso CodeSite, me resulta mucho mas practico que estar usando breakpoints...

Neftali [Germán.Estévez] 21-02-2017 10:01:47

A veces ayuda utilizar la opción "Clean" antes del "Build" del proyecto.

Otra recomendación (al menos yo lo uso) es utilizar OutputDebugString en lugar de los ShowMessage ayudándonos luego de una herramienta como DebugView de SysInternals. Hay otras similares.

Casimiro Notevi 21-02-2017 10:04:24

Cita:

Empezado por Casimiro Notevi (Mensaje 513507)
Ese comportamiento es así, de siempre, en todas las versiones de delphi.

¿Pero has leido bien la pregunta? en qué estarías pensando :confused:

newtron 21-02-2017 12:19:02

Gracias a todos por vuestros comentarios.

He editado con notepad y guardado (por si acaso) el .pas, he borrado el .dcu, le he dado a Build y nada. Pero no sé si me he explicado correctamente, lo único que quiero es que si pongo un punto de interrupción (de los de toda la vida) se pare y no lo hace. Sólo lo hace si antes pongo un showmessage o un application.processmessage y eso no lo veo normal.

No sé, igual es algo de configuración y por eso preguntaba pero no me gustaría en principio tener que echar mano de otras herramientas porque no las echo en falta ahora mismo.

Saludos

Casimiro Notevi 21-02-2017 13:00:36

Cita:

Empezado por Casimiro Notevi (Mensaje 513526)
¿Pero has leido bien la pregunta? en qué estarías pensando :confused:

Cita:

Empezado por newtron (Mensaje 513528)
Gracias a todos por vuestros comentarios.
He editado con notepad y guardado (por si acaso) el .pas, he borrado el .dcu, le he dado a Build y nada. Pero no sé si me he explicado correctamente, lo único que quiero es que si pongo un punto de interrupción (de los de toda la vida) se pare y no lo hace. Sólo lo hace si antes pongo un showmessage o un application.processmessage y eso no lo veo normal.
No sé, igual es algo de configuración y por eso preguntaba pero no me gustaría en principio tener que echar mano de otras herramientas porque no las echo en falta ahora mismo.
Saludos

Entonces va a ser que mi comentario es correcto.
Cita:

Ese comportamiento es así, de siempre, en todas las versiones de delphi.

newtron 21-02-2017 13:04:49

Cita:

Empezado por Casimiro Notevi (Mensaje 513530)
Entonces va a ser que mi comentario es correcto.

No lo creo, ¿es correcto que si pones un punto de interrupción no se pare?

Casimiro Notevi 21-02-2017 13:08:20

Cita:

Empezado por newtron (Mensaje 513531)
No lo creo, ¿es correcto que si pones un punto de interrupción no se pare?

Sí, así es, si el compilador ha decidido que esa línea de código no sirve para nada, por lo que pasa de ella.
Si pones un showmessage después entonces él piensa "pues sí sirve", así que se detiene en el breakpoint.

newtron 21-02-2017 13:17:16

Cita:

Empezado por Casimiro Notevi (Mensaje 513532)
Sí, así es, si el compilador ha decidido que esa línea de código no sirve para nada, por lo que pasa de ella.
Si pones un showmessage después entonces él piensa "pues sí sirve", así que se detiene en el breakpoint.

Hasta ahí estamos de acuerdo pero son líneas que si que sirven.

AgustinOrtu 21-02-2017 13:22:52

Mí comentario anterior es por un problema que me jodió un tiempo, que provocaba un desfase entre el número de línea de código "a la vista" y el número que ve el compilador y el depurador. Entonces al marcar una línea con un breakpoint en realidad marcas otra o incluso a veces nada

Por casualidad es código compilado en línea? (Es decir, con la directiva "inline"). El código en línea puede ser muy difícil de depurar

Quizá haya un problema en las opciones del proyecto (estas compilando bajo la configuración Debug?)

Cuando pones el breakpoint, resalta en verde la línea de código? Si es el caso tiene razón Casimiro, tú código fue eliminado del ejecutable

newtron 21-02-2017 13:25:14

Cita:

Empezado por AgustinOrtu (Mensaje 513537)
Mí comentario anterior es por un problema que me jodió un tiempo, que provocaba un desfase entre el número de línea de código "a la vista" y el número que ve el compilador y el depurador. Entonces al marcar una línea con un breakpoint en realidad marcas otra o incluso a veces nada

Por casualidad es código compilado en línea? (Es decir, con la directiva "inline"). El código en línea puede ser muy difícil de depurar

Quizá haya un problema en las opciones del proyecto (estas compilando bajo la configuración Debug?)

Cuando pones el breakpoint, resalta en verde la línea de código? Si es el caso tiene razón Casimiro, tú código fue eliminado del ejecutable

Cuando pongo el breakpoint se pone en rojo, es decir, que debe de parar. En el mismo proyecto en Delphi 2007 no tengo ese problema, pongo un breakpoint en la misma linea de la misma unidad y se para. ¿Eso de la configuración debug a qué te refieres?

AgustinOrtu 21-02-2017 13:27:53

Esto

http://docwiki.embarcadero.com/RADSt...tions_Overview

newtron 21-02-2017 17:37:02

Hola de nuevo.

He modificado el parámetro Project-Options-Delphi Compiler-Compiling-Optimization a "false", estaba a "true" y ahora si que se para donde le marco.

Gracias a todos.

Casimiro Notevi 21-02-2017 17:47:38

Cita:

Empezado por newtron (Mensaje 513546)
He modificado el parámetro Project-Options-Delphi Compiler-Compiling-Optimization a "false", estaba a "true" y ahora si que se para donde le marco.

Eso es lo que indicaba antes, la optimización que hace el compilador.

newtron 21-02-2017 18:13:16

Cita:

Empezado por Casimiro Notevi (Mensaje 513547)
Eso es lo que indicaba antes, la optimización que hace el compilador.

Negativo, tú has comentado antes sobre lineas de código que el compilador decide que no sirven para nada. Esto es otra cosa. :p


La franja horaria es GMT +2. Ahora son las 01:12:16.

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