gdb调试工具

Posted 清水寺扫地僧

tags:

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

GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c/c++程序员,gdb是必不可少的工具;

GDB主要帮忙你完成下面四个方面的功能:

  • 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
  • 2.可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
  • 3.当程序被停住时,可以检查此时你的程序中所发生的事。
  • 4.动态的改变你程序的执行环境。

在进行程序调试时,要遵循“分析现象->假设错误原因->产生新的现象去验证假设”的循环。


进行gdb调试的前提是,程序是自己所写,同时在对程序进行编译时,要使用 − g -g g 选项(gcc简介及使用可见:gcc简介和命令行参数说明),例如:gcc -g main.c -o main。若是对main使用gdb进行调试,则在shell中输入gdb main即可。

(所生成的文件较不添加 − g -g g 的,多生成了调试表,可见文件大小比不添加的大。若是未添加且想使用 gdb 进行调试,则可打开后在 gdb 命令行中使用 file 文件名 即可,也可退出重新编译)


gdb工具常见调试指令

  • l i s t list list l i s t    1 list \\thickspace 1 list1,列出源码。列出指定行号 l l l 行附近的源代码;
  • b b b b r e a k , e . g .    b 20 break,e.g. \\thickspace b 20 breake.g.b20,在20行位置设置断点;
  • r u n / r run / r run/r:运行程序;
  • n / n e x t n/next n/next:下一条指令(会越过函数);
  • s / s t e p s/step s/step:下一条指令(会进入函数);
  • p / p r i n t p/print p/print p    i p \\thickspace i pi 查看变量 i i i 的当前值;
  • c o n t i n u e continue continue:继续执行断点后续指令;
  • q u i t quit quit:退出gdb当前调试;

其他指令:

  • r u n run run:使用 r u n run run 查找段错误出现位置;
  • f i n i s h finish finish:结束当前函数调用;
  • s e t   a r g s / r u n   s t r 1   s t r 2   . . . set \\space args / run \\space str1 \\space str2 \\space ... set args/run str1 str2 ...:设置main函数命令行参数;
  • i n f o   b info \\space b info b:查看断点信息表;
  • b   20   i f   i   =   5 b \\space 20 \\space if \\space i \\space = \\space 5 b 20 if i = 5设置条件断点(使用条件表达式)
  • p t y p e ptype ptype:查看变量类型;
  • b t bt bt:列出当前程序正存活着的栈帧,常和ptype配合使用;
  • f r a m e   − i frame \\space -i frame i:根据栈帧标号,切换栈帧;
  • d i s p l a y display display:设置跟踪变量,并显示跟踪变量的标号;
  • u n d i s p l a y undisplay undisplay:取消设置跟踪变量,使用跟踪变量的标号;

栈帧概念拓展:随着函数调用而在stack上开辟的一片内存空间,用于存放函数调用时产生的局部变量和临时值(栈帧切换时所使用的标号),也即一个函数调用时,函数调用所产生的调用栈


较全指令列表

在这里插入图片描述在这里插入图片描述
更加全面的内容详见:Linux环境下的GDB调试方法

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

Linux gdb调试工具应用详解

Linux调试工具gdb的使用

比GDB更方便的代码调试工具:CGDB

比GDB更方便的代码调试工具:CGDB

比GDB更方便的代码调试工具:CGDB

GDB调试汇编分析