首页 > 代码库 > linux gdb基本概念

linux gdb基本概念

GDB是一个功能强大的调试器,它是一个自由软件,能够用在许多UNIX平台上。它同时也是Linux系统中的默认调试器。GDB已被移植到许多其他的计算机平台上,并且能够用于调试嵌入式实时系统。一般来说,GDB主要可以帮助我们完成以下四个方面的功能:  1, 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2,可以让被调试的程序在你所指定的断点处停住。  3, 当程序被停住时,可以检查此时你的程序中所发生的事情。 4, 动态的改变你程序的执行环境。  与图形化的调试工具相比,GDB具有如下优点: GDB的启动速度比GUI快很多,当只需要快速检查代码中的某项内容时,这就是一 个很重要的优点。在与Eclipse比较时,这种启动时间上的差距很大。 

下面我在自己虚拟机上的一个进程拷贝的代码进行的实验

gcc main.c -g -o app

gdb app

之后我们就可以使用gdb进行调试了

 

run全速执行,start开始执行,这两个命令如果有命令行参数的话最好加上(建议)

技术分享

 

 启动界面

技术分享

start直接执行到了67行

 

技术分享

list:可以查看代码

list+num可以指明查看哪一行代码

技术分享

听过break可以打断点,info breakpoints可以查看我们用了哪些断点,delete breakpoints可以取消断点,这里我们需要注意一个问题就是,在virtual studio中的断点,如果关闭了下次打开仍然存在,但是这里如果关闭了下次就不会存在了

技术分享

 

相对应的,vs中有监禁的功能,就是监视变量,display就有这个功能,info display可以查看我们监视了哪些变量,之后我们每次next和step的时候,都会在最后几行显示监视的变量,delete就是删除了

 

step就是按语句调式,next就是按照过程调式

set var 变量名=值  可以中途改变变量的值,

 

printf可以中间输出变量的值

 

backtrace( bt )显示程序的层次关闭,与函数调用栈帧,下面75行到26行跳到了另外一个函数,这样可以使用backtrace就可以看层次关系,两个函数使用不同的栈,所以我们使用print argc的时候不好使,我们可以通过frame临时跳到main中,

在一盒函数中我们使用finish可以挑战到调用的开始位置

技术分享

 

 x(x/20wx)可一查看内存,20表示查看20字节,w表示word,x表示十六进制

 

continue  如果使用断点的话我们使用continue可以按照断电进行

 

set follow-fork-mode (child or parent)  调用父进程子进程

 

core启用core文件,帮助调试

在编译运行app的时候,如果有问题,会生成一个core文件通过gdb core会直接发现错误,这种方法非常方便,但是core的文件特别大

技术分享

 

quit退出调试

linux gdb基本概念