十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
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日
去首页
看看更多热门内容
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从列表中
分类: 电脑/网络 操作系统/系统故障
问题描述:
第一次在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 得到一个有关这些选项的说明的简单列表.
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命令查看内存型号
2. Linux下查看CPU型号,内存大小,硬盘空间命令
3. 如何在Linux命令行中查看目录的大小
4. LINUX 查看硬件配置命令的教程