Asan 与 ros
- 背景: 在调试 ros package 的 memory leak
- 方案:
- 在 CMake 中添加
set(CMAKE_CXX_FLAGS "-std=c++14 ${CMAKE_CXX_FLAGS} -fsanitize=address -g -fno-omit-frame-pointer")
- 如果是 roslaunch 启动的(param 较多),正常启动一遍节点,无视 ASan 报错信息,新开一个 terminal,保存参数到文件
rosparam dump filename
- 加载参数
rosparam load filename
- 找到 libasan:
find /usr -name "libasan.so"
- 调试:
LD_PRELOAD=/usr/lib/gcc/x86_64-linux-gnu/9/libasan.so ./devel/lib/pkg_name/exec_name