内存泄漏检测可在CMakeLists.txt 文件中,添加 -fsanitize=leak
set(CMAKE_CXX_FLAGS "-fsanitize=leak -std=c++11 -g -Wall -Wno-unused-result -DROS ${CMAKE_CXX_FLAGS}")
g++ 加上 -fsanitize=leak 选项后,能打印内存泄漏时的堆栈。【进程运行结束或用 SIGINT 杀掉后,会打印内存泄漏的堆栈信息到标准出错】
内存错误操作可在CMakeLists.txt里面加上如下编译选项
set(CMAKE_CXX_FLAGS "-fsanitize=address -fno-omit-frame-pointer ${CMAKE_CXX_FLAGS}" )
当然,上述编译选项可以输出leak信息
内存错误操作:-fsanitize=address
多线程竞争:-fsanitize=thread
内存泄漏:-fsanitize=leak
未定义操作:-fsanitize=undefined(如:除0、空指针解引用、枚举值超范围、使用未初始化的变量值等)
#告诉address检测到异常不退出进程
set(ENV{ASAN_OPTIONS} "halt_on_error=0")
运行时可能会出现以下内存问题
对输出的ERROR重定向报错日志: roslaunch perception_lidar.launch 2> /home/mogo/data/yangdaiyu

订阅专栏 解锁全文

1224

被折叠的 条评论
为什么被折叠?



