Linux_gdb调试器

gdb调试器

一、相关信息了解

  1、程序的发布有两种模式:" debug " 和 " release "

  2、Linux下gcc / g++ 产生的可执行程序默认是 " release " 模式

  3、使用gdb进行调试时,必须在生成可执行程序的时候加上 -g 选项

    为啥?  以便生成gdb调试所需要的调试符号的信息,如果不加该选项,调试时相关调试操作是不能狗进行使用的

二、gdb的基本操作

  < l / list >  后接数字,显示前后各5行的代码,接着上次的位置往下列,每次列10行

        后接函数名,显示函数的内部代码

  < r / run >  运行程序

  < n / next >  逐过程,单条执行

  < s / step >  逐语句,进入函数调用

  < b / break >  打断点

    b #  在某行打上断点

    b 函数名  在该函数的头部打上断点

    disable Num 该行断点禁用

    enable Num  该行断点启用

    i b ( info breakpoints )  查看断点信息

    delete breakpoints [  ]  [  ] 内部不加信息断点表示删除全部断点,加数字表示删除某个断点 

  < p / print >  打印表达式的值,通过表达式可以修改变量的值或调用函数

  < i locals >  打印当前作用域的临时变量的值

  < c / continue >  继续执行

  < display >  [ 变量名 ]  跟踪变量的值

  < bt / where >  查看调用堆栈

  < q / quit >  退出gdb

三、readelf命令调用

    是什么?    用来显示ELF格式目标文件的信息,可通过参数选项来控制显示一些特定信息
      *>ELF格式文件:是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件
      *>ELF文件组成部分:ELF头、程序头表、节和节头表组成
    干什么?
    1>查看共享库的依赖库( NEEDED )和搜索名 ( SONAME )
            readelf -d <file_name> 
    2>显示ELF头信息
            readelf -h <file_name>
    与objdump命令的区别:
        objdump使用了bfd库进行文件读取,而readelf并没有,且另写一段代码,对一些条件判断并不是很严格;
        readelf可以显示调试信息,而objdump并没有,但objdump经过简单处理也可以实现调试信息的显示

猜你喜欢

转载自www.cnblogs.com/bj3251101/p/11820962.html