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 $@ -c $<
sample: sample.o
main: main.o search.o
$(CC) $(CFLAGS) -o $@ $^
clean:
-rm -rf $(BIN) *.o
gdb学习(一)[第二版]的更多相关文章
- gdb学习(二)[第二版]
查看运行时数据 print - 查看变量值 ptype – 查看变量类型 #ptype i #ptype "aaa" 打印字符串"aaa"的类型 #ptype ...
- TensorFlow 深度学习中文第二版·翻译完成
原文:Deep Learning with TensorFlow Second Edition 协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原则>, ...
- gcc学习(一)[第二版]
gcc简介 1. gcc是GNU Compiler Collection的缩写.最初是作为C语言的编译器(GNU C Compiler),作者为Richard Stallman,是GNU项目的奠基者 ...
- Makefile学习(二)[第二版]
复杂实例 #演示样例1:在上一个演示样例的基础上再添加一个可运行文件03test[改动之处已标红] .PHONY: clean all CC = gcc CFLAGS = -Wall -g BIN = ...
- Makefile学习(一)[第二版]
简单介绍 1)make:利用 make 工具能够自己主动完毕编译工作.这些工作包含:假设仅改动了某几个源文件,则仅仅又一次编译这几个源文件[make通过比对对应的.c文件与.o文件的时间];假设某个头 ...
- gcc学习(二)[第二版]
头文件与库文件 1.概要 在使用C语言和其他语言进行程序设计的时候,我们需要头文件来提供对常数的定义和对系统及库函数调用的声明. 库文件是一些预先编译好的函数集合,那些函数都是按照可重用原则编写的.它 ...
- Makefile学习(三)[第二版]
make常用内嵌函数 1.函数调用 $(function arguments) #$引用的结果就是函数生成的结果 2.Makefile下常用的函数 1)$(wildcard PATTERN) #匹配当 ...
- 《Java程序设计与数据结构教程(第二版)》学习指导
<Java程序设计与数据结构教程(第二版)>学习指导 欢迎关注"rocedu"微信公众号(手机上长按二维码) 做中教,做中学,实践中共同进步! 原文地址:http:// ...
- Learning ROS for Robotics Programming - Second Edition(《学习ROS机器人编程-第二版》)
Learning ROS for Robotics Programming - Second Edition <学习ROS机器人编程-第二版> ----Your one-stop guid ...
随机推荐
- RxJava操作符(02-创建操作)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51645348 本文出自:[openXu的博客] 目录: Create Defer Empty ...
- android PM2.5监控demo开发
最近看到了这个网站是aqicn.org,是一个监控北京空气状态的网站,截图如下 好了,接下来我们利用这个网站返回的json数据来写一个监控北京空气状况尤其是PM2.5的demo. 1.布局文件如下: ...
- studio中碰到的jni问题:java.lang.UnsatisfiedLinkError
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52606328 studio中碰到 ...
- 全文检索概念,Lucene大致结构
1.1 常见的全文检索 1) 在window系统中,可以指定磁盘中的某一个位置来搜索你想要得到的东西. 2) 在myeclipse中,点击Help->Help Contents,可以利用搜索功能 ...
- JobTracker,TaskTracker简述
JobTracker 负责接收用户提交的作业,负责启动.跟踪任务执行.JobSubmissionProtocol是JobClient与JobTracker通信的接口.InterTrackerProto ...
- Retrofit 2.0 超能实践(四),完成大文件断点下载
作者:码小白 文/CSDN 博客 本文出自:http://blog.csdn.net/sk719887916/article/details/51988507 码小白 通过前几篇系统的介绍和综合运用, ...
- 线程在Linux中的实现
早在以前,我们就知道,CPU调度的基本单位是线程,而进程是拥有资源的基本单位,进程是用进程描述符表示的,那么线程是怎么实现和表示的呢? 线程机制是现代编程技术中常用的一种抽象概 ...
- mysql数据库连接池使用(三)数据库元数据信息反射数据库获取数据库信息
1.1. mysql数据库连接池使用(三)数据库元数据信息反射数据库获取数据库信息 有时候我们想要获取到数据库的基本信息,当前程序连接的那个数据库,数据库的版本信息,数据库中有哪些表,表中都有什么字段 ...
- android获取设备唯一标示
概述 有时需要对用户设备进行标识,所以希望能够得到一个稳定可靠并且唯一的识别码.虽然Android系统中提供了这样设备识别码,但是由于Android系统版本.厂商定制系统中的Bug等限制,稳定性和唯一 ...
- Xcode7 真机免证书调试Cocos2D游戏
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 经过一番实验,现在终于可以在Xcode7上免证书真机调试了: ...