除了阅读 GetFileName()文件并从

读取堆栈框的 GetFileLineNumber()之外
new StackTrace(exception).GetFrame(x)

有没有办法获得导致异常的实际代码行(作为字符串)?

由于

有帮助吗?

解决方案

发布moretem调试很困难,但并非不可能。您可以使用工具(此处此处)以及技术的。

其他提示

我不这么认为。代码已编译,因此不再可用。 但是,如果您拥有可用的源代码,则可能会有一些解决方法。

不,就我所知,这是你唯一的选择。为了获得导致异常的原始代码行,必须使源可用。 StackFrame 已经让你能够得到行号(通过调试符号 - 在大多数情况下是PDB文件),让它变得简单,我会说。

您建议的方法是否有任何特殊问题?

没有可行的方法,因为行信息不存储在DLL文件中。将IL块映射到源代码行的信息存储在PDB文件中。您需要访问PDB才能获取异常的行信息。

如果PDB可用,StackFrame类上有足够的信息来获取适当的ISymUnmanagedMethod类。主要是你只需要方法标记和方法中的当前偏移量。这确实需要您了解PDB的内部结构,我不确定它是否记录在任何地方。

PDB API: http://msdn.microsoft.com/en-我们/库/ ms233503.aspx

它会被编译,所以在运行时你只有IL。充其量,你可以获得IL并将其反编译回C#,就像反射器一样。

您可以使用 try catch 块来获取行:

catch(Exception exception) {
    //exception.StackTrace at the first line has the line you are looking for
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top