2

我正在研究一个包含从 C/C++ 代码编译的二进制文件的 R 包。该编译代码中的某些内容会导致 Windows(7、64 位)上的随机崩溃,但不会导致 Linux(各种系统和配置)上的随机崩溃。我的 R 版本是 2.15.0。

我不知道如何调试它,因为我无法弄清楚 R 崩溃时给出的信息:

Problem signature:
  Problem Event Name:   BEX64
  Application Name: Rterm.exe
  Application Version:  2.150.58871.0
  Application Timestamp:    4f75a75a
  Fault Module Name:    StackHash_2264
  Fault Module Version: 0.0.0.0
  Fault Module Timestamp:   00000000
  Exception Offset: 0000000000000000
  Exception Code:   c0000005
  Exception Data:   0000000000000008
  OS Version:   6.1.7601.2.1.0.256.1
  Locale ID:    1037
  Additional Information 1: 2264
  Additional Information 2: 2264db07e74365624c50317d7b856ae9
  Additional Information 3: 875f
  Additional Information 4: 875fa2ef9d2bdca96466e8af55d1ae6e

我可以从 StackHash 模块中的问题中学到什么吗?

一些附加信息:

  1. 根据 R 文档,我在 Linux 上运行 Valgrind,它没有报告任何问题。我尝试了“gctorture”功能,但它似乎并没有以任何方式影响错误的行为。

  2. 我在我的代码中使用 pthreads 来利用多核 CPU。当我禁用多线程(使用我拥有的预处理器定义)时,问题似乎消失了,但我不确定这是否真的消除了问题,或者只是降低了它发生的可能性。

  3. 我没有使用那么多内存,这会在我正在使用的机器上造成麻烦。我也有一些递归调用,但似乎又太少了以至于它会溢出堆栈,除非线程在 Windows 上获得非常有限的堆栈?

  4. 由于多线程随机性和错误的低概率,我很难使用打印到控制台或日志文件来隔离它。

任何指针将不胜感激

4

1 回答 1

2

我会在调试器中加载 R,然后运行它直到它崩溃,然后看看它在哪里。

该错误显然是一个空指针访问(0000000000000008 引用的是 NULL) - 我很确定这不是堆栈问题。

您应该能够看到它在哪里崩溃。

于 2012-12-22T22:40:27.453 回答