2011-12-22 1 views
3

恐ろしいメッセージ(私の死の青い画面の代わりに=)。スタックトレース上の2番目の項目はdo.call(...)呼び出しで、自動的に出力されます。"キャッチしたアクセス違反 - 気をつけて続行する"デバッグ/レポート方法

...1018L, 1018L, 1018L, 1018L, 1018L, 1018L, 1018L,  1018L, 1018L, 1018L, 1018L, 1018L, 1018L, 1018L, 1018L, 1018L,  1018L, 1018L, 1018L, 1018L, 1018L, 1018L, 1018L, 1018L))) 
    2: do.call(functionToTest, c(thisTestCaseParameters, fixedParameterValues)) 

トレースバックは、だから、でその何かでなければならない私にdo.callコール

よりもさらに情報を与えていない:私は見ることができ、すべてのデータのように見えるものであるため、スタックの最上部には、カットオフのようですfunctionToTestが見つかりました。それがどこにあるのかはどうやって分かりますか?スタックの最上部をより深く見る方法はありますか? functionToTestは、他の関数などを呼び出す関数です。問題を特定して報告することができるようにしようとしていますが、方法はわかりません。

+0

予期せずエラーを再現できる場合は、 'options(error = recover)'または 'options(error = dump.frames)'を設定します(http:// stackoverflow .com/questions/8507442/error-being-throw-throw-error-being-throw))が役に立つ情報を得るかもしれません。どちらも、エラーがスローされた後、フレームスタック上のいくつかのコンテキストを突き止めることができます。ブルームーンでエラーが1回しか発生しない場合は、 'options(error = dump.frames)'を設定したままにして、特定のエラーが発生したときに 'last.dump'を調べることができます。 –

+0

ありがとう、ジョシュ。私は予期せずエラーを再現することができないので、オプション(error = dump.frames)をオンのままにしておきます。まともなメモリを使用して実行するのに時間がかかる機能があるようです。 – SFun28

答えて

0
?traceback 
?browser 

それ以外はRエラーです。 OSが生成したメッセージが表示されているのではないかと思います。

+0

DWin - アクセス違反の後でブラウザやトレースバックを具体的に使用しますか?私はトレースバックを呼びましたが、do.call呼び出しよりもスタックに高い情報はありませんでした。私の質問は、違反の原因を突き止めるためにアクセス違反の後にどのテクニックを使用できるかということです。このアクセス違反は容易に再現されません。私が言ったように、functionToTestは他の関数を呼び出す(など)。だから私はどこにエラーが発生するのか分からないと認めました、私はエラーの原因を特定する技術を探しています。 – SFun28

+2

私はこのようなメッセージを受け取ったことはありませんし、私が言ったように、それはRから来ているのか分かりません。あなたはOSの細部をあまりにも微妙に提供する必要があるというヒントでしたか? –

+0

私はWindows 7 x64を実行しています。それはデバッグのための別のテクニックを提供しますか?私はあなたが "Rから来る"ことを意味しているのかどうかはわかりませんが、これはRのアクセス違反なので、Rかパッケージの問題でしょうか? – SFun28

1

私のWindows 2008 R2 64ビットボックスにメモリモジュールのフライを行う前にこのエラーが発生しました。私はrgeosパッケージを使用してメモリ集中型タスクを実行していました。このパッケージは、それが接続されているGEOS Cライブラリのメモリリークを被るため、メモリが集中します。漏れを修正しようとする試みにもかかわらず、それは依然として持続する。

このエラーは、メモリモジュールが故障していて、メモリリークが原因でこのメモリリークが発生していたためと思われます。

メモリモジュールが削除されており、このメモリリークのあるパッケージと同じ解析を実行することに注意してください。エラーが発生したことはありません。

これはハードウェアの問題であり、コードが何らかの形でそれを刺激している可能性を考慮してください。これは、時にはうまくいくということを示す重要な指標ですが、必ずしも私の経験ではメモリが悪質なものになる可能性はありません。

あなたはこの可能性に/ルールを除外するために、次の手順を実行します。

  1. は、リソースモニタまたは他の同等のソフトウェアを使用して、問題の手順を実行し、メモリ使用量を観察します。それはRプロセスのために異常に高いですか?

  2. options(error=recover)を使用して、おそらく動作しているループの進行をマークできる反復子をコードに追加します。毎回同じポイントでクラッシュするのですか、それとも違うのですか?同一条件で異なる場合は、ハードウェアエラーのランダム性が示唆されます。

  3. これらの手順で何かがランダムであることが示された場合は、メモリの状態を調べる手順を実行します。 StackExchange SuperUserでこれを行う方法の数多くの議論があります。

+0

私は物理メモリの問題をチェックするつもりはありませんでした。私は一晩中スキャンしたが、完了していないので、週末に1回実行して報告する。良い提案! – SFun28

+0

私の経験では、memtestはこれらの断続的な種類のメモリエラーを常にピックアップしません。しかし、私はこれが次に試すものだと思います。おかげでポール、 – digitalmaps

+0

。私はメモリテストを行う機会を得られませんでしたが、あなたの投稿がこれまでのベスト提案でしたので、私はあなたに賞金を授与し、深く掘り下げるまで問題を開いたままにします。ありがとう! – SFun28

関連する問題