在Windows上调试R的已编译代码

时间:2012-12-22 21:50:41

标签: c r debugging

我正在开发一个包含二进制文件的R包,它是用C / C ++代码编译的。该编译代码中的某些内容会导致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”功能,但它似乎没有以任何方式影响bug的行为。

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

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

  4. 由于多线程随机性和bug的可能性很低,我很难用打印机将其隔离到控制台或日志文件。

  5. 任何指针都会非常感激

1 个答案:

答案 0 :(得分:2)

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

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

你应该能够看到它崩溃的地方。