概要

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 $@ -c $<

sample: sample.o

main: main.o search.o

$(CC) $(CFLAGS) -o $@ $^

clean:

-rm -rf $(BIN) *.o

版权声明:本文博客原创文章。博客,未经同意,不得转载。

最新文章

  1. FPGA与simulink联合实时环路系列——实验二LED
  2. Apple Watch PSD 源文件【免费素材下载】
  3. C语言的源程序字符集与执行字符集
  4. 如何在Salesforce中进行代码开发
  5. oop第二章1知识点汇总
  6. 每用户订阅上的所有人SID 不存在
  7. 6月辞职-&gt;帝都生活
  8. Linux-LNMP LAMP LNMPA
  9. I.MX6 Android backlight modify by C demo
  10. GCD 倒计时
  11. 在C语言中基本数据类型所占的字节数
  12. TortoiseGit 自动登录
  13. 在kali安装中文输入法的教程
  14. oralce数据库常用到的一些sql命令(加字段注释,修改数据之类)
  15. maven build时报错Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test
  16. 莫烦tensorflow(5)-训练二次函数模型并用matplotlib可视化
  17. 面向连接的tcp 编程
  18. 飞鱼星、H3C企业路由器配置
  19. html一些标签在不同浏览器或者不同版本浏览器的注意事项
  20. Java基础98 gson插件的使用

热门文章

  1. python学习教程(九)sqlalchemy框架的modern映射
  2. Servlet的学习之Session(4)
  3. HOOK自绘原理 good
  4. 已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: SSL Provider, error: 0 - 接收到的消息异常,或格式不正确。)
  5. boost在windows下的编译(vs2010)
  6. SDUT Fermat’s Chirstmas Theorem(素数筛)
  7. mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)
  8. JMS学习的个人理解笔记
  9. .NET Core R2
  10. ABP分层设计