软件开发--调试器GDB

一.GDB介绍

A.GDB
1.GNU项目中的调试器
2.能够追踪程序的执行,也能够恢复程序崩溃前的状态
B.GDB的重要性
1.软件不是一次性开发完成的(是软件就有bug,是程序就有问题)
2.调试时软件开发过程中不可或缺的技术
C.GDB的常规应用
1.自定义程序的启动方式(指定影响程序运行的参数)
2.设置条件断点(在条件满足时暂停程序的执行)
3.回溯检查导致程序异常结束的原因
4.动态改变程序执行流(定位问题的辅助方式)
D.GDB的启动方式
1.直接启动--gdb ,gdb test.out ,gdb test.out core,
2.动态链接--gdb test.out pid
示例:对之前的在开发中的辅助工具章提到使用addr2line对程序中出现的错误进行定位,该示例使用gdb调试来完成该操作

运行过程图如图所示

从图中所标记的红线可以知道编译以及gdb的使用过程
1.首先使用gcc生成可调式的结果
2.使用gdb命令开启gdb调试
3.使用file test.out命令关联生成的结果
4.使用run命令生成结果 可以看到在标记5处知道程序出现的错误处
与之前的addr2line命令查找相比,gdb的操作就很快捷与方便
E.使用GDB进行断点调试
1.断电类型
a.软件断点:由非法指令异常实现(软件实现)
b.硬件断点:由硬件特性实现(数量有限)
c.数据断点:由硬件特性实现(数量有限)
F.软件断点的相关操作
a.通过函数名设置断点
1.break func_name
2.tbreak func_name
b.通过文件名行号设置断点
1.break file_name:line_num
2.tbreak file_name:line_num
软件调试的相关操作

第一次GDB断点调试的过程如下所示

可以看到
1.在使用了start命令之后,在main函数的入口处25行生产了断点
2.使用break命令在37行生成断点并且使用info breakpoints查看该断点是否存在
3.继续运行程序发现在37行停住,使用set var命令与next命令对其继续查看

1.使用next命令之后该程跳出循环来到41行
2.使用tbreak命令在43行设置断点,继续运行发现程序正常
3.使用jump命令使其跳至45行,由结果可以得出程序关闭正常,可以猜测程序在43行处有问题
第二次调试过程

1.主要使用tbreak func直接将断点设置在func函数并使用info breakpoints进行查看断点是否设置成功
2.继续运行可以看到提示在func.c:7处提示问题
3.执行return命令发现程序正常结束,可以知道函数在func.c:7出有问题

原文地址:https://blog.51cto.com/13475106/2368777

时间: 2024-10-18 14:12:05

软件开发--调试器GDB的相关文章

[转] linux下的c/c++调试器gdb

http://www.cnblogs.com/xd502djj/archive/2012/08/30/2663960.html linux下的c/c++调试器gdb gdbLinux 包含了一个叫 gdb 的 GNU 调试程序. gdb 是一个用来调试 C 和 C++ 程序的强力调试器. 它使你能在程序运行时观察程序的内部结构和内存的使用情况. 以下是 gdb 所提供的一些功能: * 设置断点:* 监视程序变量的值:* 程序的单步执行:* 修改变量的值.       gdb支持下列语言C, C+

C语言调试器GDB和LLDB的使用方法

调试器的使用 编译输出带调试信息的程序 调试信息包含:指令地址.对应源代码及行号 指令完成后,回调 LINUX使用GDB MAX使用LLDB 使用说明 // 开始调试testlib程序 lldb testlib // 在main函数的位置打断点 b main dwarfdump testlib 可以直接查看debug信息 原文地址:https://www.cnblogs.com/fandx/p/12122933.html

软件开发--链接器

一.链接器上 链接器的意义--链接器的主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确的衔接A.目标文件的秘密1.各个段没有具体的起始地址,只有段大小信息2.各个标识符没有实际地址,只有段中的相对地址3.段和标识符的实际地址需要链接器具体确定链接器的工作内容--将目标文件和库文件合为最终的可执行程序1.合并各个目标文件中的段(.text .data .bss)2.确定各个段和段中标识符的最终地址(重定位)运行的示例根据之前一篇博客中的开发中的工具可以知道,同时使用nm命令可

调试器gdb

1.启动和退出gdb gdb调试的对象是可执行文件,而不是程序源代码.如果要使一个可执行文件可以被gdb调试,那么在使用编译器gcc编译程序时加入-g选项.-g选项告诉gcc在编译程序时加入调试信息,这样gdb才可以调试这个被编译的程序. 程序为求100内偶数和 #include<stdio.h> int Sum(int a) { int i = 0; if(a<1) return -1; for(a; a>2; a-=2) { i += a; } return i; } int

使用GDB调试器(一)

使用GDB调试器 GDB概要---- GDB是GNU开源组织公布的一个强大的UNIX下的程序调试工具.也许,各位比較喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但假设你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.所谓"寸有所长.尺有所短"就是这个道理. 一般来说.GDB主要帮忙你完毕以下四个方面的功能: 1.启动你的程序,能够依照你的自己定义的要求随心所欲的执行程序.    2.可让被调试的程序在你所指定的调置的断点处停住.

使用GDB命令行调试器调试C/C++程序【转】

转自:https://linux.cn/article-4302-1.html 编译自:http://xmodulo.com/gdb-command-line-debugger.html作者: Adrien Brochard原创:LCTT https://linux.cn/article-4302-1.html译者: SPccman本文地址:https://linux.cn/article-4302-1.html 2014-11-25 21:48    评论: 31 收藏: 19 分享: 43

使用GDB命令行调试器调试C/C++程序

没有调试器的情况下编写程序时最糟糕的状况是什么?编译时跪着祈祷不要出错?用血祭召唤恶魔帮你运行程序?或者在每一行代码间添加printf("test")语句来定位错误点?如你所知,编写程序时不使用调试器的话是不方便的.幸好,linux下调试还是很方便的.大多数人使用的IDE都集成了调试器,但 linux 最著名的调试器是命令行形式的C/C++调试器GDB.然而,与其他命令行工具一致,DGB需要一定的练习才能完全掌握.这里,我会告诉你GDB的基本情况及使用方法. 安装GDB 大多数的发行版

《python灰帽子》学习笔记:调试器设置

一.构造 C  数据类型 C Type | Python Type | ctypes Type _______________________________________________________________________________________ char | 1-character | string c_char wchar_t | 1-character Unicode | string c_wchar char | int/long | c_byte char |

GCC编译器和GDB调试器常用选项

http://blog.csdn.net/u014328976/article/details/46745349 GCC编译器 gcc hello.c -o hello                   #将hello.c编译成hello可执行文件 gcc -E hello.c -o hello.i              #将hello.c 转换成预处理后的文件hello.igcc -S hello.c -o hello.S              #将hello.c 转换成汇编文件 h