Visual Studio 2010 SP1,已编译的WCF应用程序,将其放在服务器上,当然在第一次运行时出现错误(有什么新内容),将堆栈跟踪输出到日志文件。
它正在看到我的开发环境的路径。为什么?是因为我将它部署为Debug与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
答案 0 :(得分:48)
这是因为您复制了.pdb文件以及可执行文件。 CLR将在生成堆栈跟踪时查找它们,以尝试尽可能多地提供有关跟踪中堆栈帧的信息。 .pdb存储源文件名和行号。
您应该部署代码的Release版本。这使得优化可以使您的代码运行得更快。您仍然可以复制该构建的.pdb文件,它们通常会删除调试信息。 Project + Properties,切换到Release build,Build,Advanced,“Debug Info”设置。发布版本的正常设置是“pdb-only”而不是“full”。这意味着不包括源文件和行号。这是有道理的,在抖动优化代码之后,堆栈跟踪往往有点不可靠。
答案 1 :(得分:3)
在调试模式下部署时,原始源文件路径存储在PDB(program database)文件中是正常的。