zoukankan      html  css  js  c++  java
  • debuginfo

    当使用gdb调试信息时,需要机器码与源码之间建立起映射关系,需要以下三个信息:

    机器码:可执行文件,动态链接库,例如:libc-2.18.so

    源代码:即.c和.h等源文件

    映射关系:保存在.debug文件中的调试信息(debuginfo)

     

    为了能够使用gdb跟踪调试程序,需要在编译阶段使用gcc时加上-g选项,这个选项的作用就是把debuginfo加到生成的可执行文件中。

    对于大型的软件程序,如Linux内核,如果把这些debuginfo都加到程序中,就会带来一个显著的问题:可执行文件或库的所占用的空间会变的很大,这对于那些不关心调试信息的用户来说是不必要的。

    因此它这些大型程序都会有一个debuginfo包,如:glibc-debuginfo-xxx-xxx.rpm,专门用于存放debuginfo调试信息。以后在需要定位问题的时候再将debuginfo包进行安装并添加到可执行文件或库中去。

    对于debuginfo的提取和添加,可以借助objcopy工具进行操:

    objcopy –only-keep-debug test test.debug   # 从test程序中提取调试信息,前提是gcc 加了 –g 选项

    objcopy –strip-debug test                              # 从test程序中去除调试信息,此时gdb test,报错:no debugging symbols found

    objcopy –add-gnu-debuglink=test.debug    # 将.debug放到与test同一路径下,向test中添加调试信息,此时再gdb test,则不会再报错

     

    gdb查找.debug文件的顺序如下:

    1. 全局debug目录:/usr/lib/debug/.build-id/
    2. 当前目录:./
    3. 当前目录下的.debug目录:./debug/
  • 相关阅读:
    75. Sort Colors
    101. Symmetric Tree
    121. Best Time to Buy and Sell Stock
    136. Single Number
    104. Maximum Depth of Binary Tree
    70. Climbing Stairs
    64. Minimum Path Sum
    62. Unique Paths
    css知识点3
    css知识点2
  • 原文地址:https://www.cnblogs.com/tongyishu/p/13214863.html
Copyright © 2011-2022 走看看