Ist es möglich, zur Laufzeit kompilierten Code zu debuggen?

8

Ich muss Code kompilieren, indem ich CodeDomProvider.CompileAssemblyFromSource . Wie würde man es ausprobieren? Grundsätzlich möchte ich es kompilieren, Instanz eines Typs erstellen und dann in den Code für den Typ eingeben.

    
epitka 08.04.2011, 13:35
quelle

3 Antworten

7

Nachdem ich eine Frage gestellt hatte, erkannte ich, dass mein Problem darin bestand, dass ich die Assembly aus einer Zeichenfolge und nicht aus einer Datei erzeugte. Ich ging zurück und änderte den Code, um mit verschiedenen Optionen zu laufen, wenn ich in DEBUG bin, und ich bin in der Lage, direkt vom Komponententestcode zu kommen. Außerdem muss man GenerateInMemory auf false und IncludeDebugInformation auf true setzen.

%Vor%     
epitka 08.04.2011, 14:06
quelle
3

Interessante Frage. Ich denke, Ihre beste Wette wäre es, WinDbg an den laufenden .NET exe-Prozess anzuhängen ( Ich denke, Sie müssen dies tun, nachdem der Tyoe im Speicher kompiliert wurde, da sich die Speicheradressen für die EXE ändern werden - ich nehme an).

Wenn der Typ kompiliert und im Speicher ausgeführt wird, können Sie dann mithilfe von Befehlen in SOS.dll nach diesem Typ suchen. Sie können Haltepunkte auch mit SOS.dll im Speicher ablegen.

Erste Schritte mit SOS-Link

Ссылка

Dies ist eine leichte Antwort, da die Erklärung, wie man WinDbg und SOS.dll verwendet, im Internet oft behandelt wurde.

Bearbeiten:

Einer der Nachteile dieser Methode ist, dass Sie den Quellcode nicht sehen können, wie Visual Studio ihn anzeigt. Sie werden die Assemblersprache sehen, wenn Sie den Code durchgehen. Das könnte dich schon ablenken :), aber wenn du dabei bleibst und ein bisschen Assembly verstehst, könntest du genug tun, um zum Beispiel Fehler zu debuggen.

Sie könnten auch die .NET-Assembly aus dem Speicher in eine Datei auf der Festplatte kopieren. Der SOS.dll Befehl, um das zu tun, entgeht mir jetzt, ich werde nach ihm suchen ...

Ahh, es ist SaveModule . Ein Beispiel dafür finden Sie in den Kommentaren hier .

    
Jason Evans 08.04.2011 13:46
quelle
0

Haben Sie versucht, den Prozess mit Ihrem Code aus dem Debug & gt; An Prozessfunktion in VS anfügen?

    
Anthony Vallée-Dubois 08.04.2011 13:39
quelle