我希望在我的共享库上使用 Clang 的泄漏/地址清理程序,该库是dotnet
在运行时从 JVM 或(Linux)加载的,所以我无法重新编译二进制文件。
使用LD_PRELOAD
会产生非常嘈杂的输出,JVM 本身会报告很多(可能是误报?)泄漏。当LD_PRELOAD
ing for时,消毒剂彻底崩溃dotnet
。
有没有办法将消毒剂静态链接到共享库(或动态链接LD_PRELOAD
)?
我希望在我的共享库上使用 Clang 的泄漏/地址清理程序,该库是dotnet
在运行时从 JVM 或(Linux)加载的,所以我无法重新编译二进制文件。
使用LD_PRELOAD
会产生非常嘈杂的输出,JVM 本身会报告很多(可能是误报?)泄漏。当LD_PRELOAD
ing for时,消毒剂彻底崩溃dotnet
。
有没有办法将消毒剂静态链接到共享库(或动态链接LD_PRELOAD
)?
首先,您不能将 sanitizer 运行时库静态链接到您的库中。它必须被预加载以拦截 std 分配器(malloc
等),否则会发生故障(在 Asan 启动时有一个特殊检查,以确保libasan
已预加载)。
JVM 中的嘈杂输出很可能是合法错误。使用LD_PRELOAD
会产生非常嘈杂的输出,JVM 本身会报告很多(可能是误报?)泄漏。
LD_PRELOAD
用于 dotnet时,消毒剂彻底崩溃。
这是真正的崩溃还是诊断出的内存错误?崩溃可以在Asan 跟踪器中报告。内存错误应该报告给 dotnet 项目,但您仍然可以使用 continue-after-error 模式继续执行(grep for "continue-after-error" in Asan FAQ)。