概述

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学习(一)[第二版]的更多相关文章

  1. gdb学习(二)[第二版]

    查看运行时数据 print - 查看变量值 ptype – 查看变量类型 #ptype i #ptype "aaa" 打印字符串"aaa"的类型 #ptype  ...

  2. TensorFlow 深度学习中文第二版·翻译完成

    原文:Deep Learning with TensorFlow Second Edition 协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原则>, ...

  3. gcc学习(一)[第二版]

    gcc简介 1. gcc是GNU Compiler Collection的缩写.最初是作为C语言的编译器(GNU C  Compiler),作者为Richard Stallman,是GNU项目的奠基者 ...

  4. Makefile学习(二)[第二版]

    复杂实例 #演示样例1:在上一个演示样例的基础上再添加一个可运行文件03test[改动之处已标红] .PHONY: clean all CC = gcc CFLAGS = -Wall -g BIN = ...

  5. Makefile学习(一)[第二版]

    简单介绍 1)make:利用 make 工具能够自己主动完毕编译工作.这些工作包含:假设仅改动了某几个源文件,则仅仅又一次编译这几个源文件[make通过比对对应的.c文件与.o文件的时间];假设某个头 ...

  6. gcc学习(二)[第二版]

    头文件与库文件 1.概要 在使用C语言和其他语言进行程序设计的时候,我们需要头文件来提供对常数的定义和对系统及库函数调用的声明. 库文件是一些预先编译好的函数集合,那些函数都是按照可重用原则编写的.它 ...

  7. Makefile学习(三)[第二版]

    make常用内嵌函数 1.函数调用 $(function arguments) #$引用的结果就是函数生成的结果 2.Makefile下常用的函数 1)$(wildcard PATTERN) #匹配当 ...

  8. 《Java程序设计与数据结构教程(第二版)》学习指导

    <Java程序设计与数据结构教程(第二版)>学习指导 欢迎关注"rocedu"微信公众号(手机上长按二维码) 做中教,做中学,实践中共同进步! 原文地址:http:// ...

  9. Learning ROS for Robotics Programming - Second Edition(《学习ROS机器人编程-第二版》)

    Learning ROS for Robotics Programming - Second Edition <学习ROS机器人编程-第二版> ----Your one-stop guid ...

随机推荐

  1. JVM性能参数调优实践,不会执行Full GC,网站无停滞

    原文来自:http://bbs.csdn.net/topics/310110257 本文只做整理记录,供个人学习. 1 JVM参数调优是个很头痛的问题,设置的不好,JVM不断执行Full GC,导致整 ...

  2. Linux系统中查询发行版本号以及内核版本的命令总结

    了解Linux发行版本的版本号是一项非常重要的事情,大多数软件对系统的版本都有要求,发行版本号与软件不匹配,软件将无法安装或者无法使用.这边集合市面上流行的Linux发行版本版本号查询方法.有了这边文 ...

  3. python语言学习

    前段时间要做视频直播需要编写自动模块,就考虑使用python脚本语言,python的好多语法都是很独特的,比如数据类型不需要预定义,缩进的方式等,另外功能也很强大,豆瓣就是用python写的.我写的部 ...

  4. mysql进阶(二十九)常用函数

    mysql进阶(二十九)常用函数 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP ...

  5. Java异常封装(自己定义错误码和描述,附源码)

    真正工作了才发现,Java里面的异常在真正工作中使用还是十分普遍的.什么时候该抛出什么异常,这个是必须知道的. 当然真正工作里面主动抛出的异常都是经过分装过的,自己可以定义错误码和异常描述. 下面小宝 ...

  6. BeanUtils Exception 之 FastHashMap

    这里仅仅是为了记录一件十分奇怪的事情,在使用BeanUtils的过程中,所有的依赖包都添加了, common logging common collections ··· 在为boolean 这种基本 ...

  7. androidApp的完全退出

    思路:搜集整个工程所有的activity,通过循环把工程中所有的activity都关闭. 搜集工程中的activity,可以由单例模式实现, [java] view plaincopy import  ...

  8. 向Github提交代码时遇到的一些问题

    今天分享一下我的一些小经验,那就是向github提交我们的代码.之前一直是直接使用的浏览器完成的代码的下载任务,没有使用过客户端,为了让自己在工作之前熟练使用GitHub,所以就有了下面的这篇博文了. ...

  9. cocos2dx 3.3 C++工程添加lua支持

    准备工作: 1. 拷贝cocos2d-x-3.3rc0\external\lua整个文件夹到项目中(如myProject\cocos2d\external\lua) 2. 拷贝cocos2d-x-3. ...

  10. 后端分布式系列:分布式存储-HDFS 异常处理与恢复

    在前面的文章 <HDFS DataNode 设计实现解析>中我们对文件操作进行了描述,但并未展开讲述其中涉及的异常错误处理与恢复机制.本文将深入探讨 HDFS 文件操作涉及的错误处理与恢复 ...