[发明专利]linux环境下快速转换调用堆栈地址的系统及方法有效
申请号: | 200910142259.9 | 申请日: | 2009-06-26 |
公开(公告)号: | CN101615136A | 公开(公告)日: | 2009-12-30 |
发明(设计)人: | 龙涛 | 申请(专利权)人: | 中兴通讯股份有限公司 |
主分类号: | G06F9/46 | 分类号: | G06F9/46;G06F9/38 |
代理公司: | 北京安信方达知识产权代理有限公司 | 代理人: | 龙 洪;霍育栋 |
地址: | 518057广东省深圳市南山*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | linux 环境 快速 转换 调用 堆栈 地址 系统 方法 | ||
技术领域
本发明涉及计算机技术领域,尤其涉及,具体地说,是涉及一种linux 环境下快速转换调用堆栈地址的系统及方法。
背景技术
在Linux环境下,一般查看函数运行时堆栈的方法是使用GDB之类的 外部调试器。但是,有些时候为了分析程序的BUG,在需要的时候打印出 函数的调用堆栈信息是非常有用的。
现有技术通常调用backtrace函数和backtrace_symbols函数,来获取函 数调用堆栈信息,每一层堆栈信息的格式如下所示:
/应用程序名[函数地址]。
具体的例子如下:
/kernel[0x804869c]。
由此可以看出,获取的其实只是函数地址,并不是具体的函数名称和源 代码行数。想要获取更详细的信息,还必须执行终端命令addr2line来进行 转换:
addr2line-f 0x804869c-e kernel>file1。
该命令把指定应用程序(kernel)对应函数地址的具体函数信息保存到 file1文件中,保存信息的格式如下例所示:
os_malloc
/root/src/pub/err.c:69。
在file1文件中,第一行保存的是具体的函数名称,第二行是函数源代 码的行数。
因此,现有技术在Linux环境下获取函数调用堆栈的流程,如图1所示, 主要包括如下几个步骤:
步骤S110,调用backtrace函数和backtrace symbols函数,获取函数调 用堆栈地址信息;
步骤S120,从每一层的堆栈地址信息中解析出函数地址;
步骤S130,调用system函数执行addr2line命令,把函数地址转换成具 体的函数名称和函数源代码行数,保存到一临时文件中;
步骤S140,读取临时文件,从中解析出函数名称和函数源代码行数。
由于步骤S130及步骤S140中,需要进行临时文件的辅助转换(把函数 地址转换成函数名及源代码行数这一转换),在实际应用中不适合频繁调用 该操作,否则会严重影响程序的执行性能,因此有必要对现有的Linux环境 下获取函数调用堆栈技术加以改进,以提高系统运行效率。
发明内容
本发明所要解决的技术问题,在于需要提供一种linux环境下快速转换 调用堆栈地址的系统及方法,以提高linux环境下获取函数调用堆栈的效率。
为了解决上述技术问题,本发明提供了一种linux环境下快速转换调用 堆栈地址的方法,包括:
建立一包含有若干公共线程的公共线程池;
需要保存当前堆栈信息时,获取函数调用堆栈地址信息;
从每一层的堆栈地址信息中解析出函数地址数组,将所述函数地址数组 与当前堆栈相关信息组合成一个结构体对象并缓存到一缓存队列中;
遍历所述缓存队列中的每个节点,用所述公共线程池并行处理每个节点 的每层函数地址的转换操作,得到转换结果。
优选地,该方法进一步包括:
将一个结构体对象作为一个信息节点,将所有信息节点组成一个查询 表;
抛弃所述转换操作的中间结果时,根据所述查询表从所述缓存队列中删 除所述中间结果对应的信息节点。
优选地,用所述公共线程池中的公共线程并行处理所述转换操作,每个 公共线程得到一基本堆栈结果;
对所有的基本堆栈结果进行组合,得到所述转换结果。
优选地,该方法进一步包括:
转换函数地址时,将函数地址转换成函数名称和函数源代码行数,保存 到一临时文件中;
读取所述临时文件,从所述临时文件中解析出函数名称和函数源代码行 数。
优选地,该方法进一步包括:
建立一全局的函数地址映射表;
从所述临时文件中解析出函数名称和函数源代码行数后,将所述函数名 称及函数源代码行数保存到所述函数地址映射表中;
转换函数地址时,查询所述函数地址映射表,查询到相应的匹配结果则 完成所述转换操作,否则将函数地址转换成函数名称及函数源代码行数。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中兴通讯股份有限公司,未经中兴通讯股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200910142259.9/2.html,转载请声明来源钻瓜专利网。