2017-03-12 12 views
1

IntelliJ 2016.3.5内のGradleタスク(実行およびテストとしての依存関係)を使用してブレークポイントを使用してデバッグする必要があるJVMアプリケーションがあります。 。GradleとIntelliJでブレークポイントを持つJVMアプリケーション(JavaまたはScala)のデバッグ2016.3.5

のGradleとのIntelliJでデバッグを実現する方法についてのさまざまな情報源があります。

  1. Debug Gradle plugins with IntelliJ
  2. Using Intellij to set breakpoints in gradle project(最も役立つ1)
  3. https://youtrack.jetbrains.com/issue/IDEA-119551
  4. https://youtrack.jetbrains.com/issue/IDEA-86465
  5. https://youtrack.jetbrains.com/issue/IDEA-119494

ただし、これらのソースは古いか、別のシナリオ用です。私はGradleスクリプトをデバッグするのではなく、実際のJava/Scalaアプリケーションを実行するJVMをデバッグします。さらに、IntelliJの最近のバージョンでは、Daemonを無効にするオプションを提供していないGradle Tooling APIを使用しています。 JetBrainsのネイティブサポートは、実行タスクとテストタスクのデバッグボタンを使用して直接提供されますが、別のタスク(チェックなど)の依存関係として定義されていない場合にのみ提供されます。

は、情報源によると、これはその後、移動するための方法である:

Imgur

run { // or test, doesn't matter 
    jvmArgs "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005" 
    // xor, or both, doesn't seem to make any difference 
    debug true 
} 

をどのような方法では、Gradleの(またはJVM)は、ポート5005でリッスンを開始します

Imgur

その後、私は、次のパラメータを使用してリモート設定を作成しています

しかし、私はIntelliJのリモートデバッグ作業を開始するとき、それは失敗します。

Imgur

は、私はまた、一時停止= N成功せず、ポート5006を使用して試してみました。それ以前は、IntelliJ-Gradleの実行タスクでGradle引数を使用しようとしました。その後、実際には接続されましたが、明らかにGradleスクリプトではなく、アプリケーションJVMではなく、ブレークポイントで割り込みが発生しなかったためです。これを修正するには?

+0

あなたは単に、例えば、Gradleのデバッグコンフィギュレーションを使用することはできませんなぜgradleツールのウィンドウでgraleタスクのコンテキストメニューからデバッグアクションを使用しますか? –

+0

この場合、実際には私のためにGradleスクリプトをデバッグしますが、JavaコードやScalaコードはデバッグしないためです。つまり、JavaまたはScalaコード内のブレークポイントは何もしません。 –

+0

再チェックしました.Gradleスクリプトでさえもデバッグされていません。 –

答えて

0

一方、自分で解決策を見つけました。同様の問題がある場合は、デバッグオプションを使用して上記の方法に従ってください。

test { 
    debug true 
} 

しかし、IntelliJのは、再起動後に外部接続が設定で受け入れられていることを確認してください。

Imgur

Imgur

すると、それが正しいJVMに接続して使用してブレークポイントで中断リモートタスク:

Imgur

Imgur

あなたがのIntelliJを再起動する場合は、しかし、非常に同じオプション(外部​​接続)を有効にすると、その後、デバッグ作業が原因ブロックされたポートに失敗することがあります:

Imgur

ので、なんらかの理由で、IntelliJは再起動後にそのポートをブロックしますが、デバッグタスクの設定を有効にする必要があります。それは奇妙で、私はそれがそのように振舞うことを意図しているとは思わない。あなたが設定して再起動を無効にした場合

とにかく、ポートが再び開放されます。その後、設定を再度有効にし、再起動しないで、Gradleタスクを実行して、デバッグタスクを実行します。それが動作します。

私は、これはそこに混乱し、部分的に時代遅れの答えの中のGradleとのIntelliJとデバッグJVMアプリケーションへの中間の解決策を探して、誰に役立ちます願っています。誰かがより良い、またはより簡単な提案をしている場合は、自由に回答を追加してください。

1

「試験」、「RUN」、JavaForkOptionsインタフェースを実装し、実際にすべてのGradleのタスクのようなのGradleタスクのデバッグは、2014年以来のIntelliJで動作するはず

+0

奇妙なことに、私がデバッグボタンを使用すると、ブレークポイントは単に無視されます。使用しているGradleのバージョンを共有してもよろしいですか? –

+1

どちらのバージョンを使用するかはほとんど関係ありません。実際には1.9以降のすべてのバージョンが動作します。 –

+0

問題を説明するためにプロジェクトを共有できますか?あなたがチェックが(逆に実行し、テストするために)あなたのプラットフォーム上で動作していないことを確認することができ https://github.com/matfax/gradle-test : –

関連する問題