Microsys
  

Hilfe zum Delphi-DLL-Debugging

Hilfe und Tutorial zum Debuggen von Fehlern in DLLs mit Delphi 4, 5, 6, 7, 2005, 2006, 2007, 2010, XE – XE10 und C++ Builder / Borland Developer Studio (BDS), CodeGear Developer Studio (CDS) und Embarcadero RAD-Studio

21. Dezember 2002


BPG-Dateien – Vermeiden Sie das Debuggen von DLLs

Selbst wenn Sie das DLL-Projekt, das Sie debuggen möchten, in der Liste der Projekte markieren/auswählen, werden Sie immer noch Probleme haben, wenn die folgenden Bedingungen vorliegen:

  • Ihr DLL-Projekt verwendet relative Suchpfade. (In den Projektoptionen festlegen.)

    • Ein Beispiel mit relativen Projektsuchpfaden und Delphi-IDE:
      • Verwenden Sie den Öffnen-Dialog, um eine Datei im selben Verzeichnis wie die Projektdatei zu öffnen.
      • Sie können Projektdateien, die sich beispielsweise in „..shared“ befinden, im Code-Editor mit „STRG + ENTER“ öffnen.
      • Versuchen Sie, eine Datei zu öffnen, die sich in einem anderen Verzeichnis befindet. Sie können keine Dateien mehr in „..shared“ öffnen.

    • Jean-Claude Servaye schlägt folgende Lösung vor:
      • Gehen Sie zur Systemsteuerung – System – Erweitert.
      • Klicken Sie auf Umgebungsvariablen.
      • Fügen Sie den absoluten Pfad der zu debuggenden DLL in den Systempfaden hinzu.
      • Starten Sie die Maschine neu.

  • Ihr DLL-Projekt befindet sich in einem anderen Verzeichnis als die anderen Projekte (möglicherweise nur, wenn es sich vom letzten Projekt in der Liste unterscheidet).


Debug-Info – Beim Kompilieren und Erstellen immer alles aktiviert sein

  • Sie müssen alle relevanten Einstellungen unter „Projekt – Optionen – Compiler“ aktivieren.
  • Wenn Sie versuchen, von einem Projekt in ein anderes zu debuggen, muss im Projekt „Projekt – Optionen – Linker – Remote-Debug-Symbole einschließen“ festgelegt sein.


Anleitung zum Debuggen – Anwendung hosten und an den Prozess anhängen

  • Wenn Sie sowohl Ihre DLL als auch Ihre ausführbare Datei debuggen möchten (wenn es sich nur um die DLL-Datei handelt, ignorieren Sie dies), müssen Sie Ihre ausführbare Datei auch mit Remote-Debug-Symbolen konfigurieren, wie im obigen Abschnitt erwähnt. Wählen Sie im DLL-Projekt „Ausführen – Parameter – Hostanwendung“ und geben Sie den Pfad zur kompilierten .exe-Datei ein. Wenn die EXE-Anwendung ausgeführt wird, wählen Sie (aus dem DLL-Projekt) „Ausführen – An Prozess anhängen“ und wählen Sie Ihren laufenden EXE-Programmprozess aus.
  • Legen Sie im DLL-Projekt einen Haltepunkt fest, an dem die Exe-Datei in Ihre DLL gelangt. Starten Sie nun die erforderlichen Aktionen in der Exe, damit dies geschieht.
  • Weitere Nutzungsvarianten finden Sie in der Hilfe.


Erstellen Sie das Projekt vor dem Ausführen und Debuggen

Dies verringert die Wahrscheinlichkeit, dass Delphi angibt (z. B. beim Verlassen eines Haltepunkts): Die Quelle hat sich seit dem letzten Build geändert.


Blaue Punkte erscheinen beim Bauen an der falschen Stelle

Obwohl dies durch andere Dinge verursacht werden kann (zumindest meiner Erfahrung nach), scheint ein Hauptgrund ein CR/LF-Problem zu sein, das in Delphi besteht: Die IDE und der Compiler sind sich am Ende der Zeile nicht einig. Für Windows/Linux/Max bedeutet dies, dass in einem Betriebssystem geschriebene Texte/Dateien in einem anderen Betriebssystem Probleme verursachen können. Wenn Sie also Windows verwenden und unter dem oben genannten Problem leiden, versuchen Sie, die problematische Datei beispielsweise mit NotePad zu öffnen und zu speichern.


An Projekt- und Multi-Thread-Anwendungen anhängen

Es kann oft nützlich sein, eine Verbindung zu einem laufenden Projekt herzustellen, um zu sehen, woran die verschiedenen Threads arbeiten. Allerdings ist es mühsam, an allen möglichen Stellen einen Haltepunkt zu setzen. Hier ist die Lösung:
  • Wählen Sie „Ausführen – An Prozess anhängen“ und wählen Sie Ihre Anwendung aus.
  • Wählen Sie „Ausführen – Programm pausiert“.
  • Wählen Sie „Ansicht – Debug-Fenster – Aufrufstapel“ und sehen Sie sich die verschiedenen Thread-Aufrufstapel an.


COM-DLL-Programmierung – Pfade sind wichtig

Obwohl dies durch andere Dinge verursacht werden kann (zumindest meiner Erfahrung nach), scheint ein Hauptgrund ein CR/LF-Problem zu sein, das in Delphi besteht: Die IDE und der Compiler sind sich am Ende der Zeile nicht einig. Für Windows/Linux/Max bedeutet dies, dass in einem Betriebssystem geschriebene Texte/Dateien in einem anderen Betriebssystem Probleme verursachen können. Wenn Sie also Windows verwenden und unter dem oben genannten Problem leiden, versuchen Sie, die problematische Datei beispielsweise mit NotePad zu öffnen und zu speichern.


Denken Sie an die Dateierweiterung „.dll“ in Schnittstellendeklarationen

Viele Leute stoßen beim COM-Debugging auf Probleme, wenn der Dateipfad nicht im 8.3-Format vorliegt: Keine Leerzeichen oder lange Dateinamen im Pfad. Ein solches Problem ist das Setzen von Haltepunkten im Code.
Jean-Claude Servaye hat die folgende Lösung gesendet:
  • Durchsuchen Sie die Registrierung nach dem Dateipfad der COM. Dies ist im 8.3-Format.
  • Ändern Sie es in das lange Dateinamenformat und die Haltepunkte sind verfügbar.


Denken Sie an Ausrichtungsprobleme bei der Datenübergabe

Auch wenn einige Windows-Versionen damit zurechtkommen, die Erweiterung wegzulassen, ist es sicherer, sie einzuschließen, z. B. so: procedure Foo external 'example.dll'


Threads – Je weniger, desto einfacher das Debuggen

Erstellen Sie nach Möglichkeit ein Flag, das verhindert, dass mehrere Threads eine Verbindung zu Ihrer DLL herstellen. Dies erleichtert das Debuggen der Codelogik innerhalb der Delphi-IDE.


Zugriffsverletzungen, Fehler, Ausnahmen und Speicherlecks

Wie bei allem anderen ist es immer noch möglich, Zeigerfehler usw. zu machen und zu haben. Hier ist eine Liste verschiedener Links und Tools zur Lösung häufiger Probleme und Ursachen:
  • Zugriffsverletzungen, Ausnahmen, Speicherlecks: Sie sollten sich wahrscheinlich Tools zur Erkennung von Speicherlecks wie MemCheck (kompilierte Quelle) ansehen.


Letzte Lösung: Suchen und fragen Sie in Diskussionsgruppen

Diese Seite war nie als vollständige Anleitung zum Debuggen von Delphi-DLL-Dateien gedacht. Ich habe diese Seite ursprünglich erstellt, weil das, was mir geholfen hat, zu wissen, wie mit BPG-Dateien umgegangen wird, etwas ist, das in den verschiedenen Diskussionsgruppen nie erwähnt wurde (wahrscheinlich, weil mein Problem eher selten auftrat). Gute Orte, um Antworten zu finden, sind:


Epilog – Als ich meine „DLL-Hölle“ erlebte

Das Produkt, für das ich mehrere DLLs/Plugins und für eine Anwendung wollte, war Automation Batch Tools, das mit einem DLL-Plugin-SDK für Entwickler geliefert wird. Während sich der Begriff „DLL-Hölle“ normalerweise auf Probleme bezieht, die mit einem visuellen RAD-Entwicklungstool (nicht Delphi) verbunden sind, wage ich zu behaupten, dass ich schon eine Menge DLL-Hölle durchgemacht habe.
Microsys
Microsys | Artikel | vorherige | nächste
Microsys entwickelt Desktop-Software, mobile Apps und Websites. Wir bieten auch verschiedene Dienstleistungen für andere verwandte Bereiche an, einschließlich SEO-Optimierung.
Dieser Artikel wurde von verfasst
Als einer der Hauptentwickler haben seine Hände den größten Teil des Codes in der Software von Microsys berührt. Wenn Sie Fragen per E-Mail senden, ist die Wahrscheinlichkeit groß, dass er derjenige ist, der antwortet.
Teile diese Seite mit Freunden   LinkedIn   Twitter   Facebook   Pinterest   YouTube  
 © Copyright 1997-2023 Microsys

 Mit der Nutzung dieser Website erklären Sie sich mit unseren Rechtlichen, Datenschutzrichtlinien und Cookie Informationen einverstanden.