【问题标题】:How to debug Scala Future?如何调试 Scala Future?
【发布时间】:2015-10-10 03:13:49
【问题描述】:

如何在 Scala Future 中调试代码?

我正在使用 IntelliJ。

除了记录一切我不知道如何。

关于如何进行的任何建议?

编辑1:

这是我得到的错误:

java.lang.IllegalAccessError: 试图访问字段 org.iadb.poolpartyconnector.conceptsrecommendation.RelevantConceptsRecommendationServicePoolPartyImpl$$anonfun$2$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3.concepts$1 从班级 org.iadb.poolpartyconnector.conceptsrecommendation.RelevantConceptsRecommendationServicePoolPartyImpl$$anonfun$2$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3$GeneratedEvaluatorClass$3$1 在 org.iadb.poolpartyconnector.conceptsrecommendation.RelevantConceptsRecommendationServicePoolPartyImpl$$anonfun$2$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3$GeneratedEvaluatorClass$3$1.invoke(FileToCompile0.scala:173) 在 org.iadb.poolpartyconnector.conceptsrecommendation.RelevantConceptsRecommendationServicePoolPartyImpl$$anonfun$2$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3.apply(RelevantConceptsRecommendationService.scala:169) 在 org.iadb.poolpartyconnector.conceptsrecommendation.RelevantConceptsRecommendationServicePoolPartyImpl$$anonfun$2$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3.apply(RelevantConceptsRecommendationService.scala:166) 在 scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) 在 scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) 在 akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40) 在 akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397) 在 scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) 在 scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) 在 scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) 在 scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) java.lang.NoSuchFieldError: doc$1 at org.iadb.poolpartyconnector.conceptsrecommendation.RelevantConceptsRecommendationServicePoolPartyImpl$$anonfun$2$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3$GeneratedEvaluatorClass$4$1.invoke(FileToCompile1.scala:173) 在 org.iadb.poolpartyconnector.conceptsrecommendation.RelevantConceptsRecommendationServicePoolPartyImpl$$anonfun$2$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3.apply(RelevantConceptsRecommendationService.scala:169) 在 org.iadb.poolpartyconnector.conceptsrecommendation.RelevantConceptsRecommendationServicePoolPartyImpl$$anonfun$2$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3.apply(RelevantConceptsRecommendationService.scala:166) 在 scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) 在 scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) 在 akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40) 在 akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397) 在 scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) 在 scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) 在 scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) 在 scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

我的代码:

def filterResultsWithExtractionSettings(conceptResults: ConceptResults): ConceptResults = {

    import system.dispatcher

    val mylist: Iterable[Future[List[Concept]]] = for (fieldSettings <- fieldSettingsList if fieldSettings.maxConceptsExtraction > 0; doc <- conceptResults.document; concepts <- doc.concepts) yield {

       Future {
         val schemefiltered = concepts.withFilter(e => e.conceptSchemes.contains(fieldSettings.scheme)).flatMap(e=> List(e))

          schemefiltered.size match {
           case e if e > fieldSettings.maxConceptsExtraction => schemefiltered.take(fieldSettings.maxConceptsExtraction)
           case _ => schemefiltered
         }
       }

     }

    val res = Await.result(Future.sequence(mylist), Duration.Inf).flatten.toList

    val distinctRes = res.distinct

    conceptResults.copy(document = Some(conceptResults.document.get.copy(concepts = Some(distinctRes))))

}

【问题讨论】:

  • 好吧,只要在行上放一个断点...
  • IntelliJ 的调试器有问题;我已经看到它会导致这样的问题(IllegalAccessError 不应该在正常代码中发生)。我只能建议使用不同的调试器和/或提交一个最小示例作为错误报告给 JetBrains。
  • 我想你没有找到答案。

标签: scala future


【解决方案1】:

由于您使用的是 IntelliJ,因此您可以在 Future 中添加断点。您可以通过单击要设置断点的文本行左侧的装订线来执行此操作。

https://www.jetbrains.com/idea/help/creating-breakpoints.html

【讨论】:

  • 你是否在调试模式下运行?
  • 是的,我正在调试模式下运行,尽管来自 scalatest
  • 我不确定您遇到的问题是在调试未来还是在 IntelliJ 中调试 Scala 代码。您是否能够使用 IntelliJ 调试非 Future Scala 代码?
  • 大声笑,当然,我可以毫无问题地使用 intellij 调试任何期望的未来。即使我在调试模式下从 scalatest 运行。我只是为了将来才面临这个问题。我想知道这是否不是一个最严重的问题。你知道跑步者。我会尽量不看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
  • 1970-01-01
  • 2013-04-07
  • 2015-09-06
  • 2019-09-29
  • 1970-01-01
  • 2021-01-18
相关资源
最近更新 更多