Debug Valgrind

总结信息的详解:

still reachable: 指的你的指针指向的动态内存还没有被释放就退出了,一般来讲这种不会出现问题,OS会负责回收

definitely lost:   检测到内存一定泄漏了,这类错误一定要处理。

possibly lost:    说可能有泄漏,一般都是中间有二级指针分配的情况会报错。

suppressed:    统计了使用valgrind的某些参数取消了的错误。

在使用valgrind命令可以引入错误消除文件,使得对某些库产生的错误不予提示,但是这些错误最终会被统计到suppressed项目中。默认引入的错误消除文件在/usr/lib/valgrind/default.supp

Valgrind包括的工具:

Memcheck    内存检查器

Callgrind      检查程序中函数调用过程中出现的问题

Cachegrind  检查程序中缓存使用出现的问题

Helgrind       检查多线程程序中出现的竞争问题

Massif           检查程序中堆栈使用中出现的问题

Extension    利用Core提供的功能,自己编写特定的内存调试工具。

执行:

编译:gcc –g –O0 sample.c –o sample

加-g为了获得更详细的错误信息,-O0防止编译器优化影响valgrind的判断。

valgrind --tool=memcheck --leak-check=full ./sample

常用参数:

       -q, --quiet
           Run silently, and only print error messages. Useful if you are running
           regression tests or have some other automated test machinery.      

       --leak-check=<no|summary|yes|full> [default: summary]
           When enabled, search for memory leaks when the client program
           finishes. If set to summary, it says how many leaks occurred. If set
           to full or yes, it also gives details of each individual leak.

       --show-reachable=<yes|no> [default: no]
           When disabled, the memory leak detector only shows "definitely lost"
           and "possibly lost" blocks. When enabled, the leak detector also shows
           "reachable" and "indirectly lost" blocks. (In other words, it shows
           all blocks, except suppressed ones, so --show-all would be a better
           name for it.)

            "reachable" 和 "indirectly" 区别就是,直接是没有任何指针指向该内存,间接是指指向该内存的指针都位于内存泄露处。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Valgrind是一个用于进行程序性能分析和调试的工具,可以帮助检测ROS程序中的内存泄漏等问题。它主要有四种工具:Memcheck、Callgrind、Cachegrind和Helgrind。其中,Memcheck是用于检查内存泄漏的利器,可以通过对ROS程序进行可视化分析来查找内存泄漏问题。 在编译ROS包时,可以使用如下命令进行编译和运行Valgrind的内存泄漏检查: ``` catkin_make -DCMAKE_BUILD_TYPE=Debug roscore valgrind --tool=memcheck --leak-check=yes --log-file=valgrind.log ./devel/lib/package_foo/executable_bar ``` 这个命令会在编译ROS包时启动roscore,并使用Valgrind工具对指定的ROS可执行文件进行内存泄漏检查,并将检查结果输出到valgrind.log文件中。 如果需要下载Valgrind的源码并进行安装,可以按照以下步骤进行: 1. 下载Valgrind的源码并解压缩: ``` tar jxvf valgrind-3.14.0.tar.bz2 ``` 2. 进入解压后的Valgrind目录: ``` cd valgrind-3.14.0/ ``` 3. 执行autogen.sh脚本: ``` ./autogen.sh ``` 4. 配置安装路径: ``` ./configure --prefix=/home/pony/valgrind ``` 5. 编译Valgrind: ``` make ``` 6. 安装Valgrind: ``` make install ``` 7. 将Valgrind的bin目录添加到系统环境变量中: ``` sudo gedit ~/.bashrc export PATH=$PATH:~/valgrind/bin/ source ~/.bashrc ``` 通过以上步骤,可以下载Valgrind的源码并进行编译安装,并将Valgrind的bin目录添加到系统环境变量中,方便在终端中直接使用Valgrind命令。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Valgrind对ROS程序的可视化分析](https://blog.csdn.net/lovely_yoshino/article/details/119418863)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值