【问题标题】:Debug functional tests from IntelliJ从 IntelliJ 调试功能测试
【发布时间】:2015-06-17 15:02:53
【问题描述】:

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

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]

【问题讨论】:

    标签: debugging grails intellij-idea remote-debugging


    【解决方案1】:

    自从引入 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]
    ]
    

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

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

    为方便起见,您可以配置一个外部工具来等待调试启动,然后启动调试会话。基本上它在循环中运行nc,直到指定的端口处于活动状态。最简单的形式如下:

    #!/usr/bin/env bash
    while ! nc -z localhost 5005; do sleep 0.1; done;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 2012-05-19
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多