2012-06-07 68 views
1

在我负责的代码中,我有几个'抛出新的Exception()'方法。获取行号码

问题是,catch并不总是处于最佳位置,甚至不在同一班。这意味着当我发现一个错误时,我不知道起始位置在哪里,或者即使如此,每个类中可能会有数百/数千行代码。

因此,在throw消息中,为了进行调试,可能需要声明类名称,项目名称,方法名称和行号以便于导航。行号很棘手。我无法对它进行硬编码,因为只要我修改代码就不太可能保持在同一行。

所以,我的2个问题是
1)我们喜欢这个想法还是认为不,有更好的方法!
2)任何想法如何获得行号?

+4

此信息通常在堆栈跟踪中可用。 –

+0

在单一课堂中拥有数千行不是一个好主意。 – unholysampler

+0

要跳转到visual studio中的确切行,请使用键盘快捷键ctrl + g –

回答

0

如果包括调试符号(.pdb)文件,在同一目录中.dll.exe,它会自动加载它们,并提供在exception.StackTrace的行号。

要构建的符号,在你的发布构建设置,下高级构建设置,转调试信息全部

Advanced Build Settings

0

你使用Visual Studio?您可以在调试时使用“调用堆栈”工具栏,它会显示代码中的执行顺序。您可以选择方法并将您带到执行线

0

此信息通常可以在堆栈跟踪 - 由Jeremy(见我的意见)。

对不起,如何标记评论为正确答案!

+0

不能,除非他让它成为答案 –

0

行号不会显示在以发行模式编译的代码中。如果这是一个内部应用程序,您和您确实想要行号,您可以始终部署以调试模式编译的代码,然后使用程序集部署PDB。但是这也涉及性能成本,所以这并不总是最好的方法。尽管如此,我不确定是否有更好的方法。

如果我没有记错的话,Roslyn项目给了我们一个更好的方式来获取行数,但不够熟悉它以提供更多细节。

0

您可以使用C#5捕获调用者的行号。0功能结合默认参数。因此,不要直接构造和抛出异常,而要构建一个构造异常的方法。

异常CreateMyException( [CallerFilePath]字符串文件路径= “”, [CallerMemberName]串成员名称= “”, [CallerLineNumber] INT LINENUMBER = 0) { 返回新的异常(的String.Format(“抛出异常来自文件{2}中成员{1}中的行{0}“, lineNumber,memberName,filePath)); }

...在你的代码的其他地方..

掷CreateMyException(); //编译器为默认参数注入当前值。