我可以用堆栈跟踪检索实际的代码行吗
本文关键字:代码 堆栈 跟踪 检索 我可以 | 更新日期: 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
不是您问题的答案,但似乎您应该能够解析出源文件名和行号,然后从文件中读取该行。我错过了什么?