GDB调试技巧:总结篇
注:原创不易,转载请务必注明原作者和出处,感谢支持!
一 写在开头
1.1 本文内容
总结GDB调试的一些常用命令和调试技巧。不定期更新。
二 学习资料
- The GNU Project Debugger
- 《软件调试的艺术》 (美)马特洛夫,(美)萨尔兹曼
三 常用命令
GDB的命令有很多,但只需要掌握下面常用的几个便可快速上手。
| 简写 | 全称 | 备注 |
|---|---|---|
| l | list | 显示指定行号或者指定函数附近的源代码 |
| b | break | 在指定行号或者指定函数开头处设置断点。如b main |
| r | run | 运行程序,直到程序结束或者遇到断点而停下 |
| c | continue | 在程序中断后继续执行程序,直到程序结束或者遇到断点而停下。注意在程序开始执行前只能用r,不能用c |
| n | next | 执行一条语句。如果有函数调用,则把它作为一个整体 |
| s | step | 执行一条语句。如果有函数调用,则进入函数内部 |
| u | until | 执行到指定行号或者指定函数的开头 |
| p | 显示变量或表达式的值 | |
| disp | display | 把一个表达式设置为display,当程序每次停下来时都会显示其值 |
| cl | clear | 取消断点,和b的格式相同。如果该位置有多个断点,将同时取消 |
| i | info | 显示各种信息。如i b显示所有断点,i disp显示display,而i lo显示所有局部变量 |
| h | help | 获取帮助信息 |
四 调试技巧汇总
4.1 打印数组中的值
打印数组a的前6个值:p *a@6
打印数组a的第6个元素开始的后4个值:p *(a+5)@4
(gdb) l
1 #include <iostream>
2 using namespace std;
3
4 int main(int argc, char ** argv)
5 {
6 int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
7
8 cout << endl;
9 return 0;
10 }
(gdb)
11
(gdb) b 7
Breakpoint 1 at 0x40089a: file test.cpp, line 7.
(gdb) r
Starting program: /home/wallace/a.out
Breakpoint 1, main (argc=1, argv=0x7fffffffe528) at test.cpp:8
8 cout << endl;
(gdb) p *a@6
$1 = {0, 1, 2, 3, 4, 5}
(gdb) p *(a+5)@4
$2 = {5, 6, 7, 8}
(gdb)
4.2 同时打印多个变量的值
比如程序中有条输入语句为cin >> n >> m >> r >> c,你想查看它们有没有正确被输入,你可以在这条语句之后同时打印它们的值。注意,同时打印的变量必须是同类型的。
(gdb) l 0
1 #include <iostream>
2 using namespace std;
3
4 int main(int argc, char ** argv)
5 {
6 int n, m, r, c;
7 n = m = r = c = 10;
8
9 return 0;
10 }
(gdb) b 8
Breakpoint 1 at 0x4006da: file test.cpp, line 8.
(gdb) r
Starting program: /home/wallace/a.out
Breakpoint 1, main (argc=1, argv=0x7fffffffe528) at test.cpp:9
9 return 0;
(gdb) p {n, m, r, c}
$1 = {10, 10, 10, 10}
(gdb)
4.3 查看断点并清除断点
使用info b来查看所有的断点信息,使用del 断点号命令来删除特定的一个断点,使用del 起始断点号-截止断点号来删除多个断点。
GDB调试技巧:总结篇的更多相关文章
- 《gdb调试之基础篇》
<gdb调试之基础篇> http://blog.csdn.net/miss_acha/article/details/42346543
- gdb调试coredump(使用篇)
gdb调试coredump(使用篇) 看到一个非常好的介绍coredump的文章,做个记录, 参考链接: https://blog.csdn.net/sunxiaopengsun/article/de ...
- pwn 题GDB调试技巧和exp模板
GDB分析ELF文件常用的调试技巧 gdb常用命令 首先是gbd+文件名 静态调试 ,gdb attach +文件名 动态调试 为了方便查看堆栈和寄存器 最好是安装peda插件 安装 可以通过pip直 ...
- ios逆向过程中lldb调试技巧-po篇
假如你准备在模拟器里面运行这个,你可以在"(lldb)"提示的后面输入下面的: (lldb) po $eax LLDB在xcode4.3或者之后的版本里面是默认的调试器.假如你正在 ...
- gdb调试技巧 找到php执行进程当前执行的代码
假设线上有一段php脚本,突然在某天出问题了,不处理但是进程没有退出.这种情况可能是异常休眠或者是有段死循环代码,但是我们怎么定位呢,我们这个时候最想知道的应该是这个脚本在此刻在做什么吧.这个是gdb ...
- 100个gdb调试技巧
找到的一个有参考价值的关于GDB调试的站点:https://gitlore.com/subject/15
- GDB调试技巧
1. 查看内存分布 (gdb) info proc mappings 2. 对于类的调试,先通过行号来设断点, 比如:(gdb) b TcpConnection.cc:63 3. 打印数组的内容 (g ...
- GDB 调试技巧(不断更新中......)
一.break到不同类的同名函数 方法: 在函数前面加类名以及作用域运算符 eg : break A::func //break 到类A的func函数 程序如下: //gdb_test.cpp #in ...
- Linux基础 30分钟GDB调试快速突破
引言 Linus心灵鸡汤 在*nix开发中有道卡叫gdb调试,不管你怎么搞. 它依然在那丝毫不会松动.今天致敬一个 活着的传奇 Linus Torvalds Unix 始于上个世纪60年代,在70年代 ...
随机推荐
- ASP.NET没有魔法——目录(完结)
ASP.NET没有魔法——开篇-用VS创建一个ASP.NET Web程序 ASP.NET没有魔法——为什么使用ASP.NET ASP.NET没有魔法——第一个ASP.NET应用<MyBlog&g ...
- ORA-04030: out of process memory when trying to allocate 152 bytes (Logminer LCR c,krvtadc)
今天使用LogMiner找回误更新的数据时,查询v$logmnr_contents时,遇到了"ORA-04030: out of process memory when trying to ...
- Python之python的一些理解
应用领域: 1. 网络爬虫 2. 大数据分析与挖掘 3. 机器学习 4. web应用 5. 游戏开发 6. 自动化运维 入门学习网站: imooc,廖雪峰,黑马 环境变量 --- 就是告诉电脑,你的程 ...
- Rabbitmq集群高可用
转载:https://www.cnblogs.com/flat_peach/archive/2013/04/07/3004008.html RabbitMQ是用erlang开发的,集群非常方便,因为e ...
- javaweb项目环境搭建,jdk,tomcat,myeclipse,sqlserver安装 配置
myeclipse是一个java的IDE,myeclipse中虽然内置了JDK和Tomacat服务器,但可以不使用,通过进行相应的配置,使用自行安装的JDK和Tomcat.安装Tomcat之前,一定要 ...
- 最新:百度春节抢百万游戏--汤圆向前冲--辅助工具v1.0.0.2
https://www.cnblogs.com/Charltsing/p/ADBJumpTY.html 联系QQ:564955427 本程序为Windows版,不要在手机里面打开. 汤圆向前冲辅助工具 ...
- 简单实现Python调用有道API接口(最新的)
# ''' # Created on 2018-5-26 # # @author: yaoshuangqi # ''' import urllib.request import urllib.pars ...
- C++ WMI获取系统硬件信息(CPU/DISK/NetWork etc)
官网找到一个例子,根据例子修改下可以获取很多信息 #define _WIN32_DCOM #include <iostream> using namespace std; #include ...
- UA大全
####PC端UA #Opera "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Ch ...
- vue省市区三级联动
仿照小米之家做的一个省市区三级联动,先上代码: HTML: <template> <section class="myAddress"> <secti ...