概述

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. Android自定义View实战(SlideTab-可滑动的选择器)

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/52178553 本文出自:[openXu的博客] 目录: 初步分析重写onDraw绘制 重写o ...

  2. 支付平台PCI认证整改

    五大国际卡组织推出的PCI支付认证.支付平台改造方案.

  3. Django 是如何实现用户登录和登出机制的(默认版本-数据库版本)

    Django session 字典,保存到数据库的时候是要先序列化的(session.encode方法), 读取的时候反序列化(session.decode),这样比较安全. 一 settings.p ...

  4. Java进阶(四十五)java 字节流与字符流的区别

    java 字节流与字符流的区别(转载)   字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?   实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作 ...

  5. iOS开发之使用block块进行数据遍历的方法

    看了一篇文章,发现遍历数组.字典中的数据时,除了使用for循环外,还可以使用block块进行操作,瞬间感觉iOS的语言代码确实有点高大上的感觉,下面就简单的介绍一下这个方法. 首先是最基本的运用形式, ...

  6. C在控制台上实现鼠标画图功能

    #include <windows.h> #include <stdio.h> #include <string.h> HANDLE hOut; HANDLE hI ...

  7. FFmpeg源代码简单分析:内存的分配和释放(av_malloc()、av_free()等)

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  8. [ExtJS5学习笔记]第十一节 Extjs5MVVM模式下系统登录实例

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/38815923 实例代码下载地址: http://download.csdn.net/d ...

  9. SYBASE的select into与insert into使用和区别

    对于表的部分或全部字段的复制,Sybase数据库提供了两种方式:select into和insert into. select into: 语法:select  value1, value2, val ...

  10. Runtime系列(二)--Runtime的使用场景

    Runtime 理解介绍的文章非常多,我只想讲讲Runtime 可以用在哪里,而我在项目里哪些地方用到了runtime.多以实际使用过程为主,来介绍runtime的使用. * 那么runtime 怎么 ...