2015-07-20 2 views
5

Как отлаживать код в Scala Future?Как отладить будущее Scala?

Я использую IntelliJ.

Помимо регистрации всех, что я не вижу, как.

Любые советы о том, как действовать?

EDIT1:

Здесь ошибка я получаю:

java.lang.IllegalAccessError: tried to access field org.iadb.poolpartyconnector.conceptsrecommendation.RelevantConceptsRecommendationServicePoolPartyImpl$$anonfun$2$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3.concepts$1 from class org.iadb.poolpartyconnector.conceptsrecommendation.RelevantConceptsRecommendationServicePoolPartyImpl$$anonfun$2$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3$GeneratedEvaluatorClass$3$1 at org.iadb.poolpartyconnector.conceptsrecommendation.RelevantConceptsRecommendationServicePoolPartyImpl$$anonfun$2$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3$GeneratedEvaluatorClass$3$1.invoke(FileToCompile0.scala:173) at org.iadb.poolpartyconnector.conceptsrecommendation.RelevantConceptsRecommendationServicePoolPartyImpl$$anonfun$2$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3.apply(RelevantConceptsRecommendationService.scala:169) at org.iadb.poolpartyconnector.conceptsrecommendation.RelevantConceptsRecommendationServicePoolPartyImpl$$anonfun$2$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3.apply(RelevantConceptsRecommendationService.scala:166) at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40) at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397) at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) at 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) at org.iadb.poolpartyconnector.conceptsrecommendation.RelevantConceptsRecommendationServicePoolPartyImpl$$anonfun$2$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3.apply(RelevantConceptsRecommendationService.scala:169) at org.iadb.poolpartyconnector.conceptsrecommendation.RelevantConceptsRecommendationServicePoolPartyImpl$$anonfun$2$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3.apply(RelevantConceptsRecommendationService.scala:166) at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40) at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397) at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) at 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)))) 

} 
+0

Ну, просто поставить точку останова на линии ... отладчик –

+0

IntelliJ является багги; Я видел, что это вызывает такие проблемы ('IllegalAccessError' никогда не должно происходить в обычном коде). Все, что я могу предложить, это использование другого отладчика и/или представление минимального примера в качестве отчета об ошибке для JetBrains. – lmm

+0

Вы пробовали это? http://stackoverflow.com/questions/27784413/how-to-debug-a-multi-threaded-app-in-intellij – mike

ответ

-1

Поскольку вы используете IntelliJ, вы можете добавить точку останова в будущем. Вы можете сделать это, нажав на желоб слева от строки текста, в которой вы хотите, чтобы точка останова была включена.

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

+2

Ну, это не сработает. – MaatDeamon

+0

Вы работаете в режиме отладки? – Zeimyth

+0

да, я работаю в режиме отладки, хотя от scalatest – MaatDeamon

Смежные вопросы