Ich versuche einen Fehler zu beheben, den der Client uns gemeldet hat. Der Stacktrace hat nur Byte-Offsets, keine Zeilennummern.
z.B.
[NullReferenceException: Objektreferenz wurde nicht auf eine Instanz eines Objekts gesetzt.]
Foo.Bar (FooFoo p) +32
Foo.BarBar () +191
Foo.BarBarBar () +15
Wie kann ich diese Byte-Offsets in Zeilen von Code- / Methodenaufrufen usw. zurückentwickeln?
Wie kann ich herausfinden, wo die NullReferenceException geworfen wird?
Hier ist eine Lösung, die funktionieren könnte (oder auch nicht :)). Das Problem ist, dass die Zuordnung zwischen Offset und Zeilennummern in pdb enthalten ist (aka die Debug-Symbole)
ildasm
, fügen Sie es entweder zu PATH
hinzu oder kopieren Sie es irgendwo hin. ildasm /LINENUM /SOURCE YourFile.exe
. Es wird IL mit Offset- und Quelllinienzuordnung ausgeben. Das einzige Problem, das ich sehe, dass Sie nicht in der Lage sein werden, genau gleiche Binärdateien und Mappings zu erzeugen, kann schwanken.
Das einzige Werkzeug, an das ich mich von ganzem Herzen erinnern kann, ist der .NET Reflektor . Öffnen Sie die exakt gleiche Binärdatei, die Ihr Client enthält, und ändern Sie die Sprache im Dialogfeld Optionen in AWL, und es sollte (AFAIK) die gleichen Byte-Offsets wie die Beschriftungen in jeder Zeile anzeigen.
Sie müssen IL anstelle von C # lesen oder etwas anderes, aber es ist besser als nichts.
Edit: Andreys Lösung ist wahrscheinlich besser tho:)
Tags und Links .net