2016-07-31 45 views
0

问题很明显。 它应该与如何获得线路例外

StackTrace st = new StackTrace(exc, true); 

//Get the first stack frame 
StackFrame frame = st.GetFrame(0); 

//Get the file name 
//string fileName = frame.GetFileName(); 

//Get the line number from the stack frame 
int line = frame.GetFileLineNumber(); 

问题的工作是,如果我启动我在调试模式下的应用程序它工作始终。 当我在发布模式下启动它时,似乎需要使用pdb文件来获取此信息。那么保留pdb文件有什么缺点(我认为只有在调试模式下才需要它们)。 Viceversa是获取异常信息的唯一方法吗?

+1

编译器会重新安排您的所有代码并完全删除一些行 - 释放模式会大量优化代码,并且输出“代码”可能与您的原始代码无关。堆栈跟踪不会在“发布”中显示行号,因为根据通常单独的exe(或dll)无法分辨。 –

+0

但是,如果我保留pdb文件堆栈跟踪确实显示行号。 – Patrick

+0

@Benjamin:您可以在发布模式下获得行号。但是,由于你提到的原因,它们可能不是100%准确的。 – sstan

回答

2

那么什么是保持PDB文件的缺点(我以为他们只需要在调试模式下)

大部分是它使一个更大的部署的事实。显然它doesn't affect performance

Viceversa是获取异常行信息的唯一方法吗?

是的,只有pdb包含行信息。但正如评论中提到的,在发行模式下,行号可能不完全准确。

1

除了使用pdb文件做的技巧之外,如果需要保留行数(不是100%),则需要为项目禁用“优化代码”选项。但是,这是不建议,因为它可能会让你的程序变慢。

您可以在项目属性中的构建选项中找到它。

优化代码重新排列代码删除,移动和添加行以优化它。

+0

@BenjaminGruenbaum不是那么简单从名称“优化代码”? – user3185569