C# 为什么堆栈跟踪显示我的开发文件路径?
VisualStudio2010SP1,编译的WCF应用程序,将其放在服务器上,当然,它在第一次运行时出错(最新消息),将堆栈跟踪输出到日志文件C# 为什么堆栈跟踪显示我的开发文件路径?,c#,visual-studio-2010,debugging,c#-4.0,stack-trace,C#,Visual Studio 2010,Debugging,C# 4.0,Stack Trace,VisualStudio2010SP1,编译的WCF应用程序,将其放在服务器上,当然,它在第一次运行时出错(最新消息),将堆栈跟踪输出到日志文件 它看到了通往我的开发环境的道路。为什么?这是因为我将其部署为调试版本而不是发布版本,还是有其他原因,还是不管怎样,我都应该更加小心地输出堆栈跟踪 04/09/2012 03:58:46: Error: Object reference not set to an instance of an object. at App1.Logging.Log
它看到了通往我的开发环境的道路。为什么?这是因为我将其部署为调试版本而不是发布版本,还是有其他原因,还是不管怎样,我都应该更加小心地输出堆栈跟踪
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在调试模式下部署时,将原始源文件路径存储在PDB()文件中是正常的。这是因为您复制了.PDB文件以及可执行文件。CLR将在生成堆栈跟踪时查找它们,以尽可能多地提供有关跟踪中堆栈帧的信息。.pdb存储源文件名和行号
您应该部署代码的发布版本。这使得优化能够使代码运行得更快。您仍然可以复制该版本的.pdb文件,它们通常会删除调试信息。项目+属性,切换到发布版本、版本、高级、“调试信息”设置。这里发布版本的正常设置是“仅pdb”,而不是“完整”。这意味着不包括源文件和行号。这是有道理的,在抖动优化了代码之后,堆栈跟踪往往有点不可靠。“这是因为我将其部署为调试”就像Amiram所说的,您看到调试路径是因为它是在调试中编译的,@Cocowalla可能是重复的——这两个答案都很好。感谢各位的深入解释。我意识到我应该使用发布版本,但如果您不使用TFS或某个开发生命周期,您可以忘记这个小事实。;-)