今天介绍一下gdb,如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。

  GDB主要帮忙你完成下面四个方面的功能:

1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
    2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
    3、当程序被停住时,可以检查此时你的程序中所发生的事。
    4、动态的改变你程序的执行环境。

  一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点。如:

> cc -g hello.c -o hello
    > g++ -g hello.cpp -o hello

  如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。当你用-g把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用gdb来调试他。  

  启动GDB的方法有以下几种:

1、gdb <program>
       program也就是你的执行文件,一般在当前目录下。

2、gdb <program> core
       用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。

3、gdb <program> <PID>
       如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。

  在启动了gdb后,就可以开始使用gdb中命令了。如果希望查看都有哪些命令,可以输入help进行查询。

  下面简单演示几个小例子:

  示例一:在进入函数func时,设置一个断点。可以敲入break func,或是直接就是b func
    (gdb) b func
    Breakpoint 1 at 0x8048458: file hello.c, line 10.

  示例二:敲入b按两次TAB键,你会看到所有b打头的命令:
    (gdb) b
    backtrace  break      bt

  示例三:l(l命令相当于list,从第一行开始例出原码)

  示例四:r(运行程序) n(下一步) c(Continuing)

  示例五:p i 查看变量i的值

  示例六:bt 查看函数堆栈

  

  需要特别说明的是,在gdb中运行程序时,使用run命令,可能需要做以下的操作。

  1、程序运行参数。
    set args 可指定运行时参数。(如:set args 10 20 30 40 50)
    show args 命令可以查看设置好的运行参数。

  2、运行环境。
    path <dir> 可设定程序的运行路径。
    show paths 查看程序的运行路径。
    set environment varname [=value] 设置环境变量。如:set env USER=hchen
    show environment [varname] 查看环境变量。  

  3、工作目录。
    cd <dir> 相当于shell的cd命令。
    pwd 显示当前的所在目录。

  4、程序的输入输出。
    info terminal 显示你程序用到的终端的模式。
    使用重定向控制程序输出。如:run > outfile
    tty命令可以指写输入输出的终端设备。如:tty /dev/ttyb

  以上就是对gdb简单的一个介绍,以后如果有机会会更详细的介绍各种功能。请大家多多指教。

  注:如果希望了解更多关于gdb的知识,请看http://blog.csdn.net/haoel/article/details/2879。

转载于:https://www.cnblogs.com/luchen927/archive/2012/02/07/2339003.html

使用gdb进行调试入门篇相关推荐

  1. 第19部分- Linux x86 64位汇编GDB单步调试

    第19部分- Linux x86 64位汇编GDB单步调试 本篇我们使用gdb来调试上篇中的汇编代码. gdb调试 使用gdb进行调试. #gdb ./addsum_arg 设置参数: (gdb) s ...

  2. Linux系统编程6:入门篇之如何拿下gdb调试器?来和我一起调试一个程序

    文章目录 (1)debug与release (2)调试一个程序 (3)总结-gdb选项 (1)debug与release 程序的发布方式有debug和release两种模式,release没有调试信息 ...

  3. linux gdb网络调试,一文入门Linux下gdb调试(二)

    本文转载自[微信公众号:羽林君,ID:Conscience_Remains] 总述 今天我们介绍一下core dump文件,Core dump叫做核心转储,它是进程运行时在突然崩溃的那一刻的一个内存快 ...

  4. gdb调试lua_gdb 调试入门,大牛写的高质量指南

    原标题:gdb 调试入门,大牛写的高质量指南 (点击上方公众号,可快速关注) 来源: 伯乐在线 - 道法子 如需转载,发送「转载」二字查看说明 没想到Brendan Gregg这样的大牛,会写出这样一 ...

  5. 编写windbg调试器扩展 入门篇1

    我博客的左侧专栏曾经转过windows下编写调试器的一系列文章,这类文章是从零打造调试器,而这篇文章是介绍如何为windbg编写调试器扩展命令. 0.前言 windbg的命令有很多,其中以" ...

  6. [入门篇]Linux操作系统fork子进程的创建以及进程的状态 超超超详解!!!我不允许有人错过!!!

    目录 0.前言 1.fork()创建子进程讲解 1.1fork()的简单介绍 1.2 创建子进程详解 1.2.1 如何理解fork创建子进程 1.2.2 子进程的PCB以及子进程的代码和数据 1.2. ...

  7. 学习笔记---程序员练级攻略(入门篇、修养篇、专业基础篇、软件设计篇、高手成长篇)

    根据极客时间 左耳朵耗子 整理,请忽略每一行最后的数字 文章目录 1. 入门篇 47 2. 修养篇 51 3. 专业基础篇 56 4. 软件设计篇 60 5. 高手养成 63 1. 入门篇 47 1. ...

  8. c# imager让图片有圆角unity_C# 10分钟完成百度图片提取文字(文字识别)——入门篇...

    现在图片文字识别已经很成熟了,比如qq长按图片,点击图片识别就可以识别图片的文字,将不认识的.文字数量大的.或者不能赋值的值进行二次可复制功能. 我们现在就基于百度Ai开放平台进行个人文字识别,dem ...

  9. 【helloworld】-微信小程序开发教程-入门篇【1】

    1. 开篇导言 本节目标:旨在演示如何用开发者工具构建并运行简单的 helloworld 应用. 目标用户:无编程经验,但对微信小程序感兴趣的同学. 学习目标:开发者工具的基本使用流程,即创建.导入. ...

最新文章

  1. 配置一台计算机所需的东西,攒一台计算机需要的配置
  2. 服务器选哪个系统,服务器选择哪个操作系统
  3. cadence 添加自己设计的pad方法
  4. JavaSE项目之聊天室swing版
  5. 第11章 享元模式(Flyweight Pattern)
  6. MySQL学习笔记:三种组内排序方法
  7. onenote 模板_onenote实用?炫酷功能系列篇②:用插件让效率翻倍
  8. 腾讯游戏人脸识别系统更新!刷脸的同时语音提示付款成功_游侠网 Ali213.net
  9. python字符串转整数_Python连接字符串和整数
  10. Microsoft.AlphaImageLoader滤镜解说
  11. 要想混得好,必须认识21个人!
  12. html 嵌入编辑excel 开源_网页中嵌入Excel控件
  13. 微信小程序轮播图(详细)
  14. 为什么现在很多人想读博了?
  15. Unexpected EOF read on the socket
  16. 2020年11月程序员工资统计,平均14327元
  17. NTP时钟源(GPS时间源)介绍与分析
  18. 蓝桥杯第十届省赛 NE555测方波
  19. 史玉柱自述:我是如何带队伍的
  20. ue4 unreal4 json序列化工具 数据转成字符串等

热门文章

  1. mysql 5.6 TIMESTAMP
  2. iframe子页面获取父页面元素,或父页面获取iframe子页面的元素
  3. keras库的安装及使用,以全连接层和手写数字识别MNIST为例
  4. linux空间满了有什么问题,Linux 空间满问题分析 [ Keep Coding ]
  5. c语言有趣的编程代码,一个有趣的小程序
  6. 类String的比较
  7. field list什么意思_Redis:我这21个灵魂拷问你拿什么挡?
  8. 最小生成树----kruskal算法代码
  9. 试题10 最大子阵(枚举)
  10. bzoj 1658: [Usaco2006 Mar]Water Slides 滑水(贪心)