我可以用堆栈跟踪检索实际的代码行吗

本文关键字:代码 堆栈 跟踪 检索 我可以 | 更新日期: 2024-09-19 06:34:49

我的ASP.NET应用程序有一个快速而肮脏的单元测试框架——一个ASPX页面,该页面具有一个比较预期结果和实际结果并创建表的方法。它根据需要进行编译,使我能够快速创建和运行一系列测试,即使不运行VS.NET。

下面是一个示例调用:

PrintResult(
   expected:  "$A$1", 
   actual:    RST.ExcelReference.FormatReferences("{{REF:1:0:1:0}}", false, 0, 0),
   arguments: "RST.ExcelReference.FormatReferences('"{{REF:1:0:1:0}}'", false, 0, 0)");

(为了清晰起见,添加了命名参数。)

可以想象,同步实际调用和该调用的显示是一件痛苦的事情。

我知道我不能检查Environment.StackTrace中的参数值,只能检查方法定义和行号。但在我的情况下,我不需要实际的参数值。我通常使用文字作为参数来调用这个方法,所以我只需要一行源代码,作为堆栈跟踪中PrintResult()的入口点。

源代码似乎以某种方式可用于ASP.NET,就像出现未处理的异常时一样。我如何访问它?

我可以用堆栈跟踪检索实际的代码行吗

Environment.StackTrace为您提供堆栈跟踪的每一行中的文件名和行号。它的格式很清晰,应该很容易解析。来自文件:

StackTrace属性为每个方法调用如下:

"位于FileName中的FullClassName.MethodName(MethodParams):行LineNumber"

文字"at"前面有三个空格,文字"in"如果调试符号不可用,则省略":line"。这个占位符、FullClassName、MethodName、MethodParms、FileName和LineNumber,替换为如下定义的实际值:

FullClassName类的全名,包括命名空间。

MethodName方法的名称。

MethodParms参数类型/名称对的列表。每对用逗号(",")分隔。如果MethodName采用零参数。

FileName MethodName方法所在的源文件的名称声明。如果调试符号不是可获得的

LineNumber FileName中包含源的行号调用堆栈上指令的MethodName中的代码。如果调试符号不可用,则会忽略此信息。

在问题中,您暗示Environment.StackTrace不是您问题的答案,但似乎您应该能够解析出源文件名和行号,然后从文件中读取该行。我错过了什么?

相关文章: