首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IntelliJ调试器在foreach循环中找不到局部变量

IntelliJ调试器在foreach循环中找不到局部变量
EN

Stack Overflow用户
提问于 2022-04-23 21:01:27
回答 1查看 1.9K关注 0票数 0

在尝试调试以下块时,IntelliJ出错:

代码语言:javascript
复制
1.  private boolean compareMatrices(Map<String, Map<String, Double> toCompare) {
2.      for (String c1 : this.keySet()) {
3.          Map<String, Double> thisRow = this.get(c1);
4.          Map<String, Double> otherRow = toCompare.get(c1);
5.
6.          for (Entry<String, Double> cell : thisRow.entrySet())
7.              if (!otherRow.get(cell.getKey()).equals(cell.getValue()))
8.                  return false;
9.      }
10.     return true;
11. }

我在第7行放置了一个带有条件otherRow.get(cell.getKey()) == null的断点,并在命中断点时从调试器获取"Cannot find local variable cell"错误。如果我将for块(第6-8行)括在大括号中,则不会发生此错误,如下所示:

代码语言:javascript
复制
1.  private boolean compareMatrices(Map<String, Map<String, Double> toCompare) {
2.      for (Stringc1 : this.keySet()) {
3.          Map<String, Double> thisRow = this.get(c1);
4.          Map<String, Double> otherRow = toCompare.get(c1);
5.
6.          for (Entry<String, Double> cell : thisRow.entrySet()) {
7.              if (!otherRow.get(cell.getKey()).equals(cell.getValue()))
8.                  return false;
10.         }
10.     }
11.     return true;
12. }

我的问题是,这个错误是来自我可能犯的配置错误,还是与IntelliJ对Java语法的错误解释有关?另外,条件断点是否会显著降低调试器的速度?当使用上面的第二个版本时,调试器将正确执行,但花费的时间是正常执行时的十倍以上。

EN

回答 1

Stack Overflow用户

发布于 2022-04-23 22:36:40

您的代码是有效的java,因此它不可能是配置错误。我怀疑这是不是IntelliJ的错误。我猜你:

  • 用当前的

括号编译了程序

  • 以调试模式运行程序

  • 移除括号

  • 使用断点

执行行。

现在您的源代码与编译的源代码不匹配,因此出现了错误。

停止执行,用第一个版本的代码重新构建项目,然后再试着调试它。

同时,条件断点是否会显著降低调试器的速度?

是的,有可能。字段和方法断点也明显慢于“常规”断点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71983584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档