linux下的gdb调试总结 (一)

分类: linux |
首先我们要先来认识,什么是gdb调试。
break- function
break-linenum
break
+offset / break -offset
break
filename:linenum
break
filename:function
break
*address
break
break
... if
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能:
启动程序,可以按照工程师自定义的要求随心所欲的运行程序。
让被调试的程序在工程师指定的断点处停住,断点可以是条件表达式。
当程序被停住时,可以检查此时程序中所发生的事,并追索上文。
动态地改变程序的执行环境。
不管是调试Linux内核空间的驱动还是调试用户空间的应用程序,掌握gdb的用法都是必须。所以接下来,我们就一起总结一下吧。
首先,我们给出一段代码。这段代码呢还是存在一些需要通过调试来解决的问题的,下面,我们分别给出截图,方便理解。
http://s15/mw690/006zm2Shzy7eu6D2WSO4e&690(一)" TITLE="linux下的gdb调试总结 (一)" />
http://s14/mw690/006zm2Shzy7eu6D62QJcd&690(一)" TITLE="linux下的gdb调试总结(一)" />
http://s14/mw690/006zm2Shzy7eu6D62QJcd&690(一)" TITLE="linux下的gdb调试总结
首先,我们要学会进入到gdb调试过程中。我们有两个版本,一个是debug版本,这个版本的意思是,这个代码还可以做调试,而另外一个版本是不可调试,即可以运行使用的版本。所以,我们要先进入到debug版本中去。
gcc -o main
ff.c -g这是我们可以到debug版本的命令。(并且同时编译该程序)
我们可以看到,他出现了一个main文件,接下来,我们直接用 gdb +main
即可进入gdb调试模式
下面我们来介绍不同的调试命令。
一.list----我们可以简化为l
在gdb中运行list命令(缩写l)可以列出代码,list的具体形式包括:
1. list -linenum ,显示程序第linenum行周围的源程序
2. list -function,显示函数名为function的函数的源程序
3. list ,显示当前行后面的源程序。
4. list - 显示当前行前面的源程序。
二.调试中经常使用到的断电命令----break(b)
在gdb中用break命令来设置断点,设置断点的方法包括:
1.在进入指定函数时停住,C++中可以使用class::function或function(type,
type)格式来指定函数名。
2.在指定行号停住
3.在当前行号的前面或后面的offset行停住,offiset为自然数。
4.在源文件filename的linenum行处停住。
5.在源文件filename的function函数的入口处停住。
6.在程序运行的内存地址处停住。
7.break命令没有参数时,表示在下一条指令处停住。
8.“...”可以是上述的break 、break +offset / break
–offset中的参数,condition表示条件,在条件成立时停住。比如在循环体中,可以设置break if
i=100,表示当i为100时停住程序。
9.查看断点时,可使用info命令,如info
breakpoints [n]、info break [n](n表示断点号)。
三.info 命令
info命令可以在调试时用来查看寄存器、断点、观察点和信号等信息。
要查看寄存器的值,可以使用如下命令:
1.info registers (查看除了浮点寄存器以外的寄存器)
2.info all-registers (查看所有寄存器,包括浮点寄存器)
3.info registers (查看所指定的寄存器)
要查看断点信息,可以使用如下命令:
1.info break 列出当前所设置的所有观察点,
2.info watchpoints 查看有哪些信号正在被GDB检测
3.info signals info handle 也可以使用info
line命令来查看源代码在内存中的地址。
4.info threads可以看多线程。
5.info line后面可以跟行号、函数名、文件名:行号、文件名:函数名等多种形式
四.run命令
1.程序运行参数
set args 可指定运行时参数,如:set args 10 20 30 40 50;show args
命令可以查看设置好的运行参数。
2.运行环境
path-dir可设定程序的运行路径;how paths可查看程序的运行路径;set environment varname
[=value]用于设置环境变量,如set env USER=baohua;
show environment [varname]则用于查看环境变量。
3.工作目录
cd-dir相当于shell的cd命令;pwd 显示当前所在的目录。
4.程序的输入输出
info terminal 用于显示程序用到的终端的模式;gdb中也可以使用重定向控制程序输出,如run >
outfile;
tty命令可以指定输入输出的终端设备,如:tty /dev/ttyS1。
还有很多的gdb调试命令需要我们去掌握,下一篇我们再继续谈,linux的学习需要大量的练习,很多命令啊,都是自己多练多操作就可以掌握的,所以。还是多做练习吧
前一篇:排序--可以优化的快速排序
后一篇:C语言总结