Benutzer mit den meisten Antworten
Debuggen eines DLL-Projekts

Frage
-
Hallo zusammen,
ich habe ein VisualStudio-2003-Projekt, welches ich als Intel-Fortran-DLL-Projekt angelegt habe. Nun möchte ich es natürlich auch debuggen können. Zum testweisen Aufruf habe ich ein weiteres Fortran-Projekt angelegt, diesmal als Konsolenanwendung (.exe), welches das DLL-Projekt aufruft. Das geschieht auch, doch ich kann im DLL-Projekt nicht debuggen, obwohl dort entsprechender Quellcode vorhanden ist. Wenn ich das DLL-Projekt debuggen möchte, bekomme ich diese Meldung: "cannot debug because a debug target has not been specified". Debugge ich die Konsolenanwendung, springt der Debugger nicht in den DLL-Quellcode. Was kann ich tun?
Danke und viele Grüße,
Ralf
Antworten
-
1. Lädt Deine Exe überhaupt die DLL und existiert eine PDB Datei für diese DLL in dem Verzeichnis.
2. Beobachte mal das Debug Ausgabe Fenster ob die DLL überhaupt geladen und vor allem von wo sie geladen wird.
3. Menü Debug -> Attach to Process
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de- Als Antwort vorgeschlagen Martin RichterModerator Dienstag, 25. Mai 2010 20:01
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 26. Mai 2010 08:23
-
Deine Projekteinstellungen heben doch nicht die normale Suchfolge auf.Wenn Deine EXE nicht in dem DLL Verzeichnis liegt weiß Deine EXE dochnicht wo die DLL herkommt....
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de- Als Antwort vorgeschlagen Martin RichterModerator Dienstag, 25. Mai 2010 20:01
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 26. Mai 2010 08:23
Alle Antworten
-
Du kannst keine DLL alleine Debuggen. Du brauchst immer einen Prozess und damit eine EXE
Bei einer DLL gibt man in den Debug-Einstelungen eine EXE an, die Deine DLL benutzt und startet den Debugger. Die EXE liefert Dir also den Prozessrahmen zum debuggen.
Du musst also die Projekteinstellungen öffnen dort unter Debugging -> Command eine EXE angeben, die Deine DLL benutzt. Die EXE selbst muss keine Debug-Informationen haben. Es kann sogar Word sein oder sonst eine andere EXE.
Eine andere Variante ist es mit sich Attach to Process sich direkt an einen Prozess zu attachen, der auch Deine DLL nutzt oder nutzen wird.
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de -
Hallo Martin,
danke für die zügige Antwort.
Die aufrufende EXE habe ich eingetragen mit dem Effekt, dass ich jetzt zwar keine Fehlermeldung mehr erhalte im DLL-Projekt, doch an den Haltepunkten läuft der Debugger vorbei und beendet mit Code 0 (0x0).
Attach to Process finde ich gar nicht.
-- Gruß, Ralf -
1. Lädt Deine Exe überhaupt die DLL und existiert eine PDB Datei für diese DLL in dem Verzeichnis.
2. Beobachte mal das Debug Ausgabe Fenster ob die DLL überhaupt geladen und vor allem von wo sie geladen wird.
3. Menü Debug -> Attach to Process
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de- Als Antwort vorgeschlagen Martin RichterModerator Dienstag, 25. Mai 2010 20:01
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 26. Mai 2010 08:23
-
Hallo Martin,
1) Die PDB-Dateien sind in beiden .../Debug/-Verzeichnissen vorhanden.
2) "'DLLCaller.exe': 'C:\WINDOWS\T2D211Intel.dll' geladen, Keine Symbole geladen." Merkwürdig. Wieso im Windows-Verzeichnis? Im T2D211-Projekt (DLL) steht unter Linker-General-OutputFile "$(OUTDIR)/T2D211Intel.dll". Un dim DLLCaller steht nur die T2D211.lib hinterlegt bei Linker-Input-Additional Dependencies.
3) Muss ich mir bei Gelegenheit mal anschauen.
-- Gruß, Ralf -
Deine Projekteinstellungen heben doch nicht die normale Suchfolge auf.Wenn Deine EXE nicht in dem DLL Verzeichnis liegt weiß Deine EXE dochnicht wo die DLL herkommt....
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de- Als Antwort vorgeschlagen Martin RichterModerator Dienstag, 25. Mai 2010 20:01
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 26. Mai 2010 08:23
-
Ah OK, ich musste also die DLL in das EXE-Verzeichnis kopieren, dann gehts.
Für Fortgeschrittene: Nun werden in dem DLL-Projekt Subroutines aufgerufen, die nur als externe DLLs über DLLIMPORT eingebunden sind und ohne Quellen zur Verfügung stehen. Ich nehme an, dass ein Debuggen in diesen DLLs nicht auch noch möglich ist?!
-- Gruß, Ralf -
Für Fortgeschrittene: Nun werden in dem DLL-Projekt Subroutines aufgerufen, die nur als externe DLLs über DLLIMPORT eingebunden sind und ohne Quellen zur Verfügung stehen. Ich nehme an, dass ein Debuggen in diesen DLLs nicht auch noch möglich ist?!
Einzige Voraussetzung sind gültige PDB Dateien und die Sourcen im Zugriff.
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de -
Einzige Voraussetzung sind gültige PDB Dateien und die Sourcen im Zugriff.
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.deUnd genau da liegt ja das Problem - mit den nicht vorhandenen Sourcen. ;)
Müssen wir aber nicht weiter drauf eingehen, das ist (hoffentlich) unwichtig.
-- Gruß, Ralf