通过valgrind 输出的偏移地址定位源码行号

有时用valgrind定位内存泄露问题时当内存泄露的位置在动态库(so)中时, 输出的调用栈为问号"???"并且没有指明源码的行号.即使尝试了加 -g 的编译参数并且程序退出前不执行dlclose,也无济于事.

==29941== 17 bytes in 1 blocks are definitely lost in loss record 29 of 197
==29941==    at 0x402A185: malloc (vg_replace_malloc.c:292)
==29941==    by 0x4048585: ??? (in /home/xxx/ElastosRDKforDevice/Targets/rdk/x86.gnu.linux.dbg/bin/Elastos.Runtime.so)
==29941==    by 0x40799F9: ??? (in /home/xxx/ElastosRDKforDevice/Targets/rdk/x86.gnu.linux.dbg/bin/Elastos.Runtime.so)
==29941==    by 0x407AE2A: ??? (in /home/xxx/ElastosRDKforDevice/Targets/rdk/x86.gnu.linux.dbg/bin/Elastos.Runtime.so)
==29941==    by 0x407ACC0: ??? (in /home/xxx/ElastosRDKforDevice/Targets/rdk/x86.gnu.linux.dbg/bin/Elastos.Runtime.so)
==29941==    by 0x407ACF9: ??? (in /home/xxx/ElastosRDKforDevice/Targets/rdk/x86.gnu.linux.dbg/bin/Elastos.Runtime.so)
==29941==    by 0x400ED76: call_init.part.0 (dl-init.c:78)
==29941==    by 0x400EE63: _dl_init (dl-init.c:36)
==29941==    by 0x400110E: ??? (in /lib/i386-linux-gnu/ld-2.19.so)

这种情况下通过每行的偏移地址配合addr2line也可以定位到具体的代码行:

1. 重新运行valgrind命令执行内存泄露的检查工作.

2. 查看valgrind log中的thread Id, 如上"29941"

3. 在程序退出之前 cat /proc/29941/maps 文件, 可以看到加载动态库的信息

04038000-040ab000 r-xp 00000000 08:05 6560496    /home/xxx/ElastosRDKforDevice/Targets/rdk/x86.gnu.linux.dbg/bin/Elastos.Runtime.so
040ab000-040ac000 r--p 00073000 08:05 6560496    /home/xxx/ElastosRDKforDevice/Targets/rdk/x86.gnu.linux.dbg/bin/Elastos.Runtime.so
040ac000-040ad000 rw-p 00074000 08:05 6560496    /home/xxx/ElastosRDKforDevice/Targets/rdk/x86.gnu.linux.dbg/bin/Elastos.Runtime.so

我们关心的是 r-xp 这一行, 最前边的 04038000 就是这个动态库加载的 base 地址.

4. 然后用发生内存泄露的地址0x4048585减去base地址0x4038000, 得到 0x10585 的相对偏移地址.

5. 利用addr2line工具

addr2line -e ./Elastos.Runtime.so 0x10585

得到具体源码行号:

/home/xxx/ElastosRDKforDevice/Sources/ElastosSources/Elastos/Runtime/Library/eltypes/elstring/elsharedbuf.cpp:9

打完收工.

时间: 2024-10-05 23:27:27

通过valgrind 输出的偏移地址定位源码行号的相关文章

申报软件著作权时,如何快捷计算源码行数

在我们申请软作专利或著作权时,经常需要提交源码行数.如果每页打开去统计工作量也太大了.还好,偷懒的想法也能激发创造力,我在网上真的找到了一个牛人使用的方法.下面分享给大家. 按CTRL+SHIFT+F (Find in files),勾上支持正则表达式,然后输入搜索内容: ^:b*[^:b#/]+.*$ 以上表达式的统计可做到:#开头和/开头或者空行都不计入代码量.如果需要只统计代码文件的代码量,可以选择查找文件的类型,比如什么*.xml, *.resx-.可以不检查,只查*.cs,*.c,*.

微商城三级分销源码公众号开发 微分销

需要源码,请加QQ:858-048-581 [什么是微分销] 微分销是助力企业进军移动电商,完善分销体系搭建微信分销系统.基于微信平台,搭建微信分销商城,让用户享受优质无线购物体验:独创三级分销模式,快速拥有最广泛的微信分销渠道:零门槛招募优质微商,分销商一键开分店,让亿万粉丝成为你的分销商,让你的商品迅速占领朋友圈! [微分销能帮你做什么] 1.  国内独创微信三级分销模式,轻松收获微商帮你卖货 主站平台,自由设置三个等级的分销商分佣佣金体系.三级分销模式,每个分销商发展第二级分销商,第二级分

浏览器调试:事件定位与源码查找

作为前端人员,浏览器调试是必不可少的工作之一,甚至与页面制作一样重要,试想生产环境以及日常bug中出现的问题,无法重现问题进行调试或者不知道如何下手调试,将对工作产生很消极的影响:常用的调试浏览器是chrome和Firefox,自带的和一些安装的插件都可以进行日常页面调试: 相关的浏览器调试技巧,前端人员基本上都多多少少知道一些,所以这里我也就不从简到复杂一个个列举了,有兴趣的小伙伴可以百度之相关的一些浏览器调试的常识(也许我以后会写也说不定),我今天说的如标题,主要是事件定位与源码查找:什么意

Android 上千实例源码分析以及开源分析

Android 上千实例源码分析以及开源分析(百度云分享) 要下载的直接翻到最后吧,项目实例有点多. 首先 介绍几本书籍(下载包中)吧. 01_Android系统概述 02_Android系统的开发综述 03_Android的Linux内核与驱动程序 04_Android的底层库和程序 05_Android的JAVA虚拟机和JAVA环境 06_Android的GUI系统 07_Android的Audio系统 08_Android的Video 输入输出系统 09_Android的多媒体系统 10_

android源码大放送(实战开发必备),免费安卓demo源码,例子大全文件详细列表

免费安卓demo源码,例子大全文件详细列表 本列表源码永久免费下载地址:http://www.jiandaima.com/blog/android-demo 卷 yunpan 的文件夹 PATH 列表 卷序列号为 0000-73EC E:. │ jiandaima.com文件列表生成.bat │ 例子大全说明.txt │ 本例子永久更新地址~.url │ 目录列表2016.03.10更新.txt │ ├─前台界面 │ ├─3D标签云卡片热门 │ │ Android TagCloudView云标签

怎样阅读源码

第一章: 导论 ++++++++++++ 1.要养成一个习惯, 经常花时间阅读别人编写的高品质代码. 2.要有选择地阅读代码, 同一时候, 还要有自己的目标. 您是想学习新的模式|编码风格|还是满足某些需求的方法. 3.要注意并重视代码中特殊的非功能性需求, 这些需求或许会导致特殊的实现风格. 4.在现有的代码上工作时, 请与作者和维护人员进行必要的协调, 以避免反复劳动或产生厌恶情绪. 5.请将从开放源码软件中得到的益处看作是一项贷款, 尽可能地寻找各种方式来回报开放源码社团. 6.多数情况下

2016年最牛逼的分类Android项目源码免费一次性打包下载!

之前发过一个帖子,但是那个帖子有点问题我就重新发一个吧,下面的源码是我从今年开始不断整理源码区和其他网站上的安卓例子源码,目前总共有810套左右,根据实现的功能被我分成了100多个类,总共接近2.5G,还在不断更新.初学者可以快速方便的找到自己想要的例子,大神也可以看一下别人的方法实现.虽然的例子都是我一个人辛辛苦苦花了很多时间和精力整理的,但是既然这些例子是来自于社区那就让他们免费回归社区吧,(是的!特么的不要一分钱!最看不起那些挂羊头卖狗的)你可以在本帖里面按Ctrl+F查找你需要的关键字,

Spring AOP实现方式二【附源码】

自动代理模式[和我们说的方式一仅仅是配置不一样~~~]  纯POJO切面 源码结构: 1.首先我们新建一个接口,love 谈恋爱接口. package com.spring.aop; /** * 谈恋爱接口 * * @author Administrator * */ public interface Love { /* * 谈恋爱方法 */ void fallInLove(); } .csharpcode, .csharpcode pre { font-size: small; color:

转--2014年最新810多套android源码2.46GB免费一次性打包下载

转载自:http://www.eoeandroid.com/thread-497046-1-1.html 感谢该博客主人无私奉献~~ 下面的源码是从今年3月份开始不断整理源码区和其他网站上的安卓例子源码,目前总共有810套左右,根据实现的功能被博主分成了100多个类,总共接近2.5G,还在不断更新.初学者可以快速方便的找到自己想要的例子,大神也可以看一下别人的方法实现.虽然的例子都是博主一个人辛辛苦苦花了很多时间和精力整理的,但是既然这些例子是来自于社区那就让他们免费回归社区吧,(是的!特么的不