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. コードで pthread を使用して、マルチコア CPU を利用しています。マルチスレッドの使用を無効にすると (私が持っているプリプロセッサの定義を使用して)、問題は解決したように見えますが、これで本当に問題が解消されるのか、単に問題が発生しにくくなるのかはわかりません。

  3. 使用しているマシンで問題が発生するほど多くのメモリを使用していません。再帰呼び出しもいくつかありますが、Windows でスレッドが非常に限られたスタックを取得しない限り、スタックをオーバーフローさせるにはあまりにも少なすぎるようです。

  4. マルチスレッドのランダム性とバグの可能性が低いため、コンソールまたはログ ファイルへの出力を使用してバグを特定するのに非常に苦労しています。

どんなポインタでも大歓迎です

4

1 に答える 1

2

R をデバッガーにロードして、クラッシュするまで実行し、それがどこにあるかを確認します。

エラーは明らかにヌル ポインター アクセスです (0000000000000008 は NULL を参照しています) - スタックの問題ではないと確信しています。

クラッシュする場所を確認できるはずです。

于 2012-12-22T22:40:27.453 に答える