我正在研究一个包含从 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 模块中的问题中学到什么吗?
一些附加信息:
根据 R 文档,我在 Linux 上运行 Valgrind,它没有报告任何问题。我尝试了“gctorture”功能,但它似乎并没有以任何方式影响错误的行为。
我在我的代码中使用 pthreads 来利用多核 CPU。当我禁用多线程(使用我拥有的预处理器定义)时,问题似乎消失了,但我不确定这是否真的消除了问题,或者只是降低了它发生的可能性。
我没有使用那么多内存,这会在我正在使用的机器上造成麻烦。我也有一些递归调用,但似乎又太少了以至于它会溢出堆栈,除非线程在 Windows 上获得非常有限的堆栈?
由于多线程随机性和错误的低概率,我很难使用打印到控制台或日志文件来隔离它。
任何指针将不胜感激