Catalog

. GDB Introduction
. GDB基本命令

1. GDB Introduction

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能

. 启动程序,可以按照工程师自定义的要求随心所欲的运行程序
. 让被调试的程序在工程师指定的断点处停住,断点可以是条件表达式
. 当程序被停住时,可以检查此时程序中所发生的事,并追索上文
. 动态地改变程序的执行环境

在命令行上键入gdb并按回车键就可以运行gdb了, 如果一切正常的话, gdb 将被启动并且你将在屏幕上看到类似的内容

GNU gdb (GDB) Red Hat Enterprise Linux (7.2-.el6)
Copyright (C) Free Software Foundation, Inc.
License GPLv3+: GNU GPL version or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb)
//当启动gdb后,我们能在命令行上指定很多的选项: gdb -h
aliases -- Aliases of other commands
breakpoints -- Making program stop at certain points
data -- Examining data
files -- Specifying and examining files
internals -- Maintenance commands
obscure -- Obscure features
running -- Running the program
stack -- Examining the stack
status -- Status inquiries
support -- Support facilities
tracepoints -- Tracing of program execution without stopping the program
user-defined -- User-defined commands

0x1: GDB启动

//当用这种方式运行gdb,我们能直接指定想要调试的程序. 这将告诉gdb装入名为fname的可执行文件
. gdb <program> //我们也可以用gdb去检查一个因程序异常终止而产生的core dump文件
. gdb <corename> //与一个正在运行的程序相连,gdb会自动attach上去,并调试它,program应该在PATH环境变量中搜索得到
. gdb programname pid

0x2: GDB启动参数

gdb [-help] [-nx] [-q] [-batch] [-cd=dir] [-f] [-b bps] [-tty=dev] [-s symfile] [-e prog] [-se prog] [-c core] [-x cmds] [-d dir] [prog[core|procID]]

. -help (-h):                列出所有选项,并附简要说明
. -symbols=file (-s file): 读出文件(file)中的符号表
. -write: 开通(enable)往可执行文件和核心文件写的权限
. -exec=file (-e file): 在适当时候把File作为可执行的文件执行,来检测与core dump结合的数据
. -se File: 从File读取符号表并把它作为可执行文件
. -core File (-c File): 把File作为core dump来执行
. -directory=Directory (-d Directory): 把Dicrctory加入源文件搜索的路径中
. -cd=Directory: 运行GDB,使用Directory作为它的工作目录,取代当前工作目录

0x3: 为调试编译代码

为了使gdb正常工作,你必须使你的程序在编译时包含调试信息(DEBUG信息)。调试信息包含你程序里的每个变量的类型和在可执行文件里的地址映射以及源代码的行号。gdb利用这些信息使源代码和机器码相关联

//在编译时用"-g"选项打开调试选项
gcc –g gdb_example.c –o gdb_example
g++ –g gdb_example.c –o gdb_example

2. GDB基本命令

0x1: 测试环境准备

#include <stdio.h>
#include <string.h>
#include <malloc.h> void my_print (char *string)
{
printf ("The string is %s\n", string);
} void my_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+] = '\0'; printf ("The string printed backward is %s\n", string2);
} main ()
{
char my_string[] = "hello there"; my_print (my_string);
my_print2 (my_string);
}
//gcc -g test.c -o test

aaarticlea/png;base64,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" alt="" />

结果不符合预期,我们通过GDB调试这个程序来学习GDB的调试命令

0x2: list命令

在gdb中运行"list/l"命令可以列出代码

. 显示程序第linenum行周围的源程序
list <linenum>
l <linenum> . 显示函数名为function的函数的源程序
list <function>
l <function> . 显示当前行后面的源程序
list . 显示当前行前面的源程序
list -

aaarticlea/png;base64,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" alt="" />

0x3: run命令

在gdb中,运行程序使用run命令,run指令会重头运行一次程序。在程序运行前,我们可以设置如下4方面的工作环境

. 程序运行参数
) 指定运行时参数: set args
) 查看设置好的运行参数: show args
. 运行环境
) 设定程序的运行路径: path <dir>
) 查看程序的运行路径: show paths
) 设置环境变量: set environment varname [=value],如set env USER=baohua;
) 查看环境变量: show environment [varname]
. 工作目录
) cd <dir>: 相当于shell的cd命令
) pwd: 显示当前所在的目录。
. 程序的输入输出
) info terminal: 用于显示程序用到的终端的模式
) gdb中也可以使用重定向控制程序输出,如: run > outfile
) tty命令可以指定输入输出的终端设备,如:tty /dev/ttyS1

在gdb提示符下按回车健将重复上一个命令

0x4: break命令

在gdb中用break命令来设置断点,设置断点的方法包括

. 在进入指定函数时停住,C++中可以使用class::function或function(type, type)格式来指定函数名
break <function> . 在指定行号停住
break <linenum> . 在当前行号的前面或后面的offset行停住,offiset为自然数
break +offset
break -offset . 在源文件filename的linenum行处停住
break filename:linenum . 在源文件filename的function函数的入口处停住
break filename:function . 在程序运行的内存地址处停住
break *address . break命令没有参数时,表示在下一条指令处停住
break . 条件IF断点
break ... if <condition>
) "..."可以是上述的break <linenum>、break +offset / break –offset中的参数
) condition表示条件
在条件成立时停住。比如在循环体中,可以设置break if i=,表示当i为100时停住程序 . xbreak
在当前函数的退出的点上设置一个断点 . txbreak
在当前函数的退出的点上设置一个临时的断点(只可使用一次) . 查看断点时
info
info breakpoints [n]、info break [n](n表示断点号)

0x5: 单步命令

在调试过程中

. next/n命令: 用于单步执行,类似VC++中的step over,next单步不会进入函数的内部
. step/s命令: 在单步执行一个函数时,会进入其内部,类似VC++中的step into

单步执行的更复杂用法包括

. 单步跟踪
step <count>
如果有函数调用,则"进入"该函数(进入函数的前提是,此函数被编译有debug信息)。step后面不加count表示一条条地执行,加表示执行后面的count条指令,然后再停住 . 单步跟踪next <count>
如果有函数调用,它"不会"进入该函数。同样地,next后面不加count表示一条条地执行,加表示执行后面的count条指令,然后再停住 . set step-mode
) set step-mode on: 打开step-mode模式,这样,在进行单步跟踪时,程序不会因为没有debug信息而不停住,这个参数的设置可便于查看机器码
) set step-mod off: 关闭step-mode模式。 . finish
运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息 . until/u
一直在循环体内执行单步,退不出来是一件令人烦恼的事情,until命令可以运行程序直到退出循环体 . stepi/si、nexti/ni
stepi和nexti用于单步跟踪一条机器指令,一条程序代码有可能由数条机器指令完成,stepi和nexti可以单步执行机器指令 . display/i $pc
单步跟踪会在打出程序代码的同时打出机器指令,即汇编代码

0x6: continue命令

当程序被停住后,可以使用continue/c命令,(fg命令同continue命令)恢复程序的运行直到程序结束,或到达下一个断点,命令格式为

continue [ignore-count]
c [ignore-count]
fg [ignore-count]
//ignore-count表示忽略其后多少次断点

0x7: print命令

在调试程序时,当程序被停住时,可以使用print/p命令,或是同义命令inspect来查看当前程序的运行数据。print命令的格式是

print <expr>
//<expr>是表达式,是被调试的程序中的表达式 print /<f> <expr>
/*
<f>是输出的格式
1. x: 按十六进制格式显示变量
2. d: 按十进制格式显示变量
3. u: 按十六进制格式显示无符号整型
4. o: 按八进制格式显示变量
5. t: 按二进制格式显示变量
6. a: 按十六进制格式显示变量
7. c: 按字符格式显示变量
8. f: 按浮点数格式显示变量
*/ expr: 表达式
在表达式中,有几种GDB所支持的操作符,它们可以用在任何一种语言中
. "@"是一个和数组有关的操作符
. "::"指定一个在文件或是函数中的变量
. "{<type>} <addr>"表示一个指向内存地址<addr>的类型为type的一个对象

0x8: watch命令

watch一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。我们有下面的几种方法来设置观察点
. watch <expr>
为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序 . rwatch <expr>
当表达式(变量)expr被读时,停住程序 . awatch <expr>
当表达式(变量)的值被读或被写时,停住程序 . info watchpoints
列出当前所设置了的所有观察点

0x9: examine命令

我们可以使用examine/x命令,来查看内存地址中的值。examine命令的语法如下所示

x/<n/f/u> <addr>
. <addr>: 表示一个内存地址
. <n/f/u>: 可选的参数
) n: 一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容
) f: 显示的格式,如果地址所指的是字符串,那么格式可以是s,如果地址是指令地址,那么格式可以是i
) u: 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4字节。u参数可以被一些字符代替
) b: 表示单字节
) h: 表示双字节
) w: 表示四字节
) g: 表示八字节
当我们指定了字节长度后,GDB会从指定的内存地址开始,读写指定字节,并把其当作一个值取出来。n、f、u这3个参数可以一起使用,例如命令
x/3uh 0x54320: 表示从内存地址0x54320开始以双字节为1个单位(h)、16进制方式(u)显示3个单位()的内存

0x10: set命令

修改寄存器
. set $v0 = 0x004000000
. set $epc = 0xbfc00000 修改内存
. set {unsigned int}0x8048a51=0x0

0x11: jump命令

一般来说,被调试程序会按照程序代码的运行顺序依次执行,但是GDB也提供了乱序执行的功能,也就是说,GDB可以修改程序的执行顺序,从而让程序随意跳跃

. jump <linespec>: 指定下一条语句的运行点
) <linespec>可以是文件的行号
) 可以是file:line格式
) 也可以是+num这种偏移量格式,表示下一条运行语句从哪里开始 . jump <address>
这里的<address>是代码行的内存地址
//注意,jump命令不会改变当前的程序栈中的内容(它是纯粹的EIP修改跳转),所以,如果使用jump从一个函数跳转到另一个函数,当跳转到的函数运行完返回,进行出栈操作时必然会发生错误,这可能导致意想不到的结果,所以最好只用jump在同一个函数中进行跳转

0x12: signal命令

使用singal命令,可以产生一个信号量给被调试的程序,如中断信号"Ctrl+C"。这非常方便于程序的调试,可以在程序运行的任意位置设置断点,并在该断点用GDB产生一个信号量,这种精确地在某处产生信号的方法非常有利于程序的调试

signal命令的语法是:signal <signal>
//UNIX的系统信号量通常从1到15,所以<signal>取值也在这个范围

0x13: return命令

如果在函数中设置了调试断点,在断点后还有语句没有执行完,这时候我们可以使用return命令强制函数忽略还没有执行的语句并返回

return
return <expression>
//return命令用于取消当前函数的执行,并立即返回,如果指定了<expression>,那么该表达式的值会被作为函数的返回值

0x14: call命令

call命令用于强制调用某函数

call <expr>
表达式中可以一是函数,以此达到强制调用函数的目的,它会显示函数的返回值(如果函数返回值不是void)

0x15: info命令

info命令可以在调试时用来查看相关信息

. 寄存器
) info registers: 查看除了浮点寄存器以外的寄存器
) info all-registers: 查看所有寄存器,包括浮点寄存器
) info registers <regname ...>: 查看所指定的寄存器 . 断点
) info break: 查看断点信息 . 观察点
) info watchpoints: 列出当前所设置的所有观察点 . 信号
) info signals: 查看有哪些信号正在被GDB检测
) info handle: 查看有哪些信号正在被GDB检测 . info line <xx>: 查看源代码在内存中的地址
info line后面可以跟行号、函数名、文件名:行号、文件名:函数名等多种形式,例如下面的命令会打印出所指定的源码在运行时的内存地址:
//info line tst.c:func . info threads: 查看多线程

0x16: set scheduler-locking off|on|step

. off: 不锁定任何线程,也就是所有线程都执行,这是默认值。
. on: 只有当前被调试程序会执行
. step: 在单步的时候,除了next过一个函数的情况以外,只有当前线程会执行

与多线程调试相关的命令还包括

. thread ID
切换当前调试的线程为指定ID的线程 . break thread_test.c: thread all
在所有线程中相应的行上设置断点 . thread apply ID1 ID2 command
让一个或者多个线程执行GDB命令command . thread apply all command
让所有被调试线程执行GDB命令command

0x17:disassemble

disassemble命令用于反汇编,它可被用来查看当前执行时的源代码的机器码,其实际上只是把目前内存中的指令dump出来

. 反汇编一个函数
disass func_name . 反汇编一段内存地址, 第1个参数是起始地址,第2个是终止地址
disassemble 0x0 0x10
//可以使用 info line 命令来映射一个源码行到程序地址,然后使用命令disassemble显示一个地址范围的机器指令 . disassemble 不带参数
默认的反汇编范围是 所选择帧的pc附近的函数

aaarticlea/png;base64,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" alt="" />

0x18: kill [filename]

终止正在调试的程序

0x19: clear

删除一个断点,这个命令需要指定代码行或者函数名作为参数

0x20: bt/Backtrace

显示程序堆栈信息,即显示函数调用栈的信息

0x21: enable、enable

. disable: 禁止断点功能,这个命令需要禁止的断点在断点列表索引值作为参数
. enable: 允许断点功能,这个命令需要允许的断点在断点列表索引值作为参数

0x22: ignore

忽略某个断点制定的次数

ignore  : 忽略断点4的23次运行,在第24次的时候中断

0x23: load

动态载入一个可执行文件到调试器

0x24: whatis

显示变量的值和类型

0x25: ptype

显示变量的类型

0x26: make

使你能不退出GDB就可以重新产生可执行文件

0x27: shell

使你能不离开GDB就执行 UNIX shell 命令

Relevant Link:

http://www.chinalinuxpub.com/doc/pro/gdb.html
http://www.vimer.cn/2009/11/%E4%BD%BF%E7%94%A8gdb%E8%B0%83%E8%AF%95%E7%A8%8B%E5%BA%8F%E8%AF%A6%E8%A7%A3.html
https://www.ibm.com/developerworks/cn/linux/sdk/gdb/
http://blog.csdn.net/21cnbao/article/details/7385161
http://www.vimer.cn/2009/11/%E4%BD%BF%E7%94%A8gdb%E8%B0%83%E8%AF%95%E7%A8%8B%E5%BA%8F%E8%AF%A6%E8%A7%A3.html

Copyright (c) 2015 LittleHann All rights reserved

Linux GDB Debugging的更多相关文章

  1. Linux GDB常用命令一栏

    Linux GDB 常用命令如下: 1.启动和退出gdb (1)启动:gdb ***:显示一段版权说明: (*** 表示可执行程序名) (2)退出:quit.有的时候输入quit后会出现相关提示:类似 ...

  2. linux gdb

    linux gdb linux 测试代码 #include <stdio.h> #include <stdlib.h> static char buf[255]; static ...

  3. Linux GDB Debug

    http://blog.jobbole.com/107925/ gdb 调试入门,大牛写的高质量指南 http://blog.jobbole.com/107759/ gdb是the GNU Debug ...

  4. Linux GDB程序调试工具使用简单介绍

    GDB概述 GDB是GNU开源组织公布的一个强大的UNIX下的程序调试工具.也许,各位比較喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但假设你是在UNIX平台下做软件,你会发现GDB这个调试 ...

  5. Linux GDB 程序调试工具使用详解

    转自    http://www.codeceo.com/article/linux-gdb-tools.html 整理的挺全的 GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试 ...

  6. linux gdb 没有符号表被读取。请使用 "file" 命令。

    使用gdb时遇到这个问题,刚开始接触linux下使用gdb调试程序,其原因是生成的二进制可执行文件没有使用-g选项. gcc中-g选项是为了获得有关调试信息,要用gdb进行调试,必须使用-g生成二进制 ...

  7. Linux GDB调试全面解析

    GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序. 让被调试的程序在工程师指定的断 ...

  8. linux gdb基本概念

    GDB是一个功能强大的调试器,它是一个自由软件,能够用在许多UNIX平台上.它同时也是Linux系统中的默认调试器.GDB已被移植到许多其他的计算机平台上,并且能够用于调试嵌入式实时系统.一般来说,G ...

  9. Linux gdb调试器用法全面解析

    GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序. 让被调试的程序在工程师指定的断 ...

随机推荐

  1. Centos 7 安装 和 卸载 Mysql5.7(压缩包)

    今天装的了mysql,遇到了很多问题,好在最后一一解决了,现在记录在此,防止日后老路重走... 1.下载 当然是去官网,下一个linux下的版本,64位的 tar.gz,好吧这里贴个名字--[mysq ...

  2. MVC3中常用的一些控件及方法

    1.返回提示框 string script = String.Format("<script>alert('登录状态已失效! 请重新登录系统');location.href='{ ...

  3. Python2.4-原理之函数

    此节来自于<Python学习手册第四版>第四部分 一.函数基础 函数的作用在每个编程语言中都是大同小异的,,这个表是函数的相关语句和表达式. 1.编写函数,a.def是可执行代码,pyth ...

  4. Kafka笔记

    最近做的一个项目需要跟Kafka打交道,学习了很多相关知识,就到这里来汇总一下. kafka是一个传递消息的系统,原本是用来快速记录海量log的,现在也经常用作消息队列.它主要由三个部分组成,prod ...

  5. 在CentOS上部署基于dnx/coreclr的ASP.NET 5应用程序

    在Ubuntu上写好了一个简单的ASP.NET 5应用程序,尝试将这个程序部署在没有mono环境的CentOS服务器上. 部署步骤如下: 1)安装libuv(KestrelHttpServer需要它) ...

  6. .net 估计要死在你手里了

    最近不太爽,想换工作,上这些知名的招聘网站,一搜 .net 心凉了一截,很少有大公司用.net,工资也不是很高. 不用我多说什么,想必很多人应该有类似经历,只是打了牙往肚子里咽. 来两副图: 最近用滴 ...

  7. 继续研究NDK

    继续研究NDK 我在阿里云服务器上搭建了Android ndk的开发平台,并且借助这一平台研究了NDK的内部细节. NDK提供了Android本地编程的接口,让你可以开发高效的依赖库,提高程序的速度, ...

  8. RHEL每天定时备份Oracle

    步骤: (1)创建脚本文件bak_112.sh,内容如下(自动按当前日期备份数据库): #!/bin/sh export ORACLE_BASE=/u01/app/oracle; ORACLE_HOM ...

  9. ElasticSearch入门系列(五)数据

    序言:无论程序如何写,最终都是为了组织数据为我们服务.在实际应用中,并不是所有相同类型的实体的看起来都是一样的.传统上我们使用行和列将数据存储在关系型数据库中相当于使用电子表格,这种固定的存储方式导致 ...

  10. 动态sql语句输出参数

    ) declare @cou int ) ' set @sql='select @count=count(*) from emp where id=@id' exec sp_executesql @s ...