2010-05-13 106 views
6

为什么堆栈跟踪显示“行0”,,但仅适用于堆栈跟踪中的一帧不正确行号的堆栈跟踪

例如。

... 
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) 
at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader() 
at My.LibraryA.Some.Method():line 16 
at My.LibraryB.Some.OtherMethod():line 0 
at My.LibraryB.Some.Method():line 22 
at My.LibraryA.Some.Method():line 10 

背景:

我有一个与异常失败,并记录堆栈跟踪到其日志文件的应用程序。构建应用程序时,所有程序集都编译有完整的调试信息(项目属性 - >生成 - >高级 - >调试信息 - >完整),因此生成了PDB文件。为了帮助我诊断错误来自哪里,我将PDB文件放入应用程序的bin目录中,并重现该异常。每个堆栈帧的所有行号看起来都是正确的,除了显示“行0”作为其来源的例外。

+0

是否优化打开后编译? (请记住,优化开/关和调试信息的开/关是正交开关。)如果是这样,那么抖动可能会选择进行内联或其他优化,这可能会使得很难确定原始代码的位置。 – 2010-05-13 15:27:25

+0

@Eric:是的。有什么方法可以获得实际的线路号码吗? – adrianbanks 2010-05-13 15:38:02

+1

当然。在关闭优化的情况下编译它。 – 2010-05-13 17:04:11

回答

3

这确实落在了Eric建议的内联方法上。

我设法在本地重现原始错误,但仅在发布版本中进行编译时。就像我有PDB一样,我可以通过代码来找到问题。