如何在 catch 异常中显示行号和帧?

Yan*_*aya 5 c#

我正在尝试将行号和帧写入文本文件,但无法使其工作。从我在网上读到的内容来看,我编写的方式应该可以工作,但它实际上并没有输出任何行号,使我的调试变得非常困难。任何人都可以帮忙指出我的代码可能有错误的地方吗?

catch (Exception e)
        {                
            var st = new StackTrace(e, true);
            var frame = st.GetFrame(0);
            var line = frame.GetFileLineNumber();
            var sw = new System.IO.StreamWriter(filename, true);

            sw.WriteLine(
                DateTime.Now.ToString() + "\r\n" 
                + e.Message + "\r\n" 
                + e.InnerException + "\r\n"                    
                + e.Source + "\r\n"
                + frame + "\r\n" 
                + line);
            sw.Close();

        }
Run Code Online (Sandbox Code Playgroud)

它确实输出一些信息,但不是行/帧号。

这是获取输出的示例。

22/08/2016 08:34:24
Input string was not in a correct format.
StringToNumber at offset 12099653 in file:line:column <filename unknown>:0:0 0
Run Code Online (Sandbox Code Playgroud)

另请注意,应用程序在“调试”而不是“发布”下运行。

dlx*_*eon 3

确保您的应用程序是在调试模式下构建的。如果它是在发行版中,则某些信息(例如行号)不会包含在异常文本中。

另一个可能的原因是您编辑了项目的调试配置并禁用了调试信息(项目设置=>构建=>高级=>输出调试信息)

最后,您需要 pdb 文件作为行号,它们应该与您的 .exe / .dll 位于同一文件夹中。默认情况下,它们就在那里,直到您手动删除它们或将应用程序的部分内容复制到另一个位置并在那里运行。

  • 您可以在 RELEASE 版本中拥有行号 - 您只需要拥有 PDB。 (3认同)