IntelliJの組み込みデバッガーを使用してsbtによって管理されるScalaコードをデバッグする最も簡単な方法は何ですか?sbtのgoogleコードサイトの "RunningSbt"のドキュメントには、プロジェクトまたはテストのメインクラスを実行するためのコマンドがリストされていますが、デバッグ用のコマンドがないようです。
追加質問:sbtのjetty-runコマンドを使用するときにIntelliJのデバッガーをJettyに接続する最も簡単な方法は何ですか?
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でリモートデバッグ構成を起動します。このスレッドは役に立つかもしれません。
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
jetty-run
、sbtプロンプトで実行します。
sbt -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
?
sbt -jvm-debug 5005
。
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を実行中のプロセスに接続します。このフォームでは、上の3つのフィールドは、怖いながら、テキストをコピーするだけのためであることに注意してくださいアウト(呪文をデバッグすることは上記の指定された冗長な彼らは、与えているというに比べて、で-jvm-debug
、すでにあなたのための世話をする) -のみの構成変更できるのは、Settings
途中のセクションです。
-jvm-debug
パラメーターを受け入れる方法を理解し、それをプルリクエストとして送信することをお勧めします。同じプラットフォーム上にいるすべての人に利益をもたらす可能性は十分にあります。
私もこれでいくつかの問題を抱えていたので、過度に詳細に説明される危険を冒して、次のことを行いました。
セットアップ
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
VMパラメーターボックスの行を、既にある行の後に貼り付けます。デバッグ
sbt -jvm-debug 5005 console
、次にintelllJ Ideaにブレークポイントを設定し、デバッグを実行することです。
sbt -jvm-debug 5005 console
私のために動作しませんでしたが、動作しましsbt -jvm-debug 5005
た。
ここで別の答えを追加します。これは、関連する問題を調べるときにこの質問を見つけたためです。ブレークポイントを使用したテストクラスのデバッグです。
私はScalaTestを使用しており、通常はsbtの 'test-only'コマンドを使用してスイートを実行しています。インタラクティブデバッガを使用する場合、次のことができます。
タイプ「ScalaTest」の新しい実行/デバッグ構成を作成し、メインの「テストクラス:」の名前を入力して、「起動前:Run SBT Action 'test-compile'」を選択します。これで、テストソースにブレークポイントを配置して、この構成を実行できます。
これらの回答や提供されたリンクのどれも私にとってはうまくいかなかったので、これを理解したら、私は共有すると思っていました...
私が始めたときに私が持っていなかった背景の理解を含めて...
これは主に、ここでの説明に基づいており、私にそれを実行した追加の説明があります。
私の環境: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をセットアップします。(変更なし)IntelliJ設定に名前付きVMパラメーターを追加します。
- ここのポート番号がステップ1のJVM設定と一致することを確認してください。
- SBTを起動するときは、SBTコンソールプラグイン(ステップ1で構成したもの)から実行する必要があります。IntelliJの外部(コマンドライン)でSBTを実行している場合は、ステップ1と同じVMパラメーターを使用してSBTを起動する必要があります(私はこれを実行しなかったため、指示はありません)。この手順の後、SBTが実行され(ただし、コードはまだ実行されていません)、JVMはリモートデバッグ用に設定されています。
- これにより、ステップ3で開始したJVMに接続するIntelliJデバッグツールが起動します。
- 最後に、SBTコンソールでコンパイルを開始します。これは、継続的なコンパイルコマンドを含む、任意のコンパイルコマンドで実行できます。継続的な再コンパイルの場合、再コンパイルは行われますが、コードの実行がデバッガーによって一時停止されている間は行われません。
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からリモートデバッガーを接続するまでアプリを保持します
Run / Edit ConfigurationsメニューからIntellijでデバッガー構成をセットアップします。+ボタンを押し、「リモート」オプションを選択します。エントリが上記のjavaoptions、特に5005のポートアドレスと一致していることを確認してください。設定に「Spray」のような名前を付けます。
SBTコンソールからre-startコマンドを使用します。フィードバック出力に5005ポートアドレスが表示されます。
Intellijでブレークポイントを設定します。
Intellijから、Run \ Debug 'Spray'を選択します。これにより、スプレー缶のWebサーバーに接続されます。デバッグウィンドウに多くのスレッドが表示されるはずです。
Sprayの一部のGetディレクティブは、起動時に実行されるように見えますが、Webサイトの呼び出し時に繰り返し実行されるわけではないことに注意してください。
Scala 2.10とSBT 0.12を使用して、次のように動作させました:http : //tuliodomingos.blogspot.com.es/2014/01/scala-remote-debugging-in-sbts-jetty.html
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
-jvm-debug
Bashスクリプトランチャーで見たときと同じ動作をするために私ができる最善のこと
NB。%SBT_HOME%
あなたがあなたの環境で明示的に作成しない限り、私は実際にはこのスクリプトの外に存在するとは思わないが、とにかくあなたはポイントを得る:D
ファイル->設定->その他の設定-> SBT VMパラメーター-Xmx512M -XX:MaxPermSize = 256M -Xdebug -Xrunjdwp:transport = dt_socket、server = y、suspend = n、address = 5005
実行->構成の編集+を押してから、リモートを選択します適用を押します
コマンド「run」を実行すると、SBTコンソール(intelliJによって内部で開始)に移動します。「listening for transport dt_socket at address:5005」が表示されます。
次に、実行->デバッグを押します。以下のデバッグメニューがアクティブになります。デバッガとコンソールの2つのタブがあります。
F7を使用して次の行から次の行へ
私はサスペンドをnに選択しました。実行コマンドを実行したときにyで止まった
同じ問題が発生しました。解決方法を共有したいと思います。ちなみに私は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-debug 5005
注:ターミナルに次の行が表示されるはずです: "Listening for transport dt_socket at address:5005"
構成の編集->クリック+->「リモート」を選択
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でのEdit Configurations
リストボックスをクリックしてデバッグを。
注:デバッグビューが開き、デバッグコンソールに表示されます。「ターゲットVMに接続されました。アドレス:'127.0.0.1:5005'
、トランスポート: 'ソケット'」が表示されます。
Testclassのいくつかのテストケースにブレークポイントを設定します。
「sbt -jvm-debug 5005
」を実行するターミナルに来て、以下のように実行します
project <your-module-name>
it:testOnly package.TestSpec
例:com.myproject.module.AddServiceTest [Spec]
テストケースのブレークポイントでデバッグの開始を確認できます。
AttachMe IntelliJプラグインは、ポート番号をいじる必要なしに、デバッガを接続するよりも高速な方法です。
AttachMeは、ターミナルから(または他の方法で)アプリを起動した場合でも、IntelliJデバッガーを自動的にアタッチします。
Attach to process
手動でアクションをトリガーする必要はありません。
ブログの投稿とreadmeにはセットアップ手順がありますが、自分のマシンで機能させるには、少し変更する必要がありました。
installer.sh
公式リポジトリからスクリプトをダウンロード
curl -o installer.shhttps://raw.githubusercontent.com/JetBrains/attachme/master/installer.sh
chmod u+x installer.sh
./installer.sh
/.config/attachme/agent.jar
作成され~/.attachme
ます~/.attachme
含むように変更
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"
対応するAttachmeプラグインをインストールして再起動します。 IntelliJ | Preferences | Plugins
Attachme
実行構成を作成します。Run | Edit configurations... | Add new configuration | Attachme debugger registry | OK
これらの1回限りの不正操作の後で、デバッガーを自動的に接続できます。
Attachme
実行構成を開始するsource ~/.attachme
sbt "runMain example.Hello"
上記のRoberto Tyleyの回答によると、Windowsでは、sbtのインストール後に次の環境変数も設定する必要があります。
SBT_HOME
C:\ Program Files(x86)\ sbt \
[またはsbtがインストールされている場所]
SBT_OPTS -Xdebug
-runjdwp:transport = dt_socket、server = y、suspend = n、address = 5005
[RTのIntelliJの例]
パスに追加:%SBT_HOME%\ bin;%SBT_OPTS%
次に、プロジェクトフォルダー「sbt run -jvm -debug 5005」内のコマンドラインで次を実行します。
これが適切に機能している場合、コマンドラインは最初に「listening for transport dt_socket at address:5005」という行を出力します。
IntelliJにブレークポイントを設定します。
ブラウザーでWebサイトを開き、デバッガーのブレークポイントをトリガーします(例: " http:// localhost:9000 / ")。