30

Visual Studio 2010 SP1,编译 WCF 应用,放到服务器上,当然第一次运行就出错了(什么是新的),输出 Stack Trace 到日志文件。

它看到了我的开发环境的路径。为什么?是因为我将它部署为 Debug 而不是 Release 还是有其他原因,或者我是否应该更加小心地输出堆栈跟踪?

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

谢谢,-罗布

4

2 回答 2

55

这是因为您复制了 .pdb 文件以及可执行文件。CLR 将在生成堆栈跟踪时查找它们,以尝试提供尽可能多的有关跟踪中堆栈帧的信息。.pdb 存储源文件名和行号。

您应该部署代码的发布版本。这样可以进行优化,使您的代码运行得更快。您仍然可以复制该构建的 .pdb 文件,它们通常会删除该调试信息。Project + Properties,切换到Release build,Build,Advanced,“Debug Info”设置。这里发布版本的正常设置是“pdb-only”而不是“full”。这意味着不包括源文件和行号。这是有道理的,在抖动优化了代码之后,堆栈跟踪往往有点不可靠。

于 2012-09-05T13:08:25.887 回答
3

在调试模式下部署时,原始源文件路径存储在 PDB(程序数据库)文件中是正常的。

于 2012-09-05T13:00:47.610 回答