一般来说,GDB主要帮忙你完成下面四个方面的功能:

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

GDB can do four main kinds of things (plus other things in support of these) to help you catch bugs in the act:

(参考:Debugging with GDB https://sourceware.org/gdb/current/onlinedocs/gdb/

  • Start your program, specifying anything that might affect its behavior.
  • Make your program stop on specified conditions.
  • Examine what has happened, when your program has stopped.
  • Change things in your program, so you can experiment with correcting the effects of one bug and go on to learn about another.

一个调试示例:

1、源程序:tst.c

 #include <stdio.h>

 int func(int n)
{
int sum=,i;
for(i=; i<n; i++)
{
sum+=i;
}
return sum;
} int main()
{
int i;
long result = ;
for(i=; i<=; i++)
{
result += i;
} printf("result[1-100] = %ld /n", result );
printf("result[1-250] = %d /n", func() );
}

2、 编译生成执行文件:#gcc -g tst.c -o tst

3、启用GDB调试程序

4、#gdb tst                     //启动gdb,进入gdb调试环境

5、(gdb)list                     //list命令 从第一行开始列出源码

            sum+=i;
}
return sum;
} int main()
{
int i;
long result = ;

6、(gdb)                         //直接回车,表示执行上一条命令

        for(i=; i<=; i++)
{
result += i;
} printf("result[1-100] = %ld /n", result );
printf("result[1-250] = %d /n", func() );
}

7、(gdb)                         //直接回车,表示执行上一条命令

Line number  out of range; tst.c has  lines.

8、(gdb) break 16           //在源程序tst.c第16行设置断点

Breakpoint  at 0x400563: file tst.c, line .

9、(gdb)break func          //在源程序中函数func()的入口处设置断点,断点在第5行

Breakpoint  at 0x400534: file tst.c, line .

10、(gdb)info break          //查看断点信息

Num     Type           Disp Enb Address            What
breakpoint keep y 0x0000000000400563 in main at tst.c:
breakpoint keep y 0x0000000000400534 in func at tst.c:

11、(gdb)r                       //输入r,r是run命令的简写

Starting program: /root/c_study/tst 

Breakpoint , main () at tst.c:
long result = ;
Missing separate debuginfos, use: debuginfo-install glibc-2.17-.el7_4..x86_64

12、(gdb)n                     //输入n,n是next命令的简写,next命令:执行下一条程序

        for(i=; i<=; i++)

13、(gdb)n

            result += i;

14、(gdb)n

        for(i=; i<=; i++)

15、(gdb)n

            result += i;

用gdb调试程序(Linux环境)的更多相关文章

  1. 针对 Linux 环境下 gdb 动态调试获取的局部变量地址与直接运行程序时不一致问题的解决方案

    基础的缓冲区溢出实践通常需要确定运行状态下程序中的某些局部变量的地址,如需要确定输入缓冲区的起始地址从而获得注入缓冲区中的机器指令的起始地址等.在 Linux 环境下,可通过 gdb 对程序进行动态调 ...

  2. Linux高级编程--04.GDB调试程序(入门概述)

    GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试 ...

  3. Linux环境下使用gcc编译,gdb反汇编C语言程序

    使用虚拟机 VMware Workstation 10 Linux环境:Ubuntu 14.04 LTS Server amd64   我把过程截图如下. 首先是hello world程序: 备注: ...

  4. Linux高级编程--04.GDB调试程序(查看数据)

    查看栈信息 当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的.当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入"栈"(Stack)中.你可以用 ...

  5. Linux下使用GDB调试程序

    问题描述:          Linux下使用GDB调试程序 问题解决:          (1)生成调试文件 注:         使用命令   gdb IOStream.c   -o IOStre ...

  6. 在qemu环境中用gdb调试Linux内核

    简介 对用户态进程,利用gdb调试代码是很方便的手段.而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试.其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qem ...

  7. 利用QEMU+GDB搭建Linux内核调试环境

    前言 对用户态进程,利用gdb调试代码是很方便的手段.而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试. 其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qe ...

  8. Linux环境下段错误的产生原因及调试方法小结(转)

    最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且 项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation F ...

  9. 用GDB调试程序(一)

    http://blog.csdn.net/haoel/article/details/2879 用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或 ...

随机推荐

  1. 利用JDK自带工具keyTool生成安全证书

    前言:说一下最近做的工作,主要利用iText给网页中生成好的html报表转化为pdf格式的文件,并且在其中加入水印,数字签名等等,这部分主要介绍安全证书的目的就是为了做数字签名部分用的. 下面利用jd ...

  2. GraphQuery - Powerful html/xml query language

    GraphQuery GraphQuery is a query language and execution engine tied to any backend service. It is ba ...

  3. SFTP 服务搭建

    1. 介绍 sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp 与 ftp 有着几乎一样的语法和功能.SFTP ...

  4. Web | 一小时看懂前端基本语法

    自从H5出来之后,web前端的势头好像就有点燎原之势.国内互联网的发展就是这样,像之前的移动App(iOS.Android),简直是火的一塌糊涂.所以不管是培训机构也好,自学成才也好,都是一种途径,能 ...

  5. typeof 和 instanceof 区别

    typeof操作符返回一个字符串,表示未经计算的操作数的类型. 可能返回值有:"undefined"."object"."boolean". ...

  6. python2.7+pyqt+eric基本控件操作

    一.单选按钮被选中 1.选择 Radio Button 2.加入如下代码: #单选按钮状态切换时触发onstateChanged函数 self.radioButton.toggled.connect( ...

  7. $.ajax(),$.get(),$.post()的区别,以及一些参数注意规则

    $.ajax()方法和$.get(),$.post()方法的对比 $.ajax()方法是最完整的写法,可以完成所有的ajax请求(包含get类型和post类型) $.get()和$.post()都是简 ...

  8. Immutable.js 以及在 react+redux 项目中的实践

    来自一位美团大牛的分享,相信可以帮助到你. 原文链接:https://juejin.im/post/5948985ea0bb9f006bed7472?utm_source=tuicool&ut ...

  9. centos7 远程连接mongodb时,27017端口连接不上的解决办法

    一.问题描述:centos 7 上安装mongogdb,然后通过另外一台电脑用pymongo连接mongodb时,报错:连接拒绝 解决过程: 1.修改mongo.conf文件 命令:sudo  vi  ...

  10. 文库网站建设,文库网站PHP代码,TP开发文库网

    专业定制仿百度文库网站系统,文库网站系统源码,文库‌‌网站建设开发,支持电脑版+手机版+微信版+小程序版+APP版,由10年的技术团队专业定制,需要的朋友可以联系我们.网站采用:PHP+MySQL+t ...