Linux 里面的gdb到底是个什么东西?分类:电脑/网络操作系统/系统故障
问题描述:
第一次在Linux上工作,要用到一个什么gdb的东东 。gdb到底是什么呢 , 各位老大?
解析:
Linux 包含了一个叫 gdb 的 GNU 调试程序. gdb 是一个用来调试 C 和 C程序的强力调试器. 它使你能在程序运行时观察程序的内部结构和内存的使用情况. 以下是 gdb 所提供的一些功能:
它使你能监视你程序中变量的值.
它使你能设置断点以使程序在指定的代码行上停止执行.
它使你能一行行的执行你的代码.
在命令行上键入 gdb 并按回车键就可以运行 gdb 了, 如果一切正常的话, gdb 将被启动并且你将在屏幕上看到类似的内容:
GDB is free sofare and you are wele to distribute copies of it
under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.14 (i486-slakware-linux), Copyright 1995 Free Sofare Foundation, Inc.
(gdb)
当你启动 gdb 后, 你能在命令行上指定很多的选项. 你也可以以下面的方式来运行 gdb :
gdb fname
当你用这种方式运行 gdb , 你能直接指定想要调试的程序. 这将告诉gdb 装入名为 fname 的可执行文件. 你也可以用 gdb 去检查一个因程序异常终止而产生的 core 文件, 或者与一个正在运行的程序相连. 你可以参考 gdb 指南页或在命令行上键入 gdb -h 得到一个有关这些选项的说明的简单列表.
linux gdb基础命令你linuxgdb命令n的gdb压根就没有解析出来断点linuxgdb命令n,你的库有问题 。你run后bt一下就可以进入断点的
你把代码发我吧linuxgdb命令n,给你调试
linux入门基?。ㄋ模〨db调试程序Gdb调试
注意:在Gcc编译选项中一定要加入
–g
退出GDB:quit
或
Ctrl d
调试过程:
1.
查看文件
命令:
(gdb)
l
命令:(gdb)
b
行号
注:到第17行停止,并没有执行17行
3.
查看断点情况
info
b
4.
运行代码
r
命令:
(gdb)
r
(也可以指定行开始运行,在r后面加上行号)
5.
查看变量值
p
命令:(gdb)
p
变量名
6.
设置监视点:
watch
z
(变量名)
也可以是复杂的表达式
7.
单步运行
命令:(gdb)
n
(逐过程)
8.逐步 , 会进入函数
命令:(gdb)
s
9.条件断点
将正常断点转变为条件断点:condition
如:condition
1
i
==
10
只有当满足条件i
==
1时,才会在断点1处暂停
10.
恢复程序运行
c
命令:
(gdb)
c
(程序就会运行,如果没有断点 , 就运行剩下部分 , 如果有断点,就会运行到下一个断点)
11.
去除断点
clear
line_number
clear
filename:line_number
12.
help
12.1
help找出类别
12.2help从列表中
gdb中的箭头指向的含义gdb是Linux下非常实用的程序调试插件,因为Linux默认在gcc生成a.out时生成的是Release版本,在ELF段中不存在Debug相关段,需要在编译时在命令最后加上-g 标识,标识生成Debug版本,也因为Debug是在ELF段中插入Debug段落,所以我们可以确定Debug版本是在编译阶段就将相关调试插件放入程序中,而不是在链接的时候放入的 。
GDB的相关命令
GDB使用的指令分为以下几个部分,在此一一罗列出:
断点管理命令
l 显示源代码(默认显示main函数所在的文件的源代码)
list filename:num 显示指定文件指定行附近的源代码
b linenum 给指定行添加断点
b funactionname 给指定函数添加断点
b filename:linenum 给指定文件指定行添加断点
b linenum if 条件 添加一个条件断点(if i == 5)在多次循环中使用更加精确和普遍
info b 显示当前所有断点信息
d bpnum 删除断点
disable bpnum 将断点设置为无效
enable bpnum 将断点设置为有效
执行过程控制
r 启动调试
n 执行下一步
s 进入函数执行 类比Visual Studio中的逐语句运行
finish 退出当前函数执行的过程(无论是否真正执行完函数内容)
c 继续运行 运行到下一个断点,中间过程不在停止,如果再没有断点则会运行到程序结束
q 退出调试
p valname 查看变量的值
p valname 查看变量的地址
p *ptr 查看指针指向的地址存储的值(相当于解引用一次,获取指针所指的值)
//
int arr[10] = {0};
int *parr = arr
//
p arr 显示数据所有的元素,arr是数组首地址,输出数组所有元素数据
p ptrr 这是一个指针变量,会输出数组首元素的地址
p *parr@num 这里的num是元素个数 , 通过指向数组的指针显示数组所有元素
struct_val 显示结构体变量中所有的成员值
p struct_val.group 显示结构体变量中某个成员值
p ptr_struct-a 通过指针显示结构体变量某个成员的值
p funactionname(a,b) 将函数测试运行(适合于测试函数崩溃的原因是否由传入参数造成)
bt 显示函数调用栈 函数调用流程
之后会写一篇博文来实战gdb调试 。
gdb命令
linux
为什么这款显卡吧这么受欢迎?性价比高 , 性能稳定!
精选推荐
广告
gdb调试详解
1.2W阅读·0评论·21点赞
2019年5月4日
Linux下gdb调试-函数调试操作说明
446阅读·0评论·0点赞
2022年10月18日
gdb参数详解(整理过)
2.2W阅读·5评论·1点赞
2007年9月27日
GDB常用命令大全 GDB 命令详细解释
308阅读·0评论·0点赞
2020年6月4日
GDB入门教程之如何使用GDB启动调试
1483阅读·0评论·0点赞
2019年9月26日
GDB调试命令详解
1701阅读·0评论·0点赞
2022年2月18日
全新方舟生存进化!真实制作!快来试试你的方舟怎么下
精选推荐
广告
【Linux】Linux调试器--gdb详解
1833阅读·7评论·11点赞
2021年11月16日
linux下gdb调试方法与技巧整理
875阅读·0评论·3点赞
2020年10月6日
Linux之gdb调试详解
1121阅读·3评论·4点赞
2021年12月10日
GDB调试详解
264阅读·0评论·0点赞
2019年12月23日
gdb调试
101阅读·0评论·0点赞
2022年4月18日
GDB调试
117阅读·1评论·0点赞
2020年10月30日
gdb调试工具
47阅读·0评论·0点赞
2021年9月16日
gdb调试常用命令,attach , br,n,bt
2.3W阅读·1评论·3点赞
2018年9月13日
gdb调试(四)函数调用栈—stack
191阅读·0评论·0点赞
2011年10月26日
GDB 基本知识
4731阅读·0评论·0点赞
2013年2月1日
gdb积累学习
3614阅读·0评论·1点赞
2013年11月1日
gdb 问题
1194阅读·1评论·0点赞
2020年10月23日
去首页
看看更多热门内容
[Linux]gdb查看内存区命令GNU调试器(GNU Debugger, GDB)是一个开源的源代码级的调试工具,其性能优良、功能齐全、易于使用,在嵌入式系统开发过程中扮演着越来越重要的角色 。接下来是我为大家收集的[Linux]gdb查看内存区命令,希望能帮到大家 。
[Linux]gdb查看内存区命令
用gdb查看内存
格式: x /nfu
说明
x 是 examine 的缩写
n表示要显示的内存单元的个数
f表示显示方式, 可取如下值
x 按十六进制格式显示变量 。
d 按十进制格式显示变量 。
u 按十进制格式显示无符号整型 。
o 按八进制格式显示变量 。
t 按二进制格式显示变量 。
a 按十六进制格式显示变量 。
i 指令地址格式
c 按字符格式显示变量 。
f 按浮点数格式显示变量 。
u表示一个地址单元的长度
b表示单字节,
h表示双字节,
w表示四字节,
g表示八字节
Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),
t(binary), f(float), a(address), i(instruction), c(char) and s(string).
Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes)
举例
x/3uh buf
表示从内存地址buf读取内容,
h表示以双字节为一个单位 ,
3表示三个单位,
u表示按十六进制显示
例子:
n是个局部变量
Breakpoint 1, main (argc=1, argv=0xbffff3a4) at calc.c:7
7 int n = atoi(argv[1]);
(gdb) print n
$1 = (int *) 0xbffff2ec
(gdb) x 0xbffff2ec
0xbffff2ec: 0x00282ff4
(gdb) print * (int *) 0xbffff2ec
$2 = 2633716
(gdb) x /4xw 0xbffff2ec
0xbffff2ec: 0x00282ff4 0x080484e0 0x00000000 0xbffff378
(gdb) x /4dw 0xbffff2ec
0xbffff2ec: 2633716 134513888 0 -1073745032
(gdb)
看了“[Linux]gdb查看内存区命令”还想看:
1. Linux使用dmidecode命令查看内存型号
【linuxgdb命令n linux gpg命令】2. Linux下查看CPU型号,内存大小,硬盘空间命令
3. 如何在Linux命令行中查看目录的大小
4. LINUX 查看硬件配置命令的教程
请指出gdb调试中命令"n"和"s"的区别s: 执行一行源程序代码,如果此行代码中有函数调用 , 则进入该函数;
n: 执行一行源程序代码,此行代码中的函数调用也一并执行 。
s 相当于其它调试器中的“Step Into (单步跟踪进入)”;
n 相当于其它调试器中的“Step Over (单步跟踪)” 。
这两个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用“-g”参数) 。
si命令类似于s命令,ni命令类似于n命令 。所不同的是,这两个命令(si/ni)所针对的是汇编指令,而s/n针对的是源代码 。
linuxgdb命令n的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于linux gpg命令、linuxgdb命令n的信息别忘了在本站进行查找喔 。
推荐阅读
- 多个js方法同时执行的简单介绍
- 路由器的管理者密码怎么看,路由器管理者密码在哪看
- 安卓原生系统支持exfat,安卓原生系统支持双开吗
- go语言访问mycat go语言访问map中struct的key
- win10如何安装.net2.0,WIN10如何安装字体
- cpuclock代表什么,cpu clockratio
- java关联源代码,java 关联
- 关于python四舍五入函数的信息
- mysql数据误删如何恢复数据恢复,mysql删除数据怎么恢复