DLL Debuggen?



  • Hi,
    Ich habe hier vor mir eine ActiveSync Service Provider DLL. (Die DLL is dafür zuständig, das bestimmte Daten synchronisiert werden). Da ich momentan von ActiveSync wenig Ahnung hab, muss ich mich erstmal reinarbeiten, und da wäre es schon praktisch, wenn ich wüsste was meine DLL wann macht.

    Die DLL wird von mir erstellt, und dann beim Start von MS ActiveSync geladen. Gibt es nun eine möglichkeit unter MS Visual Studio.Net 2003 die DLL zu debuggen?
    Danke im voraus!

    (Achja, die DLL ist in C++ geschrieben)

    P.S.: Wenn das nicht das richtige Forum ist, bitte verschieben. Hab mir gedacht, das wäre am ehersten MFC, wegen dem Compiler _.



  • Also ich habe das VS 2005 und da kann man eigene DLLs ganz einfach debuggen.
    Zuerst muss natürlich die DLL auch im selben Debugmodus erstellt worden sein.
    Dann habe ich einfach beide Projekte offen(das DLL-Projekt und meine normales Programm).
    Wenn nich jetzt beim Debuggen des Programms mit F11 in den Aufruf einer DLL-Funktion gehe, dann öffnet das VS die korrekte Datei und ich bin automatisch "in" der DLL. Musst mal schauen, ob das beim 2003er auch geht.

    Ansonsten kannst du auch im DLL-Projekt Debuggen. Dort musst du dem VS dann aber eine ausführbare Datei mitteilen, welche die DLL benutzt.



  • Ja, auf das mit dem Ausführbaren Programm bin ich in der MSDN auch gestoßen. Wenn ich das allerdings mache, zeigt er mir die Haltepunkte mit Fragezeichen an,und ignoriert sie.
    Und im Hauptprogramm kann ich keine Punkte setzen, da das Hauptprogramm von MIcrosoft ist, und ich da keinen Einfluss drauf hab ^^

    Könntest du mir sonst vielleicht noch einen Tipp geben wie das mit dem Ausführenden Programm einstellen funktioniert?


  • Mod

    Hast Du auch wirklich einen Debug Build erzeugt und liegt die entsprechenden PDB Datei auch im selben Verzeichnis der DLL oder zumindest in dem Verzeichnis in dem der Build erfolgte.

    Schau mal in den Debug Fenstern unter "Modules" dort findest Du alle geladenen DLLs evtl. ist Deine DLL gar nicht geladen.



  • Wenn die DLL als Startprojekt gekennzeichnet ist und die EXE als Ausführbares Programm, dann solltest Du vielleicht noch darauf achten, ob genau die DLL ausgeführt wird, die Du debuggen willst (siehe Ausgabefenster).
    Dann verschwindet das Fragezeichen während der Ausführung.

    Evt.wird eine andere DLL gestartet, die auf dem PC liegt?

    Tester2



  • 'WCESMgr.exe': 'C:\Dokumente und Einstellungen\admin\Eigene Dateien\Visual Studio Projects\ASPSimple\Debug\ASPSimple.dll' geladen, Symbole geladen.

    Das steht unten in Ausgabe: Debuggen. Modules finde ich nicht.

    Muss ich die DLL mit F5 starten? Momentan sieht es so aus, das ich den ActiveSync-Manager deativieren muss, dann erstelle ich die DLL, dann starte ich den Manager. (wenn der Manager an ist, kann ich die DLL gar nicht erstellen, da er die DLL dauerhaft "blockiert"). Ich kann aber, wenn ich erst erstelle, dann den Mgr starte und dann F5 drücke wohl in einen Debugmodus kommen.

    Hilft das weiter?



  • noch ein Nachtrag:
    Das ausführbare Programm stellst Du ein unter:

    Eigenschaften/ Debuggen/ Befehl



  • Achja, (ganz vergessen): Die DLL wird direct aus dem Debugverzeichnis heraus geladen, also sind alle pdbs / Libs etc vorhanden

    Das Programm habe ich gesetzt (C:\Programme\Microsoft ActiveSync\WCEMgr.exe)



  • Muss ich die DLL mit F5 starten?

    Ja klar.



  • Noch nicht?

    Da die Debug-Dll geladen wird, sollte es eigentlich gehen. Aber ich habe es bisher nur mit eigenen Programmen gestartet. Da konnte ich dann in der EXE und in der DLL debuggen.



  • Hm. Also die DllMain debugged er jetzt. Nur alle anderen Funktionen (die vom Manager aufgerufen werden) nicht.
    Wenn ich die DLL mit F5 starte, synchroniziert der Manager nicht mehr (ruft also die Funktionen die ich brauche nicht mehr auf), wenn ich es per SyncKnopf mache, dann werden die Haltepunkte nicht aufgerufen.

    Ich bastel jetzt einfach zu Begin und Ende jeder Funktion eine kleine Dateiausgabe, das hilft mir wahrscheinlich auch schon ^^



  • Du kannst auch ab visual studio .net

    einfach den prozess dranhängen. dazu öffnest du einfach den cpp code deiner dll im studio, das programm startest du, jetzt hängst du den prozess deines programms einfach dran. und jetzt kannste du auch breakpoints setzen. wenn dein programm jetzt code ausführen will, von der dll, dann spring VS automatisch da rein. so debugge ich serveranwendugen welche eine dll ( .mo ) benötigen. da hängt ich einfach den prozess des hostsystems ( z.b. apache ) an.


Log in to reply