【问题标题】:Can AddressSanitizer be used to log malloc calls?AddressSanitizer 可以用来记录 malloc 调用吗?
【发布时间】:2020-10-08 07:01:17
【问题描述】:

我的 c++ 程序的 RAM 稳步增加,但是这些分配不是泄漏,因为它们在程序终止时被正确整理(我没有收到 AddressSanitizer 报告的泄漏)。我正在使用第三方库,在那里我看不到源代码,我怀疑分配来自那里。我可以使用 AddressSanitizer 以某种方式记录所有 malloc 调用,类似于 perf 记录吗?我不能使用 perf 和 valgrind。

【问题讨论】:

  • 在 linux 中,您可能会使用 shadow malloc,因为它在 libc 中是一个弱符号。这意味着,创建一个小库,它公开了 malloc 的定义,该定义记录然后调用真正的 malloc。在 linux 中,您将使用 LD_PRELOAD 使 ld 优先考虑此库并在动态链接程序时获取 malloc 的定义

标签: c++ linux heap-memory address-sanitizer


【解决方案1】:

AddressSanitizer 记录所有 malloc 调用,但它只会报告无法访问的分配泄漏,即当它们的地址不存在于堆栈、全局内存或可访问堆中的任何位置时。由于它在您的情况下不会报告错误,这很可能意味着第三方分配是freed 或不是通过malloc 完成的(例如通过mmap)。

【讨论】:

    猜你喜欢
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 2013-03-17
    • 2010-09-12
    • 2014-06-10
    • 2012-12-23
    相关资源
    最近更新 更多