这类问题手工排查是很麻烦的,基本上是大海捞针。
遇到这类问题个人建议先找个好的malloc配合挂valgrind运行看看。
常规的思路是让malloc和free在分配和释放内存时,分配和释放(unmap掉)新的内存页,从而让系统在后续访问该虚拟地址时触发page fault并最终导致SIGSEGV,让程序立即崩溃。
FreeBSD内建的jemalloc还提供了许多其他辅助调试特性,如防止反复free(常见的可以安全问题的一类use after free,abort:true)、填充无效数据(防止malloc之后不做初始化,junk:true)等等,此外还可以配合valgrind做redzone(帮助检测缓冲区溢出)