IntelliJの組み込みデバッガを使用して、sbtで管理されるScalaコードをデバッグする最も簡単な方法は何ですか? sbtのgoogleコードサイトの "RunningSbt" のドキュメントには、プロジェクトまたはテストのメインクラスを実行するためのコマンドがリストされていますが、デバッグ用のコマンドはないようです。
追加の質問:sbtのjetty-runコマンドを使用するときにIntelliJのデバッガーをJettyに接続する最も簡単な方法は何ですか?
IntelliJでの通常のデバッグでは、sbtを使用してコードをコンパイルしているかどうかに関係なく、アプリケーションの実行/デバッグ構成を通常の方法で使用できます。
Jettyで実行されているアプリケーションに接続するには、リモートデバッグ構成を作成する必要があります。そうすると、IntelliJはリモートJVMを実行するためのコマンドライン引数のセットを提供します。
-Xdebug -Xrunjdwp:transport = dt_socket、server = y、suspend = n、address = 5005
これらの引数を使用してsbtを起動し、jetty-run
を実行します。最後に、IntelliJでリモートデバッグ構成を起動します。 このスレッド は役に立つかもしれません。
公式の SBTパッケージには非常に便利な-jvm-debug
フラグがあります Mac、Linuxおよび Windowsの場合 フラグを使用して、デバッグポートを指定できます。
sbt -jvm-debug 5005
カバーの下で 、これは典型的な冗長デバッグの呪文でSBTのJVMを起動します。
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
これで、たとえばsbt run
コマンドを使用して、通常どおりコードを実行できます。
次に、 Remote Debug configuration を使用して、IntelliJを実行中のプロセスに接続します。このフォームの上の3つのフィールドは、怖いですが、テキストoutをコピーするためだけのものです(上で指定した冗長なデバッグの指示を与えているので、これは-jvm-debug
がすでに面倒をみてくれます)-変更できる唯一の構成は、Settings
セクションの中ほどです:
私もこれに問題を抱えていたので、過度に詳細になるリスクがあるため、ここで私がやったことは次のとおりです。
SETUP
Sbt jetty-runの実行構成を作成する
リモートデバッグ用のデバッグ構成を作成する
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
をコピーします(実際に構成を作成するには、必ず[OK]をクリックしてください)上記のvmオプションを実行するためにsbtプラグインをセットアップします
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
行を、既にあるものの後に貼り付けますデバッグ
関連する問題を検索するときにこの質問を見つけたので、別の答えをここに追加します:ブレークポイントを使用したテストクラスのデバッグ。
私はScalaTestを使用しています。通常、sbtの「テスト専用」コマンドを使用してスイートを実行します。インタラクティブデバッガーを使用する場合、次の操作を実行できます。
タイプ「ScalaTest」の新しい実行/デバッグ構成を作成し、メインの「Test Class:」名を入力して、「起動前:Run SBT Action 'test-compile'」を選択します。これで、テストソースにブレークポイントを配置し、この構成を実行できます。
これは毎回動作します。セットアップする必要があるのは、IntelliJでのリモートデバッグだけです。 IntelliJのターミナルからJVMパラメーターでSBTを起動します。
sbt -J-Xdebug -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
その後、localhost:5005でリモートデバッグを開始できます。
これらの答えや提供されたリンクはどれも私にとってはうまくいきませんでした。
私が始めたときに持っていなかった背景理解を含む...
これは主に指示に基づいています here ちょうどそれを私に運んだ追加の説明と.
私の環境:Scala 2.10.2、SBT 0.13、およびIntelliJ 13.1
バックグラウンド:
- 何らかの理由で、SBTを使用してIntelliJでScalaをコンパイルすることは、Mavenプロジェクトのようには統合されていません(デバッグが非常に簡単になります)。
- SBTを使用してコンパイルする場合、別のプロセスでコンパイルしているため、リモートでデバッグする必要があるように思われます。
デバッグとは何ですか?
- デバッグは、JVMまたはアプリを実行できるモードであり、コード実行のフローを制御できます。
- 使用するデバッグツールは、「次のコード行を実行してから一時停止する」、「実行を継続する」、「メモリに保存されている変数の値を取得する」というコマンドをデバッグエンジンに発行できます。
リモートデバッグとは
- リモートデバッグは、ネットワーク接続(ソケット)を介したデバッグです。
- このネットワーク接続により、リモートマシンからデバッグエンジンにコマンドを発行できます。
- これは、リモートサーバーで実行されているコードをデバッグするときに役立ちますが、
- また、SBTの下で実行され、IntelliJ環境とは別のJettyやTomcatなどのWebサーバーを介して起動するScalaコードなどの状況にも役立ちます。
上記のリンクを参照すると、次の説明/変更が役立ちます。
- ネットワークソケットをセットアップするときに使用するポートを含む「デバッグを有効にする」JVM設定でSBTを起動するようにIntelliJをセットアップします。 (変更なし)名前付きVMパラメーターをIntelliJ設定に追加します。
- ここのポート番号がステップ1のJVM設定と一致していることを確認してください。
- SBTを起動するときは、SBT Consoleプラグインから実行する必要があります(これはステップ1で構成したものです)。 IntelliJの外部で(コマンドラインで)SBTを実行している場合、ステップ1と同じVMパラメーターを使用してSBTを起動する必要があります(私はこれをしませんでしたので、指示はありません)。このステップの後、SBTが実行され(コードはまだ実行されていません)、JVMがリモートデバッグ用にセットアップされます。
- これにより、ステップ3で開始したJVMに接続するIntelliJデバッグツールが起動します。
- 最後に、SBT Consoleでコンパイルを開始します。これは、連続コンパイルコマンドを含む任意のコンパイルコマンドで実行できます。継続的な再コンパイルの場合、再コンパイルは行われますが、デバッガーによってコードの実行が一時停止されている間は行われません。
Scala 2.10とSBT 0.12を使用すると、次のように動作します。 http://tuliodomingos.blogspot.com.es/2014/01/scala-remote-debugging-in-sbts- jetty.html
ファイル->設定->その他の設定-> SBT VM parameters -Xmx512M -XX:MaxPermSize = 256M -Xdebug -Xrunjdwp:transport = dt_socket、server = y、suspend = n、address = 5005
実行->構成の編集+を押して、リモートを選択します適用を押します
「run」コマンドを実行すると、SBTコンソール(intelliJによって内部で開始)で「アドレス:5005でトランスポートdt_socketをリッスンしている」と表示されます。
次に、Run-> Debugを押します。以下のデバッグメニューがアクティブになります。デバッガーとコンソールの2つのタブがあります。
F7を使用して次の行から次の行に
サスペンドをnに選択しました。 runコマンドを実行したときにyだったため、スタックしました
Intellijを使用して、SBT経由で作成されたSpray-can/Akka/Scalaアプリを使用して、Windowsでのデバッグにも苦労しています。さまざまな提案をまとめると、私にとって最も簡単なアプローチは次のとおりでした。
Project/plugsin.sbtファイルにsbt.Revolverがあることを確認してください。
addSbtPlugin( "io.spray"% "sbt-revolver"% "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に一致することを確認します。configに「Spray」などの名前を付けます。
SBTコンソールから、re-startコマンドを使用します。フィードバック出力に5005ポートアドレスが表示されます。
Intellijでブレークポイントを設定します。
Intellijから、Run\Debug 'Spray'を選択します。これにより、スプレー缶Webサーバーに接続する必要があります。デバッグウィンドウに多くのスレッドが表示されるはずです。
SprayのGetディレクティブの一部は、起動時に実行されるように見えますが、Webサイトの呼び出しでは繰り返し実行されないように注意してください。
Windowsに値するものについては、%SBT_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
で同じ動作を得るためにできること
NB。環境で明示的に作成した場合を除き、%SBT_HOME%
が実際にこのスクリプトの外部に存在するとは思わないが、とにかくポイントを得る:D
export SBT_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5009
これを試して
私も同じ問題を抱えています。解決方法を共有したいと思います。ところで、Ubuntu 14.04とIntelliJ 15を使用しています。
[設定]-> [SBT]-> [VM Parameters]テキストボックスの行の下に貼り付け:
-XX:MaxPermSize = 384M -Xdebug -Xrunjdwp:transport = dt_socket、server = y、suspend = n、address = 5005
IntelliJでTermilalを開き、次を実行します。
sbt -jvm-debug 5005
注:ターミナルに次の行が表示されます。「アドレス5005でトランスポートdt_socketをリッスンしている」
構成の編集-> +をクリック->「リモート」を選択
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.
Edit Configurations
リストボックスでDebugMyModuleを選択し、Debugをクリックします。
注:デバッグビューが開き、デバッグコンソールに表示されるはずです「ターゲットVMに接続済み、アドレス:'127.0.0.1:5005'
、トランスポート: 'socket'」が表示されるはずです
Testclassのいくつかのテストケースにブレークポイントを配置します。
「sbt -jvm-debug 5005
」を実行するターミナルに来て、以下のように実行します
project <your-module-name>
it:testOnly package.TestSpec
例:com.myproject.module.AddServiceTest [Spec]
テストケースブレークポイントでデバッグが開始されたことがわかります。