首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在IntelliJ中,当我触发一个异常时,我如何回过头来找出是哪一行抛出了它?

在IntelliJ中,当我触发一个异常时,我如何回过头来找出是哪一行抛出了它?
EN

Stack Overflow用户
提问于 2016-09-10 03:29:36
回答 3查看 1.1K关注 0票数 2

当我通过单步执行调试一段Java代码时,有一行抛出了异常,我需要搜索抛出异常的是哪行。

但是现在我已经在编写异常处理程序代码了。有没有办法追踪我的过程中哪一行代码抛出了这个异常?

我使用的是IntelliJ Idea 16.2。

EN

回答 3

Stack Overflow用户

发布于 2016-09-10 03:43:14

如果在调试器会话中的范围内有异常,请在Mac中按Alt+F8 (计算表达式),不确定其他操作系统,然后执行exception.printStacktrace(),您将在控制台窗口中获得可单击的堆栈跟踪(或者在类检查器中查看stackTrace数组)。

票数 2
EN

Stack Overflow用户

发布于 2016-09-10 03:43:00

有几种方法。首先,如果您根本没有捕获到异常,JVM将把它放入标准错误流(stderr)中,您的线程将终止。如果发生这种情况,IntelliJ将在输出控制台中打印它(如果您使用的是Darkula主题,我相信stderr会以红色文本显示),并显示完整的堆栈跟踪。IntelliJ还对输出进行格式化,以便您可以单击每个堆栈元素的行号并查看异常的确切来源。

或者,如果您已经捕获了异常并希望更优雅地处理它,但仍然希望输出行号,则可以使用java.lang.Throwable#printStackTrace(java.io.PrintStream)方法告诉该异常将其自身打印到特定的PrintStream (如System.outSystem.err)。

现在,如果您真的在调试应用程序(使用断点和诸如此类的东西来逐步调试它),事情就会变得更容易、更详细。IntelliJ的调试器非常适合查看整个堆栈(尽管在调试远程应用程序时会有点慢)。它看起来像这样:http://i.imgur.com/Yv4IgKj.png

在上面,你有你的源代码。下面是你的调试器。"Frames“窗格是您的调用堆栈;您可以单击堆栈中的任何方法来查看它及其所有堆栈变量。只需单击几下,您就可以看到异常是从哪里抛出的,只需导航堆栈帧并查找相关的throw语句。

但是等等,还有更多!你知道你正在寻找什么异常,并且想要在抛出它时立即中断吗?IntelliJ可以做到!单击“查看断点”按钮(在框架窗格的左侧),您只需指定要捕获的异常类的名称即可执行add an Exception Breakpoint。一旦抛出该时间的异常,您的调试器将暂停并将您带到它。这使得导航到特定的异常变得微不足道。

票数 1
EN

Stack Overflow用户

发布于 2016-09-10 03:59:53

在调用此过程的方法中放置一个断点,使用F7按执行顺序在行之间移动,使用F8转到下一个断点,使用F9结束方法进程。您可以使用try catch块处理此异常,并在控制台中记录类型以及抛出它的行。

希望能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39418534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档