题
除了阅读 GetFileName()
文件并从
GetFileLineNumber()
之外
new StackTrace(exception).GetFrame(x)
有没有办法获得导致异常的实际代码行(作为字符串)?
由于
其他提示
我不这么认为。代码已编译,因此不再可用。 但是,如果您还拥有可用的源代码,则可能会有一些解决方法。
不,就我所知,这是你唯一的选择。为了获得导致异常的原始代码行,必须使源可用。 StackFrame
已经让你能够得到行号(通过调试符号 - 在大多数情况下是PDB文件),让它变得简单,我会说。
您建议的方法是否有任何特殊问题?
没有可行的方法,因为行信息不存储在DLL文件中。将IL块映射到源代码行的信息存储在PDB文件中。您需要访问PDB才能获取异常的行信息。
如果PDB可用,StackFrame类上有足够的信息来获取适当的ISymUnmanagedMethod类。主要是你只需要方法标记和方法中的当前偏移量。这确实需要您了解PDB的内部结构,我不确定它是否记录在任何地方。
它会被编译,所以在运行时你只有IL。充其量,你可以获得IL并将其反编译回C#,就像反射器一样。
您可以使用 try catch
块来获取行:
catch(Exception exception) {
//exception.StackTrace at the first line has the line you are looking for
}
不隶属于 StackOverflow