Scala 1). 如果您在IntelliJ之外运行SBT(在命令行),则需要使用步骤1中相同的VM参数启动SBT(我没有这样做;因此没有说明)。在这一步之后,SBT现在正在运行(但您的代码还没有运行),JVM被设置为进行远程调试 这将启动IntelliJ调试工具,该工具连接到您在步骤3中启动的JVM 最后,在SBT控制台中开始编译。可以使用任何编译命令(包括连续编译命令)执行此操作。如果连续重新编译,则会发生重新编译,但不会在调试器暂停代码执行时发生

Scala 1). 如果您在IntelliJ之外运行SBT(在命令行),则需要使用步骤1中相同的VM参数启动SBT(我没有这样做;因此没有说明)。在这一步之后,SBT现在正在运行(但您的代码还没有运行),JVM被设置为进行远程调试 这将启动IntelliJ调试工具,该工具连接到您在步骤3中启动的JVM 最后,在SBT控制台中开始编译。可以使用任何编译命令(包括连续编译命令)执行此操作。如果连续重新编译,则会发生重新编译,但不会在调试器暂停代码执行时发生,scala,intellij-idea,jetty,sbt,Scala,Intellij Idea,Jetty,Sbt,我也一直在努力在Windows上调试Spray-can/Akka/Scala应用程序,该应用程序是通过SBT构建的,使用Intellij。将各种建议拼凑在一起,对我来说最简单的方法是: 确保您的项目/plugsin.sbt文件中有sbt.Revolver,例如 添加SBTPlugin(“io.喷雾“%”sbt转轮“%”0.7.1) 在build.sbt文件中设置javaoptions: javaOptions:=Seq(“-Xdebug”,“-Xrunjdwp:transport=dt_sock

我也一直在努力在Windows上调试Spray-can/Akka/Scala应用程序,该应用程序是通过SBT构建的,使用Intellij。将各种建议拼凑在一起,对我来说最简单的方法是:

  • 确保您的项目/plugsin.sbt文件中有sbt.Revolver,例如

    添加SBTPlugin(“io.喷雾“%”sbt转轮“%”0.7.1)

  • 在build.sbt文件中设置javaoptions:

    javaOptions:=Seq(“-Xdebug”,“-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005”)

  • 特别是使用suspend=y选项。这将保持应用程序,直到您从Intellij连接远程调试器

  • 通过运行/编辑配置菜单在Intellij中设置调试器配置。按+按钮,选择“远程”选项。确保条目匹配上面的javaoptions,特别是5005的端口地址。给配置一个类似“Spray”的名称

  • 从SBT控制台使用重新启动命令。您应该在反馈输出中看到5005端口地址

  • 在Intellij中设置断点

  • 从Intellij中,选择Run\Debug“Spray”。这应该连接到spray can web服务器。您应该能够在调试窗口中看到许多线程

  • 请注意,Spray中的一些Get指令似乎在启动时执行,但在调用网站时不会重复执行


  • 要了解Windows folk的价值,请编辑
    %SBT\u HOME%\bin\SBT.bat
    并找到以下代码行:

    :run
    
    "%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -cp "%SBT_HOME%sbt-launch.jar" xsbt.boot.Boot %*
    if ERRORLEVEL 1 goto error
    goto end
    
    然后将其替换为以下代码:

    FOR %%a IN (%*) DO (
      if "%%a" == "-jvm-debug" (
        set JVM_DEBUG=true
        set /a JVM_DEBUG_PORT=5005 2>nul >nul
      ) else if "!JVM_DEBUG!" == "true" (
        set /a JVM_DEBUG_PORT=%%a 2>nul >nul
        if not "%%a" == "!JVM_DEBUG_PORT!" (
          set SBT_ARGS=!SBT_ARGS! %%a
        )
      ) else (
        set SBT_ARGS=!SBT_ARGS! %%a
      )
    )
    
    if defined JVM_DEBUG_PORT (
      set _JAVA_OPTS=!_JAVA_OPTS! -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=!JVM_DEBUG_PORT!
    )
    
    call :run %SBT_ARGS%
    
    if ERRORLEVEL 1 goto error
    goto end
    
    :run
    "%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -cp "%SBT_HOME%sbt-launch.jar" xsbt.boot.Boot %*
    goto :eof
    
    在Bash脚本启动器中看到的
    -jvm debug
    时,我能做的最好的事情就是获得相同的行为


    注意。我不认为
    %SBT\u HOME%
    实际上存在于这个脚本之外,除非您在您的环境中显式创建,但无论如何,您得到了要点:D

    文件->设置->其他设置->SBT 虚拟机参数 -Xmx512M-XX:MaxPermSize=256M-Xdebug-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005

    运行->编辑配置 按+键,然后选择remote 按申请

    现在,在SBT控制台(由intelliJ内部启动)中,当您执行命令“run”时,您将看到“侦听地址为5005的传输dt_套接字”

    现在按Run->Debug。您将看到下面激活的调试菜单。它有两个选项卡调试器和控制台

    使用F7从下一行到下一行


    我选择了n。当我运行run命令时,它是y,它被卡住了

    这一个每次对我都有效,你只需要在IntelliJ中设置远程调试;我使用IntelliJ中终端的JVM参数启动SBT:

    sbt -J-Xdebug -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
    

    之后,我可以在本地主机上开始远程调试:5005

    我也遇到了同样的问题,我想分享一下我是如何解决的。顺便说一下,我正在使用Ubuntu 14.04和IntelliJ 15

  • 在设置->SBT-> 粘贴在VM参数文本框的下一行:

    -XX:MaxPermSize=384M-Xdebug-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005

  • 在IntelliJ中打开Termilal并运行:

    sbt-jvm调试5005

    注意:您应该在终端中看到这一行:“监听地址为5005的传输dt\U插座”

  • 编辑配置->单击+->选择“远程”

    I. Give some name example: DebugMyModule
    
    II. All needed configurations will be set automatically, But you just verify. In Command line arguments should look like this "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005".
    
    III. In 'Search Sources in Module's Classpath' text box specify your module in which module your test cases are there.
    
    IV. put 127.0.0.1 host instead of 'localhost'. 'localhost' not working for me.
    
  • 编辑配置
    列表框中选择DebugMyModule,然后单击Debug

    注意:您应该看到调试视图打开,并且在调试控制台中您应该能够看到“连接到目标VM,地址:
    '127.0.0.1:5005'
    ,传输:'socket'”

  • 在Testclass中的几个测试用例中放置断点

  • 来到您运行“
    sbt-jvmdebug 5005
    ”的终端,并按如下方式运行

    project <your-module-name>
    it:testOnly package.TestSpec
    
    项目
    it:testOnly package.TestSpec
    
    例如:com.myproject.module.AddServiceTest[Spec]

  • 您可以在测试用例断点中看到调试已启动


  • 按照上面Roberto Tyley的回答,尝试此操作,但在Windows中,我们还需要在安装sbt后设置以下环境变量:

    SBT_主页
    C:\ProgramFiles(x86)\sbt\
    [或安装sbt的任何地方]

    SBT_选择
    -Xdebug-runjdwp:transport=dt_socket,server=y,suspend=n,address=5005

    [根据RT的IntelliJ示例]

    添加到路径:%SBT\u HOME%\bin;%SBT_选择%

    然后在项目文件夹的命令行中运行以下命令 “sbt运行-jvm-调试5005”

    如果工作正常,命令行将首先输出一行re “正在侦听地址为5005的传输dt_插座”

    在IntelliJ中设置断点

    在浏览器中打开网站以触发调试器断点,例如“”。

    IntelliJ插件可能更快地连接调试器,而无需修改端口号:

    AttachMe将自动附加IntelliJ调试器,即使您 从终端(或任何其他方式)启动应用程序。你不需要 手动触发
    附加到流程
    操作

    还有安装说明,但是我不得不稍微修改一下,让它在我的机器上工作

  • 从官方回购协议下载脚本

    curl -o installer.shhttps://raw.githubusercontent.com/JetBrains/attachme/master/installer.sh
    
  • 给它可执行权限
    chmod u+x installer.sh
  • project <your-module-name> it:testOnly package.TestSpec
  • export SBT_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5009
    
    curl -o installer.shhttps://raw.githubusercontent.com/JetBrains/attachme/master/installer.sh
    
    AM_JDWP_ARGS="transport=dt_socket,server=y,suspend=y,address=127.0.0.1:0"
    echo Using JDWP arguments ${AM_JDWP_ARGS}
    export JAVA_TOOL_OPTIONS="- javaagent:/Users/mario_galic/.config/attachme/agent.jar -agentlib:jdwp=${AM_JDWP_ARGS}"
    echo "AttachMe configured successfully"