Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi DLL debuggen - nur noch CPU-Haltepunkte? (https://www.delphipraxis.net/143786-dll-debuggen-nur-noch-cpu-haltepunkte.html)

MarioM. 23. Nov 2009 14:58


DLL debuggen - nur noch CPU-Haltepunkte?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

ich möchte eine DLL debuggen, und habe dazu die Anwendung, die die DLL benutzt als Host-Anwendung eingetragen und (gültige!) Haltepunkte an diversen markanten Stellen in meiner DLL gesetzt. Die Host-Anwendung startet auch, allerdings bleibt der Debugger nicht an den von mir definierten Haltepunkten stehen. Stattdessen öffnet sich das CPU-Fenster und zeigt dort irgendeinen Haltepunkt an, mit dessen Daten ich nichts anfangen kann.

Ein Haltepunkt ist in der initialen Methode gesetzt; zumindest der müsste auf jeden Fall angesprungen werden.
Ich weiß auch, dass die DLL durchlaufen wird, da ich am Ende Logausgaben mache, die dann auch tatsächlich vorhanden sind.

Das Ganze hat bisher immer super funktioniert. Heute habe ich allerdings ziemlich große Änderungen am Quelltext vorgenommen, allerdings keine, wo ich jetzt einen direkten Zusammenhang sehe.

Im Projekt ist der Schalter 'Debug-Informationen', und in den Delphi-Optionen 'Integriertes Debuggen' aktiviert.

Ich habe auch schon ein komplettes Build der DLL gemacht, neu gestartet usw. aber nichts hilft.

Andere Projekte (auch DLLs) Lassen sich übrigens problemlos debuggen.

Hat jemand eine Idee?

Edit: habe gerade mal alle heute gemachten Änderungen rückgängig gemacht und auch uralte Versionsstände des Projektes getestet; es funktioniert aber noch immer nicht. Es kann also nicht an den heutigen Änderungen liegen.

Edit2: Habe mal einen Screenshot beigefügt - da bleibts stehen.

himitsu 23. Nov 2009 15:24

Re: DLL debuggen - nur noch CPU-Haltepunkte?
 
Mach dort mal ein F7 und schau dann wohin zurückgesprungen wird.

INT 3 = Interupt 3 aka hardcodierter Debugbreakpoint
RET = Rücksprung am z.B. Ende einer Funktion


Wie wird die DLL geladen?
statisch oder dynamisch

MarioM. 23. Nov 2009 15:47

Re: DLL debuggen - nur noch CPU-Haltepunkte?
 
Der wühlt irgendwie die ganze Zeit in der ntdll.dll rum. Das hat er wie gesagt vorher nie gemacht.
Die DLL wird dynamisch geladen.

Ich weiß echt nicht mehr weiter :(

Die Muhkuh 23. Nov 2009 16:42

Re: DLL debuggen - nur noch CPU-Haltepunkte?
 
http://www.delphipraxis.net/internal...ighlight=patch

MarioM. 24. Nov 2009 08:16

Re: DLL debuggen - nur noch CPU-Haltepunkte?
 
Hallo,

das ist mir bekannt. Das Problem ist aber nicht, dass er in der ntdll.dlll hängen bleibt, wenn er trotzdem meine Haltepunkte auch berücksichtigen würde :(

Hat niemand mehr eine Idee?

himitsu 24. Nov 2009 08:25

Re: DLL debuggen - nur noch CPU-Haltepunkte?
 
Hmmmmm :gruebel:


im Notfall kannst du selber dieser "Haltepunkte" einprogrammieren

Delphi-Quellcode:
ASM INT 3 End;
an der gewünschten Stelle einfügen und neu kompilieren


Schau mal was passiert, wenn du diesen "irgendwo" einfügst.
Wenn er dort hält und es ebenfalls im CPU-Fenster passiert, dann ins Code-Fenster wechseln und dort ein F7 probieren.

Werden eigentlich diese blauen Pünktchen im Code-Fenster angezeigt, oder sind diese ausgegraut?

MarioM. 24. Nov 2009 08:51

Re: DLL debuggen - nur noch CPU-Haltepunkte?
 
Danke für den Tipp. Ich werde mal schauen, wie ich weiterkomme. Ist schon sehr mysterös...

Edit: die blauen Punkte werden angezeigt.

MarioM. 24. Nov 2009 16:04

Re: DLL debuggen - nur noch CPU-Haltepunkte?
 
Zitat:

Zitat von himitsu
Hmmmmm :gruebel:


im Notfall kannst du selber dieser "Haltepunkte" einprogrammieren

Delphi-Quellcode:
ASM INT 3 End;
an der gewünschten Stelle einfügen und neu kompilieren


Schau mal was passiert, wenn du diesen "irgendwo" einfügst.
Wenn er dort hält und es ebenfalls im CPU-Fenster passiert, dann ins Code-Fenster wechseln und dort ein F7 probieren.
?

Eine Neuinstallation von Delphi hat nun leider auch nichts gebracht :(

Ich habe das mit dem fest einprogrammierten Haltepunkt mal versucht, und der Debugger hält auch an; allerdings passiert auch das, wie Du schon vermutet hast, im CPU-Fenster. Ein Wechsel ins Code-Fenster und Drücken von F7 bewirkt lediglich, dass wieder ins CPU-Fenster gesprungen und dort ein Schritt weiter gegangen wird.

Ich bin echt am Ende, da soviel Arbeitszeit mit diesem Mist draufgeht :(

christophspaeth 9. Dez 2009 15:12

Re: DLL debuggen - nur noch CPU-Haltepunkte?
 
Hallo,

ich hatte auch gerade dieses Verhalten beim debuggen einer dll (in meinem Fall eine COM-dll, die von der MMC verwendet wird) in einem neuen branch (noch keine Änderung, also gleicher Code, gleiche Projektsettings wie im trunk). In trunk funktionierte das debuggen nach wie vor einwandfrei.
Der einzige Unterschied: in der Arbeitskopie vom branch waren Leerzeichen. Diese durch _ ersetzen und auch im branch funktioniert debuggen wieder so wie es soll. Wobei ich mir sicher bin, dass das Debuggen früher in anderen ddls funktioniert, die auch Leerzeichen im Pfad haben - jetzt zeigt sich dort selbens Verhalten. Kann aber gut sein, dass ich dort das letzte mal noch unter Windows XP debuggt habe, jetzt verwende ich Win 7.

Ach ja: Ich verwende Delphi 2006

Ich stelle also mal die kühne Behauptung auf: Windows 7 (+ Delphi 2006?) + Leerzeichen im Pfad -> Debugger hat Probleme bei DLLs. Kann das jemand bestätigen oder wiederlegen?

Grüße,
Chris

MarioM. 10. Dez 2009 10:37

Re: DLL debuggen - nur noch CPU-Haltepunkte?
 
Hallo,

ich verwende Delphi 2007 unter Windows XP, und der Pfad, in dem sich die DLL befindet, sowie der Dateiname selber, enthalten natürlich keine Leerzeichen (sollte man die als Entwickler nicht generell meiden? ;)), sondern ausschliesslich Unterstriche.

Edit: ich habe eine simple Exe erstellt, die die DLL anstelle der eigentlichen Exe lädt, und damit funktioniert es. MUss also in meinem Fall irgendetwas mit dem ladenden Projekt zu tun haben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:23 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz