有没有办法让Eclipse在其控制台中显示为“顶级”异常而不是仅打印所有堆栈跟踪并让我总是在屏幕上填充基本无用的东西?这是一张图片:
基本上有两件事我可能想知道99%的时候有异常:它的名字+消息加上它所采用的方法。没有向上滚动,它们都不可见。 这就是我觉得应该显示数据的方式:
有没有办法改变这个Eclipse的行为?
答案 0 :(得分:3)
我知道没有Eclipse功能可以做到这一点。
我不同意IDE 应该这样做。 IDE无法知道堆栈跟踪中的哪些信息有用或无效。基于一些启发式将控制台滚动到堆栈跟踪的所谓有用部分可能今天帮助你一点点,但明天它可能会阻碍你很多。如果您开始折叠或编辑控制台窗口中显示的堆栈跟踪,则问题/危险可能会更严重。
使用滚动条Luke!
如果您真的认为这是一个好主意,请实施它并向Eclipse开发人员提交补丁。或者创建一个插件。或者使用其他IDE。
顺便说一句,您在评论中包含的屏幕截图并未显示IDE滚动控制台窗口。相反,它显示的是一个实际上已经按原样传递给IDE的异常。 Eclipse也可以在某种程度上执行此操作......如JUnit测试视图,错误视图等所示。但是,如果堆栈跟踪已呈现为文本并写入控制台窗口,则此操作无效。 (首先,实际上没有指定堆栈跟踪的文本格式。)
答案 1 :(得分:2)
我认为Eclipse中没有办法做到这一点。
但我认为IDE实际上与此无关。由于您的程序没有捕获异常,因此JVM将输出打印到控制台。如果从命令行运行它,您将看到相同的输出。
我认为程序应该处理异常并将所需的信息级别打印到控制台。
答案 2 :(得分:1)
确实,IDE与此无关。并且您可能希望重新表达该意见,因为有时候有用的信息并不总是最后执行的行,而是堆栈跟踪中的某个位置(例如:无效值传递给方法,直到发生异常的第n级)。 )
Eclipse无法更改此行为,因为这是JVM的运行时行为;当异常不是catch时,System.err
用于输出堆栈跟踪。您可以通过替换error output stream。
您设置的PrintWriter
可以保留System.err
的原始副本并简单地丢弃您不关心的任何内容(即任何与“^\s*(java(x?)\.).*
”匹配的内容,或者其他内容)但是工作周围不值得麻烦。
更好的解决方案是捕获和处理异常并输出有用的东西。当某个方法抛出异常时,Java API非常明确。那里应该不足为奇。
或者另一种解决方案是避免异常,并且很高兴Java打印出一个非常有用的堆栈跟踪,并帮助您调试应用程序。许多语言实际上并不这样做(或者不那么好)。如果将应用程序部署到客户端,您实际上会很高兴用户向您发送完整的堆栈跟踪,而不仅仅是发生异常的单行程序。
答案 3 :(得分:1)
您可以使用像grepclipse或GerpConsole这样的eclipse插件来过滤控制台的输出,并使用常规表达式。