我有一個應用程序與SIGSEGV崩潰。valgrind無法檢測到什麼樣的錯誤?
--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無法檢測到什麼樣的無效寫入?
(*):請不要問了實際的代碼,正如我所說,這是一個理論性的問題。
側面的問題:是否有任何其他工具,以趕上這一問題?
工具名稱變更爲EXP-sgcheck爲3.7版本(https://en.wikipedia.org/wiki/Valgrind#Other_tools) – lclark