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

时间:2016-08-22 08:03:20

标签: 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();

        }

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

以下是输出内容的示例。

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

另请注意,应用程序正在Debug not Release中运行。

1 个答案:

答案 0 :(得分:2)

确保您的应用程序是在DEBUG模式下构建的。如果它处于发布状态,则行例编号等信息不会包含在例外文本中。

另一个可能的原因是您编辑了项目的调试配置并禁用了调试信息(项目设置=&gt; Build =&gt; Advanced =&gt;输出调试信息)

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