Java:我如何发现私有变量如何填充值?



TLDR: servlet调用getResponse,我试图找出一个变量得到它的值。


所以我有下面的代码:

protected final Logger logger = LoggerFactory.getLogger(getClass());
private Map<String, ApiEndpoint> apiConfigMap = new HashMap<>();
@Override
public void addConfig(String configKey, ApiEndpoint apiEndpoint) {
if(apiEndpoint != null) apiConfigMap.put(configKey, apiEndpoint);
logger.info("ApiConfigurationImpl: updated apiConfigMap:{}",apiConfigMap);
}
@Override
public void getResponse(String param1, String param2) throws IOException {
logger.info("im inside getResponse);
//do stuff here
}

我的servlet函数正在调用getResponse,当我在getResponse中得到logger.info时,变量"apiConfigMap"已填充(长度=19).

你知道apiConfigMap是如何填充的吗?

Things I checked

  • 我上面列出的代码是类中唯一为apiConfigMap分配值的地方
  • addConfig函数是apiConfigMap。把存在
  • 我在addConfig函数中的logger.info中放置了一个断点。执行从未停止。
  • 类中还有其他函数使用自己的本地HashMap变量。为了安全起见,我在每个函数的第一行设置了一个断点。

请注意,使用HashMap很容易出现并发问题,因为它不是线程安全的。

用自定义映射实现替换apiConfigMap的初始化(可能从HashMap派生)。在您的自定义映射实现修改其状态的所有映射方法中创建一个条件断点,并检查受影响的实例是否是您的自定义映射实现之一。

然后运行附带调试器的应用程序,并检查调试器遇到断点的位置。使用条件断点可能会降低应用程序的速度。因此,这可能需要比平常更长的时间才能使应用程序达到启动或执行某些操作的点。

最新更新