GDB 学习
通常使用gdb在Linux下调试C/C++程序,编译的时候加上-g选项(gcc -g ......)。下面总结的是我自己经常使用(当然也有一些用的比较少)的gdb命令。
(1)开始及退出
- 开始:gdb program
- 退出:quit (简写q)或者Ctrl+d
(2)自动补全:Tab
(3)启动程序:
- run(简写r):运行程序直到遇到断点
- 与srart的区别:start会在程序的入口函数(通常是main)设置一个临时断点,然后调用run。
(4)断点(breakpoint):简写b
设置断点:
- break 函数名:在指定函数入口处设置断点
- break 函数名[or 行号 or 地址] if 条件(就是一个布尔表达式,但是不需要加括号)
- break 行号:在指定行设置断点
- break 地址
- break filename 行号[or 函数名]
- break,无参的话会在下一条指令处设置断点。
删除断点:(断点号可由info break获得)
- delete 断点号。(也可以删除断点的集合:delete 2-5)
- disable 断点号:暂停使用该断点
- enable 断点号:重新启用该断点
- clear 行号 or 函数名 :删除指定地点的所有断点(比如clear fun,则删除fun函数中所有的断点)
- delete breakpoints:删除所有的断点
(5)打印信息
- print(简写p):后接表达式。常用的比如:变量,函数
- display 表达式。与print的区别,使用display设置一个表达式后,在以后的每次单步执行后,都会输出所设置表达式的值。
info可以用来查看寄存器、断点等信息。
info registers:查看除了浮点寄存器以外的寄存器info all-registers:查看所有寄存器,包括浮点寄存器info registers <regname ...> :查看所指定的寄存器- info break:查看所有断点。
- info threads:查看正在运行程序中的(默认显示所有线程)线程信息
(6)查看源码
- list(简写l):查看程序源码,默认显示10行
- list 行号:显示指定以行号为中心的前后共10行代码
- list 函数名:显示指定函数的源码,也是10行
- list:接着上一次list命令,继续输出后面的源码
- list -:同上,但是是往前走。即接着上一次list命令显示的代码,输出前面的源码
(7)跟踪执行
- step(简写s):单步执行。遇到函数,进入该函数内部。
- next(简写n):单步执行。遇到函数不会进入该函数内部。
- until(简写u):运行程序直到退出循环体。
- until 行号:运行至指定行。
- finish(简写fin):运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址、返回值、参数值等信息。
- continue(简写c):继续运行程序直到遇到下一个断点或者程序运行结束。
(8)程序回滚
- checkpoint
- restart checkpoint-id:将程序回滚到设置该checkpoint的时刻
- info checkpoint:查看所有checkpoint,可以获取checkpoint-id
(9)观察点(watchpoint),特殊的断点。
观察点使用watch命令,命令格式与break相同,但它并不是指明断点的位置,而是指明一个表达式,每当该表达式的值改变时,程序便会被暂停。表达式可以是某个变量、由若干变量组成的表达式或者内存地址。
info wachpoints:查看所有观察点。
{捕捉点(catchpoint),也是特殊的断点。使用某种事件的发生作为触发条件。}
GDB 学习的更多相关文章
- gdb学习
gdb学习 [参考资料] http://www.cnblogs.com/jiu0821/p/4483804.html 程序的运行状态有"运行"."暂停".&qu ...
- Linux之GDB学习
Linux之GDB学习 GDB是一款优秀的调试工具,懂的人自然懂,一直以来用它都没有好好整理过使用方法,我用的也是皮毛,目前先整理一下皮毛,日后再更新 使用方法 编译C++ 从编译的角度上来说,需要在 ...
- GCC/GDB学习
GCC学习 1.gcc是根据后缀名来区分文件的 .c : c语言源文件 .a : 目标文件构成的库文件 .C/.cc/.cxx : c++源文件 .h : 头文件 .i : 预处理过的C源文件 .ii ...
- GDB学习之道:GDB调试精粹及使用实例
一:列文件清单 1. List (gdb) list line1,line2 二:执行程序 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出 ...
- gdb学习(一个)[再版]
概要 gdb是GNU debugger的缩写,是编程调试工具. 功能 1.启动程序,能够依照用户自己定义的要求随心所欲的执行程序. 2.可让被调试的程序在用户所指定的断点处停住 (断点能够是条件表达式 ...
- gdb学习(二)[第二版]
查看运行时数据 print - 查看变量值 ptype – 查看变量类型 #ptype i #ptype "aaa" 打印字符串"aaa"的类型 #ptype ...
- gdb学习(一)[第二版]
概述 gdb是GNU debugger的缩写,是编程调试工具. 功能 1.启动程序,可以按照用户自定义的要求随心所欲的运行程序. 2.可让被调试的程序在用户所指定的断点处停住 (断点可以是条件表达式) ...
- Gdb学习笔记1
其实,从很早就开始接触gdb程序,gdb调试程序伴我成长,现在对其用法记录以下: 当程序的运行结果和预期结果不一致,或者程序出现运行错误时,gdb就可以派上大用处了.调试的基本过程是: -> ...
- gdb学习-checkpoint,watch
checkpoint的内容参考: http://blog.chinaunix.net/uid-23629988-id-2943273.html 这一篇主要是checkpoint,在next之前加che ...
随机推荐
- 基于Office 365 无代码工作流分析-数据源的建立!
标准操作步骤 下面整个步骤我们是以嘉昊信息的招聘过程的整个流程为一个场景,整个的流程场景的步骤例如以下: 整个的过程,我们通过Infopath 进行对应的表单流转,然后利用Sharepoint ...
- cocos2d-x+lua开发模式下编辑器的选择
原本打算直接用CocosIDE的,毕竟是官方出品,并且支持Android远程调试,windows下的调试也非常方便,调试的信息也非常全,智能提示也不错.好了,一切看上去非常完美,可是它有一个致命缺陷, ...
- 利用vue-cli配合vue-router搭建一个完整的spa流程
好文章备忘录: 转自:https://segmentfault.com/a/1190000009160934?_ea=1849098 demo源码:https://github.com/1590123 ...
- 使用Charles进行网络抓包
一.安装Charles 二.使用 1.http抓包 1.1 现在我们默认是在进行iOS开发,首先确保iPhone和Mac是在同一个局域网下(连同一个WiFi).然后查看Mac的IP地址(打开网络偏好设 ...
- C Language Study - gets , getchar & scanf
慢慢的发现C语言功底是如此的薄弱,被这几个字符输入函数搞糊涂了又~~ 来,再来忧伤一次吧~ 那么.我们从scanf開始: 假如说你要将一串字符输入到一字符数组里,例如以下面程序, char a[2]; ...
- 【bzoj4412】[Usaco2016 Feb]Circular Barn
先看成一条链 for一遍找位置 在for一遍算答案 #include<algorithm> #include<iostream> #include<cstring> ...
- 容器HashMap原理(学习)
一.概述 基于哈希表的 Map 接口的非同步实现,允许使用 null 值和 null 键,不保证映射的顺序 二.数据结构 HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体:Has ...
- 9 Range 实用操作
9.1 剪切.复制和粘贴来移动数据 sourceRange.Cut [Destination] 如果指定Destination,相当于Ctrl^X(sourceRange) & Ctrl^V( ...
- bzoj1854 [Scoi2010]游戏——匈牙利算法
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1854 这题...据说可以用并查集做,但没有去看... 用二分图匹配的话,就把装备和它的两个属 ...
- Android下载资源
下面提供了源码下载地址,供有兴趣的朋友下载, android音乐播放器源码 由于本人才疏学浅,有很多地方不够完善,希望大家指证. 免费下载地址在 http://linux.linuxidc.com ...