2010-11-05 34 views
6

A veces, como estoy depurando paso a paso, justo antes de un evento FormCreate o justo después de FromDestroy, el depurador comienza a abrir unidades DevExpress (cxContainer.pas, ...) y antes de que FormCreate mi "F8" me lleve a cxContainer en lugar de ir a la siguiente línea de mi código.Delphi: cómo excluir unidades del depurador?

(esto es sólo un ejemplo, puede suceder, por supuesto, con cualquier biblioteca de tercera parte)

¿Cómo le digo al depurador "depuración sólo mis unidades" (sólo los archivos pas figuran en el archivo DPR?)

Por supuesto, a veces es útil depurar bibliotecas, pero en la mayoría de los casos no lo es.

+1

Véase también [¿Cómo omitir secciones de código durante la depuración?] (Http://stackoverflow.com/questions/449159/in-delphi-how-to-skip-sections-of-code-while-debugging) –

Respuesta

25

Será mejor que siga la convención VCL para sus componentes de terceros:

  • ruta de salida Cambio DCU en todos los paquetes de terceros a una carpeta diferente a la carpeta que almacena los archivos de PAS.
  • Compile cada paquete una vez en modo Depuración y guarde los archivos DCU generados en una carpeta (por ejemplo, Debug DCU).
  • Vuelva a compilar cada paquete, pero esta vez en modo Release, y guarde los archivos DCU generados en una carpeta (por ejemplo, Release DCUs).
  • Vaya a las opciones de Delphi y agregue la ruta de liberación de las DCU a "Ruta de la biblioteca".
  • En las opciones Delphi, agregue la ruta de los archivos fuente a "Ruta de navegación".
  • En las opciones Delphi, agregue la ruta de las DCU de depuración a "Debug DCU path".

De esta forma, Delphi solo verá las DCU de lanzamiento de ese componente de terceros cuando esté compilando su proyecto, por lo que el depurador no puede ingresar al código fuente. Por otro lado, como la ruta de origen está incluida en "Ruta de navegación", puede navegar hasta el código fuente dentro de IDE haciendo Ctrl + clic en el nombre de la unidad, o cualquier cosa definida en esas unidades.

Si desea depurar componente, puede ir a "Proyecto | Opciones | Compilador Delphi | Compilación", y habilitar "Usar depuración .dcus". Esto obligará al compilador a usar "Debug DCU path" en lugar de "Library path".

VCL funciona igual, generalmente no entra en el código fuente de VCL cuando depura su proyecto, pero si habilita "Usar depuración .dcus" también puede depurar el código fuente de VCL.

JVCL también organiza sus paquetes y código fuente de la misma manera.

EDIT: Si tiene este enfoque, y desea tener código de navegación (Ctrl + clic) funcionando; tenga en cuenta que cuando compile la versión de lanzamiento de los paquetes, debe establecer la Información de referencia de símbolos en "Proyecto | Opciones | Compilador Delphi | Compilación" en "Información de referencia"; de lo contrario, Ctrl + clic no funcionará para esas unidades. De forma predeterminada, la configuración de versión de lanzamiento establece la información de referencia del símbolo en Ninguno.

+0

+1 Respuesta muy completa. Y aprendí un truco sabido. Había visto la ruta de depuración dcu, pero no había "hecho clic" en cómo hacer un buen uso de ella. Gracias por eso. Solo un inconveniente que veo: "use debug dcu's" ahora significa que usará debug dcu para todas sus bibliotecas cuando a menudo solo tiene una que desea depurar. En ese caso, a menudo es más práctico simplemente cambiar la ruta de acceso de la biblioteca para apuntar a la carpeta de depuración dcu para esa biblioteca sola ... –

+0

Puede esperar que un Desarrollador que usa Delphi durante los últimos 10 años sepa esto, pero yo para uno no.

1

Desactive la información de depuración en las unidades en las que no desea que ingrese el depurador.

+0

Se agregó para evitar que otros vean esto como lo acabo de hacer: esto se puede hacer con la directiva de compilación {$ D-} en las unidades que no desea depurar. – RobertFrank

2

Hay una sola forma de decirle al compilador que no depure una unidad: compilarla sin información de depuración.

Si tiene el origen para sus bibliotecas, puede reconstruir su paquete después de haber desactivado la opción del compilador "incluir información de depuración" para cada paquete en la biblioteca. Si tiene suerte, sus bibliotecas incluirán un archivo .inc que especifica las opciones de compilación que necesitan y que incluyen en cada unidad. En ese caso, todo lo que tiene que hacer es editar este archivo inc y reconstruir todos los paquetes.

Si no tiene el origen para sus bibliotecas, los creadores de la biblioteca pueden haber proporcionado dos conjuntos de dcu: uno compilado y el otro sin información de depuración. En ese caso, simplemente señale la ruta de acceso de su biblioteca a la que necesita.

2

Una solución rápida y simple es deshabilitar el interruptor DEPURAR ({$ D-}) para cualquier biblioteca que esté utilizando. Muchas bibliotecas (incluido DevExpress) utilizan un archivo de inclusión global, generalmente en la parte superior de cada archivo fuente, o bien encima o debajo de la declaración de "unidad" (por ejemplo, unidad cxContainer; {$ I cxVer.inc}). Abre ese archivo incluido (haz clic en él y presiona CTRL-Intro) y agrega {$ D-} en la parte superior y comenta cualquier existente {$ D +}.

Cuestiones relacionadas