2010-02-03 206 views
28

我使用C#来自Java背景 - 我有一个例外,但它不告诉我行号 - 只是方法名称。C#异常不给行号

是否正常?是调试/发布构建?

+0

是的,没有调试信息CLR不能报告行号。在调试会话中查找方法并查看问题仍然不应太困难。 – Lazarus 2010-02-03 12:56:40

+0

愚蠢:http://stackoverflow.com/questions/1328836 – raven 2010-02-12 15:10:41

+0

可能重复的[在异常处理中显示行号](http://stackoverflow.com/questions/688336/show-line-number-in-exception-handling ) – bmargulies 2012-10-25 14:52:46

回答

36

只要将pdb文件保留在应用程序目录中,在Debug中编译时应该可以使用行号。

根据Justin's answer,如果启用PDB创建,这也可以在Release中使用。

如果你有兴趣,更多信息可以在PDB Files找到(MSDN)

13

Exception类的StackTrace属性包含行号,至少如果调试信息(PDB文件)可用:

using System; 
class Program { 
    public static void Main() { 
     try { 
      throw new Exception("test"); 
     } catch (Exception e) { 
      Console.WriteLine(e.StackTrace); 
     } 
    } 
} 

将给予PDB文件输出如下:

at Program.Main() in X:\code\test\test\Program.cs:line 6 

,这不:

at Program.Main() 
4

确保您的应用程序的PDB文件部署与应用。 PDB文件是CLR用来确定源代码行号的文件。

15

这是下降到调试符号不被使用 - 当你建立你的项目,确保你在调试设置“满”设置(Project properties - >Build - >Advanced - >Debug info),并确保该当您运行应用程序时,所产生的pdb文件会在同一个目录中同时出现。