【发布时间】:2013-04-05 17:50:06
【问题描述】:
我在尝试调试 grails 中的某些代码时遇到了困难。很难输入文字,所以我发布了一个截屏视频,确切地显示了问题所在here。简而言之,当我调试时,调试器开始从一个地方跳到另一个地方,而不是遵循我已有的程序逻辑。我发现的唯一一个类似的问题是一年前,没有解决方案,可以找到here。
到目前为止,我最好的猜测是调试器正在显示我输入的文本,但实际上正在执行它缓存在某处的旧版本的类文件。因此,我尝试了:
- 清理项目
- 从目标文件夹和 target-eclipse 文件夹中手动删除所有类文件
- 在我的整个硬盘中搜索具有相似名称的其他文件
- 从工作区中删除我的项目并重新添加它
- 关闭并重新打开 IDE
- grails 刷新依赖项
- 将项目导入新的 IDE(我使用的是 GGTS,我切换到了 IntelliJ)
这些解决方案都没有任何效果。我意识到问题出在 .groovy 文件中,而我编写的几乎是纯 Java,所以我删除了 .groovy 文件,并在 .java 文件中重新创建了类。这解决了我的问题。不幸的是,我又遇到了这个问题,这次是在一个严重依赖 grails 框架的控制器中,所以这个解决方案不是一个选择。除了也在 .groovy 文件中之外,另一个相似之处是代码在 if 语句上中断。
我的下一步:
- 通过使用打印函数监控实际执行流程,验证应用程序没有执行我看到的代码。
- 注释掉整个函数,然后一次一行地重新添加功能,看看我是否能看出是什么破坏了它。
- 删除 .groovy 文件,然后将其重新创建为另一个 .groovy 文件。
感谢您的帮助,由于我在网上找不到任何答案,我将在了解更多信息后继续更新此问题。
【问题讨论】:
-
更新:我验证了正在执行的代码与正在执行的代码不同。详细信息youtube.com/watch?v=K2tDUlTGoJ4">here</a>。具体来说,调试器在代码块末尾停止的地方只是一种错觉。现在我正在通过忽略调试器中的异常跳转来解决这个问题。我一直能够以这种方式编写足够好的代码,但远非理想。
-
更新:我注意到 Grails 调试器的另一个可能相关的问题。我试图通过添加一个变量然后在程序执行的不同点打印它的值来解决这个问题。我发现,当我清理并重新编译程序时,声明变量的行没有被执行,但调用变量以打印其值的行正在执行。显然,这引发了异常,因为调试器认为该变量尚未声明。
-
我试图通过从 grails 1.3.7 升级到 grails 2.2.0 来解决上述所有问题。升级并不顺利,此时应用程序相当小,所以我在 grails 2.2.0 中创建了一个新项目,创建了具有正确名称的空类,然后将旧代码中的逻辑粘贴到其中。效果是消除了所有以前存在的问题区域和调试器错误,但同样的问题也出现在新项目中,只是在代码中的不同位置。
-
我尝试了许多编译选项来编译 Groovy 脚本然后执行它们,但我仍然遇到您描述的调试器不同步的问题。 :(
标签: eclipse debugging grails groovy sts-springsourcetoolsuite