GDB调试器简介
Linux系统中包含了GNU 调试程序gdb,它是一个用来调试C和 C++ 程序的调试器。可以使程序开发者在程序运行时观察程序的内部结构和内存的使用情况。
GDB提供了一下一些功能:
(1)监视程序中变量的值;
(2)设置断点以使程序在制定的代码上上运行;
(3)一行一行的执行代码。
gdb程序调试的对象是可执行文件,,需在执行gcc指令编译程序时,加上-g参数,指定程序在编译时包含调试信息。调试信息包含程序里的每个变量的类型和在可执行文件里的地址映射以及源代码的行号。gdb 利用这些信息使源代码和机器码相关联。
启动gdb后,可以在命令行制定很多选项,也可以用下面的方式在命令行中指定想要调试的文件名:
$ gdb filename
此时,gdb会装入名为filename的可执行文件,用这种方式运行gdb可以直接指定想要调试的程序。也可以用gdb去检查一个因程序异常终止而产生的core文件,或者与一个正在运行的程序相连。
下面举个实例来介绍如何一步步的用gdb调试程序,显示一个简单的“Hello World!”,再用凡需将此输出。代码如下:
/*lxy1.c*/
#include<stdio.h>
void print1(char *string)
{
printf("The string is :%s\n",string);
}
void print2(char *string)
{
char *string2;
int size,i;
size = strlen(string);
string2 = (*char) malloc(size+);
for(i = ;i<size;i++)
string2[size-i] = string[i];
string2[size+] = ‘\‘;
printf("The string printed backward is:%s\n",string2);
free(string2);
} main()
{
char test_string []="Hello World!";
print1(test_string);
print2(test_string);
}
lxy1.c
$gcc -o lxy1 lxy1.c
编译成功后,执行lxy1:
./lxy1
程序显示的结果如下:
The string is:Hello World!
The string printed backward is:
可知第二行输出时错误的 ,现在用gdb进行调试,重新编译如下:
$gcc -o lxy1 lxy1.c -g
现在可以用gdb对gdbtest进行调试,输入命令如下:
$gdb lxy1
这个命令将载入lxy1可执行文件,进入gdb后,输入run命令运行lxy1,结果如下:
Staring program:/home/lxy/book/src/chapter2/lxy1
The string is:Hello World!
The string printed backward is:
program exited normally
为了找出问题在哪,在gdb下输入list命令可列出源代码。由一系列分析知道在14行设置断点,应该输入下面的命令
(gdb)break 14
Breakpoint 1 at 0x80484ee:file lxy1.c,line 14.
再输入run,将产生如下的输出:
(gdb)run
Staring program:/home/lxy/book/src/chapter2/lxy1
The string is:Hello World!
Breakpoint 1 ,print2(string=0xbffff32d"Hello World!") at lxy1.c:14
14 string2[size-i] = string[i];
由此可知道程序停在13行“string2[size-i]=string[i]”,可以通过设置一个观察点来观察string2[size-i]变量的值,看错误咋产生的。如下:
(gdb)watch string2[size-i]
Hardware watchpoint 2:string2[size-i]
输入命令 C 使程序继续执行,直到停止在下次循环体语句中,这里可知string2[size-i]= string[i]应修正为string2[size-i-1]= string[i].
通过这个例子,知道了gdb程序的调用、在gdb中显示源文件、设置断点、观察变量、单步执行等。需要多加练习。。
GDB调试器简介的更多相关文章
- Mac os系统gdb调试器的安装与使用
Mac os系统gdb调试器的安装与使用 1.简介 Mac os下的Terminal 终端中默认情况下并没有安装gdb调试器,但是可以通过gcc编译器进行代码编译,如果出错了就需要通过gdb调试器进行 ...
- linux基础2——gdb调试器
gdb调试器使用的一般步骤(不断更新完善): 1.编译过程中要用-g参数来添加调试符号——gcc test.c -g: 2.gdb启动可执行文件——gdb a.out: 3.出现gdb符号表示启动成功 ...
- GCC编译器和GDB调试器常用选项
http://blog.csdn.net/u014328976/article/details/46745349 GCC编译器 gcc hello.c -o hello ...
- Linux C 程序 函数,数组,指针,gdb调试器(SEVEN)
函数,数组,指针,gdb调试器 1.函数定义 如果明确指定返回类型,默认为int 参数传递:实参对形参的参数传递是单向的,实参只是把自己的值赋给形参. 形参的 ...
- 使用GDB调试器(一)
使用GDB调试器 GDB概要---- GDB是GNU开源组织公布的一个强大的UNIX下的程序调试工具.也许,各位比較喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但假设你是在UNIX平台下做软 ...
- Linux gdb调试器用法全面解析
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序. 让被调试的程序在工程师指定的断 ...
- Ubuntu下GDB调试器的使用
gdb调试器时一款GNU组织开发.发布的UNIX/Linux环境下的程序调试工具,没有图形界面,但功能强大. GDB使用流程: 先编写一个测试文件gdbTest.c 保存后用gcc对文件进行编译,需要 ...
- gdb调试器在windows下的相关内容
1.gdb调试器在visual studio或dev c++中也有类似的调试图形化可视界面,但是gdb不同的是它是由命令行组成,他的界面对于习惯图形化可视界面的用户来说一时间会不知所措 2.通过gcc ...
- @清晰掉 GDB调试器中的战斗机
GDB 的命令很多,本文不会全部介绍,仅会介绍一些最常用的.在介绍之前,先介绍GDB中的一个非常有用的功能:补齐功能.它就如同Linux下SHELL中的命令补齐一样.当你输入一个命令的前几个字符,然后 ...
随机推荐
- Hibernate之Session对象的相关方法以及持久化对象的状态
一.持久化对象的状态 站在持久化的角度, Hibernate 把对象分为 4种状态: 持久化状态,临时状态,游离状态,删除状态.Session 的特定方法能使对象从一个状态转换到另一个状 ...
- Spring入门(2)-通过构造器注入Bean
Spring入门(2)-通过构造器注入Bean 前一篇文章将了最基本的spring例子,这篇文章中,介绍一下带有参数的构造函数和通过构造器注入对象引用. 0. 目录 带有参数的构造函数 通过构造器注入 ...
- POJ 3667 Hotel (线段树区间合并)
题目链接:http://poj.org/problem?id=3667 最初给你n间空房,m个操作: 操作1 a 表示检查是否有连续的a间空房,输出最左边的空房编号,并入住a间房间. 操作2 a b ...
- easyUI之tree
转自:http://www.cnblogs.com/CoreCaiNiao/archive/2010/08/20/1804387.html http://blog.csdn.net/l27775918 ...
- 使用gcc编译gdb调试
gcc 在linux系统中,默认是没有安装gcc编译器的,可以通过命令 rpm -q | grep gcc 来查看.安装命令为: yum -y install gcc 安装后,编写一个.c结尾的文件. ...
- jquery formValidate demo 采用struts 异步方式检验用户名是否存在
1 login.jsp <%@taglib uri="/struts-tags" prefix="s"%><!DOCTYPE html PUB ...
- C#不安全代码
当一个代码块使用 unsafe 修饰符标记时,C# 允许在函数中使用指针变量.不安全代码或非托管代码是指使用了指针变量的代码块. 下面的实例说明了不安全代码中的指针的定义与调用: static uns ...
- Web项目的三层架构和MVC架构异同
http://www.cnblogs.com/zhhh/archive/2011/06/10/2077519.html 又看到有人在问三层架构和MVC的关系,感觉这种问题有点教条化了.因为它们都在逻辑 ...
- 从零开始学android开发- layout属性介绍
android:id 为控件指定相应的ID android:text 指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符串 android:gravity 指定Vi ...
- Crystal Reports课程01-连接SQL Sever数据库
选择[OLE DB(ADO)] 选择[microsoft DB provider for SQL Sever],点击[下一步] 填写连接的服务器,数据库,用户名,密码等信息,然后点击[下一步] 选择[ ...