gdb调试常用方法介绍
- 启动程序
启动程序有以下场景:
- 使用gdb命令进行启动,如: gdb <procname>
- 使用gdb进行启动程序,如: gdb <procname> procid .知道要调试的进程的进程ID,使用进程号进行附加.还可以直接使用下面的方法进行附加: gdb进入界面,在命令行中使用 attach procid 附加要要调试的进程,退出时使用detach取消挂接的进程.
- 使用gdb <procname> corename打开进程core信息.
2、设置源代码搜索路径
- 在某一行中设置断点:break / b <filename:linenumber>
- 在函数上设置断点:break / b <filename:functionname>
- 满足某一条件设置断点: break / b if <condition>. 如:break / b if i=100
- 在程序的运行内存地址处设置断点 break / b *address
查看断点的信息: info break. 或者 info breakpoints
- 没有参数的: r or run
- 有参数的程序:run / r <启动参数> ;还可以使用set args命令设置进程参数,例如:set args 10 20 30 .设置完成后可以使用show args查看程序启动命令
程序启动执行后,可以使用n进行单步调试,也可以使用list命令打印程序代码源文件内容.list命令方法:
- list <number>. 显示当前运行文件number行前后代码行数
- list <beginnumber,endnumber> 显示当前运行文件从beginnumber到endnumber的源代码行数
- list <function>显示函数包含代码语句
- list - 显示当前代码行前面的代码
- list + 显示当前代码行后面的代码
打印程序变量信息可以使用p命令,如打印变量i的信息,直接使用 p i即可.也可以使用p <容器名称(数组)>显示数组里面的内存信息
- set print pretty on 可以对输出的显示信息进行优雅的显示,可读性更强.set print pretty off关闭功能
- 打印地址信息:set addr on。使用set addr off关闭打印地址信息
- set array on,打开开关后会一行显示一个元素,关闭则每个元素以逗号分开.gdb中默认时关闭的.
- set print elements <number of elements> 这个选项设置显示数组大小,如果指定了长度,达到长度后gdb就不会在显示.使用show print element可以显示选项信息.
- set print null-stop <on/off> 打开后,遇到字符串结束后则终止打印.默认是关闭状态
- set print union <on /off> 打开后显示联合体内数据
- set print object <on / off> 如果一个对象指针指向派生类,打开后GDB按照虚方法调用规则进行打印,关闭的话GDB会忽略虚函数表.
- set print vtbl <on / off>. 打开后gdb使用优雅的格式显示虚函数表.
2、执行shell命令
- info registers 查看寄存器情况
- info all-registers 查看所有寄存器情况
- info registers <name> 查看指定寄存器的情况
- info frame 查看当前函数程序语言
- info source 查看当前文件的程序语言
4、其它
- call <function> 强制调用函数
- return <exp> 在函数没有执行完成之前结束函数执行
- jump <linenumber /. addr >跳转到指定行数或者地址进行执行
- set var $PI=3.14 在调试中设置代码变量值.

gdb调试常用方法介绍的更多相关文章
- linux程序调试命令addr2line之入门简单介绍(本文先不聊gdb调试)
addr2line有什么作用呢? 可别小瞧它, 它能够定位到代码出错的位置. 以下, 我们来看看这个简单的代码: #include <stdio.h> int main() { int * ...
- Linux之GDB调试介绍与应用20170601
一.GDB调试命令 描述 backtrace(或bt) 查看各级函数调用及参数 finish 连续运行到当前函数返回为止,然后停下来等待命令 frame(或f) 帧编号 选择栈帧 info(或i) ...
- 使用GDB调试Go语言
用Go语言已经有一段时间了,总结一下如何用GDB来调试它! ps:网上有很多文章都有描述,但是都不是很全面,这里将那些方法汇总一下 GDB简介 GDB是GNU开源组织发布的⼀一个强⼤大的UNIX下的 ...
- Eclipse+CDT+GDB调试android NDK程序(转)
Eclipse+CDT+gdb调试android ndk程序 先介绍一下开发环境,在这个环境下,up主保证是没有问题的. ubuntu 11.10 eclipse 3.7(indego) for ja ...
- 使用 GDB 调试多进程程序
使用 GDB 调试多进程程序 GDB 是 linux 系统上常用的调试工具,本文介绍了使用 GDB 调试多进程程序的几种方法,并对各种方法进行比较. 3 评论 田 强 (tianq@cn.ibm.co ...
- Linux GDB调试全面解析
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序. 让被调试的程序在工程师指定的断 ...
- 转 C编译: 使用gdb调试
C编译: 使用gdb调试 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! gdb是the GNU Debugger的简称.它是 ...
- Linux基础 30分钟GDB调试快速突破
引言 Linus心灵鸡汤 在*nix开发中有道卡叫gdb调试,不管你怎么搞. 它依然在那丝毫不会松动.今天致敬一个 活着的传奇 Linus Torvalds Unix 始于上个世纪60年代,在70年代 ...
- 使用gdb调试多线程程序总结
转:使用gdb调试多线程程序总结 一直对GDB多线程调试接触不多,最近因为工作有了一些接触,简单作点记录吧. 先介绍一下GDB多线程调试的基本命令. info threads 显示当前可调试的所有线程 ...
随机推荐
- NOIP模拟14-16
最近事情有些多,先咕了! 鸽了,时间太久远了,写了话坑太大,太费时间了!
- Vue 项目添加单元测试发现的问题及解决
用 Jest 测试单文件组件 1.安装 Jest 和 Vue Test Utils npm install --save-dev jest @vue/test-utils 2.配置 package.j ...
- [LC]237题 Delete Node in a Linked List (删除链表中的节点)(链表)
①中文题目 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 -- head = [4,5,1,9],它可以表示为: 示例 1: 输入: hea ...
- [剑指offer]第1题,二维数组中的查找
①题目 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...
- iOS核心动画高级技巧-1
1. 图层树 图层的树状结构 巨妖有图层,洋葱也有图层,你有吗?我们都有图层 -- 史莱克 Core Animation其实是一个令人误解的命名.你可能认为它只是用来做动画的,但实际上它是从一个叫做L ...
- iOS界面流畅技巧之微博 Demo 性能优化技巧
微博 Demo 性能优化技巧 我为了演示 YYKit 的功能,实现了微博和 Twitter 的 Demo,并为它们做了不少性能优化,下面就是优化时用到的一些技巧. 预排版 当获取到 API JSON ...
- Spring Cloud Alibaba(四)实现Dubbo服务消费
本项目演示如何使用 Spring Cloud Alibaba 完成 Dubbo 的RPC调用. Spring Cloud与Dubbo Spring Cloud是一套完整的微服务架构方案 Dubbo是国 ...
- ASP.NET Core gRPC 使用 Consul 服务注册发现
一. 前言 gRPC 在当前最常见的应用就是在微服务场景中,所以不可避免的会有服务注册与发现问题,我们使用gRPC实现的服务可以使用 Consul 或者 etcd 作为服务注册与发现中心,本文主要介绍 ...
- Android的系统框架
Android的系统架构采用了分层架构的思想,如图1所示.从上层到底层共包括四层,分别是应用程序程序层.应用框架层.系统库和Android运行时和Linux内核. 图1:Android系统架构图 每 ...
- JavaScript笔记七
1.函数 - 返回值,就是函数执行的结果. - 使用return 来设置函数的返回值. - 语法:return 值; - 该值就会成为函数的返回值,可以通过一个变量来接收返回值 - return后边的 ...