Announcement

Collapse
No announcement yet.

Delphi 6 - Windows XP - Dll's debuggen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Delphi 6 - Windows XP - Dll's debuggen

    Hallo,

    ich habe zur Zeit folgendes Problem beim Debuggen von Dll's mit Delphi 6 unter Windows XP Professional.

    Für eine Anwendung wurde eine Dll geschrieben, die einige Funktionen auslagert um den Source Code der Anwendung zu minimieren. Desweiteren wird die Dll von einigen C++ Dll's verwendet, um eine Schnittstelle zwischen Delphi und C++ zu erhalten (hierzu verwenden wir auch ein eigens entwickeltes "COM", das als Basis das Star Office IDL/OM verwendet, COM kompatibel). Aber das ist eigentlich nicht so wichtig.

    Die Dll exportiert einige Funktionen einfach via stdcall in Ihrer exports Klausel. Diese Funktionen sind "Standard", wie z.B. function Add(a,b : Double) : Double; stdcall;...
    Die Funktionen werden mit Hilfe von Prototypen (type foo=function(...): result; stdcall; var ffoo : foo) in der Host Anwendung mit Hilfe von LoadLibrary() und GetProcAddress() geladen und ausgeführt.
    Die Dll ist dabei im selben Verzeichnis wie die EXE.

    Die Dll wird ganz normal mit Debug Informationen kompiliert (und Debug Dcu's).

    Beim Debuggen mit Hilfe einer Host Anwendung werden allerdings keinerlei Breakpoints vom Delphi Debugger angesprochen.

    Es hilft nur, die Dll mit Hilfe der Linker Optionen "Include TD32 debug infos" und "Include remove debug symbols" zu kompilieren. Danach muss man noch in der Modulliste (View/Debug windows/Modules) die Funktion "Reload symbol table" aufrufen, damit Delphi die Breakpoints erkennt.

    Das Ganze ist auch nochmal gut unter folgenden Artikel beschrieben:

    http://groups.google.com/groups?hl=de&threadm=3bfab912_1%40dnews&rnum=5&pre v=/groups%3Fq%3D%252Bdelphi%2B%252B6%2B%252Bxp%2B%252 Bdebug%26hl%3Dde

    Da anscheinend bei Borland niemand die Support Anfragen berarbeit, wollt ich hiermal im Forum nachfragen, ob jemand eine "bessere" Lösung hat, da diese doch sehr umständlich ist.

    Mit freundlichen Grüßen, Sven Bobrowski

  • #2
    Hallo,

    in der nächsten Ausgabe von DER ENTWICKLER erscheint ein Artikel von mir, der u.a. dieses Problem und zwei Workarounds dafür beschreibt. Da Delphi 6 an vielen Stellen nicht mehr Up-to-date ist, was Windows XP angeht, muss man zu Kompromissen greifen. Es stehen gleich 4 Workarounds zur Auswahl: <br>
    1. Host-Anwendung liegt im gleichen Verzeichnis wie die zu debuggende DLL <br>
    2. Menüpunkt Ansicht | Debug-Fenster | Module | Symbol-Tabelle neu laden | Durchsuchen -> Pfad der DLL angeben<br>
    3. Alle Sourcecode-Dateien in das DLL-Verzeichnis kopieren und das Projekt in diesem Verzeichnis öffnen (so dass Delphi alle Dateien finden kann).<br>
    4. ImageBase-Adresse der DLL auf der Linker-Seite auf einen Wert setzen, der im Host-Prozess garantiert frei ist, so dass Win32 die RVAs der DLL nicht neu setzen muss.

    &gt;Es hilft nur, die Dll mit Hilfe der Linker Optionen "Include TD32 debug infos" und "Include remote debug symbols" zu kompilieren

    Das ist nicht notwendig (das Delphi-Problem liegt darin, die zu debuggende DLL überhaupt zu finden, und nicht darin, den Inhalt richtig auszuwerten). Delphi kann zur Zeit noch nicht korrekt mit <b>sxs.dll</b> (die System-DLL für die Verwaltung Side-by-Side-DLLs) zusammenarbeiten

    Comment


    • #3
      Danke für die Antwort.
      Ich bin schon mal gespannt auf den Artikel und die Reaktionen von Borland, die auch hoffentlich bald mit einem Update reagieren.

      Bis zum nächsten Heft

      Sven Bobrowsk

      Comment


      • #4
        Als Abschluss:

        Vom Borland Support:

        <B>
        I am afraid that, as can see at http://www.borland.com/delphi/del6/sysreq.html
        , Delphi is not certified on Windows XP and therefore we cannot guaranty complete functionality on this platform.
        I am sorry I can't give you a more satisfactory answer and I will close this case now.
        </B>

        Sven Bobrowsk

        Comment

        Working...
        X