2012-09-05 63 views
20

已編譯的WCF應用程序將Visual Studio 2010 SP1放到服務器上,當然在第一次運行時出現了錯誤(新增內容),將堆棧跟蹤輸出到日誌文件。爲什麼堆棧跟蹤顯示我的開發文件路徑?

它看到了我的開發環境的路徑。爲什麼?這是因爲我將它部署爲與Release相比較還是有其他問題,或者我應該更仔細地輸出Stack Traces,而不管?

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 

謝謝, -Rob

+1

「是否因爲我將它部署爲調試」 –

+0

就像Amiram說的那樣,您看到調試路徑,因爲它是在調試中編譯的... – Chris

+1

[Stacktrace信息保存路徑原始源代碼](http:/ /stackoverflow.com/questions/388470/stacktrace-information-preserving-paths-of-original-source) – Cocowalla

回答

38

這是因爲您複製了.pdb文件以及可執行文件。 CLR會在生成堆棧跟蹤時尋找它們,以儘可能多地提供有關跟蹤中堆棧幀的信息。 .pdb存儲源文件名和行號。

您應該部署您的代碼的發佈版本。這使得優化可以使你的代碼運行得更快。您仍然可以複製該版本的.pdb文件,但通常會刪除該調試信息。項目+屬性,切換到發佈版本,生成,高級,「調試信息」設置。這裏發佈版本的正常設置是「pdb-only」而不是「full」。這意味着不包括源文件和行號。這是有道理的,在抖動優化代碼之後,堆棧跟蹤往往會有點不可靠。

+0

@Cocowalla - 兩個很好的答案。謝謝你們的深入解釋。我意識到我應該使用Release版本,但是如果你不使用TFS或某個開發生命週期,你可以忘記這個小事實。 ;-) –

3

是正常的要被存儲在PDB中的原始源文件路徑在調試模式下時部署(program database)文件。

相關問題