为了诊断一个棘手的内存损坏错误(内存被随机覆盖),我考虑使用 Electric Fence + 一些自定义 mprotect 调用来确保损坏的数据结构只有在我希望它们被写入时才可写(我立即得到尝试写入 SIGSEGV)。
不幸的是,上述代码是一个 Ruby C 扩展,这使得在 libefence 下运行它成为性能噩梦,就像在 libefence 下运行整个 ruby 解释器一样
export LD_PRELOAD=libefence.so.0.0
非常慢。
OTOH,直接将 ruby 扩展与 libefence 链接(通过将 -lefence 传递给链接器)似乎没有任何效果,导致它在没有 libefence 的仪器的情况下运行。
有没有办法通过 libefence 只运行特定共享库中发生的内存分配,而让其他共享库和主进程单独运行?