gdb怎么用

bdqnwqk1年前基础8

1.gdb怎么用

GDB调试,建议去下个系统的文档;

GDB调试器

GCC用于编译程序,而Linux的另一个GNU工具gdb则用于调试程序。gdb是一个用来调试C和C++程序的强力调试器,我们能通过它进行一系列调试工作,包括设置断点、观查变量、单步等。

其最常用的命令如下:

file:装入想要调试的可执行文件。

kill:终止正在调试的程序。

list:列表显示源代码。

next:执行一行源代码但不进入函数内部。

step:执行一行源代码而且进入函数内部。

run:执行当前被调试的程序

quit:终止gdb

watch:监视一个变量的值

break:在代码里设置断点,程序执行到这?锸惫移?

make:不退出gdb而重新产生可执行文件

shell:不离开gdb而执行shell

2)从你的描述上看来,你是用单独的gdb.exe调试器,调试的时候不需要运行程序的,编译的时候 只要加上相应的参数(”-g“)产生编译后的可执行文件,

以gcc编译sum.c(加-g选项产生debug信息):

gcc –g –o sum sum.c

在命令行上键入gdb sum并按回车键就可以开始调试sum了,再运行run命令执行sum。

2.gcc中怎么使用gdb命令

在linux系统中,默认是没有安装gcc编译器的,可以通过命令

rpm -q | grep gcc

来查看。安装命令为:

yum -y install gcc

安装后,编写一个.c结尾的文件。

gcc test.c

就会默认输出一个a.out的输出文件,这个输出文件就是可执行文件。

如果加上-o选项,则可以自定目标文件。

gcc -o test test.c

test就是它的可执行文件。

一般都默认加上-Wall 选项,可以自动提示一些出错警告的信息。

gcc -Wall -o test test.c

gbd

以上就是常用的gcc相关知识了。下面就是它的调试,调试通常使用gdb。在编译的时候需要加上选项-ggdb3选项

gcc -ggdb3 -Wall -o test test.c

这样在没有出错的情况下

gdb test

就进入调试窗口

输入下面命令可以进行如下的操作:

break 设置断点

break 21 在第21行设置断点

break main 在main函数处设置断点

break test 在函数test处设置断点

step / s 下一步,直接执行下一条程序

continue / cont 下一段,如果遇到函数,不会进入函数,逐过程,有点类似VS里面的F10

run 运行

finish 结束调试

tbreak设置临时断点

print / p 显示某个变量的值

p *array@len 输出数组

p i 输出i的值

enable 恢复失效的断点

disable 使断点失效

clear 清除断点

backtrace / bt 查看堆栈信息

相关的输出格式

x 十六进制格式

d 十进制格式

u 十六进制无符号

o 八进制显示

t 二进制显示

a 十六进制显示

c 字符格式显示

f 浮点数格式显示

3.如何用GDB进行调试

1: 对于在应用程序中加入参数进行调试的方法: 直接用 gdb app -p1 -p2 这样进行调试是不行的。

需要像以下这样使用: #gdb app (gdb) r -p1 -p2 或者在运行run命令前使用set args命令: (gdb) set args p1 p2 可以用show args 命令来查看2. 加入断点: break break break +offset break -offset (在当前行号的前面或后面的offset行停住。) break filename:linenum 在源文件filename的linenum行处停住。

break filename:function 在源文件filename的function函数的入口处停住。 break 。

if 。可以是上述的参数,condition表示条件,在条件成立时停住。

比如在循环境体中,可以设置 break if i=100,表示当i为100时停住程序。3. 查看运行时的堆栈: 使用bt命令4. 打印某个变量的值: print val5. 单步: n 继续运行: c step 单步跟踪,如果有函数调用,他会进入该函数。

next 同样单步跟踪,如果有函数调用,他不会进入该函数。很像VC等工具中的step over。

后面可以加count也可以不加,不加表示一条条地执行,加表示执行后面的count条指令,然后再停住。 set step-mode set step-mode on 打开step-mode模式,于是,在进行单步跟踪时,程序不会因为没有debug信息而不停住。

这个参数有很利于查看机器码。 set step-mod off 关闭step-mode模式。

finish 运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息。

until 或 u 当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。6.在GDB中执行shell命令: 在gdb环境中,你可以执行UNIX的shell的命令,使用gdb的shell命令来完成: eg. shell make7. 运行环境 可设定程序的运行路径。

show paths 查看程序的运行路径。 set environment varname [=value] 设置环境变量。

如:set env USER=hchen show environment [varname] 查看环境变量。8.观察点(WatchPoint) 观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程 序。

我们有下面的几种方法来设置观察点: watch 为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。

rwatch 当表达式(变量)expr被读时,停住程序。 awatch 当表达式(变量)的值被读或被写时,停住程序。

info watchpoints 列出当前所设置了的所有观察点。9. 维护breakpoint clear 清除所有的已定义的停止点。

clear func 清除所有设置在函数上的停止点。 delete [breakpoints] [range。

] 删除指定的断点,breakpoints为断点号。如果不指定断点号,则表示删除所有的断点。

range 表示断点号的范围(如:3-7)。其简写命令为d。

比删除更好的一种方法是disable停止点,disable了的停止点,GDB不会删除,当你还需要时,enable即可,就好像回收站一样。 disable [breakpoints] [range。

] disable所指定的停止点,breakpoints为停止点号。如果什么都不指定,表示disable所有的停止 点。

简写命令是dis. enable [breakpoints] [range。] enable所指定的停止点,breakpoints为停止点号。

10、程序变量 查看文件中某变量的值:file::variable function::variable 可以通过这种形式指定你所想查看的变量,是哪个文件中的或是哪个函数中的。例如,查看文件f2.c中的全局变量x的值:gdb) p 'f2.c'::x 查看数组的值 有时候,你需要查看一段连续的内存空间的值。

比如数组的一段,或是动态分配的数据的大小。你可以使用GDB的“@”操作符,“@”的左边是第一个内存的地址的值,“@”的右边则你你想查看内存的长度。

例如,你的程序中有这样的语句:int *array = (int *) malloc (len * sizeof (int)); 于是,在GDB调试过程中,你可以以如下命令显示出这个动态数组的取值:p *array@len 如果是静态数组的话,可以直接用print数组名,就可以显示数组中所有数据的内容了。11.输出格式 一般来说,GDB会根据变量的类型输出变量的值。

但你也可以自定义GDB的输出的格式。例如,你想输出一个整数的十六进制,或是二进制来查看这个整型变量的中的位的情况。

要做到这样,你可以使用GDB的数据显示格式:x 按十六进制格式显示变量。d 按十进制格式显示变量。

u 按十六进制格式显示无符号整型。o 按八进制格式显示变量。

t 按二进制格式显示变量。a 按十六进制格式显示变量。

c 按字符格式显示变量。f 按浮点数格式显示变量。

(gdb) p i$21 = 101(gdb) p/a i$22 = 0x65(gdb) p/c i$23 = 101 'e'(gdb) p/f i$24 = 1.41531145e-43(gdb) p/x i$25 = 0x65(gdb) p/t i$26 = 110010111.查看内存 使用examine命令(简写是x)来查看内存地址中的值。x命令的语法如下所示:x/ n、f、u是可选的参数。

n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。f 表示显示的格式,参见上面。

如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。

u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字节,g表示八字节。当我们指定了字节长度后。

4.如何使用GDB调试C语言程序

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,基于命令行界面。

在Windows下如果想使用GDB,可以先下载安装一个MiniGW,这个工具包含GCC编译器和GDB调试器,再配合一个Notepad++或者Sublime Text(Sublime这款编辑器不是免费的,可以参考我前面写的一篇文章的破解方法来免费使用《Sublime Text 2在Linux和Windows下的破解》)来写代码,这样就足够了;

大多数Linux发行版都包含了GCC编辑器和GDB调试器,如果没有可以自行安装,这不是本文讨论论的重点,配合Vim或者Linux版本的Sublime Text来写代码也是不错的选择;

5.求问GDB如何使用符号表

如果现在有同一个工程构建出的Debug版和Release版可执行文件projectD和projectR,如下的命令可以帮助你把Debug版中的符号表加到Release版中,实现对Release版的调试。

1、objcopy --only-keep-debug projectD projectsymbol.dbg #生成符号表;

2、gdb -q --symbol=projectsymbol.dbg -exec=projectR #加载符号表;

这下在gdb中就可以看到源代码了。

gdb怎么用

标签: gdb