我的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,因为它出现在未处理的异常时。我该如何访问它?
答案 0 :(得分:2)
Environment.StackTrace
为您提供堆栈跟踪每行中的文件名和行号。它格式清晰,应易于解析。来自the documentation:
StackTrace属性格式化每个堆栈跟踪信息 方法调用如下:
“在FullClassName。FileName中的MethodName(MethodParams):line LineNumber“
文字“at”前面有三个空格,文字“in” 如果调试符号不可用,则省略“:line”。该 占位符,FullClassName,MethodName,MethodParms,FileName和 LineNumber由实际值替换,如下所示:
FullClassName类的全名,包括命名空间。
MethodName方法的名称。
MethodParms参数类型/名称对的列表。每一对都是 用逗号分隔(“,”)。如果是MethodName,则省略此信息 取零参数。
FileName MethodName方法所在的源文件的名称 声明。如果没有调试符号,则省略此信息 可用。
LineNumber FileName中包含源的行数 MethodName中的代码,用于调用堆栈上的指令。 如果调试符号不可用,则省略此信息。
在您提出的问题中,Environment.StackTrace
不是您问题的答案,但似乎您应该能够解析出源文件名和行号,然后从文件中读取该行。我错过了什么?