2009-09-14 2 views
7

Manchmal erhalten wir Stack-Traces von unserem Kunden mit falschen Zeilennummern. Es passiert nicht so oft, aber manchmal verwirrt es uns.Falsche Zeilennummern im Stack Trace (Release)

Kunden haben Release-Assemblys mit Optimierungen und Debuginformationen "nur pdb".

Und ja, wir vergleichen Zeilennummern mit genau der gleichen Version des Codes, den der Kunde hat.

Und ja, Kunde hat richtige pdb-Dateien.

Und nein, dieser Unterschied in Zeilennummern kann nicht mit der Methode Inlining (Compiler-Optimierung) erklärt werden.

Und nein, wir verwenden keine AOP-Tools wie PostSharp.

Irgendwelche Ideen, warum passiert es?

+0

Verwenden Sie PostSharp oder ein ähnliches AOP-Tool? –

+1

Sehen Sie, ob diese Hilfe oder dupliziert ist: http://StackOverflow.com/Questions/492201/exception-error-message-with-incorrect-line-number – Kobi

Antwort

7

Kein .net Experte, aber zumindest in anderen Sprachen, wenn hohe Compiler-Optimierungen gewählt werden, kann der Compiler signifikante Neuordnung von Code vornehmen. Dies kann und macht es oft sehr schwierig, die Quelle eines Fehlers auf eine bestimmte Zeile festzulegen. Wenn der Compiler in der Lage ist, Optimierungen über Basisblöcke hinweg vorzunehmen, kann dieser Effekt sehr bedeutsam sein, indem er die scheinbare Zeilenposition in einen völlig anderen Teil der Quelldatei einfügt.

2

Wenn Sie viele Compil-Optimierung verwenden, könnte der Compiler Teile Ihres Codes verschieben, denke ich.

Der beste Weg zum Debuggen ist Reflector auf der DLL, die Ihr Client tatsächlich verwendet. Mit den Zeilennummern des Stacktrace finden Sie genau, welche Codezeilen beim Absturz der App aufgerufen werden.

+1

Wie Reflektor kann mir helfen? Es werden keine Zeilennummern angezeigt, und die Formatierung wird natürlich nicht beibehalten. Und Reflector zeigt, dass der Code an der Stelle, an der die Ausnahme aufgetreten ist, nicht signifikant geändert wurde. – xoposhiy

+1

Oh ... also du bist geschraubt, denke ich. Es tut uns leid :/ –