3

我有一个用 Scala 2.9.2 编写的小项目,其中包含使用 ScalaTest 编写的单元测试。我使用 SBT 编译和运行我的测试。

在我的项目上运行sbt test会定期导致 JVM 段错误,但只需从 SBT 编译和运行我的项目就可以正常工作。这是确切的错误消息:

Invalid memory access of location 0x8 rip=0x10959f3c9
[1]    11925 segmentation fault  sbt

我无法在任何地方找到核心转储,但如果可以获得它,我很乐意提供它。

运行java -version结果如下:

java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)

但是我也安装了 Java 7(尽管我从来没有能够用它实际运行 Java 程序,afaik)。

另一个可能相关的问题:我的一些测试用例包含带有括号的标题,例如()。因此,SBT 或 ScalaTest(不确定)将在输出中间插入方括号。例如,一个名为的测试用例(..)..(..)可能突然看起来像(..[)..](..).

非常感谢解决这些问题的任何帮助:-)

编辑:我安装了 Java 7 JDK,所以现在java -version显示正确的东西:

java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)

这也意味着我现在得到了更详细的段错误和核心转储:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x000000010a71a3e3, pid=16830, tid=19459
#
# JRE version: 7.0_07-b10
# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.3-b01 mixed mode bsd-amd64 compressed oops)
# Problematic frame:
# V  [libjvm.dylib+0x3cd3e3]

转储

编辑:将 scalaVersion 更改为 2.9.1 一次出现以下错误,然后出现与上述相同的错误:

Could not load hsdis-amd64.dylib; library not loadable; PrintAssembly is disabled
[thread 25091 also had an error]
4

3 回答 3

1

JVM segfaulting 通常表示系统内存不好,尤其是在没有被推到极限时。

整夜运行 memtestx86。

于 2012-12-07T00:28:17.857 回答
0

我有一个非常相似的错误。许多争论和刺激发现它发生在一个使用 Array.ofDim 分配许多数组的循环周围。用 Array.fill 替换它似乎已经为我解决了这个问题。

于 2013-02-27T12:07:49.440 回答
0

我在为学习 scala 1构建的玩具项目中遇到了类似的问题。我发现似乎可以阻止 seg 错误的一个解决方案是将 build.sbt 中的 scala 版本更改为 2.9.1 版本。我不知道为什么这有帮助。

于 2012-12-12T17:02:35.973 回答