基于Sanitizer排查coredump

基于Sanitizer分析coredump问题

使用方法

a. 配置gcc选项,为了在bin文件执行阶段可以产生Sanitizer给出的信息

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")

b. 编译
c. 配置LD_PRELOAD,export LD_PRELOAD=${ASAN_LIB_DIR},高优先级预加载asan
d. 复现问题,获取log
注: ASAN_LIB_DIR可通过ldd你编译生成的bin/lib查看,例如为"/usr/lib/x86_64-linux-gnu/libasan.so.2"。

在Qt项目中启用Sanitizer,特别是在使用C++编译器(如GCC或Clang)时,可以帮助发现和修复代码中的内存安全问题。Sanitizer是现代编译器提供的工具,包括AddressSanitizer (ASan) 和 UndefinedBehaviorSanitizer (UBSan) 等。以下是使用Qt和Clang/LLVM编译器启用Sanitizer的基本步骤: 1. **安装必要的工具**:确保已安装支持Sanitizer的版本的Clang或GCC。对于Ubuntu或Debian,你可以通过`sudo apt-get install clang-11` 或 `sudo apt-get install gcc-11` 来安装。 2. **修改CMakeLists.txt**: 在你的Qt项目的CMakeLists.txt中,添加以下编译标志来启用Sanitizer。例如,使用Clang: ```cmake find_package(Qt5Widgets REQUIRED) add_definitions(-fsanitize=address -DCMAKE_CXX_FLAGS=-fsanitize=address) ``` 如果你想同时启用地址 sanitizer 和 undefined behavior sanitizer,可以替换 `address` 为 `address,undefined`. 3. **构建项目**: 使用修改后的CMake命令来构建项目: ``` cmake -DCMAKE_CXX_COMPILER=/path/to/clang++ .. make ``` 或者如果使用GCC: ``` cmake -DCMAKE_CXX_COMPILER=/path/to/g++-sanitize -DCMAKE_CXX_FLAGS="-fsanitize=address" .. make ``` 4. **运行应用**: 编译后的可执行文件会有Sanitizer的标志,比如`.asan.out`。运行时需要指定这些标志,例如: ``` ./yourapp.asan.out ``` 注意:Sanitizer可能会减慢代码的执行速度,并且可能导致一些正常的行为被视为错误。在生产环境中,它们应该作为开发阶段的辅助工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值