【问题标题】:Get file name and line number from Exception从异常中获取文件名和行号
【发布时间】:2014-01-26 07:01:36
【问题描述】:

我有一个 c# windows 应用程序(在 Plugin Architecture 中开发),我想从我的应用程序中记录所有未处理的异常。 我能够捕获所有异常。

我想从异常中读取文件名和行号。 (在 .Net 2.0 中)

我用过

 if (exception.InnerException != null)
 {
     exception = exception.InnerException;
 }

StackTrace trace = new StackTrace(exception, true);
string fileName = trace.GetFrame(0).GetFileName();
int lineNo = trace.GetFrame(0).GetFileLineNumber();

它在我的应用程序中的异常情况下工作正常,如果引用 dll 中的任何异常我没有得到文件名和 lineNumber

【问题讨论】:

  • 我在想一些事情,要么记录每一帧,要么遍历帧,直到找到来自代码的帧

标签: c# exception .net-2.0 stack-trace plugin-architecture


【解决方案1】:

第一帧并不总是正确的答案。就我而言,这是最后一个。总的来说,我认为是第一个有文件的。

【讨论】:

    【解决方案2】:

    仅当相关 DLL 的“.pdb”文件可用时,此信息才可用。

    因此,您应该确保相应的“.pdb”文件与它们相应的 DLL 并排放置。

    您还需要启用 PDB 文件中的完整数据。调试版本默认执行此操作,但发布版本不包含行号信息。

    您可以通过转到项目的构建页面来配置发布构建,确保您已选择“发布”配置,然后单击页面底部的“高级”按钮。在“高级构建设置”对话框中,您需要为“调试信息”设置选择“完整”。

    【讨论】:

    • 我认为 OP 想要应用程序中最内部调用的文件/行号,而不是 DLL 中的文件/行号
    • @DrewMcGowen 嗯,我认为这是因为他没有包含完整调试信息的“PDB”文件,他称之为“参考文件”。
    • 谢谢你..我复制了.pdb文件,现在我得到了行号和文件名。
    • @Matthew Watson 如果您为发布版本执行此操作,这会影响性能吗?
    • @KP_ 对运行时没有影响,它只是使符号和行号可用。它可能会使构建速度稍微慢一些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 2010-11-19
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多