gdb常用功能
1,调试core dump 文件
ulimit -c 1024:设置coredump文件大小为1024,否则默认不会生成coredump文件
gdb -c core:gdb调试该coredump文件
file a.out:指定符号表文件
bt:打印堆栈信息
2,插入断点:
b/break 15
b funcname
b filename::linenum
b 默认在下一条指令停止
b if a=100
3,退出gdb
q
quit
4,执行shell命令
shell clear
5,停止运行程序/恢复运行
断点(breakpoint),观察点(watchpoint),捕捉点(catchpoint),信号(signal),线程停止(thread stops)
c/continue恢复运行
6,设置观察点
watch <expr>
rwatch <expr> 当expr被读时停止程序
awatch <expr> 当expr被读或写时停止程序
7,维护停止点
clear 清除所有停止点,只有在程序运行时才起作用
clear <function>
clear <linenum>
d/delete [breakpoints][range...] 删除指定的断点,breakpoints表示断点号,range表示断点号的范围,如3-7
dis/disable [breakpoints][range...] 禁用指定的断点
8,单步运行
c/fg/continue 恢复程序运行直到下一个断点
step <count> 单步count次,如果有函数调用,进入该函数内部执行
next <count> 单步count次,如果有函数调用,不会进入该函数
finish 运行程序直到当前函数完成返回
u/until 运行程序直到完成当前循环体并返回
9,查看栈信息
bt/backtrace 打印当前函数调用栈的所有信息
bt <n> 打印栈顶上n层信息
bt <-n> 打印栈低下n层信息
f/frame <n> 一般来说,程序停止时,当前栈就是最顶层栈,f/frame 0表示打印0层,即栈顶信息,n表示打印第n层栈信息,打印信息比bt丰富
up <n> 向栈的上面移动n层,如果没有n,则表示移动一层
down <n> 向栈的下面移动n层,如果没有n,则表示移动一层
info f/frame,打印更为详细的信息
info args 打印当前函数的参数名及值
info locals 打印当前函数中所有局部变量的值
info catch 打印当前函数中异常处理信息
10,查看源代码
list <linenum> 显示程序第linenum行的周围的源程序
list <function> 显示函数名为function的函数的源程序
list 显示当前行后面的源程序
list - 显示当前行前面的源程序
一般是打印当前行的上5行和下5行,如果显示函数是是上2行下8行,默认是10行,当然,你也可以定制显示的范围,使用下面命令可以设置一次显示源程序的行数
set listsize <count> 设置一次显示源代码的行数
show listsize 查看当前listsize的设置
list命令还有下面的用法:
list <first>, <last> 显示从first行到last行之间的源代码
list , <last> 显示从当前行到last行之间的源代码
list + 往后显示源代码
一般来说在list后面可以跟以下这们的参数:
<linenum> 行号
<+offset> 当前行号的正偏移量
<-offset> 当前行号的负偏移量
<filename:linenum> 哪个文件的哪一行
<function> 函数名
<filename:function> 哪个文件中的哪个函数
<*address> 程序运行时的语句在内存中的地址
11,搜索源代码
forward-search <regexp>
search <regexp> 向前面搜索
reverse-search <regexp> 全部搜索
12,源代码在内存中的位置
info line <test.c:function>
info line <linenum>
13,查看源代码的机器码
disassemble function
14,查看运行时数据
p/print <expr>
p /<f> <expr> <f>是输出的格式,如果设置十六进制输出的话,就是/x
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
15,打印数组
int *array = (int *) malloc (len * sizeof (int));
p *array@len @左边是数组地址,右边是数组长度
16,自动显示,即程序停止或单步跟踪时,变量自动显示
display <expr>
display /<fmt> <expr>
display /<fmt> <addr>
info display 打印设置的自动显示的变量信息
17,查看寄存器的值
info registers
info all-registers
info registers <regname...>
需要注意的是,如果你的程序编译时开启了优化选项,那么在用GDB调试被优化过的程序时,可能会发生某些变量不能访问,或是取值错误码的情况。这个是很正常的,因为优化程序会删改你的程序,整理你程序的语句顺序,剔除一些无意义的变量等,所以在GDB调试这种程序时,运行时的指令和你所编写指令就有不一样,也就会出现你所想象不到的结果。对付这种情况时,需要在编译程序时关闭编译优化。一般来说,几乎所有的编译器都支持编译优化的开关,例如,GNU的C/C++编译器GCC,你可以使用“-gstabs”选项来解决这个问题。
gdb常用功能的更多相关文章
- GDB常用命令使用说明(一)
本文由霸气的菠萝原创,转载请注明出处:http://www.cnblogs.com/xsln/p/gdb_instructions1.html 全部关于gdb的文章索引请点这里 GDB(GNU Deb ...
- C 调试 gdb常用命令
gdb常用命令: [root@redhat home]#gdb 调试文件:启动gdb (gdb) l :(字母l)从第一行开始列出源码 (gdb) break n :在第n行处设置断点 (gdb) b ...
- WebStorm 常用功能的使用技巧分享
WebStorm 是 JetBrain 公司开发的一款 JavaScript IDE,使用非常方便,可以使编写代码过程更加流畅. 本文在这里分享一些常用功能的使用技巧,希望能帮助大家更好的使用这款强大 ...
- AVA正则表达式4种常用功能
正则表达式在字符串处理上有着强大的功能,sun在jdk1.4加入了对它的支持 下面简单的说下它的4种常用功能: 查询: String str="abc efg ABC"; Str ...
- [转]WebPack 常用功能介绍
概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.templa ...
- FastReport.Net 常用功能总汇
一.常用控件 文本框:输入文字或表达式 表格:设置表格的行列数,输入数字或表达式 子报表:放置子报表后,系统会自动增加一个页面,你可以在此页面上设计需要的报表.系统在打印处理时,先按主报表打印,当碰到 ...
- python3 字符串与列表常用功能
一.字符串常用功能 1. capitalize(),将字符串的首字母变成大写,其余全部置为小写:如果字符串中有多个单词,也只是将第一个单词的首字母置为大写:例: >>> name = ...
- matlab进阶:常用功能的实现,常用函数的说明
常用功能的实现 获取当前脚本所在目录 current_script_dir = fileparts(mfilename('fullpath')); % 结尾不带'/' 常用函数的说明 bsxfun m ...
- WebPack常用功能介绍
概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.templa ...
随机推荐
- ES数据导入导出
ES数据导入导出 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ...
- 1251 client does not support
1.mysql -uroot -p 123456 (用户root,密码123465) 2.use mysql: 3.ALTER USER 'root'@'localhost' IDENT ...
- 在jeecg中如何配置多对一和多对多的关系
多对多: mappedBy指的是当前的类对应的表, cascade属性的可能值有 all: 所有情况下均进行关联操作,即save-update和delete. none: 所有情况下均不进行关联操作. ...
- 拾遗:Docker 基本应用
https://wiki.gentoo.org/wiki/Docker 检查内核内核选项 exec /usr/share/docker/contrib/check-config.sh 使用 btrfs ...
- JavaFX开发环境安装配置
JavaFX开发环境安装配置 从Java8开始,JDK(Java开发工具包)包括了JavaFX库. 因此,要运行JavaFX应用程序,您只需要在系统中安装Java8或更高版本. 除此之外,IDE(如E ...
- Spark中的多线程并发处理
Spark中的多任务处理 Spark的一个非常常见的用例是并行运行许多作业. 构建作业DAG后,Spark将这些任务分配到多个Executor上并行处理.但这并不能帮助我们在同一个Spark应用程序中 ...
- 高效IO之File文件操作类的基础用法(二)
更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 前言 众所周知Java提供File类,让我们对文件进行操作,下面就来简单整理了一 ...
- 1-vim-简介
vi(visual interface)是Linux最经典的文本编辑器 vi的核心设计思想-让程序员的手指始终保持在键盘的核心区域,就能完成所有的编辑操作. vi的特点 没有图形界面 只能编辑文本内容 ...
- hdu6315 /// 线段树区间更新
题目大意: 给定n q 为序列的个数和操作的个数 给定n个数的序列b[]作为分母 初始全为0的序列a[]作为分子 两种操作 add l r 为a[]的l到r区间全部+1 query l r 为查询l到 ...
- 【转】移动前端开发之viewport的深入理解
原文链接:https://blog.csdn.net/u012402190/article/details/70172371 笔记 (20180919,目前暂且只看一部分)