2012-01-24 22 views
5

Ho avuto un grosso problema con i punti di interruzione che non venivano colpiti in una DLL DirectShow di Delphi 6. Caricare la DLL (AX) nell'IDE e eseguirlo con Graph Edit come programma Host e nessuno dei breakpoint si innescherebbe. Ho provato a spostare la DLL di FastMM4 nella directory del progetto, a rimuovere completamente FastMM4, a attivare e disattivare le DCU di debug, a pulire le directory di progetto, annullare la registrazione e registrare nuovamente la DLL, tutto ciò a cui riuscivo a pensare. Niente ha funzionato Ogni volta che eseguivo il programma host, vedevo la mia DLL caricare con il messaggio "Nessuna informazione di debug" nel visualizzatore eventi. Poi in una disperata ricerca su Google ho trovato un post per C++ Builder che raccomanda provare l'opzione del linker "simboli di debug remoto":I punti di interruzione DLL non vengono colpiti con l'opzione "simboli di debug remoto", perché e tutti i rischi per la sicurezza con quelli?

Progetto -> Opzioni -> Linker (Tab) -> Exe e le opzioni di DLL (casella di gruppo) -> "includere simboli di debug remoto" (controllato)

Improvvisamente i miei punti di interruzione iniziato essere colpito. Ecco le mie domande:

1) Perché ha funzionato? È a causa dell'opzione o perché questa opzione ha attivato qualche altra operazione Compiler/Linker che ha risolto le cose? Mi piacerebbe sapere in modo che possa risolvere questo problema in modo affidabile in futuro, quando accadrà di nuovo.

2) I simboli di debug remoto possono essere utilizzati da un programmatore ostile per tracciare in profondità il mio programma? In altre parole, sono un rischio per la sicurezza se lasciati in giro?

+0

Non lotta, pubblica il codice sorgente. – OnTheFly

+0

Quale versione di Delphi? I Delphis meno recenti non sono così bravi nel debugging delle DLL. A volte ho trovato necessario mettere l'host exe nella stessa cartella della DLL. Certamente dovrebbe essere sufficiente compilare la DLL con le opzioni di debug standard. Non c'è bisogno di simboli remoti. –

+0

@DavidHeffernan. Delphi 6. –

risposta

5

1) Era a causa dell'opzione. Senza le informazioni sul simbolo di debug, l'IDE non ha idea di dove impostare i punti di interruzione. Il debug delle DCU non ha nulla a che fare con esso: quell'opzione collega in un diverso set di DCU VCL che contengono informazioni di debug in modo da poter impostare i breakpoint. Suggerimento utile: a seconda della versione di Delphi, quelle DCU non sono, infatti, sempre sincronizzate con i loro simboli di debug.

2) I simboli di debug/file di mappa non dovrebbero uscire in una versione, specialmente se le informazioni gestite dal programma sono sensibili in alcun modo. Questo vale per qualsiasi linguaggio di programmazione.

Se è necessaria la capacità di diagnosticare il software dopo il rilascio, incorporare l'eccezione, l'errore e la gestione dell'asserzione che fornisce informazioni sufficienti per il rilevamento dei bug da un registro.

+0

Ma tutti i miei altri progetti funzionano senza i simboli * debug * remoti. Dispongo di simboli di debug ("informazioni di debug") inclusi in essi, ma non di simboli di debug remoti, che è ciò che ha fatto funzionare le cose per la DLL. Inoltre, posso dedurre dalla tua risposta che strumenti come MadExcept e la traccia dello stack JVCL sono * non * dipendenti dai simboli di debug presenti allora? Preferirei rilasciare il mio codice con i simboli JVCL stack trace (JDBG) inclusi così posso ottenere una traccia stack con le mie eccezioni quando si verifica un'eccezione. –

+1

Questo non sembra rispondere alla domanda. È certamente possibile eseguire il debug delle DLL senza simboli di debug remoto. –