gpt4 book ai didi

c++ - 当我的软件使用 AddressSanitizer 编译时,如何随时输出已分配内存缓冲区的列表?

转载 作者:行者123 更新时间:2023-11-30 04:56:20 33 4
gpt4 key购买 nike

我正在查看我的一个守护进程的问题,它非常耗费内存。看起来某些部分永远不会释放内存,即使当我让那个守护进程干净地退出时,也没有泄漏。

我想看看在守护进程运行时添加和保留了哪些缓冲区。由于我已经使用 -fsanitizer=address 命令行选项进行编译,我想我可以访问某些可以执行此操作的函数?

我以为我看到了一个“libasan”,但我找不到任何关于它的文档。没有这种事吗?如果有,该文档在哪里?

最佳答案

无法转储 Asan 内存分配统计信息。使用最新的 Asan 版本,您可以通过运行 export ASAN_OPTIONS=detect_leaks=1 来检查内存泄漏,但我认为这不是您问题的原因。

您的问题可能是由 Asan 隔离引起的 - Asan 不会立即释放 free 上的内存以便能够报告 use-after-free 错误。默认隔离区大小为 256M,您可以通过 export ASAN_OPTIONS=quarantine_size_mb=16 进行控制。

顺便说一下,不建议使用 -fsanitize=address 编译您的 SW 的生产版本(Asan 用于错误检测,而不是预防)。

关于c++ - 当我的软件使用 AddressSanitizer 编译时,如何随时输出已分配内存缓冲区的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52602925/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com