系统 Ubuntu

调试示例:

#include <stdio.h>

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

编译生成执行文件:

gcc -g tst.c -o tst

-g :生成调试信息,将调试信息加载到可执行文件中

-o tst : 确定输出文件的名称为 tst ,默认为 a.out , 不可与源文件重名

打断点:

b n             // b 代表break , n 代表行号。在某一行打断点

b function   // function 函数,在某个函数处打断点

info b         // 打印断点信息

运行程序:

r    // run

以上程序停在了断电处

打印变量值:

p  i      // 打印变量 i 的值

查看函数堆栈:

bt   //

清除程序断点:

d    // 清除程序断点 delete

单步跟踪:

s  // 运行一行程序,且能够进入函数

n  // 运行一行程序,且不能进入函数

显示源程序:

list n  // 显示第n行周围的源程序

list function  // 显示函数名为 function 的函数的源程序

list  // 显示当前行后面的源程序

list  -   // 显示当前行前面的源程序

查看源代码内存:

info line  // 查看源代码在内存中的地址;后面跟 行号 、 函数名 、 文件名:行号 、 文件名:函数名

disassemble (disass)  // 查看源程序当前执行时的机器码

查看内存:

exmaine (x)  // 查看内存中地址的值

x/<n/f/u> <addr>
  n、f、u 是可选的参数。
  n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。
  f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令
  地址,那么格式可以是i。
  u 表示从当前地址往后请求的字节数,如果不指定的话,GDB 默认是4
  个bytes。u 参数可以用下面的字符来代替,b 表示单字节,h 表示双
  字节,w 表示四字节,g 表示八字节。当我们指定了字节长度后,
  GDB 会从指内存定的内存地址开始,读写指定字节,并把其当作一
  个值取出来。
  <addr>表示一个内存地址。

查看寄存器:

info r (registers)  // 查看寄存器的情况(除了浮点寄存器)

使用 GCC 调试程序的更多相关文章

  1. <转载>linux gcc编译器中使用gdb单步调试程序,程序不是顺序执行的。

    原文地址http://blog.csdn.net/abc78400123/article/details/6779108 在用gdb调试,使用s 或n单步执行程序时,发现程序不是按顺序运行的,有时莫名 ...

  2. Linux编译工具:gcc入门

    1. 什么是gcc gcc的全称是GNU Compiler Collection,它是一个能够编译多种语言的编译器.最开始gcc是作为C语言的编译器(GNU C Compiler),现在除了c语言,还 ...

  3. gcc -Wall -pedantic -ansi(转载)

    转载自R-G-Y-CQ的新浪博客 -Wall显示所有的警告信息 -Wall选项可以打开所有类型的语法警告,以便于确定程序源代码是否是正确的,并且尽可能实现可移植性. 对Linux开发人员来讲,GCC给 ...

  4. WINDOWS下如何安装GCC(转载http://nirvana.cublog.cn;作者:北斗星君(黄庠魁))

    第一章 在视窗操作系统下的GCC 第一节 GCC家族概览 GCC 是一个原本用于 Unix-like 系统下编程的编译器.不过,现在 GCC 也有了许多 Win32 下的移植版本.所以,也许对于许多 ...

  5. Linux——【转】gcc编译与gdb调试简要步骤

    原文:gcc编译与gdb调试简要步骤 一.Linux程序gcc编译步骤: Gcc编译过程主要的4个阶段: l 预处理阶段,完成宏定义和include文件展开等工作:(.i) l 根据编译参数进行不同程 ...

  6. 用GDB调试程序(一)

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

  7. gcc编译与gdb调试简要步骤

    http://blog.chinaunix.net/uid-24103300-id-108248.html 一.Linux程序gcc编译步骤: Gcc编译过程主要的4个阶段: l 预处理阶段,完成宏定 ...

  8. gcc和g++

    一.GCC GNU编译器套件(GNU Compiler Collection)包括C.C++.Objective-C.Fortran.Java.Ada和Go语言的前端,也包括了这些语言的库(如libs ...

  9. gcc学习笔记

    1:第一个程序 : hello world #include <stdio.h> int main(void) { printf("Hello , world ! \n" ...

随机推荐

  1. android 消息推送

    android 消息推送 极光推送百度云推送(语音)友盟消息推送

  2. 解决全局变量共享---C语言的extern关键字用法

    在调试程序时,有一个参数需要在多个函数之间传递,因为是作为调试参数,不想将参数引入到函数中. 很自然的想到使用全局变量来表示这个公共参数,工程代码的结构如下: main.c test.c test.h ...

  3. Hadoop Mapreduce分区、分组、二次排序过程详解[转]

    原文地址:Hadoop Mapreduce分区.分组.二次排序过程详解[转]作者: 徐海蛟 教学用途 1.MapReduce中数据流动   (1)最简单的过程:  map - reduce   (2) ...

  4. BurpSuite的使用总结

    BurpSuite BurpSuite 是一款使用Java编写的,用于Web安全审计与扫描套件.它集成了诸多实用的小工具以完成http请求的转发/修改/扫描等,同时这些小工具之间还可以 互相协作,在B ...

  5. FFmpeg与libx264 x264接口源代码简单分析

    源代码位于“libavcodec/libx264.c”中.正是有了这部分代码,使得FFmpeg可以调用libx264编码H.264视频.  从图中可以看出,libx264对应的AVCodec结构体ff ...

  6. css 让内容满屏居中不变形

    .selector { position: fixed; width: 100%; height: 100%; background-image: url(path); background-repe ...

  7. AngularJS学习之Select(选择框)

    1.AngularJS可以使用数组或对象创建一个下拉列表选项: 2.在AngularJS中我们可以使用ng-option指令创建一个下拉列表:列表项通过对象和数组循环输出: <div ng-ap ...

  8. 转载:Robotium之Android控件定位实践和建议(Appium/UIAutomator姊妹篇)

    来源于:http://blog.csdn.net/zhubaitian/article/details/39803857 1. 背景 为保持这个系列的一致性,我们继续用SDK自带的NotePad实例应 ...

  9. C# 词法分析器(一)词法分析介绍 update 2014.1.8

    系列导航 (一)词法分析介绍 (二)输入缓冲和代码定位 (三)正则表达式 (四)构造 NFA (五)转换 DFA (六)构造词法分析器 (七)总结 虽然文章的标题是词法分析,但首先还是要从编译原理说开 ...

  10. WPF中ComboBox用法

    The ComboBox control is in many ways like the ListBox control, but takes up a lot less space, becaus ...