gdb学习(一)



概述

gdb是GNU debugger的缩写,是编程调试工具。

功能

1、启动程序,可以按照用户自定义的要求随心所欲的运行程序。

2、可让被调试的程序在用户所指定的断点处停住 (断点可以是条件表达式)。

3、当程序停住时,可以检查此时程序中所发生的事。

4、动态改变程序的执行环境。

示例:

gcc -Wall -g simple.c -o simple

#一定要记得加上-g选项,以便生成调试信息

启动gdb:gdb [-q] [executable-file] [core-file]

gdb simple

#启动gdb

list(l)

#查看程序的十行代码,连续键入list命令,可查看该文件所有代码

break(b) n

#在第n行设置断点

info break(i b)

#查看断点设置信息

break function-name (b function-name)

#在函数的入口处设置断点

run(r)

#启动程序,在断点处暂停

step(s)

#单步跟踪,一步步走

print i(p i)

#打印i当前值

until

#跳出循环

continue(c)

#继续运行,直到下一个断点,如果一直运行到程序结束,则会打印程序结束信息

enter键(回车)

#表示使用上一个命令

finish

#退出当前函数,打印函数的返回值

delete n

#删除断点n

quit(q)

#退出整个gdb调试程序

运行程序

1、run(r) #运行程序,直到第一个断点或程序结束

2、run arg1 arg2 … #运行程序并加上参数,如:r a b c d ...

查看源码

list(l) - 查看最近10行源码

list fun-name - 查看fun函数源码

list file:fun-name – 查看file文件中的fun函数源码

如:l search.c:seq_search #如果只有一个文件包含有seq_search函数,则不必加”search.c:”

list [m,n]

list 2,10 – 查看从第2行到第10行源代码

list ,15 – 查看最多到第15行的源代码

设置断点与观察点

break [line-num]

break [fun-name]

break [file-name:line-num]   #b search.c:4

break [file-name:fun-name]

break if <condition> - 条件成立时程序停住

E.g. break if i = 10

info break(i b) – 查看断点

watch expr – 一旦expr值发生改变,程序就停住。【设置观察点】

E.g. watch i   #一旦i值发生改变,则程序暂停

delete n(d n) – 删除断点n # d 1 d 1 2 3

单步调试

continue(c)

- 运行至下一个断点

step(s)

- 单步跟踪,进入函数内部,类似于Vs中的step in[但是不会进入没有提供源代码的函数]

next(n)

- 单步跟踪,不进入函数内部,类似于VC中的step out

finish

- 运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息。但是不会跳出main函数。

until

– 运行程序直到退出循环体。如果一次没有跳出,则执行下一次

return [value]

- 停止当前函数,提前让函数返回[动态调整程序的执行],将value返回调用者,相当于step return

set variable var-name = value

- 改变一个变量的值

gdb常用命令总结


命令


作用


run(r)


运行,启动程序


list(l)


列出10行源程序


break(b)


设置断点


info break(i b)


打印断点详细信息


continue(c)


继续运行程序,直到下一个断点


watch


设置观察点


step(s)


单步跟踪,类似于VC中的step in


next(n)


单步跟踪,类似于VC中的step out


finish


运行程序,直到当前函数返回,返回函数


until(u)


跳出循环(有时需要两次)


print(p)


查看运行时变量及表达式


help


打印帮助信息

附-

#Makefile

CC = gcc

CFLAGS = -Wall -g

BIN = sample main

.PHONY: all clean

all: $(BIN)

%.o: %.c

$(CC) $(CFLAGS) -o [email protected] -c $<

sample: sample.o

main: main.o search.o

$(CC) $(CFLAGS) -o [email protected] $^

clean:

-rm -rf $(BIN) *.o

转载   http://blog.csdn.net/zjf280441589/article/details/39999529

如有版权问题,请联系QQ:858668791

时间: 2024-11-12 17:08:11

gdb学习(一)的相关文章

[Debug]GDB学习笔记(一)

GDB学习 点击打开链接 比较详细的gdb命令 gcc编译的程序要带 -g 参数,要想运行准备调试的程序,可使用run(r)命令,在它后面可以跟随发给该程序的任何参数 其它相关备忘如何在gdb下调用shell命令:答:比如要查看当前目录,只要输入 shell pwd就好了 单步调试的一些相关命令答:step <count>单步跟踪,如果有函数调用,他会进入该函数(进入函数的前提是,此函数被编译有debug信息).next <count>同样单步跟踪,如果有函数调用,他不会进入该函数

gdb学习(二)[第二版]

查看运行时数据 print - 查看变量值 ptype – 查看变量类型 #ptype i #ptype "aaa" 打印字符串"aaa"的类型 #ptype array 打印数组array的类型 #ptype main 打印main函数的类型 print array – 查看数组 #p arr1 #p arr1[2] 查看数组arr2第三个元素值 #p &arr1[2] 打印数组元素的地址 #p &arr1 打印数组首地址,与p &arr1

gdb学习[第二版]

概述 gdb是GNU debugger的缩写,是编程调试工具. 功能 1.启动程序,可以按照用户自定义的要求随心所欲的运行程序. 2.可让被调试的程序在用户所指定的断点处停住 (断点可以是条件表达式). 3.当程序停住时,可以检查此时程序中所发生的事. 4.动态改变程序的执行环境. 示例: gcc -Wall -g simple.c -o simple #一定要记得加上-g选项,以便生成调试信息 启动gdb:gdb [-q] [executable-file] [core-file] gdb s

gdb学习(一个)[再版]

概要 gdb是GNU debugger的缩写,是编程调试工具. 功能 1.启动程序,能够依照用户自己定义的要求随心所欲的执行程序. 2.可让被调试的程序在用户所指定的断点处停住 (断点能够是条件表达式). 3.当程序停住时,能够检查此时程序中所发生的事. 4.动态改变程序的执行环境. 演示样例: gcc -Wall -g simple.c -o simple #一定要记得加上-g选项,以便生成调试信息 启动gdb:gdb [-q] [executable-file] [core-file] gd

Gdb学习笔记1

其实,从很早就开始接触gdb程序,gdb调试程序伴我成长,现在对其用法记录以下: 当程序的运行结果和预期结果不一致,或者程序出现运行错误时,gdb就可以派上大用处了.调试的基本过程是: -> 根据情况,分析现象 -> 根据直觉,假设原因 -> 根据经验,修改验证 -> | | <-   根据经验,修改验证 <-  根据直觉,假设原因 <- 根据情况,分析现象 <- 直到程序的结果和预期完全一致为止,就可以结束苦逼的程序调试了.调试器(如GDB)的目的是允许你

gdb学习-checkpoint,watch

checkpoint的内容参考: http://blog.chinaunix.net/uid-23629988-id-2943273.html 这一篇主要是checkpoint,在next之前加checkpoint命令,然后就可以用 restart 1 来恢复到之前的checkpoint,可以避免从头再来. 用 info checkpoints 可以看到所有的checkpoints. 好像也能看到breakpoint的 (gdb) info checkpoints * 1 process 206

gdb 学习

http://www.cnblogs.com/TianFang/archive/2013/01/21/2869474.html http://www.cnblogs.com/evasnowind/archive/2010/11/07/1871324.html 在使用gdb前,必须先载入可执行文件,因为要进行调试,文件中就必须包含调试信息,所以在用gcc或cc编译时就需要用-g参数来打开程序的调试选项. 调试开始时,必须先载入要进行调试的程序,可以用以下两种方式: * 在启动gdb后执行以下命令:

Linux GDB学习

gdb gcc 编译选项加上 –g ,这样生成的目标代码中就添加了调试信息. gcc –g –o hello hello.c redhat 6.3 默认是不安装gdb的,如果安装从系统光盘(ios镜像文件),将其解压在Packages文件夹下找到         gdb-7.2-56.el6.i686.rpm,然后执行以下命令: rpm -ivh gdb-7.2-56.el6.i686.rpm(因为版本不同数字部分可能不同) 1. 启动GDB 指令:gdb 程序名[corefile] coref

gdb学习笔记

设置断点 b main; 在main()入口处 b 148; 在第148行 查看断点 info b 运行程序 r 单条语句执行 n 继续运行程序 c 打印变量i的值 p i 查看函数堆栈 bt 退出函数 finish help命令只是例出gdb的命令种类,如果要看种类中的命令,可以使用help <class> 命令,如:help breakpoints,查看设置断点的所有命令.也可以直接help <command>来查看命令的帮助. TAB可补全函数名,命令名 在gdb中,我们可以