调试利器GDB(上)

调试利器GDB(上)

1.1 GDB初识

1.1.1什么是GDB?

GDB是GNU项目中的调试器(gnu debuger),能够跟尊程序的执行,也能恢复程序崩溃前的状态

1.1.2为什么需要GDB?

软件产品的研发过程必然伴随bug,调试时软件开发中不可或缺的技术(调试工具很重要)

1.1.3 DBG与binutils

1.2 GDB的常规使用

1.自定义程序得到启动方式(指定影响程序运行的参数)
2.设置条件断点(在满足条件时程序暂停执行)
3.回溯检查导致程序异常结束的原因(core dump)
4.动态改变程序的执行流(定位问题的辅助方式)

1.3 GDB的启动方式

?直接启动:

gdb
gdb test.out
gdb test.out core

?动态链接
gdb test.out pid
1.4 GDB的应用示例
示例1:

dbg                 //启动
file test.out           //载入目标程序
set args arg1 arg2  //设置命令行参数
run                 //执行目标程序
注:gdb  + file test.out  ==  gdb test.out

示例2:

gdb                 //启动
attach  pid         //链接到目标进程,链接成功后目标程序将停止执行
continue                //恢复执行
注:gdb + attach pid  ==  gdb test.out pid

1.5 断点调试

1.5.1断点类型

  • 软件断点:由非法指令异常实现(软件实现),,通过中断来实现程序位于ram中
  • 硬件断点:由硬件特性实现(数量有限)程序位于flash(只读)中
  • 数据断点:由硬件特性实现(数量有限),监视内存,当内存被改写时触发

    1.5.2软件断点相关操作

    通过函数名设置断点:

    break func_name [ if var = value]
    tbreak func_name [ if var = value]

    通过行号设置断点:

    break file_name:line_num [ if var = value ]
    break file_name:line_num [ if var = value ]

    Tbreak设置的断点只生效一次。

    1.5.3调试时相关操作

    1.5.4硬件断点及其操作

    当代码位于只读寄存器(flash)时,只能通过硬件断点调试
    硬件断点需要硬件支持,数量有限
    GDB通过hbreak命令支持硬件断点,与break使用方法完全一致

原文地址:http://blog.51cto.com/11134889/2083650

时间: 2024-07-30 19:33:29

调试利器GDB(上)的相关文章

linux-c/c++调试利器gdb、ddd小试

linux-c/c++调试利器gdb.ddd小试 原文链接: http://deepfuture.iteye.com/blog/749148 博客分类: C++/C/lisp CC++C#LinuxUbuntu 一.gdb,在shell窗口调试 main.c内容: main.c #include <stdio.h> int main() { int y=0; for (int i=0;i<10;i++){ y+=i; } return 0; } 深未来技术原创文章,如转载,请注明来源ht

调试利器GDB(下)

调试利器GDB(下) 2.1数据断点 GDB中支持数据断点的设置,watch命令用于监视变量是否被改变(本质为硬件断点)用法:watch var_name 2.2 GDB中的内存查看 GDB中可以查看任意内存区域中的数据,命令格式:x /Nuf expressionN -需要打印的单元数u -每个单元的大小f -打印数据的格式其数据格式如下: 2.3 GDB中的打印格式 实例:判断系统大小端 2.4函数调用栈查看 backtrace,查看函数调用的顺序(函数调用栈的信息)frame N 切换到栈

linux 调试利器gdb, strace, pstack, pstree, lsof

1)如何使用strace+pstack利器分析程序性能?http://www.cnblogs.com/bangerlee/archive/2012/04/30/2476190.html此文有详细介绍怎么用strace和pstack 2)Linux下多线程查看工具(pstree.ps.pstack)?http://blog.csdn.net/yfkiss/article/details/6729364 3)使用strace,lstrace,truss来跟踪程序的运行过程http://hi.baid

[iOS逆向实战 之十]动态调试利器---gdb基础篇

个人原创,转帖请注明来源:cnblogs.com/jailbreaker 一.调试平台搭建 1.GNU Debugger.首先安装ios下的gdb调试器,添加源:cydia.radare.org .搜索 GNU Debugger,安装之.(有些源的GDB好像不能用,这个测试没问题) 2.openSSH.这个应该都会装,没装过的参考,http://www.cnblogs.com/jailbreaker/p/4142609.html 3.adv-cmds.添加源:apt.saurik.com(这个应

前端调试利器---nproxy

前言:习惯了在windows环境中使用Fiddler的童鞋们,是不是感觉它的网络重定向功能很酷,Fiddler能按照你设置的规制捕获网络请求,再指向本地文件,如拦截你的js文件到本地,就能很快的调试线上环境(如后台环境,测试环境,预上线环境等).但是Fiddler的使用对于初学者来说还是稍有困难的,界面功能很多,导致新手无从下手.(我当初就是这样的),并且Fiddler虽然有Mac版本,但是问题很多,我试了好几次都不行. 正文:今天给大家介绍一款新的神器,nproxy.它能通吃windows,l

Windows GUI代码与Windows消息问题调试利器

Windows GUI代码与Windows消息问题调试利器 记得很久前有这么一种说法: 人类区别于动物的标准就是工具的使用.同样在软件开发这个行业里面,对于工具的使用也是高手和入门级选手的主要区别,高手往往靠工具的使用在关键的时候打开局面,在适当的时候使用适当的工具就往往可以事半功倍. 首先让我们来讨论如下两个简单的问题. 1. 如果你写的一个软件出了一个问题,这个问题只有在关闭程序的时候出现,你怎么调试呢?2. 如果你写的一个软件出了一个问题,这个问题只有在关闭机器的时候出现,你怎么调试呢?3

[转] 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+

应用调试(二)GDB

title: 应用调试(二)GDBdate: 2019/1/17 21:00:10 toc: true 应用调试(二)GDB gdb下载工具安装交叉工具链设置GDB介绍编译GDBtarget/host/build编译主机GDB编译单板GDBserver调试程序CoreDumpGDB命令杂项附录源码 gdb下载 官网 这里我下载了gdb-7.6.tar.gz编译成功,下载了8.x的需要c++11,后来没有试了 里面的".sig"为文件名的分离签名文件,用来校验下载资源的完整性,.xz为另

如何使用电脑上的谷歌浏览器来调试安卓手机上的移动端页面

本教程用的是我自己的手机三星A9,其他安卓手机方法也相同. 第一步首先你得打开手机的开发者选项,确保USB调试和通过USB验证应用程序保持打开状态,如图所示 第二步,确保你的电脑和安卓手机都已经安装了谷歌浏览器 第三步,打开你电脑的上谷歌浏览器,调出控制台,,点击如图所示这个3旁边的3个点,这里面有更多的功能,会出现这个选项,我们点击More tools,再选择,在之后的页面中如图所示的选项必须打钩,然后用你数据链连接你的电脑和手机,手机就会弹出一个连接提示,你点是就可以了,连接成功就会跟上图中