2013-11-04 9 views
5

In meiner DLL war alles für eine lange Zeit bis heute und ich habe keine Ahnung, was schief läuft. Es gibt eine falsche Anzahl von Ausnahmezeilen, die von heute erscheinen.C# VS2012 StackTrace Zeile ist falsch

Also in meiner Methode innerhalb DLL-Bibliothek füge ich eine Zeile, um nicht unterstützte Ausnahme zu werfen, aber entweder ich benutze einen Debugger oder sehen Sie einfach Ausnahme Zeile in der Protokollzeile ist falsch! Hier

ist ein Bild eines Teils des Codes: Stack problem

Tatsächlich Ausnahme ist bei 391 Linie und das war so lange Zeit bis heute. Jetzt im Log sehe ich 776 Zeile und das gleiche am Debugger. Hat jemand irgendwelche Ideen?

UPDATE 1 05/11/2013

Nach lesen alle Antworten (bedankt sich bei allen für sie =) hier) ist einige Update:

Ist PDB-Datei auf dem Laufenden? Ich denke ja, weil ich alles aus dem Ausgabeordner entfernt, Lösung neu erstellt und das gleiche Problem sehe. Auch ich habe Erstellungsdatum davon überprüft.

Bin ich im Freigabemodus? Ich denke das nicht. Hier ist ein Bild mit Buildkonfiguration
Build configuration

Ist der Code optimiert? Ich habe einen anderen Test und entfernt alles unter diesem NotSupportedException aber Problem ist immer noch am Ende des Verfahrens und die Linie 397, aber nicht 391, wie wir in der Tat Debug test 2

haben Was ist eine innere Ausnahme? Null inner ecxeption

+2

Ist die PDB veraltet? Diese Datei ist erforderlich, um Zeilennummern für Ausnahmen zu erhalten, und wenn sie veraltet sind, erhalten Sie ungültige/merkwürdige Zeilennummern. –

+0

Vereinbarte auch, was, wenn überhaupt, ist deine innere Ausnahme? – paqogomez

+2

Überprüfen Sie, ob Sie mit Debug (nicht Release) -Konfiguration erstellen. – nrodic

Antwort

5

Ich bin fast sicher, Sie Ihr Programm im Release-Modus ausgeführt werden.

Wenn Sie im Freigabemodus kompilieren, aktiviert der C# -Compiler Optimierungen über die DebuggableAttribute der Assembly.

Der JIT-Compiler ist intelligent und sieht, dass der gesamte Code zwischen den Zeilen 394 und 776 ein toter Code ist, der unmöglich zu erreichen ist, weil Sie eine NotSupportedException werfen.

Darüber hinaus verfügt der pdb im Freigabe-Modus nur über begrenzte Informationen und JIT-Optimierungen sind aktiviert, sodass der Compiler die Ausnahme-Stacks nicht immer genau an dem Ort abbilden kann, an dem sie aufgetreten sind. Es ist normalerweise nicht weit entfernt, um zu sehen, wo es geworfen wurde.

+0

Ist der Compiler nicht einfach bis zum Ende des Bereichs gehen, wo die Ausnahme ausgelöst wird? So habe ich es immer gesehen. – Jimbidf