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

标签 java debugging intellij-idea breakpoints tostring

我有使用 toString() 来针对黄金大师测试单元测试输出的代码(期望特定输出)。同时,当我调试所述单元测试时, toString() 的输出有点简洁,我希望在调试器输出中显示更广泛/友好的信息(变量显示、 watch 等)。要做的就是检测 toString() 被调用作为调试器评估的结果,而不是作为在正常代码路径中运行的结果。

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

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

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

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

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

最佳答案

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

关于java - 当应用程序停止时,我们是否可以检测到正在调用 toString() 以响应调试器请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57023962/

相关文章:

java - 通用方法语法

java - 如何设置 JDI 启动连接器?

java - 更新 Runnable 中的 TextView 会导致 Activity 停止

Android adb wireless/WIFI调试操作超时

visual-studio - Visual Studio 立即窗口 : how to see more than the first 100 items

java - 使用 Maven 从单个项目创建多个 jar 文件

c# - Visual Studio 可以告诉我哪个引用引发了 NullReferenceException 吗?

intellij-idea - 如何在 IntelliJ 14+ 中正确导入具有所有集成功能(运行、调试、测试)的 Play 2+ 项目?

java - 导入 OptaPlanner 项目时 Maven 库问题

java - 在 Intellij 中打开属于项目一部分的文件