zoukankan      html  css  js  c++  java
  • 怎么从Backtrace log,找到对应的代码行

    貌似很多人不知道,所以写一下。
    Backtrace中,一般都只有一些地址。但是利用addr2line这个工具,就可以找到对应的代码行。前提条件是可执行程序或者动态链接库编译的时候带-g选项。
    具体来说,分两种情况:
    如果关注的一行backtrace位于一个可执行文件中,那么直接addr2line -e <executable> <address>
    如果关注的backtrace位于一个动态链接库中,那么麻烦一些,因为动态链接库的基地址不是固定的。这个时候,首先要把进程的memory map找来。在Linux下,进程的memory map可以在/proc/<pid>/maps文件中得到。然后在这个文件中找到动态链接库的基地址,然后将backtrace中的地址 - 动态链接库的基地址,得到偏移地址offset address, 最后addr2line -e <shared library> <offset address>。
    当然,用GDB也可以找出地址对应的代码行。不过相比addr2line,GDB需要将BUG现象重现一遍,所以对于不好重现的BUG,或是随机重现的BUG来说,使用addr2line就可以直接从backtrace找到对应的代码行,不需要重现现象,比GDB使用起来更简单。
  • 相关阅读:
    Click: 命令行工具神器
    Pipenv: Python包管理神器
    如何让你的Python程序支持多语言
    Volatile变量
    简单排查java应用CPU飙高的线程问题
    java中的clone
    接口限流
    HTTP协议详解
    [转]nginx 源码学习笔记(十五)—— ngx_master_process_cycle 多进程(一)
    nginx slab内存管理
  • 原文地址:https://www.cnblogs.com/super119/p/1904309.html
Copyright © 2011-2022 走看看