Boehm GC:スマッシュしたヒープオブジェクトを効果的にデバッグする方法は?
-
13-10-2019 - |
質問
私のプログラムを実行するとき、私はBoehm GCから次のエラーを取得します(GC_DEBUGを定義して):
GC_check_heap_block: found smashed heap objects:
0x8ef1008 in or near object at 0x8ef1010(<smashed>, appr. sz = 29)
0x8ef1188 in or near object at 0x8ef1190(<smashed>, appr. sz = 29)
...
上記は約20回続きます。
奇妙なことに、私はプログラムに何も問題がないことを見つけることができません。それは想定されていることをし、クラッシュしません。
GCを無効にしてプログラムをコンパイルできます。その後、私はそれでValgrindを実行することができますが、奇妙なことに、Valgrindは問題を見つけられません!
Boehm GC内で問題になる可能性があります。それを無視するだけですか?
これを効果的にデバッグする方法はありますか?
または、誰でも上記のメッセージが正確に何を説明することができますか 意味?
解決
3ヶ月以上後に自分の質問に答えるために...
すべてのポインターをファイルにログに記録し、破壊された警告を与えたポインターと比較してみました。しかし、それはどこにも導かなかったため、疑わしいポインターはコードベース全体のさまざまな割り当てから来ていました(おそらく壊れた可能性のある特定の場所はありません)。
それまでの間、GCがなければ、Valgrindはエラーを報告しませんでしたが、もちろんエラーが存在しないという意味ではありません。
しかし、GCのこの特定のバージョンに微妙なバグがあるかどうかを試してみると思いました。私は最新の安定バージョンGC 7.1を使用していました。 7.2alpha4にアップグレードしましたが、問題はなくなりました!
誰かがこれを駆け抜けた場合、うまくいけばこれが役立つでしょう。
所属していません StackOverflow