2017-03-20 3 views
1

IntelliJ IDEA Ultimate 16.1.2とScala 12を使用しています。foreachループでブレークポイントを設定すると、ヒットしません。foreachのIntelliJブレークポイントforeachが機能しない

foreachの上にブレークポイントがあり、ブレークポイント(有効なブレークポイント)でチックが得られますが、foreachのものはチックを得ず、プログラムもブレークしません。

私はIntelliJ Cashを無効にして、PCとIntelliJを再起動し、mavenを再構築しました。何も機能しませんでした。

これは私が使用しているVMのパラメータですが、私も助けなかった、いかなるせずにそれを試してみた:あなたの助けを

-XX:+UnlockCommercialFeatures 
-XX:+FlightRecorder 
-Dcom.sun.management.jmxremote 
-XX:StartFlightRecording=filename=recording.jfr 
-server 
-Xms1G 
-Xmx4G 
-XX:+UseG1GC 
-XX:+UseStringDeduplication 

ありがとう!ここで

は私のコードです:

class RunTestCasesAction extends AbstractAction { 

    def actionPerformed(e: ActionEvent) = { 
     val parent = methodToGetParentComponent() //breakpoint works 
     getFileName(parent).foreach { testFileName => 
     val dialog = new SomeDialog() // breakpoint doesn't work  
     } 
    } 

    private def getFileName(parent: Component): Option[String] = { 
    val baseDir = getExportDir 
    val fc = new JFileChooser(baseDir) 
    val rc = fc.showDialog(null, "Select test file") 

    if (rc == JFileChooser.APPROVE_OPTION) Some(fc.getSelectedFile.toString) else None 
    } 
+0

あなたは空のコレクションで 'foreach'を実行していませんか? – Rumid

+0

例を挙げることができますか?私はScala 2.12.1のmainメソッドでforループを使って簡単なアプリを試してみました。 – niktrop

+0

"foreachループで設定する"とは、 'for {a -b}'の部分、または 'yield {...}'の部分のことを意味しますか? –

答えて

1

何をやっている新しいオブジェクトを作成し、foreachループ内でそれらを割り当てることです。 これはプロジェクトの他の部分には影響しません。

コンパイラはコードを最適化し、このコードブロックは決して実行されません。このval dialog = new SomeDialog()foreach内に作成され、このオブジェクトは即座に破棄されます。その範囲はforeachループ内にあるため、そのようにする必要はありません。

ループの中に入る場合は、重要なものを何かに置き換えて、何が再利用可能になるかを決めます。例えば。このオブジェクトを収集することができます。 コンパイラがコードをこのように最適化しないことを確認してください。

おそらく、いくつかのコンパイラ最適化フラグを使用しようとする可能性がありますが、それについてはわかりません。

ここにはhow debuggers workに関する情報があります。

関連する問題