SIGSEGV でクラッシュするアプリケーションがあります。
--20183-- VALGRIND INTERNAL ERROR: Valgrind received a signal 11 (SIGSEGV) - exiting
--20183-- si_code=80; Faulting address: 0x0; sp: 0x409a8de60
valgrind: the 'impossible' happened:
Killed by fatal signal
==20183== at 0x38039981: vgPlain_arena_free (m_mallocfree.c:245)
==20183== by 0x38001E84: die_and_free_mem (mc_malloc_wrappers.c:124)
==20183== by 0x380688C3: vgPlain_scheduler (scheduler.c:1402)
==20183== by 0x380913F4: run_a_thread_NORETURN (syswrap-linux.c:95)
クラッシュはランダムな場所で発生しますが、常に解放するときに発生するため、mallocチェーンを台無しにする何らかのメモリ破損が必要です。
通常、次のようなメッセージが表示されます。
Invalid write of size 8
これは、メモリが破損した場所を示しますが、メッセージはなく、ただちにクラッシュします。AFAIK valgrind はほとんどのシステムコールをカバーしているため、それらの呼び出しに関連する問題も報告されるので...
私の理論上の (*) 質問は、どのようなバグを探すべきかということです。valgrind が検出できない無効な書き込みにはどのようなものがありますか?
(*): 私が言ったように、実際のコードを求めないでください。これは理論的な質問です。
副次的な質問: 問題をキャッチする他のツールはありますか?