2011-08-02 13 views
1

が表示されない:(APP.exe.stackdump)をSTACKDUMP ++私は時々クラッシュして、次のファイルを作成アプリ持つスタックトレース

Exception: STATUS_ACCESS_VIOLATION at eip=6BA4B246 
eax=67452301 ebx=EFCDAB89 ecx=98BADCFE edx=10325476 esi=FFFFFFFF edi=98BADCFE 
ebp=FFFFFFFF esp=01A2C928 program=C:\APP.exe, pid 168, thread unknown (0x13E8) 
cs=001B ds=0023 es=0023 fs=003B gs=0000 ss=0023 
Stack trace: 
Frame  Function Args 
End of stack trace 

私は、Windows、UbuntuとCentOSにで++グラムしてコンパイルしています。エラーは時にはスレッド内でのみ発生しますが、スタックトレースを取得するにはどうしていますか?または任意の追加情報?

アップデート1:

私はそれをキャプチャすることができます。

signal(SIGSEGV, sigHandler); 

しかし、それでもまだ、私はスタックトレース情報を持っていません。スタックトレースが使用できない理由を

+0

Windows、Ubuntu、Centosでコンパイルしています。あなたは3人全てで、あるいは1人だけでエラーになっていますか? –

+0

私は間違っているかもしれませんが、 'esp'は妥当と思われます。あなたはそこに見ましたか?スタックトレースがないということは、トップレベルの戻り値が自動的には見つかりませんでしたが、スタックの破損(1つのポインタ)が非常に小さいことを意味します。 – MSalters

+1

はスタックの破損と思われます。もし 'gdb'で再現できますか?if '-g'でコンパイルされますか? –

答えて

1

または追加情報はありますか?

valgrindまたはefenceを使用してください。どちらも、後で壊れたデータを使用するのではなく、逆参照時にワイルドポインタの使用法を見つけるのに非常に優れています。

+0

私はこのアプリで過去のvalgrindを試しましたが、このアプリのいくつかの点で壊れています。私はエフェンスを試みます。 Thnx – Wiliam

1

は、いくつかの可能性があります。

(私はこれがGCC/G ++によって生成されたx86_64のコードのデフォルトの動作であることを覚えている限り)あなたはスタックフレームなしで、あなたのコードをコンパイルし
  1. )(あなたが前か、メインの後に実行されるコードであり、あなたはまだか、既にそれらから返される任意の関数を入力していない)
;
  • をトレースするためには何もありません)。(スタックオーバーフロー)
  • あなたのスタックを破損しました

    EBP = FFFFFFFFという事実から判断すると、低レベルのCやEBPに触れるアセンブラコードに問題がない限り、#2に行きます。あなたはダンプから解体を提供できますか?

  • 関連する問題