debugging - 从 IntelliJ 调试功能测试

标签 debugging grails intellij-idea remote-debugging

我正在开发一个 Grails 应用程序,该应用程序具有一套 (Geb) 功能测试。我曾经能够从 IntelliJ 内部调试这些测试,但现在每当我尝试在 Debug模式下运行测试时,我都会收到以下错误

ERROR: transport error 202: connect failed: Connection refused
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750]

最佳答案

自从引入 fork 模式以来,我一直在努力调试,直到我发现了这个简单的技巧。在您的 BuildConfig.groovy 中更改 grails.project.fork像这样:

grails.project.fork = [
   test   : [maxMemory: 1024, minMemory: 128, debug: false, maxPerm: 256, daemon:false, jvmArgs: ['-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005']],
   run    : [maxMemory: 1280, minMemory: 128, debug: false, maxPerm: 256, forkReserve: true, jvmArgs: ['-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005']],
   war    : false,
   console: [maxMemory: 1024, minMemory: 128, debug: false, maxPerm: 256]
]

注意 jvmArgsruntest配置。当 fork 模式执行时,这很容易传递给 Java。

接下来,您必须配置远程调试 Hook 到上一步中定义的端口。

为了您的方便,您可以配置一个外部工具来等待调试启动,然后启动调试 session 。基本上它运行 nc在一个循环中,直到指定的端口处于事件状态。在最简单的形式中,它看起来像这样:
#!/usr/bin/env bash
while ! nc -z localhost 5005; do sleep 0.1; done;

您可以将此脚本配置为外部工具并使其在调试开始之前运行(在配置新的远程调试 session 时将其添加到“启动前”框中)

关于debugging - 从 IntelliJ 调试功能测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30895394/

相关文章:

java - Grails标记actionSubmit导致404错误

grails - 在grails中显示来自ftp服务器的图像的推荐方法是什么?

grails - Google可视化插件Grails:如何设置hAxis最大值和颜色格式

intellij-idea - IntelliJ中的Gradlebuild设置

maven - IntelliJ 的 Maven 过滤支持如何工作?

Java调试-并发异常

debugging - 当连接字符串不正确时,Log4Net XmlConfigurator.Configure() 会挂起。 Log4Net 中的错误?

c++ - 如何在 C++ 中使用回溯获取正确的代码行?

c - 使用gdb调试exe

jakarta-ee - 在智能IDEA 12中未将巨大的Axis2 stub 标识为Java类文件