当应用程序停止时,我们能否检测到响应调试器请求而调用了toString()?

时间:2019-07-14 01:37:40

标签: java debugging intellij-idea breakpoints tostring

我有一些代码,使用toString()来针对黄金大师测试单元测试输出(期望特定的输出)。同时,当我调试上述单元测试时,toString()的输出有些简洁,我希望在调试器输出中显示更广泛/友好的信息(变量显示,手表等)。这样做是检测到toString()被调用是调试器评估的结果,而不是由于在正常代码路径中运行而导致的。

我尝试在调用toString()时转储堆栈和线程信息。它总是在与调试相同的上下文(调用堆栈和线程)中调用。调用toString()时,没有“特殊”方法被压入堆栈-出现toString(),然后出现“当前”执行方法。

我当前的解决方案是根据需要更改toString()的实现。但是,这很乏味,而且容易出错,如果我在一次完整的单元测试运行之前忘记重置它,我会遇到很多错误。

一种可能的解决方案是使堆栈框架位于toString()调用的正上方,获取其文件和行号,并检查该行上是否有对toString()的直接或隐式调用。我认为检测所有可能创建隐式调用的情况都容易出错,所以我宁愿走这条路。

如果有帮助,我正在IntelliJ IDEA调试器中运行Java代码。

我希望有一些我忽略的API或技术可以为我提供此信息。

1 个答案:

答案 0 :(得分:2)

请考虑使用IntelliJ IDEA中的Type Renderers功能,并禁用调试器的toString()评估。