Чтобы диагностировать сложную ошибку повреждения памяти (память случайно перезаписывается), я подумал об использовании Electric Fence + некоторых пользовательских вызовов mprotect, чтобы гарантировать, что поврежденные структуры данных будут доступны для записи только тогда, когда я хочу, чтобы они были записаны (иЯ сразу же получаю SIGSEGV, когда их пытаются записать).
К сожалению, указанный код является расширением Ruby C, что делает его запуск под libefence кошмаром производительности, как и запуск всего интерпретатора ruby под libefence с использованием
export LD_PRELOAD=libefence.so.0.0
ужасно медленный.
OTOH, связывая расширение ruby напрямую с libefence (передавая -lefence линкеру), похоже, не дает никакого эффекта, заставляя его работать без инструментария libefence.
Есть ли способ запустить только выделение памяти, происходящее в определенной общей библиотеке, через libefence и оставить другие общие библиотеки и основной процесс в покое?