Frage

Anders als die GetFileName() Datei zu lesen und zu lesen GetFileLineNumber() einen Stapelrahmen von

auszukleiden
new StackTrace(exception).GetFrame(x)

ist es eine Möglichkeit, die tatsächliche Codezeile (als String) zu erhalten, die eine Ausnahme verursacht?

Danke

War es hilfreich?

Lösung

Nach moretem Debuggen ist schwierig, aber nicht unmöglich. Es gibt Werkzeuge, die Sie verwenden können ( hier und hier zum Beispiel) sowie Techniken .

Andere Tipps

Das glaube ich nicht so. Der Code wird kompiliert, deshalb ist es nicht mehr verfügbar. wenn Sie jedoch auch hat den Quellcode zur Verfügung, es kann ein paar Abhilfen sein.

Nein, das ist die einzige Möglichkeit, soweit ich weiß. Um die ursprüngliche Codezeile zu erhalten, die die Ausnahme verursachte, dann ist es notwendig, die Quelle zur Verfügung zu haben. Dass die StackFrame bereits ermöglicht es Ihnen, um die Linie zu bekommen Nummer (über die Debug-Symbole - die PDB-Datei in den meisten Fällen)., ist es einfach genug, würde ich sagen

Gibt es ein besonderes Problem bei der Methode, die Sie vorgeschlagen?

Es gibt keine zuverlässige Möglichkeit, dies zu tun, weil Online-Informationen nicht in DLL-Dateien gespeichert ist. Die Informationen, die in Blöcken von IL Quellcodezeilen Karte ist in der PDB-Datei gespeichert. Sie müßten den HVE, um den Zugriff auf die Online-Informationen für eine Ausnahme zu erhalten.

Es reicht aus, um Informationen über die StackFrame- Klasse die entsprechende ISymUnmanagedMethod Klasse zu erhalten, wenn die PDB zur Verfügung steht. Vor allem müssen Sie nur das Methodentoken und den Strom in die Offset-Methode. Dies benötigen Sie die interne Struktur des HVE zu verstehen, und ich bin nicht sicher, ob es irgendwo dokumentiert wird.

PDB API: http://msdn.microsoft.com/en- us / library / ms233503.aspx

Es wäre kompiliert, so zur Laufzeit würden Sie nur die IL haben. Bestenfalls könnte man die IL bekommen und decompile es zu C # zurück, ähnlich wie Reflektor der Fall ist.

Sie können Linie mit einem try catch Block erhalten:

catch(Exception exception) {
    //exception.StackTrace at the first line has the line you are looking for
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top