将指定区间内的元素相加:

#include <stdio.h>
int add_range(int low, int high)
{int i, sum;for (i = low; i <= high; ++i)sum += i;return sum;
}int main(void)
{int res[3];res[0] = add_range(1, 10);res[1] = add_range(1, 100);printf("res[0] = %d, res[1] = %d\n", res[0], res[1]);return 0;
}

然后编译,执行时,输出

res[0] = 55, res[1] = 5150

第一个结果正确,第二个结果显然不正确,应为 5050,高斯几百年前就告诉我们了。

在编译时要加上 -g 选项,生成的可执行文件才可能用 gdb 进行源码级调试:

$ gcc -g main.c -o main
$ gdb main
...
(gdb)
  • (1)(gdb) list 1 从第一行开始列出源代码,一次只显示 10 行,list可简写为 l
  • (2)gdb 提供了一个很方便的功能,在提示符下直接按回车表示重复上一条命令;
  • (3)start 命令开始执行程序(注意sstep的简写,原因很简单,step要比start更常用),gdb停在 main 函数中变量定义之后的第一条语句处等待我们发命令
  • (4)n(next),逐过程执行;
  • (5)bt(backtrace),查看函数调用的栈帧;
  • (6)i(info)查看 add_range 函数局部变量的值

    (gdb) i locals
    ...
  • (6)f(frame)指定栈帧号

    (gdb) f 1
    ...
  • (7)p(print)
  • (8)finish命令让程序一直运行到从当前函数返回为止;
  • (9)set var sum=0

GDB 使用教程(二)相关推荐

  1. 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级) 本章介绍的是企业库加密应用程序模块 ...

  2. Konstrukt PHP REST框架 教程二

    Konstrukt PHP REST框架 教程二 入门 - 第2部分 在本教程中,我们假设你已经完成了第一个教程,因为它的基础上产生的代码从该. 谈判的Content-Type 在大多数情况下会发出一 ...

  3. Mac下Android studio 之NDK配置教程(二)

    Mac下Android studio 之NDK配置教程(二) (一)简述 从上一篇NDK配置教程(一) 中,我 简单的阐述了MAC下NDK的基本解压和环境配置步骤. 本节我讲详细描述android s ...

  4. python elasticsearch 入门教程(二) ---全文搜索

    python elasticsearch 入门教程(二) ---全文搜索 截止目前的搜索相对都很简单:单个姓名,通过年龄过滤.现在尝试下稍微高级点儿的全文搜索--一项 传统数据库确实很难搞定的任务. ...

  5. openlayers地图旋转_OpenLayers教程二:实现简单的地图显示

    本文衔接上一篇文章:不睡觉的怪叔叔:OpenLayers教程二:实现简单的地图显示​zhuanlan.zhihu.com 经过上一篇文章对OpenLayers的简单了解以后,现在让我们来实现一个简单的 ...

  6. 计算机java语言教程,计算机JAVA教程二讲Java语言基础知识.doc

    计算机JAVA教程二讲Java语言基础知识 2.1简单数据类型 2.1.1 标识符和保留字 1.标识符 程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier).Java语言 ...

  7. 【听歌】GDB入门教程之查看函数调用堆栈

    写在前面:又到周末啦~上上周忍痛买了个雅马哈声卡和 AKG 话筒,这周六才正式打开试用了下,效果还不错,我自己还挺享受的.不过这玩意儿太高端,还不会用 AI 调音.小伙伴们感觉下这首加了一点点电音效果 ...

  8. GDB调试教程:1小时玩转Linux gdb命令

    原文链接:http://c.biancheng.net/gdb/ GDB 入门教程 本教程以下面的代码为例,在 Linux 系统下来讲解 GBD 的调试流程: int main (void) {uns ...

  9. Java 结构体之 JavaStruct 使用教程二 JavaStruct 用例分析

    使用环境 前一篇在介绍 JavaStruct 类时指定了使用库使用环境为 Java 5 及以上,也即开发我们使用的 JDK 版本为1.5及以上就可以了.以下讲解的用例可以直接将 code 直接粘贴到 ...

  10. C#微信公众号开发系列教程二(新手接入指南)

    此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可直接跳过,也欢迎大神吐槽. 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教 ...

最新文章

  1. InnoDB体系结构
  2. 《LeetCode力扣练习》第75题 颜色分类 Java
  3. ubuntu shell实现99乘法表
  4. Python Study:GUI-Tkinter
  5. 推荐一个网站拿下机器学习优质资源!搜索效率极大提高
  6. git之一: 在windows下安装git和使用总结
  7. 求旋转数组的最小数字C++
  8. 众辰nz200变频器使用说明书_ABB变频器
  9. 浅谈web开发以及django的安装和入门
  10. mongodb java 开源_开源的Mongodb java client -- mango发布
  11. MySQL 面试,必须掌握的 8 个知识点
  12. InstallAnywhere制作出来的安装包在64位机上无法卸载
  13. ubuntu16.04系统上安装CAJViewer方法步骤教程详解
  14. 部门开始做技术talk
  15. k6前级效果器怎么用_【易开EK-K6 DSP 专业 数字前级效果器 前置】价格_厂家_图片 -Hc360慧聪网...
  16. wps页眉怎么设置不同页码_wps版word怎么从第二页设置页眉页脚
  17. 用友U9V28应用中设置sa密码问题
  18. 陷阱技术探秘 ──动态汉化Windows技术的分析
  19. Linux命令--mkdir命令:创建目录(文件夹)
  20. nginx redmine_Ubuntu / Redmine / Nginx / Mongrel / Supervisord

热门文章

  1. 计算机英语微课,【计算机英语论文】大学计算机基础微课设计研究
  2. Hadoop对小文件的解决方案
  3. idea新建maven项目没有src目录的操作方法
  4. Yarn和SparkAlone对比
  5. 顺序循环队列类c#语言,C#--循环队列的顺序存储
  6. python入门指南by许半仙长佩_有哪些好看的耽美文啊?
  7. Git教程——分支 (branch)
  8. Linux平台Segmentation fault(段错误)调试方法
  9. SQL Server 中系统表的作用
  10. 一些关于OTA的相当不错的网站和资料