有时候你在运行程序时可能会出现如下错误:
[java] view plain copyExcepTIon in thread “main” java.lang.NullPointerExcepTIon
at com.example.myproject.Book.getTItle(Book.java:16)
at com.example.myproject.Author.getBookTItles(Author.java:25)
at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
人们常把这个定义为“堆栈追踪(Stack Trace)”。
换句话说,StackTrace就是当程序运行且抛出异常时一系列的函数调用的轨迹。
简单的例子根据上面的异常提示,我们可以准确地确定到底是程序的哪个部分抛出了异常。
首先来看最顶端的函数调用:
[java] view plain copyat com.example.myproject.Book.getTitle(Book.java:16)
为了调试这个程序,我们可以打开 Book.java,并看到16行处,如下:
[java] view plain copypublic String getTitle() {
System.out.println(title.toString()); //《-- 16行
return title;
}
这就可以表明以上代码中的某个对象(可能是 title)为 null.
查看堆栈跟踪并定位到失败点在运行单元测试并接收到失败结果之后,可以查看堆栈跟踪来了解有关测试失败的上下文信息。也可以直接定位到测试中的失败点。
堆栈跟踪显示在 Visual Studio 中的“测试结果详细信息”页上。堆栈跟踪也会逐字写入到该测试运行的测试结果 (*.trx) 文件中。这意味着,如果在 Visual Studio 中打开测试结果文件,则可以查看为该测试运行记录的堆栈跟踪。
堆栈跟踪内容堆栈跟踪会显示一个方法列表,这些方法表示测试运行期间的执行链。显示在堆栈跟踪底部的方法是测试运行期间遇到的第一种方法,通常为测试方法本身。这些方法序列会向上继续排列到堆栈跟踪的顶部,在此可以看到表示失败点的方法。通过检查此序列,通常可以对失败原因有更深入的了解。
失败点失败点是在以下任一方面导致测试失败的一行代码:
代码中包含一个执行失败并引发未捕获异常的 Assert 语句。
代码中包含引发未捕获异常的代码。
先决条件若要查看某个测试的堆栈跟踪并定位到失败点,则必须满足以下先决条件:
若要查看某个测试的堆栈跟踪,该测试必须生成“失败”或“没有结论”结果。堆栈跟踪不可用于已通过的测试。
若要显示失败点,必须按以下方式启用相应的选项:在“工具”菜单上单击“选项”。在“选项”对话框中,展开“测试工具”,然后单击“测试执行”。在“测试结果管理”下,单击“双击单元测试结果显示测试中的失败点”。
测试项目必须存在相应的调试符号。生成项目时,这些调试符号将写入到一个扩展名为 .pdb 的文件中。此文件出现在测试项目下的 bin\debug 目录中。另外,依据测试项目编译的程序集中的代码可能调用另一个程序集中的代码。在这种情况下,所调用的程序集的调试符号也必须可用。有关 .pdb 文件的更多信息,请参见 PDB 文件(C# 和 Visual Basic)。
查看堆栈跟踪
运行单元测试。
在“测试结果”窗口中,右击该测试并单击“查看测试结果详细信息”。
将在主编辑窗口中打开“测试结果详细信息”页。“测试结果详细信息”页的“错误堆栈跟踪”窗格将显示堆栈跟踪。堆栈跟踪中的每一行也将显示指向源代码中的行的超链接。
(可选)单击堆栈跟踪中的超链接以查看在此单元测试的运行中的该时间点调用的方法。
定位到失败点
运行单元测试。
在“测试结果”窗口中双击该测试。这将打开源文件并定位到失败点。
- 或 -
在“测试结果”窗口中,右击失败的测试并单击“查看测试结果详细信息”。
将在主编辑窗口中打开“测试结果详细信息”页。“测试结果详细信息”页的“错误堆栈跟踪”窗格将显示堆栈跟踪。堆栈跟踪中的每一行也将显示指向源代码中的某个位置的超链接。
单击堆栈跟踪的顶行中的超链接。这将打开源文件并定位到失败点。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)