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

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

时间: 2024-08-01 18:15:45

gdb学习(一个)[再版]的相关文章

[Debug]GDB学习笔记(一)

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

关于如何学习一个框架的经验总结

1.怎么学习一个框架? 我认为有三个维度来说明:这个框架是为了解决什么问题而诞生的?这个框架的核心思想是什么?这个框架适合应用到哪些场景? 说到思想,我觉得编程的灵魂就是思想,没有思想的编程和咸鱼没什么区别,这里我六年来血与泪的总结 2.不要被框架拉着走,要做框架的主人 我发现我身边好多人都深陷于框架之中,包括我自己有一段时间也深陷其中(还好现在走出来了),都关注在这个框架怎么用,哪个牛X,熟不知还没等你熟练怎么用时,又一个新的框架出来,那时你又得学,一来二去你就被框架拉着走了 我觉得当你了解上

分分钟教你学习一个新的框架--Photos FrameWork

相关链接:ios-深度解析二维码的生成与使用 swfit项目初体验Photo-Browser 一.点击查看大图 1.点击图片或按钮(点击查看大图按钮),modal出来一个控制器,显示大图片 2.怎么处理能让点击图片就能查看大图? 两种方法:1.给图片添加点按手势 2.给图片所在的view上添加 - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 2.1 添加点按手势 优点:适用于任何场景下,不受

N天学习一个Linux命令之帮助命令:man

前言 工作中每天都在使用常用的命令和非常用的命令,忘记了用法或者参数,都会bing一下,然后如此循环.一直没有真正的系统的深入的去了解命令的用法,我决定打破它.以前看到有人,每天学习一个linux命令,我现在没有这么充足时间,我恐怕一周学习一个linux命令我都做不到,想想我还是N天学习一个linux命令吧,从现在开始算起. 用途 显示命令帮助文档以及用法 用法 man [options] [section] cmd 命令文档部分说明 The table below shows the sect

学习一个项目权限的心得

最近主管要求我研究公司项目的权限管理,到现在都一周了,我还是没有搞清楚.用到了哪些基本都懂,也做过些小测试,但是真正到了看项目中的权限,我还是一个头两个大了.每天下班都是因为脑袋太胀了,然后就没有然后了,总的来说:学习一个技术确实不是那么容易,了解.会用.精通是完全不同的.做过demo和在项目中实际应用也是有很大区别,所以学个东西还是任重道远. 下面说说我的学习过程: 一开始,我是通过实体来来先分析数据库设计的.实体中字段和数据库对应字段弄的特别乱,而且项目中没有明确的持久化配置和注解关联.有关

linux学习一个服务(未完)

学习一个服务的过程 1.了解服务的作用:名字 功能,特点 2.安装 3.配置文件位置,端口 4.服务启动关闭的脚本 5.此服务的使用方法 6.修改配置文件,实战举例 7.排错(从下到上,从内到外) 原文地址:https://www.cnblogs.com/fps2tao/p/8542847.html

[0406]学习一个——利

前言 最近发现了Github的Student认证,本来想用来注册Digital Ocean搭个梯子,结果注册验证不能用VISA借记卡=~=. 那么在这漫长的清明节假期里,只有学习能满足空虚的内心(划掉),疲劳刷完了,只有学习一个! thinkful提供了HTML/CSS, JavaScript入门教程,Github说是一月,但thinkful发的邮件里只有2周..就三个单元,应该能学完吧(望天). 1. Unit 1 Html CSS 与 版本控制 1.1 网页基础 1.1.1 使用CodePe

你应该如何学习一个未知的技术领域?- 菜鸟小白篇

一.前言2018年初开始从事线上课程的开发,陆续开发了几门课程,<人工智能产品经理最佳实践请添加链接描述><知识图谱实战开发完全剖析请添加链接描述>和<智能对话机器人实战开发完全剖析>,其中每一个专题都是自己对于这个新兴领域的探索和实践经验的总结.课程制作的过程,同时也是一个学习和反复思考.再学习的过程.有着近20年的一线IT行业技术.产品研发.设计经验的沉淀,尤其是方法论方面总结和沉淀,对于自己快速掌握新兴领域的知识,起到了至关重要的作用:通过提供面向学员的咨询和答疑

每天学习一个LINUX命令:ls 目录列表(list 清单目录 名单)

ls命令用于显示文件目录列表.当不加参数时,默认列出当前目录的列表信息. 语法参数: ls [参数] [目录或文件名] 参数(注意区分大小写) -a:显示所有档案及目录(ls内定将档案名或目录名称为"."的视为影藏,不会列出):-A:显示除影藏文件"."和".."以外的所有文件列表:-C:多列显示输出结果.这是默认选项:-l :与"-C"选项功能相反,所有输出信息用单列格式输出,不输出为多列:-b:将文件中的不可输出的字符以反