Средство очистки утечки / адреса в общей библиотеке без LD_PRELOAD - PullRequest
0 голосов
/ 22 октября 2019

Я хочу использовать средство очистки утечек / адресов Clang в моей общей библиотеке, которая загружается из JVM или dotnet (Linux) во время выполнения, поэтому я не могу перекомпилировать двоичный файл.

ИспользованиеLD_PRELOAD приводит к очень шумному выводу, о многих (предположительно ложно положительных?) Утечках сообщают из самой JVM. Дезинфицирующее средство сразу падает, когда LD_PRELOAD ing для dotnet.

. Есть ли какой-либо способ статически связать дезинфицирующее средство с разделяемой библиотекой (или динамически без LD_PRELOAD)?

1 Ответ

1 голос
/ 23 октября 2019

Во-первых, вы не можете статически связывать библиотеки времени выполнения sanitizer с вашей библиотекой. Он должен быть предварительно загружен для перехвата распределителя std (malloc и т. Д.), В противном случае он будет работать неправильно (при запуске Asan существует специальная проверка, обеспечивающая предварительную загрузку libasan).

Шумный вывод в JVM можетхорошо быть законным ошибки. Использование LD_PRELOAD приводит к очень шумному выводу, о многих (предположительно ложно положительных?) Утечках сообщается из самой JVM.

Дезинфицирующее средство сразу падает, когда LD_PRELOAD ing для dotnet.

Это реальный сбой или диагностированная ошибка памяти? О сбое можно сообщить в Asan tracker . Ошибка памяти должна быть сообщена проекту dotnet, но вы все равно можете продолжить выполнение после него, используя режим продолжения после ошибки (grep для «продолжить после ошибки» в FAQ по Asan ).

...