1序言:

  1.初学者经过学习前面的Makefile知识,信心满满,内心觉得应该要好好学习不单掌握语言的编写,也要学会相对应的工具调高开发效率。有时我们写出来的代码经过执行结果却跟我们预期不一样那怎么办呢,这个时候就要调试了。说到调试有经验的开发童鞋知道在windows下游大名鼎鼎的VS集成平台,那么在linux下呢,特别是编写C、C++有什么工具可以方便我们调试呢,这里我给大家推荐的就是GDB,它也是GNU的debugger,专门为调试而生的。

2知识点:

  2.1gdb的大致分为以下功能:

    2.1.1.启动程序;

    2.1.2.可以在通过断点进行调试;

    2.1.3.在断点住停止可以查看运行的状况;

    2.1.4.可以动态的改变执行的环境,包括系统环境,系统变量,局部变量等等;

  2.2gdb相关命令说明

    2.2.1 file <filename>:加载可执行文件;;

    2.2.2 r:run的简写,表示运行程序,如果有断点,会在第一个断点出暂停;

    2.2.3 l:list的简写,列出相关的函数代码或者是行代码(包括其他文件),好像最多10行吧,也可以使用l 1,10:指定显示1到10行;

    2.2.4 b function或b num:b就是breakpoint的简写,表示在function函数是打断点,或者是在num行号处打断点,也可以在循坏中使用:b if i=10表示在循环中i=10的时候暂停;

    2.2.5 d num:删除编号从1开始的断点,不指定则全部删除;

    2.2.6 s:执行下一句语句,Step Into (单步跟踪进入),如果有函数则进入函数内部;

    2.2.7 n:执行下一句语句,Step Over (单步跟踪),如果有函数也不会进入函数内部;

    2.2.8 p:print的简写,打印某个变量的值,也可以打印变量、数组地址,注意查看动态分配的数组使用:p arry@10,其中10为arry变量内存的长度,改变运行时的数据:p x=100;

    2.2.9 ptype:查看变量的类型;

    2.2.10 i:info的简写,可以显示出好多信息;

    2.2.11 q:quit的简写,表示退出当前命令;

    2.2.12 help <name>:表示查看相关gdb命令的手册说明;

    2.2.13 until:退出当前函数;

    2.2.14 finish:运行到当前函数结束前,如果偶返回值则提示返回值;

3原理:

  3.1在编译的时候附加上调试信息(比如断点,输出调试信息等等),执行gdb调试,程序会按照调试信息顺序执行有断点的地方暂停,有调试信息输出就输出等等方便程序员调试程序,一遍观察程序在运行的一切。下面通过创建一个简单的例子来说明gcc编译,gdb的启动以及调试步骤。

4实践:

  4.1.先创建一个简单的gdbtest.c文件,内容如下:

#include <stdio.h>

int main(void)
{
int a = 1;
int b = 2;
int c = a + b;
printf("result :%d",c);
return 0;
}

  4.2.编译如下:

gcc -Wall -g gdbtest.c -o gdbtest     #-g参数

  4.3.启动gdb,并加载gdbtest可执行文件:

gdb    #直接在当前gdbtest.c目录中键入gdb命令就会进入调试器
file gdbtest  #在gdb命令下输入此命令加载文件,输出Reading symbols from gdbtest ... done表示加载完成

  4.4.使用命令l查看文件此时会列出代码以及标记行好,记住行号或者函数名称以便打断点;  

 

  4.5.使用格式:b 函数(行号)打断点,输入命令:b main或者:b 3效果都是一样!

  4.6.使用r命令运行程序会在断点处暂停,此时可以使用s命令执行下一步(n命令是函数也一并执行,s命令会进入函数内部),断点出暂停后也可以使用c命令继续执行,可以使用p打印变量信息查看相关变量:

  4.7.也可以使用命令:disassemble main查看main函数的汇编代码,这应用是更高级的技巧了!,当不需要调试要退出的时候使用q命令即可。

  这节课就先讲到这里,先了解下gdb以及简单运动gdb做简单的调试。明天继续!!1

第六课 GDB调试 (上)的更多相关文章

  1. 第七课 GDB调试 (下)

    1序言: 通过前面一节第六课 GDB调试 (下)文章,可以掌握理解了gdb调试:怎么启动.运行,打断点.查看变量.甚至改变变量等的知识,今天来大概讲解下调试bug的类型. 2知识点: 2.1 就像之前 ...

  2. Linux开发工具之gdb(上)

    三.gdb调试(上) 01.gdb:gdb是GNU debugger的缩写,是编程调试工作. 功能:   启动程序,可以按照用户自定义的要求随心所欲的运行程序:   可让被调试的程序在用户所指定的调试 ...

  3. 第02课:启动GDB调试

    使用GDB调试程序一般有三种方式: gdb filename gdb attach pid dgb filename corename 也对应这本节课的核心内容: 直接调试目标程序 附加进程 调试co ...

  4. 第二课:启动 GDB 调试

    使用 GDB 调试程序一般有三种方式: gdb filename gdb attach pid gdb filename corename 这也对应着本节课的核心内容: 直接调试目标程序 附加进程 调 ...

  5. mac上eclipse用gdb调试(转)

    mac上eclipse用gdb调试 With its new OS release, Apple has discontinued the use of GDB in OS X. Since 2005 ...

  6. 调试利器GDB(上)

    什么是GDB: GDB应用: 静态分析工具与动态分析工具: GDB启动方式: GDB启动之后会有一个交互式的命令行,可以输入GDB特定的命令让GDB去工作. gdb test.out意思是这一次gdb ...

  7. gdb 调试(设置变量)(六)

    一旦使用GDB挂上被调试程序,当程序运行起来后,你可以根据自己的调试思路来动态地在GDB中更改当前被调试程序的运行线路或是其变量的值,这个强大的功能能够让你更好的调试你的程序,比如,你可以在程序的一次 ...

  8. 硬盘上的一些算法小题目||and今天看了下林锐的书以及gdb调试 及一些变成算法小题目

    gdb调试:观察点,断点,事件捕捉点.step 进入函数,next 跳过函数,until 跳出循环,finish 结束函数 林锐:书后试题 & c++的对象模型图 看了二叉树的非递归遍历, 链 ...

  9. CentOS 6.5上使用gdb调试时出现Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6.i686 .

    在CentOS6.5上用gdb调试时提示Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6.i686先修改 ...

随机推荐

  1. Hive学习笔记——Hive中的分桶

    对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分.Hive也是针对某一列进行桶的组织.Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记 ...

  2. 简述基于Struts框架Web应用的工作流程

    简述基于Struts框架Web应用的工作流程 解答:在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们 ...

  3. 初识NuGet及快速安装使用

    为什么要使用NuGet 简单的说NuGet可以是我们的工作更方便,当我们的项目里要引用到的一些库时候,比如JQuery.Newtonsoft.Json. log4net等,我们需要从网上下载这些库,然 ...

  4. java web 登录框

    我们会骂 12306 的网站界面挫,效果差,速度慢,回头看看自己写的代码,是不是也一样的狗血!在前端,很多看似简单的东西,内藏无数玄机.本文将以一个小小的登录框为入口,谈一谈如何完善自己的程序. 在很 ...

  5. linq依据传入数据集合查询相应子级数据

    工作中经经常使用到的linq依据传入数据集合查询相应子级数据,整理共享,希望大家都能用得上,代码中doublesArray 为父节点相应ID数据集合,再依据ID数据集合查询所有子级数据. //获取缓存 ...

  6. uWSGI配置(转 )

    原文地址:http://www.cnblogs.com/zhouej/archive/2012/03/25/2379646.html 下面的内容包含了大部分uWSGI的配置选项,这些配置选项的列举没有 ...

  7. Handler用Bundle传值

    package com.handler.cn; import android.app.Activity; import android.os.Bundle; import android.os.Han ...

  8. jQuery中如何给动态添加的元素绑定事件

    jquery中绑定事件一般使用bind,或者click,但是这只能是对已经加载好的元素定义事件,那些后来添加插入的元素则需要另行绑定.在1.7版本以前使用live.但是在1.8版本以后推荐使用on.这 ...

  9. [Intellij idea]解决debug时中文显示方框问题

    1. 点击File -> Settings 进入Intellij的设置页面 2. 点击Appearance,选择Override defaults fonts by (not recommend ...

  10. iOS 下载

    #import "ViewController.h" @interface ViewController () @property (strong, nonatomic) NSMu ...