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

Can we detect that toString() is being called in response to a debugger request when the application is stopped?

我的代码使用 toString() 来针对黄金大师测试单元测试输出(期望特定输出)。同时,当我调试上述单元测试时,toString() 的输出有些简洁,我希望在调试器输出中显示更多 extensive/friendly 信息(变量显示、监视等)。喜欢做的是检测 toString() 作为调试器评估的结果被调用,而不是作为正常代码路径中 运行ning 的结果。

我试过在调用 toString() 时转储堆栈和线程信息。它总是在被调试的相同上下文(调用堆栈和线程)中调用。当调用 toString() 时,没有 "special" 方法被压入堆栈—— toString() 出现,然后 "currently" 执行方法。

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

一个可能的解决方案是获取 toString() 调用上方的堆栈帧,获取其文件和行号,并检查该行上是否存在对 toString() 的直接或隐式调用。我认为检测所有可以创建隐式调用的情况很容易出错,所以我宁愿不走那条路。

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

我希望有一些我忽略的 API 或技术可以给我这个信息。

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