当前位置:  开发笔记 > 编程语言 > 正文

使用简单构建工具(sbt)和IntelliJ调试Scala代码

如何解决《使用简单构建工具(sbt)和IntelliJ调试Scala代码》经验,为你挑选了6个好方法。

使用IntelliJ的内置调试器调试由sbt管理的Scala代码的最简单方法是什么?来自sbt的谷歌代码站点的"RunningSbt"文档列出了运行项目或测试的主类的命令,但似乎没有用于调试的命令.

后续问题:在使用sbt的jetty-run命令时,将IntelliJ的调试器连接到Jetty的最简单方法是什么?



1> Roberto Tyle..:

适用于Mac,Linux和Windows-jvm-debug的官方SBT软件包中有一个非常方便的标志.您可以使用该标志指定调试端口:

sbt -jvm-debug 5005

在幕后,这将启动带有典型详细调试咒语的SBT JVM:

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

您现在可以正常运行代码,例如使用sbt run命令.

配置IntelliJ以连接到正在运行的代码......

现在,使用远程调试配置将IntelliJ连接到正在运行的进程.需要注意的是这种形式的上3场,而可怕的,是只为你复制文本出来的,而不是进入(他们给上面指定的详细调试咒语,它-jvm-debug已经为您需要照顾) -的唯一配置你可以在Settings半途中改变:

IntelliJ中的远程调试配置


知道在IntelliJ中插入"sbt -jvm 5005"的位置会很有帮助

2> Aaron Novstr..:

对于IntelliJ中的普通调试,无论是否使用sbt编译代码,都可以按常规方式使用应用程序运行/调试配置.

要连接到在Jetty中运行的应用程序,您需要创建远程调试配置.执行此操作时,IntelliJ将为您提供一组用于运行远程JVM的命令行参数 - 类似于

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

使用这些参数启动sbt然后执行jetty-run.最后,在IntelliJ中启动远程调试配置.这个帖子可能很有用.


对于大多数应该工作的用户,但这取决于系统上的sbt设置方式.如另一个答案中所述,您可以只运行`sbt -jvm-debug 5005`.

3> Jamie Forres..:

我也遇到了一些麻烦,所以冒着过于详细的风险,这就是我所做的:

建立

    为sbt jetty-run创建运行配置

    转到"运行">"编辑配置"

    单击[+]图标,然后选择Scala Compilation Server

    输入您想要的任何名称,然后单击"运行SBT操作"复选框并从[...]中选择SBT Action码头运行

    为远程调试创建调试配置

    转到"运行">"编辑配置"

    单击[+]图标,然后选择"远程"

    输入您想要的任何名称并复制该行-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005(确保单击"确定"以实际创建配置)

    设置sbt插件以运行上面的vm选项

    转到文件>设置> SBT

    将该行粘贴到-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005已存在的VM参数框中

调试

    根据需要设置断点

    通过选择上面创建的sbt jetty-run配置并选择Run> Run或单击绿色箭头来启动jetty Web服务器

    通过选择上面创建的远程调试配置并选择Run> Debug或单击bug图标启动远程调试器


配置菜单中没有Scala编译服务器.所以我需要一些特别的东西吗?

4> 0__..:

我在这里添加另一个答案,因为我在查找相关问题时发现了这个问题:使用断点调试测试类.

我正在使用ScalaTest,我通常使用sbt的'test-only'命令运行套件.现在,当我想使用交互式调试器时,我可以执行以下操作:

创建一个"ScalaTest"类型的新运行/调试配置,放置主"Test Class:"名称,然后选择"启动前:运行SBT操作'test-compile'".就是这样,您可以在测试源中放置断点,然后运行此配置.



5> Mike..:

这些答案或提供的链接都不适用于我,所以一旦我弄明白了,我想我会分享......

包括我开始时没有的背景知识......

这主要基于这里的说明,只是通过它的其他解释.

我的环境:Scala 2.10.2,SBT 0.13和IntelliJ 13.1

背景:

无论出于何种原因,使用SBT在IntelliJ中编译Scala并没有像Maven项目那样集成(这样可以很容易地进行调试).

从我的理解看来,在使用SBT进行编译时,您需要在单独的进程中进行编译,因此,您需要进行远程调试.

什么是调试?

调试是一种可以运行JVM或应用程序的模式,允许您控制代码执行流程.

然后,您使用的调试工具可以向调试引擎发出命令,告诉它"执行下一行代码然后再次暂停"或"继续执行"或"获取存储在此处的变量值".

什么是远程调试?

远程调试是通过网络连接(套接字)进行调试.

此网络连接允许您从远程计算机向调试引擎发出命令.

当您想要调试在远程服务器上运行的代码时,这非常有用

它对于在SBT下运行的Scala代码以及通过与IntelliJ环境分开的Web服务器(如Jetty或Tomcat)启动的情况也很有用.

参考上面的链接,以下解释/修改很有用:

    设置IntelliJ以使用"启用调试"JVM设置启动SBT,包括设置网络套接字时使用的端口.(未更改)将指定的VM参数添加到IntelliJ设置.

    确保此处的端口号与步骤1中的JVM设置相匹配.

    当您启动SBT时,您需要从SBT控制台插件(这是您在步骤1中配置的插件)中执行此操作.如果您在IntelliJ之外运行SBT(在命令行),则需要使用步骤1中的相同VM参数启动SBT(我没有这样做;所以没有说明).完成此步骤后,SBT现在正在运行(但您的代码尚未运行),并且JVM已设置为进行远程调试.

    这将启动IntelliJ调试工具,该工具连接到您在步骤3中启动的JVM.

    最后,在SBT控制台中开始编译.您可以使用任何编译命令执行此操作,包括连续编译命令.如果连续重新编译,则重新编译将发生,但不会在调试器暂停代码执行时发生.


链接坏了.

6> Erik Madsen..:

这个每次都适合我,你唯一需要设置的是IntelliJ中的远程调试; 我从IntelliJ中的终端启动带有JVM参数的SBT:

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

之后我可以在localhost:5005上启动远程调试

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有