2012-09-05 8 views
20

Visual Studio 2010 SP1, kompilierte WCF-Anwendung, legte es auf einem Server, und natürlich wurde ein Fehler bei der ersten Ausführung (was neu ist), Stack Trace an Protokolldatei ausgegeben.Warum zeigt der Stack-Trace den Pfad meiner Entwicklungsdateien an?

Es ist der Weg zu meiner Entwicklungsumgebung. Warum? Liegt es daran, dass ich es im Vergleich zu Release als Debug bereitgestellt habe oder gibt es etwas anderes, oder sollte ich vorsichtiger sein, Stack-Traces unabhängig auszugeben?

04/09/2012 03:58:46: Error: Object reference not set to an instance of an object. at App1.Logging.LogMessageToFile(String msg, Boolean isUsingClickOnceApp) in C:\Users\robcube\Documents\Visual Studio 2010\Projects\AppWebService\App1\Logging.cs:line 63 
    at App1.App1Main.ConnectWebService(String description) in C:\Users\robcube\Documents\Visual Studio 2010\Projects\AppWebService\App1\International.cs:line 40 
04/09/2012 03:58:46: Error: Object reference not set to an instance of an object. at App1.App1Main.UpdateActivityLog(String data, String userName, Boolean deleteData, Int64 firstId, Int64 lastId, String changeType) in C:\Users\robcube\Documents\Visual Studio 2010\Projects\AppWebService\App1\App1Main.cs:line 641 

Danke, -ROB

+1

"Ist es, weil ich es als Debug bereitgestellt" –

+0

wie Amiram sagte, Sie sehen den Debug-Pfad, da es im Debug kompiliert wird ... – Chris

+1

mögliche Duplikat von [Stacktrace Informationen Erhaltungspfade der ursprünglichen Quelle] (http://stackoverflow.com/questions/388470/stacktrace-information-prevesting-paths-of-original-source) – Cocowalla

Antwort

38

Es liegt daran, dass Sie die PDB-Dateien sowie die ausführbaren Dateien kopiert haben. Die CLR sucht nach ihnen, wenn sie einen Stack-Trace generiert, um so viele Informationen wie möglich über die Stack-Frames im Trace zu erhalten. Die .pdb speichert den Quelldateinamen und die Zeilennummer.

Sie sollten den Release-Build Ihres Codes bereitstellen. Dies ermöglicht Optimierungen, die Ihren Code viel schneller ausführen können. Sie können weiterhin die .pdb-Dateien für diesen Build kopieren, normalerweise wird diese Debug-Information entfernt. Project + Properties, wechseln Sie zu den Einstellungen Release Build, Build, Advanced, "Debug Info". Die normale Einstellung für Release-Builds ist "pdb-only" anstelle von "full". Dies bedeutet, dass Quelldatei und Zeilennummer nicht enthalten sind. Was sinnvoll ist, sind Stapelspuren tendenziell ein wenig unzuverlässig, nachdem der Jitter den Code optimiert hat.

+0

@Cocowalla - beide große Antworten. Danke Jungs für die ausführlichen Erklärungen. Mir ist klar, dass ich den Release-Build verwenden sollte, aber wenn Sie TFS oder einen bestimmten Entwicklungslebenszyklus nicht verwenden, können Sie diese geringfügige Tatsache vergessen. ;-) –

3

Es ist normal, dass der ursprüngliche Quelldatei Pfad Dateien im PDB (program database) gespeichert werden, wenn im Debug-Modus einsetzen.

Verwandte Themen