首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一个addr2line可以分析内存中的代码?

有没有一个addr2line可以分析内存中的代码?
EN

Stack Overflow用户
提问于 2012-06-29 16:18:24
回答 3查看 481关注 0票数 2

在抛出异常之后,我使用addr2line来分析堆栈跟踪(使用回溯和backtrace_symbols)。目前,从磁盘分析120Mb二进制文件(调试版本)大约需要2秒。

有没有一个库(LGPL),它通过分析内存中的代码段来做同样的工作?当然,这限制了我只能分析自己的应用程序--但在我的用例中,这就足够了。

EN

回答 3

Stack Overflow用户

发布于 2012-07-01 15:14:28

您想要(BSD许可) libunwind

代码语言:javascript
复制
void backtrace(void)
{
    int r;
    unw_cursor_t cursor; unw_context_t uc; 
    unw_word_t ip, sp; 
    char symname[100];

    unw_getcontext(&uc);
    unw_init_local(&cursor, &uc);
    while (unw_step(&cursor) > 0) {
        r = unw_get_reg(&cursor, UNW_REG_IP, &ip);
        assert(r == 0);
        r = unw_get_reg(&cursor, UNW_REG_SP, &sp);
        assert(r == 0);
        r = unw_get_proc_name(&cursor, symname, sizeof(symname), NULL);
        assert(r == 0);
        fprintf(stderr, "%s: ip: %lx, sp: %lx\n", symname, (long) ip, (long) sp);
    }   
}

请注意,如果从二进制文件中剥离符号表和字符串表,unw_get_proc_name()将失败(返回非0)。

票数 3
EN

Stack Overflow用户

发布于 2012-06-30 07:37:05

也许您可以使用proc文件系统识别的可执行文件?(或者它实际上是进程内存中的可执行文件?)

代码语言:javascript
复制
addr2line -e /proc/32213/exe
票数 0
EN

Stack Overflow用户

发布于 2015-05-27 18:02:29

作为GCC发行版的一部分,Libbacktrace可以做到这一点。它处理堆栈展开,ELF符号和调试符号,即它提供了libunwind和addr2line的功能。

我在这里放了一个独立的fork:

https://github.com/ErwanLegrand/libbacktrace

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11258354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档