GDB使用小记
By francis_hao Nov 7,2016
记录GDB常用功能。
GDB可以让你查看一个程序在运行时其内部发生了什么,或者当一个程序崩溃时发生了什么(通过使用GDB查看core dump文件)
|
基础 |
|
|
启动GDB |
gdb 仅启动GDB,未加载程序文件,可通过file program进行加载,也可以在启动时添加-q选项,不输出版本信息 gdb program 启动GDB并加载程序文件 gdb program core 启动GDB加载程序文件和核心文件(查看core dump??) gdb program <PID> 调试pid为<PID>的已运行进程,注意,如果目录下有与<PID>同名的文件,则会先检查此文件。 |
|
list [file:]function |
从当前程序停止的位置查看程序源码,直接打印到屏幕上。 |
|
break (b) |
break [LOCATION] [thread THREADNUM] [if CONDITION] LOCATION: 行号 函数名 文件名:行号 文件名:函数号 *地址 +偏移量 -偏移量 如果没有指定LOCATION,则会在当前执行地址设置断点 THREADNUM:可以从info threads中获取 CONDITION :条件,例如i==5,仅当i=5时break。 |
|
info (i) |
info line 当前调试位置的程序的地址 info locals 当前堆栈下的局部变量 info macro xx 显示宏xx的值 info program 程序当前的执行状态 info registers 列出整形寄存器和值 info set 显示GDB所有的设置(内容较多) info sharedlibrary 显示加载的共享库的状态 info source 当前源文件的信息 info sources 程序里的源文件信息 info stack 程序堆栈的回溯信息(类似backtrace) info target 当前被调试文件的一些信息(可以看到ELF各个段) info threads 当前已知的线程信息 info tracepoints 追踪点的状态(how to use) info types 显示所有定义的数据类型(例如你定义的uchar的实际类型) info variables 所有全局的和静态的变量信息 |
|
disable |
失能断点,后面可以加断点号,若不加则全部失能 |
|
enable |
使能断点,后面可以加断点号,若不加则全部使能 |
|
delete (d) |
删除断点,后面可以加断点号,若不加则全部删除 |
|
run [arglist] |
启动程序,同时指定程序的参数 |
|
next (n) |
单步运行,如果有函数,一步执行,不进入 |
|
step (s) |
单步运行,如果有函数则进入,单步执行最小语句单位 |
|
continue (c) |
继续运行,遇到断点或结束才停止 |
|
print i (p i) |
打印变量i的值 有效的变量包括当前栈的局部变量和全局变量, 还有一种形式可以打印一个连续内存的值,常用语数组中,这种形式就是FOO@NUM其中FOO是一个数组中的元素(注意,不是指针),NUM是要显示的个数。同时,print命令也支持x命令的FMT,但是省略了重复数和单位长度,因为NUM指出了重复数,而FOO指示了数据类型,也就知道了单位长度 例如: p /u *name@10 其中name是一个数组 |
|
edit [file:]function |
从当前程序停止的位置查看程序源码,默认是行模式,可以输入vi进入类似vi的模式 |
|
set print element 0 |
改变显示字符串的个数限制,从而显示所有的字符串 |
|
backtrace (bt)|where |
查看当前函数调用栈的所有信息,后面可跟数字表示只打印栈顶n层的信息 |
|
up |
用于bt后,跳到上一函数栈,以查看上一函数栈的信息 |
|
down |
用于bt后,跳到下一函数栈,以查看下一函数栈的信息 |
|
finish |
退出当前函数,可返回调用它的上一层函数 |
|
q |
退出gdb调试 |
|
disassemble |
对当前函数对应的二进制进行反汇编 |
|
thread <ID> |
切换当前调试的线程为指定ID的线程 |
|
gdb -p <PID> |
调试指定ID的进程,GDB可以调试已经运行的程序。 或者在进入GDB之后输入:attach <PID> |
|
进阶 |
|
|
examine (x) x/FMT ADDRESS |
查看内存 ADDRESS是一个要查看的内存地址表达式, FMT 是 重复数+格式+单位长度的组合。 格式由一个字母表示的,可取值有:o(八进制),x(十六进制),d(十进制),u(无符号十进制),t(二进制),f(浮点数),a(地址),i(指令),c(字符)和s(字符串)。 单位长度有:b(一字节byte),h(二字节halfword),w(四字节word),g(八字节giant)。 比如x/2xw,表示以十六进制显示两个四字节大小的内存数据 默认的格式和单位长度是上次使用的值,默认的重复数是1,默认的地址是接着上次使用该命令或print命令的地址。 |

本文由 刘英皓 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自:http://www.cnblogs.com/yinghao1991/p/6041147.html
参考
【1】 gdb_tips : http://gitlore.com/gitlore-git/gdb_tips/index.html
【2】 用GDB调试程序http://blog.csdn.net/yasi_xi/article/details/12784507
【3】 GDB backtrace bt 查看程序crash堆栈信息 http://blog.csdn.net/jzp12/article/details/7860706
【4】 用GDB调试程序—调试器GDB常用功能 http://daimajishu.iteye.com/blog/1089741
【5】 GDB的基本用法 http://blog.csdn.net/bolike/article/details/8799156
【6】 gdb设置条件断点 http://blog.csdn.net/yasi_xi/article/details/8687452
GDB使用小记的更多相关文章
- 使用GDB 追踪依赖poco的so程序,core dump文件分析.
前言 在windows 下 系统核心态程序蓝屏,会产生dump文件. 用户级程序在设置后,程序崩溃也会产生dump文件.以方便开发者用windbg进行分析. so,linux 系统也有一套这样的东东- ...
- linux 下cmake 编译 ,调用,调试 poco 1.6.0 小记
上篇文章 小记了: 关于 Poco::TCPServer框架 (windows 下使用的是 select模型) 学习笔记. http://www.cnblogs.com/bleachli/p/4352 ...
- GDB使用记录
ref:http://sunyongfeng.com/201506/programmer/tools/gdb.html 简介 GDB,GNU Debugger,特性如下: GDB具备各种调试功效,可对 ...
- atop 分析小记
atop分析小记 atop这个工具相当NB 项目中需要用到它的磁盘使用率统计值,为了一探究竟,挖了下它的代码 atopsar atopsar实际就是atop的一个链接指向. 从atop.c的main源 ...
- linux应用调试技术之GDB和GDBServer
1.调试原理 GDB调试是应用程序在开发板上运行,然后在PC机上对开发板上得应用程序进行调试,PC机运行GDB,开发板上运行GDBServer.在应用程序调试的时候,pc机上的gdb向开发板上的GDB ...
- [原]Paste.deploy 与 WSGI, keystone 小记
Paste.deploy 与 WSGI, keystone 小记 名词解释: Paste.deploy 是一个WSGI工具包,用于更方便的管理WSGI应用, 可以通过配置文件,将WSGI应用加载起来. ...
- 新手如何在gdb中存活
网络上已经有很多gdb调试的文章了,为什么我还要写这篇文章呢,因为本文是写给gdb新手的,目的就是通过一个简单的例子来让新手很快上手.一旦上手入门了,其他的问题就可以自己去搜索搞定了.右边是gdb的L ...
- GDB 多线程调试:只停止断点的线程,其他线程任然执行; 或只运行某些线程 其他线程中断
多线程调试之痛 调试器(如VS2008和老版GDB)往往只支持all-stop模式,调试多线程程序时,如果某个线程断在一个断点上,你的调试器会让整个程序freeze,直到你continue这个线程,程 ...
- GDB调试命令
1.查看源码: list [函数名][行数] 2.暂停程序 (1)设置断点: a.break + [源代码行号][源代码函数名][内存地址] b.break ... if condition .. ...
随机推荐
- hive 学习系列四(用户自定义函数)
如果入参是简单的数据类型,直接继承UDF,实现一个或者多个evaluate 方法. 具体流程如下: 1,实现大写字符转换成小写字符的UDF package com.example.hive.udf; ...
- uva 253 - Cube painting(相同骰子)
习题4-4 骰子涂色(Cube painting, UVa 253) 输入两个骰子,判断二者是否等价.每个骰子用6个字母表示,如图4-7所示. 图4-7 骰子涂色 例如rbgggr和rggbgr分别表 ...
- Python3 使用基本循环实现多级目录(思路)
一.多级目录设计: 1. 通过循环的方式显示菜单和进入菜单 2. 设置标志位以提供回退上一层菜单 2. 设置标志位以提供退出程序 二.注意要点: 1. 菜单样式,层次关系不要弄混乱 2. 当输入错误时 ...
- 简单整理React的Context API
之前做项目时经常会遇到某个组件需要传递方法或者数据到其内部的某个子组件,中间跨越了甚至三四层组件,必须层层传递,一不小心哪层组件忘记传递下去了就不行.然而我们的项目其实并没有那么复杂,所以也没有使用r ...
- Markdown 基本用法
声明:引自 http://www.cnblogs.com/hnrainll/p/3514637.html ,感谢! 1. 标题设置(让字体变大,和word的标题意思一样)在Markdown当中设置 ...
- 9.Mongodb与python交互
1.与python交互 点击查看官方文档 安装python包 进入虚拟环境 sudo pip install pymongo 或源码安装 python setup.py 引入包pymongo impo ...
- P2347 砝码称重
P2347 砝码称重 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1 ...
- 软件测试面试题-适合零基础和工作多年的re
软件测试面试题整理,可以看看:适合零基础和多年工作经验跳槽的人 有些问题会深挖,就不在整理了 详看图片:
- python QQ邮箱自动发送邮件
于初学者来讲在写发送邮件代码时常见的错误有SMTPAuthenticationError535,有点懵逼,检查用户名,密码正确就是报错, 想当年笔者也是这么过来的,现在就给大家分享一下个人经验: 一, ...
- 在阿里云上遇见更好的Oracle(三)
鬼扯完“去IOE”,继续回来说说这个系列文章的主角Oracle. 在DB-Engine的数据库排行榜中,Oracle已经占据了多年的第一(最新排名可以点击“阅读原文”).当然因为互联网行业的兴起,My ...