2012-01-24 13 views
5

Tuve un gran problema con los puntos de interrupción no afectados en una DLL Delphi 6 DirectShow. Cargaría el DLL (AX) en el IDE y lo ejecutaría con Graph Edit como el programa Host y no se activaría ninguno de los puntos de interrupción. Traté de mover la DLL de FastMM4 al directorio del proyecto, eliminé FastMM4 por completo, activé y desactivaba las DCU de depuración, limpiaba los directorios del proyecto, anulaba el registro y volvía a registrar la DLL, todo lo que podía pensar. Nada funcionó. Cada vez que ejecuté el programa de host, vi mi carga de DLL con el mensaje "Sin información de depuración" en el visor de eventos. Luego, en una desesperada búsqueda en Google me encontré con un post para C++ Builder que recomienda probar el "símbolos de depuración remota" opción del vinculador:Puntos de ruptura de DLL que no se golpean con la opción de "símbolos de depuración remota", ¿por qué y cualesquiera riesgos de seguridad con esos?

Proyecto -> Opciones -> Linker (Tab) -> exe y opciones DLL (cuadro de grupo) -> "Incluir los símbolos de depuración remota" (marcado)

De repente, mis puntos de ruptura comenzaron a ser afectados. Aquí están mis preguntas:

1) ¿Por qué funcionó esto? ¿Es por la opción o porque esta opción desencadenó alguna otra operación del Compilador/Enlazador que corrigió las cosas? Me gustaría saber para poder solucionar este problema de manera confiable en el futuro cuando vuelva a suceder.

2) ¿Son los símbolos de depuración remota algo que un programador hostil podría usar para rastrear profundamente mi programa? En otras palabras, ¿son un riesgo de seguridad si se los deja tirados?

+0

No luches, publica el código fuente. – OnTheFly

+0

¿Qué versión de Delphi? Los Delphis antiguos no son tan buenos para depurar archivos DLL. A veces he encontrado necesario colocar el host exe en la misma carpeta que el DLL. Sin duda, debería ser suficiente compilar el archivo DLL con opciones de depuración estándar. No hay necesidad de símbolos remotos. –

+0

@DavidHeffernan. Delphi 6. –

Respuesta

5

1) Fue por la opción. Sin la información del símbolo de depuración, su IDE no tiene idea de dónde establecer sus puntos de interrupción. Las DCU de depuración no tienen nada que ver: los enlaces de la opción en un conjunto diferente de DCU de VCL que contienen información de depuración para que pueda establecer puntos de interrupción. Consejo útil: dependiendo de la versión de Delphi, esas DCU no están, de hecho, siempre sincronizadas con sus símbolos de depuración.

2) Los símbolos de depuración/archivos de mapas no deberían salir en un lanzamiento, especialmente si la información manejada por el programa es sensible de alguna manera. Esto se aplica a cualquier lenguaje de programación.

Si necesita la capacidad de diagnosticar su software después de su lanzamiento, incorpore la excepción, el error y el manejo de aserciones que le brinda suficiente información para clasificar errores de un registro.

+0

Pero todos mis otros proyectos funcionan sin los símbolos de depuración * remote *. Tengo símbolos de depuración ("información de depuración") incluidos con ellos, pero no símbolos de depuración remota, que es lo que hace funcionar las cosas para la DLL. Además, ¿puedo inferir de su respuesta que las herramientas como MadExcept y el seguimiento de la pila JVCL * * no dependen de que los símbolos de depuración estén presentes? Preferiría lanzar mi código con los símbolos JCCL stack trace (JDBG) incluidos para poder obtener un seguimiento de la pila con mis excepciones cuando ocurra una excepción. –

+1

Esto no parece responder a la pregunta. Sin duda, es posible depurar archivos DLL sin símbolos remotos de depuración. –

Cuestiones relacionadas