poison。但是 use after poison 不能够给出地址失效

简介: q

分配过大的内存 AddressSanitizer 会报出 OOM 错误,根据栈以及 Core Dump 文件可以分析出何处分配了过大内存。栈举例如下:

Fix PR 见:https://github.com/apache/doris/pull/10289

UBSan 能够高效发现强制类型转换的错误,如下方 Issue 链接中描述,它能够精确的描述出强制类型转换带来错误的代码,如果不能在第一现场发现这种错误,后续因为指针错误使用,会比较难定位。

Issue:https://github.com/apache/doris/issues/9105

UndefinedBehaviorSanitizer 也比 AddressSanitizer 及其它的更容易发现死锁。

比如:https://github.com/apache/doris/issues/10309

程序维护内存 Pool 时 AddressSanitizer 的使用
AddressSanitizer 是编译器针对内存分配、释放、访问 生成额外代码来实现内存问题分析的,如果程序维护了自己的内存 Pool,AddressSanitizer 就不能发现 Pool 中内存非法访问的问题。这种情况下需要做一些额外的工作来使得 AddressSanitizer 尽可能工作,主要是使用 ASAN_POISON_MEMORY_REGION 和 ASAN_UNPOISON_MEMORY_REGION 管理内存是否可以访问,这种方法使用比较难,因为 AddressSanitizer 内部有地址对齐等的处理。出于性能以及内存释放等原因,Apache Doris 也维护了内存分配 Pool ,这种方法不能确保 AddressSanitizer 能够发现所有问题。

可以参考:https://github.com/apache/doris/pull/8148

当程序维护自己的内存池时,按照 https://github.com/apache/dorisw/pull/8148 中方法,use after free 错误会变成 use after poison。但是 use after poison 不能够给出地址失效的栈(https://github.com/google/sanitizers/issues/191),从而导致问题的定位分析仍然很困难。

因此建议程序维护的内存 Pool 可以通过选项关闭,这样在测试环境就可以使用 AddressSanitizer 高效地定位内存问题。

Core dump 分析工具
分析 C++ 程序生成的 Core Dump 文件经常遇到的问题就是怎么打印出 STL 容器中的值以及 Boost 中容器的值,有如下三个工具可以高效的查看 STL 和 Boost 中容器的值。
————————————————

相关文章
解决删除文件时出现“该项目不在XX中,请确认该项目的位置然后重试”的提示
近期在删除文件夹的时候,出现了这个“该项目不在XX中,请确认该项目的位置然后重试”的提示,实际上这个文件(夹)就在那里,死活都删不掉,win10系统重启之后删除都不行的
9503 0
|
4月前
|
Ubuntu Shell Linux
10-27|把错误的时间改对
10-27|把错误的时间改对
|
6月前
|
Java 数据库连接 应用服务中间件
表单数据返回不到,HTTP状态 404 - 未找未找到,解决方法,针对这个问题,写一篇文章,理一下思路,仔细与原项目比对,犯错的原因是Mapper层的select查询表单数据写错,注意打开的路径对不对
表单数据返回不到,HTTP状态 404 - 未找未找到,解决方法,针对这个问题,写一篇文章,理一下思路,仔细与原项目比对,犯错的原因是Mapper层的select查询表单数据写错,注意打开的路径对不对
分页列表数据不出来,初始化页面数据不出来的原因,Create中传一个参数1,解决bug的方法,学习敲代码的时候仔细与原项目比对,从上比到下
分页列表数据不出来,初始化页面数据不出来的原因,Create中传一个参数1,解决bug的方法,学习敲代码的时候仔细与原项目比对,从上比到下
|
存储 域名解析 缓存
2023-6-13-IP配置知识补充学习
2023-6-13-IP配置知识补充学习
210 0
|
数据采集 JSON 数据格式
一日一技:如何处理配置文件中的重复值?
一日一技:如何处理配置文件中的重复值?
138 0
|
XML 前端开发 安全
【全网最全】JSR303参数校验与全局异常处理(从理论到实践别用if判断参数了)
【全网最全】JSR303参数校验与全局异常处理(从理论到实践别用if判断参数了)
170 0
【全网最全】JSR303参数校验与全局异常处理(从理论到实践别用if判断参数了)
|
编译器
rpath失效是怎么回事
rpath失效是怎么回事
129 0
|
测试技术
软件测试面试题:一个元素明明定位到了,点击无效(也没报错),如果解决?
软件测试面试题:一个元素明明定位到了,点击无效(也没报错),如果解决?
513 0
|
Java 编译器 索引
异常是怎么被处理的?这题的答案不在源码里面。 (中)
异常是怎么被处理的?这题的答案不在源码里面。 (中)
118 0
异常是怎么被处理的?这题的答案不在源码里面。 (中)

热门文章

最新文章

下一篇
开通oss服务