Laden...

DLL Debuggen

Erstellt von VanKurt vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.160 Views
V
VanKurt Themenstarter:in
56 Beiträge seit 2006
vor 13 Jahren
DLL Debuggen

Hallo!
Ich würde gerne eine C#/.NET DLL debuggen. Folgendes Szenario sei gegeben:

Anwendung "A" generiert zur Laufzeit .NET Code, kompiliert diesen zu einer DLL "D" und ruft Funktionen daraus auf.

Wie kann ich nun von außen diese DLL debuggen, d.h. Breakpoints setzen und dann Variablen ansehen (während Anwendung "A" damit arbeitet)?

Gruß,
Bernd

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

öffne das Dll-Projekt, starte das benutzende Programm und hänge Dich mit dem Debugger an das laufende Programm (unter Debuggen->An den Prozess anhängen...". Dann solltest Du ganz normal debuggen können.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo VanKurt,

wenn dir der Quellcode der DLL-Datei vorliegt, kannst du es mit Visual Studio debuggen. Falls nicht, und du die PDB-Datei hast, kannst du die PDB in Visual Studio miteinbinden und dann so die DLL debuggen. Desweiteren kannst du in Visual Studio unter "Debuggen" => "An Prozess anhängen" wählen.

zero_x

V
VanKurt Themenstarter:in
56 Beiträge seit 2006
vor 13 Jahren

Das hab ich eigentlich schon versucht:
Ich habe das VS Projekt der DLL geöffnet und mich an den Prozess der Anwendung "A" angehängt (DLL und PDB wurden von "A" erzeugt).

Allerdings tut sich da nix (Breakpoints werden nicht gesetzt da Symbole nicht verfügbar)...

795 Beiträge seit 2006
vor 13 Jahren

generiert zur Laufzeit ... DLL "D" ... diese DLL debuggen

Wenn du damit meinst, dass die Anwendung wirklich eine DLL generiert, ist das so wie oben beschrieben möglich. wenn sie allerdings nur eine RunTime-Assembly generiert und diese ausführt, glaube ich leider nicht, dass das möglich ist.

Gruß, Christian.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
Gelöschter Account
vor 13 Jahren

Mit "Symbole" sind hier die pdb`s gemeint. Du kannst sie im Module-Fenster nachladen lassen.

Debuggen kannst du allerdings immer auf Disassembler-Level. Dort kannst du auch die Lokalen variablen einsehen (im Locals-Fenster). Das geht immer... unabhängig davon ob pdb`s oder sourcen vorhanden sind.

656 Beiträge seit 2008
vor 13 Jahren

Wenn du das ganze per CodeDom machst, kannst du dir mal ModuleBuilder.DefineDocument, ILGenerator.MarkSequencePoint und LocalBuilder.SetLocalSymInfo ansehen.

V
VanKurt Themenstarter:in
56 Beiträge seit 2006
vor 13 Jahren

Soo, jetzt bin ich schon mal einen Schritt weiter.
Die Symbole werden jetzt gefunden und die Breakpoints sind aktiv.

Das Problem war (unter anderem) dass die Anwendung aus meheren Prozessen bestand und ich am falschen hing.

Merkwürdigerweise werden die Breakpoints aber immer noch nicht getriggert, obwohl sie jetzt mit Symbolen verknüpft sind und der Code definitiv ausgeführt wird...
ARGH!!!

3.971 Beiträge seit 2006
vor 13 Jahren

Falls man keine Symbole hat, kann man auch den Reflector (Pro Variante) benutzen. Wie das geht:

Debug With Reflector
.NET Reflector Pro Walktrough (Step 3)

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

V
VanKurt Themenstarter:in
56 Beiträge seit 2006
vor 13 Jahren

Nagut, aber Symbole hab ich ja mittlerweile 🙂

Ich kann sogar über den play/pause Button die ausführung des DLL Codes anhalten. Aber leider werden die Breakpoints trotzdem nicht getriggert....

ARGH!

3.971 Beiträge seit 2006
vor 13 Jahren

Füg mal den Pfad zu den Symbolen manuell hinzu (siehe Bild).

Ansonsten kannst du auch über die Aufrufliste mit rechter Maustaste Symbole laden.

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

V
VanKurt Themenstarter:in
56 Beiträge seit 2006
vor 13 Jahren

Den Pfad hatte ich schon hinzugefügt. Und die Symbole werden wie gesagt automatisch geladen, da brauche ich also manuell nichts mehr zu machen...