41

我无法在 IntelliJ IDEA 中调试我的代码。当调试模式处于活动状态并正在运行时,但断点没有检查表示有效且可停止断点的“v”。

看图片:

在此处输入图像描述

我真的在网上搜索答案。我应该做些什么?

4

12 回答 12

75

我已经尝试了这里提到的所有内容,但都没有成功。唯一有用的信息在这里

本质上,您应该通过将以下内容添加到以下内容来禁用分叉执行grails-app/conf/BuildConfig.groovy

grails.project.fork = [
    test: false,
    run: false
]

现在可以在 IntelliJ IDEA Ultimate Edition v.12.1.6 中进行调试,只需普通调试即可,无需远程调试。在 Grails 2.3.1、Java 1.7.0_45、Windows 7 64 位上测试。

于 2013-11-04T22:28:13.513 回答
18

尝试这个:

在想法中,从“运行”按钮旁边的列表中选择编辑配置。然后添加Remote,选择您的姓名并保留默认的远程配置设置。(端口 5005 等)

使用从控制台运行您的应用程序

grails run-app --debug-fork

在想法中,从列表中选择您的配置并在控制台显示信息时点击调试按钮:

Listening for transport dt_socket at address: 5005
于 2013-10-08T22:25:11.290 回答
8

从 Grails 2.3 开始,引入了多个 Grails 命令(例如)的分叉执行。如果您只是从 IntelliJ IDEA 调试 Grails 应用程序,该过程将在调试选项打开的情况下启动。IDEA 控制台上的输出将是:run-apptest-appGrailsStarter

/usr/lib/jvm/default-java/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:59935,suspend=y,server=n [...] /opt/idea-IU-133.330/lib/idea_rt.jar org.codehaus.groovy.grails.cli.support.GrailsStarter [...] run-app Connected to the target VM, address: '127.0.0.1:59935', transport: 'socket'

应用程序本身将在一个名为ForkedTomcatServer. 这是你的代码运行的地方,也是你的调试器应该实际连接的地方。

为此,请debug: true在. 现在只需从 IDEA 运行 Grails(不要调试),当应用程序准备好服务 HTTP 请求时,您将在控制台中看到以下行:BuildConfig.groovyrungrails.project.fork

Listening for transport dt_socket at address: 5005

这是您想要将单独的远程运行配置定向到的位置。一旦你的远程调试器连接,发出一个 HTTP 请求,调试就可以工作了。

您还可以完全禁用 compile/test/run/war/console Grails 命令的分叉执行,方法是将与命令条目关联的值设置grails.project.forkfalse. 但是,您将失去 Grails 2.3 中添加的分叉执行的好处。

于 2013-12-20T11:12:01.417 回答
6

可以通过两种方式调试 grails (2.3+) 应用程序。

1.简单的解决方案:禁用调试

编辑 BuildConfig.groovy:

grails.project.fork = [
    war: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, fork ...
    run: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, fork ...

grails.project.fork = [
    war: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, fork ...
    run: false,

优点:

  • 做起来很简单(继续你的开发)

缺点:

  • 这消除了执行运行时代码替换的能力。这意味着如果您更改代码,它将不再被自动拾取,您需要重新启动应用程序才能看到更改。这可能非常耗时。

2.涉及的解决方案:调试分叉运行时

这是一个更复杂的解决方案,您可以将调试器附加到正在运行的 grails 应用程序。在这篇博文中有更详细的描述。

设置后,您有一个额外的运行配置,允许您在分叉模式下启动 grails,还有另一个额外的运行配置,允许您调试该分叉模式。问题是您需要同时启动两者,否则它不起作用。

优点:

  • 您有调试和运行时代码替换
  • 这不会干扰以正常模式启动应用程序。(即你有额外的选择)

缺点:

  • 设置需要一点时间
  • 在调试模式下启动需要一个更复杂的两步过程(即需要更长的时间)

注意事项

解决方案 2 的优势在于它允许灵活性。我个人不经常使用debug,所以就在正常模式下启动。当我想调试时,我以调试模式重新启动。

如果您需要调试并且还需要重新启动很多,则解决方案 1 会更好。例如,当您在 BootStrap.groovy 中处理域类或数据库设置时。

于 2014-10-29T11:40:55.647 回答
4

你看到这篇文章了吗?它详细介绍了如何逐步解决问题。

http://mrhaki.blogspot.com/2013/12/grails-goodness-debugging-app-in-forked.html

于 2014-11-07T20:59:39.433 回答
4

在 2016 年使用 Intellij 15.0.4 的 Grails 3.x 上,其他答案都不适用于我。这对我有用:

使用以下命令在 intellij 中启动 grails:

run-app  --debug-jvm

控制台应输出:“在地址监听传输 dt_socket:5005 Grails 应用程序在环境中运行在http://localhost:8080:开发”

现在,您可以在 Intellij 中添加类型为“Remote”的新配置。然后使用它的默认值启动它。

并且新的调试控制台窗口应该写:“已连接到目标 VM,地址:'localhost:5005',传输:'socket'”

完毕。

对于那些感兴趣的人,关于启动可调试服务器的 grails 3.x 文档的参考在第 2.8 节,runningAndDebuggingAnApplication:

http://grails.github.io/grails-doc/3.1.x/guide/gettingStarted.html#runningAndDebuggingAnApplication

“有几种方法可以执行 Application 类,如果您使用的是 IDE,那么您只需右键单击该类并直接从您的 IDE 运行它,这将启动您的 Grails 应用程序。这对于调试也很有用,因为您可以调试在命令行中使用 run-app --debug-jvm 命令时,无需连接远程调试器即可直接从 IDE 连接。”

重要的提示。当我尝试“只需右键单击该类并直接从您的 IDE 运行它”时,该应用程序确实启动了。但是,我发送到控制器的所有请求都导致 500 错误消息:“无法解析名称为 'grailsDispatcherServlet' 的 servlet 中名称为 '/myendpoint' 的视图。

所以,我恢复到上面的说明。

于 2016-04-01T14:02:42.497 回答
3

这对于 Grails 3 和 Idea (2016.1) 来说是一件非常简单的事情。正如其他答案中所建议的那样,不再需要编辑任何文件。

由于某种原因,Idea 工具栏中的调试图标是灰色的,因此您只需导航到您的应用程序入口点(具有启动应用程序的静态 void main 方法的类),单击其中一个运行箭头左侧装订线并选择调试选项。

来自 JetBrains 文档:

https://www.jetbrains.com/help/idea/2016.1/getting-started-with-grails-3.html

调试 Grails 3 应用程序

IntelliJ IDEA 允许您使用 Application.groovy 调试 Grails 3 应用程序。

在 Project 工具窗口中,打开 init 目录并右键单击 Application.groovy 从下拉列表中选择 Debug Grails:'name' grails3_debug_app 也可以使用编辑器启动调试过程。

于 2016-07-08T15:19:49.317 回答
1

我在 Mac Os x Lion 上使用最新的 Grails 2.3.4 测试了 intellij。

然后我尝试了 Igors 的建议,它在没有分叉模式的情况下工作。

grails.project.fork = [
    test: false,
    run: false
]

请查看详细的grails 文档

如果你想调试分叉模式,你应该检查以下博客文章的解释非常好。

http://blog.jdriven.com/2013/12/grails-goodness-debugging-app-forked-mode/

于 2014-01-03T13:11:37.253 回答
1

只是三个猜测:

尝试运行run-app,不run-war,两者都应该工作,但可能run-war只是不工作。

或者:尝试从控制台远程调试:

grails -debug run-app然后在 Idea 中连接 Remote Debug。

或者,最后的手段:将您的项目降级到以前的 Grails 版本可能会奏效。是的,这真的很烦人。

希望这可以帮助。

于 2013-10-09T08:41:48.333 回答
0

这不应该是默认配置,只能由个人选择。做两个配置只是让这个东西在 intellij 中以调试模式运行是一件非常痛苦的事情。首先,您必须通过在 run-app 后添加“--debug-fork”来设置或修改正常运行配置。其次,您必须配置远程调试,同时接受所有默认值。然后你必须运行运行配置,当它运行时,你运行调试配置。多么痛苦。我更喜欢在开发时完全取消没有分叉选项的运行。时间就是金钱,我没有时间胡闹。请参阅 Mr.HAKI 对此的解释。http://blog.jdriven.com/2013/12/grails-goodness-debugging-app-forked-mode/

于 2014-02-04T01:23:42.440 回答
0

查看有关调试 Grails 分叉模式的博客

于 2015-07-08T09:19:26.860 回答
0

1.终端 --> 命令:运行应用程序 --debug-jvm

控制台输出:grails> run-app --debug-jvm | 正在运行应用程序...在地址:5005 处侦听传输 dt_socket

注意:根据您的客户端系统更改/更新端口

  1. 添加调试器 [默认应在端口 5005 上],“远程 JVM 调试”,添加新的 [Intelli J 设置]

3.完成后,将设置新的调试器 [步骤 2],在调试模式下运行 webapp。

控制台输出:连接到目标虚拟机,地址:'localhost:5005',传输:'socket'

  1. Grails[intellij] 在 8080 处嵌入了 tomcat,因此点击“localhost:8080”并单击控制器 [您添加切换点的位置]

5.configuration 现在已连接 - 继续探索您的调试技能以解决问题 :) :)

于 2021-03-25T17:38:13.030 回答