Announcement

Collapse
No announcement yet.

Debuggen einer DLL, welche von einem C-Programm aufgerufen wird

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

  • Debuggen einer DLL, welche von einem C-Programm aufgerufen wird

    Hallo,

    ich habe eine Delphi 6 DLL geschrieben, welche ein Formular (showmodal) exportiert. Die DLL wird von einem C-Programm wie unten beschrieben aufgerufen, von welchem mir nur die EXE zur Verfügung steht. Nun will ich meine eigenen Delphi-DLL debuggen. Obwohl ich unter Projekt/Optionen/Linker die Option mit Ext. Debug Symbolen angeschaltet habe und unter Start/Parameter die Host-Anwendung (also das C-Programm) angegeben habe, kann ich die DLL nicht debuggen. Es wird zwar die Hostanwendung sauber gestartet, jedoch hält das Programm nicht bei dem von mir gesetzten Haltepunkt in der DLL an.

    Die DLL wird leider nicht direkt vom Host-Programm aufgerufen, vielmehr ist über das Host-Programm noch eine Verwaltung gelegt. Die Aufrufhierarchie stellt sich wie folgt dar: A.Exe ruft B.Exe auf, diese bindet eine DLL (in C geschrieben) C.Dll ein, welche dann über eine Schnittstellen-DLL (in C geschrieben) D.Dll mit meiner in Delphi geschriebenen DLL E.Dll kommuniziert. Habe ich bei einer solchen Aufrufhierarchie überhaupt eine Chance, meine eigene DLL zu debuggen? ... falls ja, wie?

    Vielen Dank, Hans.

  • #2
    Hallo,

    wenn Delphi 6 verwendet wird, kann man einen harten Breakpoint (<b>INT 3</b>) in einer DLL-Funktion setzen, so dass der Debugger automatisch ins Spiel kommt:
    <pre>
    procedure RaiseInt3;
    begin
    asm
    INT 3
    end;
    end;

    procedure DllMachWas;
    var
    iThreadID : Integer;
    begin
    JITEnable := 2;
    iThreadID := GetCurrentThreadID;
    RaiseInt3;
    ShowMessage(IntToStr(iThreadID));
    end;
    </pre&gt

    Comment


    • #3
      Hallo,

      vielen Dank für den Hinweis. Jedoch bekomme ich jetzt, nachdem ich den harten BreakPoint eingebaut habe, jedesmal beim Start die Fehlermeldung: "delphi32.exe - BORdbk60.dll Internal Error EVH-1077" und Delphi 6 hängt sich komplett auf.

      Was mache ich falsch?

      Vielen Dank, Hans

      Comment


      • #4
        Du nutzt D6. Probier, falls vorhanden, den D5 debugger aus.
        Als Ersatz zu Andreas INT3 methode kannste die API procedure "DebugBreak" nutzen. Unter Win9x wird im Grunde der gleiche Code wie der von Andreas aufgerufen. Unter 2000/NT sieht das aber anders aus. Zudem reagiert der Borland Debugger anders wenn debugBreak benutzt wird. Ich vermute mal das BorDbg die Import Adresse von DebugBreak patcht.

        Gruß Hage

        Comment

        Working...
        X