1

我正在尝试使用 valgrind 调试我的 R 包,但我无法超过加载数据的点,因为 valgrind 在尝试提取多元 mts 对象的单个时间序列对象时崩溃。我正在使用带有平台 x86_64-redhat-linux-gnu(64 位)的 R 2.15.0。

简约的代码是这样的:

> data(Seatbelts)
> y<-Seatbelts[,"VanKilled"]

似乎崩溃是由于未在分配中定义安全带的行,但如果我使用命令 y<-Seatbelts[1:192,"VanKilled"] 生成的对象不再是时间序列对象. 有什么聪明的方法可以解决这个问题吗?

这是 valgrind 给出的错误

vex amd64->IR: unhandled instruction bytes: 0x66 0xF 0x3A 0xB 0xC0 0xC
==31160== valgrind: Unrecognised instruction at address 0x399fe26990.
==31160== Your program just tried to execute an instruction that Valgrind
==31160== did not recognise.  There are two possible reasons for this.
==31160== 1. Your program has a bug and erroneously jumped to a non-code
==31160==    location.  If you are running Memcheck and you just saw a
==31160==    warning about a bad jump, it's probably your program's fault.
==31160== 2. The instruction is legitimate but Valgrind doesn't handle it,
==31160==    i.e. it's Valgrind's fault.  If you think this is the case or
==31160==    you are not sure, please let us know and we'll try to fix it.
==31160== Either way, Valgrind will now raise a SIGILL signal which will
==31160== probably kill your program.

 *** caught illegal operation ***
address 0x399fe26990, cause 'illegal opcode'

Traceback:
 1: ts(y, start = start(x), frequency = frequency(x))
 2: `[.ts`(Seatbelts, , "VanKilled")
 3: Seatbelts[, "VanKilled"]
aborting ...
4

1 回答 1

1

您的程序正在使用您的 valgrind 版本不支持的指令 (ROUNDSD)。

要做的第一件事是确保您使用的是最新版本的 valgrind,最好尝试 svn 版本,因为它支持该指令的某些(但不是全部)变体。

如果它仍然失败,那么您应该在 valgrind 错误跟踪器中报告它,尽管您可能会发现它已经被报告了。

于 2012-05-18T20:14:01.123 回答