gdb调试

Posted 菜鸟也有高飞的时候

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gdb调试相关的知识,希望对你有一定的参考价值。

gdb调试

gdb功能

  • 启动程序,可以按照用户定义的方式来运行程序
  • 设置断点(断点可以用条件表达式)
  • 断点处查看数据
  • 动态改变程序执行环境(修改变量值)

gdb常用命令

  • gdb运行程序

    gdb [程序名]

  • 启动程序 <缩写 r>

    run [args...]

  • 查看代码 <缩写l >

    • list [line]
    • list [lineStart, lineEnd]
    • list [func]
    • list [file:func]; list [file:line] ;
  • 设置断点 <缩写 b>

    • break [line] break [func]
    • break [file:line] break [file:func]
    • break [line/func] [if <condition>] watch exp 监控变量,发生变化触发断点
    • delete [index] <缩写d> 删除断点
    • disable/enable [index] 激活/去激活断点
  • 查看断点<缩写 i b>

    info break

  • 单步跟踪 <缩写 s>

    step

    回车 执行上一条命令

    next <缩写 n> 不进入函数内部

  • 打印变量 <缩写 p>

    • print [val]
    • print [file::func::val]
    • x/32 [addr] 打印地址上的数据 32 字节
  • 继续执行代码

    • until 执行完当前循环
    • continue 到下一个断点 <缩写 c>
    • finish 执行到函数最后

gdb调试

  • 查看运行时数据

    • print 查看变量值
    • ptype 查看类型
    • print array 查看数组 (p arr[0], p &arr[0] ...)
    • print *[email protected] 查看动态内存 (内存后多少数据,事实上 *array 可以是任意变量,然后打印变量后len个数据 )
    • print x=5 改变变量值
    • 动态的赋值p val=…
  • 跳转

    jump

  • 查看调用桟

    backtrace <缩写 bt>

调试程序错误

  • 编译错误

    编译器差错(编译提示)

  • 运行时错误

    运行时程序崩溃

  • 逻辑错误

    程序运行和预想的不一样

  • 段错误

    访问非法地址产生的错误

core文件调试

core文件:

程序崩溃时,一般会产生一个 core文件,记录了程序崩溃时候的内存映像,并加入调试信息。core文件生成过程教 core dump

  • 设置生成core文件:

    ulimit –c 查看 core-dump状态, 默认是0

    ulimit –c [num] 限制core文件大小

    ulimit –c unlimited 无限制

    ulimit –a 查看ulimit所有参数

  • gdb调试 core文件:

gdb [bin file] [core file]

以上是关于gdb调试的主要内容,如果未能解决你的问题,请参考以下文章

gd调试命令,gdb调试core文件

GDB调试

简述-gdb检测apk是不是可以被调试

在docker中使用gdb调试程序

如何用gdb调试erlang运行期

Linux gdb调试