Linux之实用GDB技巧
一、引言
在Linux下开发,肯定少不了与gdb打交道,而gdb的命令又非常多,有些是不常用的但是特殊情况下却是必须的,因此记录在此,以便翻阅
二、基本命令
前面是命令全名,在不混淆的情况下,可以简写为后面的单个字符
list l : 列出源代码
run r : 运行程序
step s : 单步运行(进入函数内部)
next n : 单步运行(跳过函数执行)
continue c : 继续执行
print p : 打印变量值
p/x y:以16进制显示y的值,c表示字符,s表示字符创,f表示浮点数
ptype student:打印student的结构
finish fin:用于跳过s进入的函数的剩余部分。
until u:用于在不进一步的循环中退出,即不执行剩余的循环。until也可以和break一样后面跟参数,指定位置。
set x=12:把x的值设为12。
set args 参数列表 : 设置程序启动参数
info args:查看当前函数的参数
set print elements 0:设置print打印的字符数
s和n后面可以跟数字表示执行该命令的次数,例如s 3,表示连续执行step三次。
三、断点
b line : 加断点
tbreak line : 临时断点,只有第一次遇到该断点时才有效
info breakpoints :查看所有的断点
disable breaknum:禁用断点
enable breaknum:启用断点
delete breaknum:此处的breaknum是断点的序号,即用info breakpoints命令显示的断点最前面的那个数字
clear linenum:clear后的参数跟添加断点时是一样的,行号、函数名等。
condition n z==1 : 为断点添加条件,该命令的作用是使用断点n当z=1时才生效。n是断点编号,z是变量
watch z : 添加对变量z的监视器,当z的值变化时,程序即暂停
watch (z > 10) : 表示当z>10是程序暂停,这样方便调试循环
break break_arg if(condition):添加条件断点,break_arg是任何可以添加短点的位置,例如:break main if(argc>1)
四、多线程调试
info threads : 查看所有线程
thread n : 跳到另外一个线程
五、查看函数调用堆栈
backstrace bt : 查看函数调用堆栈
frame n : 查看函数调用堆栈中的某一层
默认当前栈帧序号为0,父栈帧为1,以此类推。
up/down命令分别可以调到父子栈帧
六、查看代码对应的汇编代码
disassemble /m main:查看main函数对应的汇编代码
set disassemble-flavor intel:设置汇编会Intel的x86汇编格式
info register:查看寄存器信息
Linux之实用GDB技巧的更多相关文章
- 实用小技巧:Notepad++直接连接Linux
实用小技巧:Notepad++直接连接Linux 前言 号称编辑器之神的Vim对于只会用几个基础操作的本人而言,在编辑一些大型文本有那么些力不从心: 平时都是通过Xftp拖到本地,修改完后再覆盖回去: ...
- EF – 2.EF数据查询基础(上)查询数据的实用编程技巧
目录 5.4.1 查询符合条件的单条记录 EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录. 5.4.2 Entity Framework中的内部数据缓存 DbS ...
- PHP 常用函数库和一些实用小技巧
PHP 常用函数库和一些实用小技巧 作者: 字体:[增加 减小] 类型:转载 包括文件读取函式,文件写入函式,静态页面生成函式,目录删除函式等 文件读取函式 //文件读取函式 function ...
- 最有用的Linux命令行使用技巧集锦
最近在Quora上看到一个问答题目,关于在高效率Linux用户节省时间Tips.将该题目的回答进行学习总结,加上自己的一些经验,记录如下,方便自己和大家参考. 下面介绍的都是一些命令行工具,这些工具在 ...
- linux 常用命令及技巧
linux 常用命令及技巧 linux 常用命令及技巧:linux 常用命令总结: 一. 通用命令: 1. date :print or set the system date and time 2. ...
- Chrome 实用调试技巧
Chrome 实用调试技巧 2016-07-23 如今Chrome浏览器无疑是最受前端青睐的工具,原因除了界面简洁.大量的应用插件,良好的代码规范支持.强大的V8解释器之外,还因为Chrome开发者工 ...
- Linux下使用GDB调试程序
问题描述: Linux下使用GDB调试程序 问题解决: (1)生成调试文件 注: 使用命令 gdb IOStream.c -o IOStre ...
- GDB技巧整理
https://blog.atime.me/note/gdb-tricks.html 整理常用的gdb技巧. 常用命令 常用的gdb命令... 启动gdb 直接运行 gdb --args prog a ...
- Vim实用小技巧
Vim实用小技巧 一些网络上质量较高的Vim资料 从我07年接触Vim以来,已经过去了8个年头,期间看过很多的Vim文章,我自己觉得非常不错,而且创作时间也比较近的文章有如下这些. Vim入门 目前为 ...
随机推荐
- java >>> 和 >>>=的区别
java >> 和 >>> 以及 >>>= 的区别 可能大家都知道java中>> 和 >>> 的区别,那这里我也啰嗦一下, ...
- SQL盲注攻击的简单介绍
1 简介 1.1 普通SQL注入技术概述 目前没有对SQL注入技术的标准定义,微软中国技术中心从2个方面进行了描述[1]: (1) 脚本注入式的攻击 (2) 恶意用户输 ...
- jquery中获取相邻元素相关的命令:next()、prev()和siblings()
jquery里我们要获取某个元素的相邻元素时,可以用到的命令有三个: next():用来获取下一个同辈元素. prev():用来获取上一个同辈元素. siblings():用来获取所有的同辈元素. 下 ...
- LInux 分割合并文件
有两种方式, 第一种使用dd命令 第二种使用split dd命令是linux下一个非常有用的磁盘命令.它可以将指定大小的块拷贝成一个文件,并在拷贝的同时执行指定的转换.UNIX已经提供了文件切割功能, ...
- 猫猫学iOS之UITextField右边设置图片,以及UITextField全解
猫猫分享,必须精品 原创文章.欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 效果: 封装好的方法: 猫猫封装的一个小方法,简单共享出来,方便 ...
- RTP 时间戳的处理
RTP 时间戳的处理 在RTP传输音频数据时,一般选定逻辑时间戳速率与采样速率相同, 但是在传输视频数据时,必须使时间戳速率大于每帧的一个滴答(这样才能使图像回放更为平滑--<用TCP/IP ...
- Gstreamer学习
Gstreamer学习笔记----Gstreamer架构设计思想 http://blog.csdn.net/tx3344/article/details/7497434 Gstreamer到底是个啥? ...
- html 里面的 role 属性是什么意思
role="button" role是什么意思? html 里面的 role 属性是什么意义和用途 使用role属性告诉辅助设备(如屏幕阅读器)这个元素所扮演的角色,属于WAI-A ...
- iNode协议再次分析
iNode协议再次分析 声明: 1)本报告由博客园bitpeach撰写,版权所有,免费转载,请注明出处,并请勿作商业用途. 2)若本文档内有侵权文字或图片等内容,请联系作者bitpeach删除相应部分 ...
- (转)ASP.NET MVC:Razor 引入命名空间
页面中引用 c# @using MvcApplication83.Models @using MvcApplication83.Common 行尾不需要加分号,加上也无妨(不过得全加上). VB.Ne ...