mallocvis icon indicating copy to clipboard operation
mallocvis copied to clipboard

当跨so引用时会出现误报

Open ranjie12345 opened this issue 1 year ago • 3 comments

首先夸一波大佬,工具写的很棒

当我在工程中应用这个工具时,我发现存在较多的误报

简易代码:

` void dummy() { Init(); Deinit(); }

int main() { dummy(); return 0; }`

Init()函数中会初始化资源,其中包括进程级的全局资源 Deinit()函数会销毁掉资源 当我用asan工具进行内存检测时,是没有发现泄漏的(由于保密的关系,无法展示详细代码,sorry~~)

我想到的可能原因是工程依赖的xxx.so中存在全局资源,其定义在mallocvis之前,构造在运行时,也就是mallocvis之后,然后这个资源是通过类似于析构释放资源的,也就是在mallocvis之后释放,这就导致了资源的申请被监控到了,但是释放的过程没有被监控

我想咨询下这个问题有没有准确定位的办法,要是有解决方案就更好了(xxx.so必须依赖,且无法更改...)

ranjie12345 avatar Jul 17 '24 13:07 ranjie12345

mallocvis.so只会监控的main开始后和main结束之间分配和释放的资源,应该并不会有全局资源的。 你是不是wsl,有同学反馈wsl似乎会有很多的误报,原因不明。 如果你需要,我可以改出两个函数,mallocvis_start(),mallocvis_end()让你调用,控制监控区间。

无法顺畅的大口呼吸,是活着的最好证明

---原始邮件--- 发件人: @.> 发送时间: 2024年7月17日(周三) 晚上9:17 收件人: @.>; 抄送: @.***>; 主题: [archibate/mallocvis] 当跨so引用时会出现误报 (Issue #9)

首先夸一波大佬,工具写的很棒

当我在工程中应用这个工具时,我发现存在较多的误报

简易代码:

` void dummy() { Init(); Deinit(); }

int main() { dummy(); return 0; }`

Init()函数中会初始化资源,其中包括进程级的全局资源 Deinit()函数会销毁掉资源 当我用asan工具进行内存检测时,是没有发现泄漏的(由于保密的关系,无法展示详细代码,sorry~~)

我想到的可能原因是工程依赖的xxx.so中存在全局资源,其定义在mallocvis之前,构造在运行时,也就是mallocvis之后,然后这个资源是通过类似于析构释放资源的,也就是在mallocvis之后释放,这就导致了资源的申请被监控到了,但是释放的过程没有被监控

我想咨询下这个问题有没有准确定位的办法,要是有解决方案就更好了(xxx.so必须依赖,且无法更改...)

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>

---原始邮件--- 发件人: @.> 发送时间: 2024年7月17日(周三) 晚上9:17 收件人: @.>; 抄送: @.***>; 主题: [archibate/mallocvis] 当跨so引用时会出现误报 (Issue #9)

首先夸一波大佬,工具写的很棒

当我在工程中应用这个工具时,我发现存在较多的误报

简易代码:

` void dummy() { Init(); Deinit(); }

int main() { dummy(); return 0; }`

Init()函数中会初始化资源,其中包括进程级的全局资源 Deinit()函数会销毁掉资源 当我用asan工具进行内存检测时,是没有发现泄漏的(由于保密的关系,无法展示详细代码,sorry~~)

我想到的可能原因是工程依赖的xxx.so中存在全局资源,其定义在mallocvis之前,构造在运行时,也就是mallocvis之后,然后这个资源是通过类似于析构释放资源的,也就是在mallocvis之后释放,这就导致了资源的申请被监控到了,但是释放的过程没有被监控

我想咨询下这个问题有没有准确定位的办法,要是有解决方案就更好了(xxx.so必须依赖,且无法更改...)

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>

archibate avatar Jul 17 '24 13:07 archibate

没,我就linux centos,我申请的资源是基于NPU封装的。如果可以的话,麻烦大佬提供下这两个函数我去试试,看能不能解决这个问题。 感谢感谢

------------------ 原始邮件 ------------------ 发件人: "archibate/mallocvis" @.>; 发送时间: 2024年7月17日(星期三) 晚上9:58 @.>; @.>;"State @.>; 主题: Re: [archibate/mallocvis] 当跨so引用时会出现误报 (Issue #9)

mallocvis.so只会监控的main开始后和main结束之间分配和释放的资源,应该并不会有全局资源的。 你是不是wsl,有同学反馈wsl似乎会有很多的误报,原因不明。 如果你需要,我可以改出两个函数,mallocvis_start(),mallocvis_end()让你调用,控制监控区间。

无法顺畅的大口呼吸,是活着的最好证明

---原始邮件--- 发件人: @.> 发送时间: 2024年7月17日(周三) 晚上9:17 收件人: @.>; 抄送: @.***>; 主题: [archibate/mallocvis] 当跨so引用时会出现误报 (Issue #9)

首先夸一波大佬,工具写的很棒

当我在工程中应用这个工具时,我发现存在较多的误报

简易代码:

` void dummy() { Init(); Deinit(); }

int main() { dummy(); return 0; }`

Init()函数中会初始化资源,其中包括进程级的全局资源 Deinit()函数会销毁掉资源 当我用asan工具进行内存检测时,是没有发现泄漏的(由于保密的关系,无法展示详细代码,sorry~~)

我想到的可能原因是工程依赖的xxx.so中存在全局资源,其定义在mallocvis之前,构造在运行时,也就是mallocvis之后,然后这个资源是通过类似于析构释放资源的,也就是在mallocvis之后释放,这就导致了资源的申请被监控到了,但是释放的过程没有被监控

我想咨询下这个问题有没有准确定位的办法,要是有解决方案就更好了(xxx.so必须依赖,且无法更改...)

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>

---原始邮件--- 发件人: @.> 发送时间: 2024年7月17日(周三) 晚上9:17 收件人: @.>; 抄送: @.***>; 主题: [archibate/mallocvis] 当跨so引用时会出现误报 (Issue #9)

首先夸一波大佬,工具写的很棒

当我在工程中应用这个工具时,我发现存在较多的误报

简易代码:

` void dummy() { Init(); Deinit(); }

int main() { dummy(); return 0; }`

Init()函数中会初始化资源,其中包括进程级的全局资源 Deinit()函数会销毁掉资源 当我用asan工具进行内存检测时,是没有发现泄漏的(由于保密的关系,无法展示详细代码,sorry~~)

我想到的可能原因是工程依赖的xxx.so中存在全局资源,其定义在mallocvis之前,构造在运行时,也就是mallocvis之后,然后这个资源是通过类似于析构释放资源的,也就是在mallocvis之后释放,这就导致了资源的申请被监控到了,但是释放的过程没有被监控

我想咨询下这个问题有没有准确定位的办法,要是有解决方案就更好了(xxx.so必须依赖,且无法更改...)

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.> — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you modified the open/close state.Message ID: @.>

ranjie12345 avatar Jul 17 '24 14:07 ranjie12345

推送了,你看看,你可以定义以下这个宏:

#define MANUAL_GLOBAL_INIT 1

然后,就可以手动调用(见malloc_hook.cpp文件末尾)mallocvis_init和mallocvis_deinit了。

archibate avatar Jul 17 '24 14:07 archibate