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

Casimiro Notevi 21-02-2017 18:47:09

Cita:

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

Es lo mismo, ya sabes que yo nunca me equivoco :p:p:p

newtron 21-02-2017 18:54:32

Pues mi gozo en un pozo.

He cerrado Delphi, lo he vuelto a abrir para probar (tonterías mías) y ya no se para en el mismo sitio que antes si y con la misma opción modificada.

Sigo mirando.....

AgustinOrtu 21-02-2017 19:00:49

Cuando migraste, abriste directamente el proyecto existente? Yo te recomendaría que lo crees nuevamente, es decir, nueva aplicación Vcl y luego agregas todas las unidades

newtron 21-02-2017 19:13:48

No es tema del proyecto.

He probado a crear un nuevo proyecto, he insertado un "Label" y he puesto el siguiente código:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  Label1.Caption :='HOLA';  // Aquí pongo un breakpoint
end;

Y no se para.

Sin embargo pongo el siguiente código:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowMessage('hola');
  Label1.Caption :='HOLA';  // Aquí pongo un breakpoint
end;

con el breakpoint en el mismo sitio, visualiza el showmessage y después se para en el breakpoint.... amiquemeloxpliquen....

AgustinOrtu 21-02-2017 19:18:25

De lo que estoy seguro es de que no es un problema de Berlín porque yo lo uso y además se hubiese hecho eco en los foros. Es imposible programar sin el depurador. Yo intentaría la tediosa tarea de reinstalar

Casimiro Notevi 21-02-2017 19:29:30

Debe ser configuración, he probado en un delphi 2007 y no se detiene si no está el showmessage antes. Y en un delphi 6 se detiene siempre.

newtron 21-02-2017 19:33:31

Cita:

Empezado por AgustinOrtu (Mensaje 513555)
De lo que estoy seguro es de que no es un problema de Berlín porque yo lo uso y además se hubiese hecho eco en los foros. Es imposible programar sin el depurador. Yo intentaría la tediosa tarea de reinstalar

Ya lo había pensado pero eso ya me pasaba en el update 1 y no le di mucha importancia porque no lo estaba casi usando. Antes de empezar "en serio" desinstalé el update 1 para instalar el update 2 (según la web de embarcadero) y se comporta de la misma manera. Estoy de acuerdo en que no será problema de Delphi, que será de la configuración pero tampoco he tocado gran cosa de la configuración general aparte de los colores del editor y poco más.

¿Tú has cambiado algo de la configuración de Project-Options? En ese caso... ¿podrías pasarme un pantallazo de tu configuración a ver si hay algo que yo no haya (o si) tocado? (Sobre todo las opciones de Delphi Compiling-Compiling)

Gracias

newtron 21-02-2017 19:46:52

Cita:

Empezado por Casimiro Notevi (Mensaje 513556)
Debe ser configuración, he probado en un delphi 2007 y no se detiene si no está el showmessage antes. Y en un delphi 6 se detiene siempre.

Imagino que no tendrás un Delphi Berlín a mano para probar ¿no? :rolleyes:

roman 21-02-2017 20:16:27

Cita:

Empezado por newtron (Mensaje 513559)
Imagino que no tendrás un Delphi Berlín a mano para probar ¿no? :rolleyes:

Yo sí tengo uno, el gratuito y puedo corroborar que hace lo que se le da la gana. A veces para, a veces no, sin cambiar nada en las opciones. Por ejemplo, pongo como tú

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowMessage('hola');
  Label1.Caption :='HOLA';  // Aquí pongo un breakpoint
end;

y para. Luego comento la línea previa:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  // ShowMessage('hola');
  Label1.Caption :='HOLA';  // Aquí pongo un breakpoint
end;

y para. Borro algunos caracteres:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  // ShowMessage('ho
  Label1.Caption :='HOLA';  // Aquí pongo un breakpoint
end;

y no para.

:eek:

Si esto no es un bug entonces estoy mas oxidado de lo que pensaba.

LineComment Saludos

roman 21-02-2017 20:25:56

Mmm. Igual y sí estoy oxidado. ¿Cómo ejecutas la aplicación? Si lo haces con el botón del triángulo verde grandote, no se va a detener. Si lo haces con el de la derecha, sí lo hace,.

LineComment Saludos

roman 21-02-2017 20:28:29

Veo que bitbow ya lo había mencionado :o

Cita:

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

LineComment Saludos

newtron 21-02-2017 20:33:02

:eek::eek::eek: arggggggggggggghhhhhhhhhhhhhhhhhhhhhhh es verdadddddddddddddddd.... Lo había comentado bitbow pero yo estaba pensando en qué era eso del "play"... si era un cassette o qué.... (estoy tonto) :rolleyes::rolleyes:

Lleváis razón... el puñetero botón más grande pone en el hint "Run without debugging" y en el otro más pequeñito "Run" pero claro... se me va el ratón a "lo gordo" :D:D

Gracias a todos.

Edito: Voy a enviarle un correo al sr.embarcadero para que quite el botón gordo.

AgustinOrtu 21-02-2017 20:59:43

Yo no logro reproducirlo. También tengo el Delphi starter Update 2. Use un poco el Delphi Berlín sin Update y lo mismo, nunca vi algo semejante. Insisto en que si algo como esto qué es tan elemental no funcionara se hubiese hecho eco en los foros oficiales en donde hay bastante gente que usa las últimas versiones en producción

Cuando pueda poner mis manos en el PC te envío una captura, pero es la por defecto.

El depurador se está enganchando a tú proceso? Debería activarse el debug layout en Delphi, entre otras cosas. Visualmente el IDE cambia cuando estas depurando, a simple vista se nota fácilmente. Te adjuntare una captura de esto también

Mientras tanto lo que te comentan de lanzar la aplicacion con f9 es correcto. Creo que fue en Delphi xe cuándo cambiaron el botón de run. Antes lanzaba el run con el depurador; ahora lanza la aplicación sin el depurador. Al lado hay otro botón que hace lo que hacía el run antes

Podrías probar lanzar la aplicación con f7 u f8, a ver si lanzando la aplicación y siguiendo la ejecución desde el principio podes llegar al Punto de ruptura

Otra prueba que podes hacer es lanzar una excepción y ver qué pasa si le das a break

Edito: llegue tarde :)

roman 21-02-2017 21:16:24

Cita:

Empezado por AgustinOrtu (Mensaje 513566)
Podrías probar lanzar la aplicación con f7 u f8, a ver si lanzando la aplicación y siguiendo la ejecución desde el principio podes llegar al Punto de ruptura

Así sí para aún con el botón de "run sin debug", lo cual suena lógico, esto es, una vez en modo depuración ya se queda ahi.

LineComment Saludos

Casimiro Notevi 21-02-2017 21:17:52

Y poniendo el cursor en la línea que no se detiene y pulsando F4, ¿tampoco se detiene?

roman 21-02-2017 21:22:38

Sí se detiene. Realmente el problema estaba en lo del botón que usaba para ejecutar.

LineComment Saludos

AgustinOrtu 21-02-2017 21:26:54

El tema es el siguiente, cuando inicias con el "run withouth debugging" el depurador no se "engancha" al proceso y por lo tanto no hay depuracion integrada (no hay watches, ni breakpoints, ni ninguna caracteristica de depuracion interactiva). Osea hablando claro, este boton lo que hace es "ejecutar el exe" y nada mas.

Si se quiere se puede enganchar el depurador a un proceso ya iniciado utilizando esto

Tambien recorda que la barra de herramientas es personalizable y podes cambiar/agregar/quitar los botones que se te den la gana (click derecho --> customize)


La franja horaria es GMT +2. Ahora son las 11:22:46.

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