小编Mic*_*ael的帖子

JVM远程调试会话终止于未捕获的异常

我正在尝试远程调试scala项目.无论是执行程序(内置和SBT执行)和我的调试器(的IntelliJ)是局部的,但因为我不希望使用的IntelliJ,使用远程调试会话建立似乎为调试方便最简单的选择.

该程序以以下选项启动:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
Run Code Online (Sandbox Code Playgroud)

它在发布时成功挂起,我可以成功连接我的调试器.我可以设置断点并逐步执行代码,但问题是未捕获的异常会终止调试会话并断开调试器的连接,从而无法调试.这是默认行为是asburd,所以我必须做错事.

Intellij的控制台显示:

Connected to the target VM, address: 'localhost:5005', transport: 'socket'
Disconnected from the target VM, address: 'localhost:5005', transport: 'socket'
Run Code Online (Sandbox Code Playgroud)

在执行或调试方面,我是否缺少某些东西?

编辑:添加一个堆栈跟踪,我在我的主类中抛出新的异常("what"):

[error] java.lang.Exception: what
[error]     at travellr.application.prophet.Prophet$.main(Prophet.scala:80)
[error]     at travellr.application.prophet.Prophet.main(Prophet.scala)
[error]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[error]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[error]     at java.lang.reflect.Method.invoke(Method.java:597)
[error]     at scala.tools.nsc.util.ScalaClassLoader$$anonfun$run$1.apply(ScalaClassLoader.scala:81)
[error]     at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:24)
[error]     at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.asContext(ScalaClassLoader.scala:86)
[error]     at scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:81)
[error]     at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:86)
[error]     at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:83)
[error]     at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
Run Code Online (Sandbox Code Playgroud)

java debugging jvm scala intellij-idea

6
推荐指数
1
解决办法
2万
查看次数

Scala模式匹配编译器警告

我在我的代码中导致了一个更难找到我会喜欢的错误,以及我希望将来可以避免的一些错误.我预计Scala编译器会警告我我的错误(除非我遗漏了什么).

我把它减少到了琐碎的情况:

Vector.maybeGetVector match {
  case v:Vector => true
  case _ => false
}

case class Vector(x:Int, y:Int)

object Vector {
  def maybeGetVector : Option[Vector] = Some(new Vector(1,2))
}
Run Code Online (Sandbox Code Playgroud)

我使用的唯一的原因wildcard,而不是None对整个秋季的是,我只是想以匹配返回的亚型Option.

我期待编译器警告,因为很容易推断第一个case语句包含无法访问的代码.Option[Vector]不能是一个子类型Vector.

奇怪的是,如果我添加以下case语句:

 case i:Int => false
Run Code Online (Sandbox Code Playgroud)

它引发了一个错误并告诉我这Option[Vector]是必需的.

有没有办法在命名约定之外以这种方式防止程序员错误.唯一可以匹配的东西OptionSome/None/null.我觉得我错过了一些明显的东西.

scala

4
推荐指数
1
解决办法
457
查看次数

标签 统计

scala ×2

debugging ×1

intellij-idea ×1

java ×1

jvm ×1