Autor Beitrag
rochus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416

Win XP Prof, Fedora Core 4, SuSE 7.0
D7 Ent, D2005 Pers
BeitragVerfasst: Do 11.08.05 13:51 
Tipps&Tricks zum Debuggen einer DLL
Nachdem ich jetzt mehrmals daran gescheitert bin, eine DLL zu debuggen, dies aber Zwingend notwendig war, hab ich mich auf die Suche nach einer Lösung gemacht. Ich hab mich durch die Borland Newsgroups gelesen und dabei immer wieder gelesen, dass die Startaddresse der DLL >$40000000 sein muss, dass man alle Debug Infos anschalten muss, dass die DLL im gleichen Verzeichnis wie die EXE sein muss, dass alle DCU Pfade in den Suchpfaden eingetragen sein müssen, dass das Ausgabeverzeichnis das selbe sein muss wie der Quelltext und so weiter. Dennoch bestand das Problem, dass ich jedesmal aufs neue Hoffen musste, dass ich zu meinen Haltepunkten komme, denn das ist ziemlich zufällig, ob es klappt oder nicht. Selbstverständlich war das nicht zufriedenstellend und dann hab ich ein wenig rumgespielt und eine Lösung gefunden, die jedesmal funktioniert hat.

Man benötigt dazu:
- das DLL Projekt
- eine kleine Testanwendung, welche die DLL lädt und die Prozeduren aufruft (per Buttonclick oder wie man das gerne hätte).

Ausgabeverzeichnisse der DLL können sein, wie man es gerne hat. Ich bevorzuge immer einen Ordner "src" für den Quelltext und einen ordner "bin" für die binärdaten, wobei DCUs nach "bin/dcu" geschoben werden. Insgesamt ergibt sich z.B. folgendes:
ausblenden Quelltext
1:
2:
3:
4:
/DLL/src/       -> DLL Quelltext
/DLL/bin/       -> DLL Ausgabe
/DLL/bin/dcu/   -> DCU Dateien
/TestApp/       -> Kleines Testprogramm

In meinem Beispiel muss man in der Headerdatei (die das Testprogramm ja braucht) einfach nur auf "\..\DLL\bin\meinedll.dll" verweisen (Statt eventuell "\plugins\meinedll.dll" oder sowas!

Jetzt muss alles geschlossen werden (Datei->Alles schließen), dann das TestApp aufmachen, dann in die Projektverwaltung (Ansicht->Projektverwaltung oder STRG+ALT+F11). Da erscheint jetzt das TestApp. Per Rechtsklick auf die Verwaltung wählt man "Existierendes Hinzufügen" aus und wählt das DLL Projekt aus. Jetzt geht man auf Alles speichern, speichert die Projektgruppe ab (z.B. unter /Debug/). Jetzt setzt man in den DLL units die Haltepunkte, wählt in der Projektverwaltung das TestApp als aktives Programm und startet ganz normal. Siehe da, die Haltepunkte sind aktiv!

In der DLL ist es nicht nötig, folgende Einstellungen zu treffen:
TD32 Informationen
Externe Debugsymbole
Hostanwendung
Wie gesagt, das ist nicht notwendig.

Wenn man die Testumgebung startet und die Haltepunkte gesetzt hat, kann es sein, dass diese mit dem 'x' auftauchen, sprich als ungültig. Das ist egal, denn sobald die DLL dann geladen ist bzw. die entsprechende Stelle in der DLL geladen wird, sind die Punkte gültig!


Moderiert von user profile iconChristian S.: Topic aus Programmierwerkzeuge verschoben am Mi 31.08.2005 um 15:52

_________________
Im Nachhinein ist man immer ein Schlauch!
"Dream as if you'll live forever, live as if you'll die today!" James Dean


Zuletzt bearbeitet von rochus am Di 27.12.05 16:07, insgesamt 1-mal bearbeitet