首页 > 解决方案 > IntelliJ 调试 - 监视包含特定值的任何变量

问题描述

是否可以在没有特定变量或代码行的情况下设置全局监视或断点,以识别值的第一个实例?

我正在调试一个旧的 java6 Web 应用程序,该应用程序在多个数据库和数十个类之间进行一百万次计算,每个类都有数千行代码。我不确定在这个包含数百个类的项目中调用了这几十个类中的哪一个。

假设我正在寻找"the dog runs"计算流程中出现的位置:是否可以侦听该字符串的第一次出现以查找哪个变量将包含该值?

标签: javadebuggingintellij-idea

解决方案


我认为不可能像您所要求的那样监控价值的存在位置。

但是,您可以设置“字段观察点”,它们基本上是类似break when x = "the dog runs". 当我在使用这些程序之前,程序会运行得非常非常慢。

有关如何设置它的详细信息,请参阅此处:Intellij breakpoints

另一种技术是从您认为将值设置为所需值的顶部附近开始。遍历每种方法,直到您看到值设置为您要查找的值。然后在您看到它更改的方法内重复该过程(即这次进入值更改的方法)。

在这个“二级方法”中,您可能会看到另一个设置您正在寻找的值的调用。因此,再次重复该过程,直到找到设置值的系统调用(例如,从数据库读取或正则表达式匹配等)。

这听起来很乏味,但它是一种“分而治之”的方法,它消除了一大块没有将您正在寻找的值设置为一个方法调用的代码。然后你分而治之,征服该方法的内部运作。在实践中,很快就会缩小范围。


推荐阅读