使用 GCC 调试程序
系统 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 调试程序的更多相关文章
- <转载>linux gcc编译器中使用gdb单步调试程序,程序不是顺序执行的。
原文地址http://blog.csdn.net/abc78400123/article/details/6779108 在用gdb调试,使用s 或n单步执行程序时,发现程序不是按顺序运行的,有时莫名 ...
- Linux编译工具:gcc入门
1. 什么是gcc gcc的全称是GNU Compiler Collection,它是一个能够编译多种语言的编译器.最开始gcc是作为C语言的编译器(GNU C Compiler),现在除了c语言,还 ...
- gcc -Wall -pedantic -ansi(转载)
转载自R-G-Y-CQ的新浪博客 -Wall显示所有的警告信息 -Wall选项可以打开所有类型的语法警告,以便于确定程序源代码是否是正确的,并且尽可能实现可移植性. 对Linux开发人员来讲,GCC给 ...
- WINDOWS下如何安装GCC(转载http://nirvana.cublog.cn;作者:北斗星君(黄庠魁))
第一章 在视窗操作系统下的GCC 第一节 GCC家族概览 GCC 是一个原本用于 Unix-like 系统下编程的编译器.不过,现在 GCC 也有了许多 Win32 下的移植版本.所以,也许对于许多 ...
- Linux——【转】gcc编译与gdb调试简要步骤
原文:gcc编译与gdb调试简要步骤 一.Linux程序gcc编译步骤: Gcc编译过程主要的4个阶段: l 预处理阶段,完成宏定义和include文件展开等工作:(.i) l 根据编译参数进行不同程 ...
- 用GDB调试程序(一)
http://blog.csdn.net/haoel/article/details/2879 用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或 ...
- gcc编译与gdb调试简要步骤
http://blog.chinaunix.net/uid-24103300-id-108248.html 一.Linux程序gcc编译步骤: Gcc编译过程主要的4个阶段: l 预处理阶段,完成宏定 ...
- gcc和g++
一.GCC GNU编译器套件(GNU Compiler Collection)包括C.C++.Objective-C.Fortran.Java.Ada和Go语言的前端,也包括了这些语言的库(如libs ...
- gcc学习笔记
1:第一个程序 : hello world #include <stdio.h> int main(void) { printf("Hello , world ! \n" ...
随机推荐
- android 消息推送
android 消息推送 极光推送百度云推送(语音)友盟消息推送
- 解决全局变量共享---C语言的extern关键字用法
在调试程序时,有一个参数需要在多个函数之间传递,因为是作为调试参数,不想将参数引入到函数中. 很自然的想到使用全局变量来表示这个公共参数,工程代码的结构如下: main.c test.c test.h ...
- Hadoop Mapreduce分区、分组、二次排序过程详解[转]
原文地址:Hadoop Mapreduce分区.分组.二次排序过程详解[转]作者: 徐海蛟 教学用途 1.MapReduce中数据流动 (1)最简单的过程: map - reduce (2) ...
- BurpSuite的使用总结
BurpSuite BurpSuite 是一款使用Java编写的,用于Web安全审计与扫描套件.它集成了诸多实用的小工具以完成http请求的转发/修改/扫描等,同时这些小工具之间还可以 互相协作,在B ...
- FFmpeg与libx264 x264接口源代码简单分析
源代码位于“libavcodec/libx264.c”中.正是有了这部分代码,使得FFmpeg可以调用libx264编码H.264视频. 从图中可以看出,libx264对应的AVCodec结构体ff ...
- css 让内容满屏居中不变形
.selector { position: fixed; width: 100%; height: 100%; background-image: url(path); background-repe ...
- AngularJS学习之Select(选择框)
1.AngularJS可以使用数组或对象创建一个下拉列表选项: 2.在AngularJS中我们可以使用ng-option指令创建一个下拉列表:列表项通过对象和数组循环输出: <div ng-ap ...
- 转载:Robotium之Android控件定位实践和建议(Appium/UIAutomator姊妹篇)
来源于:http://blog.csdn.net/zhubaitian/article/details/39803857 1. 背景 为保持这个系列的一致性,我们继续用SDK自带的NotePad实例应 ...
- C# 词法分析器(一)词法分析介绍 update 2014.1.8
系列导航 (一)词法分析介绍 (二)输入缓冲和代码定位 (三)正则表达式 (四)构造 NFA (五)转换 DFA (六)构造词法分析器 (七)总结 虽然文章的标题是词法分析,但首先还是要从编译原理说开 ...
- WPF中ComboBox用法
The ComboBox control is in many ways like the ListBox control, but takes up a lot less space, becaus ...