2009-02-26 6 views
3

私はUnixで動作しているプロセスからコアを見ています。 通常、私はバックトレースに自分の周りやルートを使ってメモリの問題を特定できます。 この場合、どのように進めるかわかりません。Unix上のセグメンテーションフォルト - スタック破損の可能性あり

まず、バックトレースは、私がもっと多くを期待する3フレームしか与えません。 これらのフレームでは、提示されたすべての関数パラメータは完全に無効に見えます。 私が期待するものはありません。

いくつかのポインタパラメータは、それらに関連した以下のしている - これは完全なスタック破損のいくつかの種類を示唆しているアドレス

でメモリにアクセスすることはできません。 私はlibumemでプロセスを実行し、すべてのバッファがクリーンであると報告されました。

umem_statusも何も報告しませんでした。

だから、基本的に私は困惑しています。 考えられる原因は何ですか? libumemがエラーを報告していないように見えるので、コードで何を探すべきですか。

どのように私はfurhterをデバッグすることができますか?私は考慮すべきmdbの任意の余分な機能?

ありがとうございました。

+0

スタック内の最後の正常なポイントを(手動によるトレースを介して)見つけることができますか?バッファオーバーランのように聞こえる。 –

+0

は万が一C++に関与していますか?静的初期化問題のように聞こえる。 –

+0

は、これらの3つのフレームを貼り付けて、私たちがそれらが何であるかを見ることができるので役に立ちます。 –

答えて

4

スタック破損は可能性のように聞こえます。試してみるもの:

  • 可能なすべてのコンパイラの警告をオンにしてください!
  • Run lint!
  • 可能であれば、多くのメモリ破損検出機能が組み込まれたOpenBSDでプログラムをテストしてください。&を試してみてください。
  • 可能であれば、ProPolice、StackGuardなどのツールを使用してください。
  • この問題を簡単に再現できる場合は、デバッガで再生する価値があります。できるだけ絞り込んでからステップスルーしてください。
0

libumemは電気フェンスと同じオーバランを報告しますか?

は、UNIXの下でテスト環境ではなく、商業ENVで簡単に再現することはできません/あなたのコードコアが発生SOLARISが、libumemによる悪い何も示さない、

0

?これが私に起こるとき、私はいつも同じものを見つけます:ヌルポインタ。クラッシュすると恐ろしいように見えますが、その原因は究極的には単純です。

0

私は同様の問題に遭遇しました。 GDBのバックトレースは役に立ちませんでした。 Valgrindが私の救助に来た。

Valgrindを使用してアプリケーションを実行します。無効な書き込みのようなすべてのエラーを識別します。コードを分析し、それらを修正できるかどうかを確認します。

私のケースでは、無効な書き込みを試みていましたが(その時にはNULLを書き込むかもしれませんが)、その事例ではなく他のところでその効果を示しました。

関連する問題