2013-04-05 50 views
3

我在尝试在grails中调试某些代码时遇到困难。这很难写入文字,所以我发布了一个屏幕截图,显示问题是here。简而言之,在我调试时,调试器开始跳转,而不是遵循我已有的程序逻辑。我发现的唯一的其他类似问题是一岁,没有解决办法,可以找到hereGroovy调试器不同步

到目前为止,我的最佳猜测是调试器正在显示我输入的文本,但实际上正在执行缓存在某处的类文件的旧版本。因此,我想:

  • 清洁项目
  • 手动删除所有的类文件从目标文件夹,从目标eclipse文件夹
  • 搜索我的整个硬盘的其他文件具有类似名称
  • 从工作区中删除我的项目,重新添加
  • 关闭并重新打开IDE
  • Grails的刷新依赖性
  • 将项目导入新IDE(我正在使用GGTS,我切换到IntelliJ)

这些解决方案都没有任何效果。我意识到问题出在一个.groovy文件中,而且我正在编写几乎纯粹的Java,因此我删除了.groovy文件,并在.java文件中重新创建该类。这解决了我的问题。不幸的是,我又遇到了问题,这次它是一个严重依赖于grails框架的控制器,所以解决方案不是一种选择。除了在.groovy文件之外,另一个相似之处在于代码在if语句中断开。

我的下一个步骤:

  • 验证应用程序不会被使用打印功能,可监控实际的执行流来执行我看到的代码。
  • 注释掉整个函数并重新添加一行一行的功能,以查看是否可以看到它是什么打破它。
  • 删除.groovy文件,并将其重新创建为另一个.groovy文件。

任何帮助表示赞赏,因为我无法找到任何答案在线我会继续更新这个问题,因为我了解更多。

+0

更新: 我验证了正在执行的代码与正在执行的代码不同。详情here。具体来说,调试器在代码块结束时停止的地方只是一种幻想。 现在我正在通过忽略调试器中的异常跳转来解决这个问题。我已经能够以这种方式很好地编写代码,但它远非理想。 – benjaminjsanders 2013-04-05 19:38:25

+0

更新:我注意到另一个可能与Grails调试器有关的问题。我试图通过添加一个变量来解决这个问题,然后在程序执行的不同点处打印出它的值。我发现当我清理并重新编译程序时,声明该变量的行没有被执行,但调用该变量来打印其值的行正在执行。显然这引发了一个异常,因为调试器认为该变量没有被声明。 – benjaminjsanders 2013-04-22 19:04:42

+0

我试图通过从grails 1.3.7升级到grails 2.2.0来解决所有上述问题。升级进展不顺利,此时应用程序非常小,所以我在grails 2.2.0中创建了一个新项目,使用正确的名称创建了空类,然后粘贴了旧代码的逻辑。其效果是消除所有先前存在的问题区域和调试器错误,但是同样的问题也在新项目中出现,只是在代码中的不同位置。 – benjaminjsanders 2013-04-22 19:07:30

回答

1

请参阅我对jira issue that you raised的评论。您发现Groovy编译器存在问题,以及它如何计算行号。这不是执行错误的类文件或使用损坏的调试器的问题。调试器正在执行它预期的操作。编译器提供的是错误的行号信息。

如问题所述,下一步是提供一个简单的项目来重新创建该错误。我试图自己做,但不能。所以,请提供我们可以使用的东西。然后我们可以通知groovy编译器团队。