可以。当程序被停住时,可以使用print命令(简写命令为p),或是同义命令inspect来查看当前程序的运行数据。用gdb调试程序时,可以使用“ set logging on ”命令把执行gdb的过程记录下来,方便以后自己参考或是别人帮忙分析。默认的日志文件是“ gdbtxt ”。
GDB是GNU开原组织旗下一款强大的代码调试工具,使用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 calcc: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 查看硬件配置命令的教程
gdb 查看 core 文件
基本上
core 文件就是一个包含了程序崩溃时这个进程的所有信息的文件。在那 “遥远的黄金年代”,程序员不得不把 core 文件以十六进制的方式显示
出来,然后满头大汗的阅读机器码的手册,但是现在事情就简单得多了。顺便说一下, 在 FreeBSD 和其他的 44BSD 系统下,core 文件都叫作
prognamecore 而不是简单叫 core,这样可以很清楚的表示出这个 core
文件是属于哪个 程序。
1 要检查一个 core 文件,首先用 gdb 可执行文件名
来调试产生core文件的可执行程序:
2 命令 core会分析 可执行程序名core
文件
注:如果当前不是 core 文件所在目录,首先要执行 dir
/可执行程序名core的路径/。
(gdb)core 可执行程序名core
举例:
$gdb aout
GDB is free software and you are
welcome 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 413 (i386-unknown-freebsd), Copyright 1994 Free
Software Foundation, Inc
(gdb)core
aoutcore
Core was generated by `aout'
Program terminated with
signal 11, Segmentation fault
Cannot access memory at address
0x7020796d
#0 0x164a in bazz (anint=0x5) at tempc:17
(gdb)
这种情况下,运行的程序叫 aout,因此 core 文件 就叫
aoutcore。我们知道程序崩溃的原因就是函数 bazz 试图访问一块不属于它的内存。
有时候,能知道一个函数是怎么被调用的是非常有用处的。因为在一个复杂的程序里面问题可能会发生在函数调用栈上面很远的地方。
3
命令 bt 会让 gdb
输出函数调用栈的回溯追踪
(gdb)bt
#0 0x164a in bazz (anint=0x5) at tempc:17
#1 0xefbfd888 in end ()
#2 0x162c in main () at tempc:11
(gdb)
函数 end() 在一个程序崩溃的时候将被调用;
在本例
中,函数 bazz()
是从 main()中被调用的。
以上就是关于gdb可以跟踪内存分配日志全部的内容,包括:gdb可以跟踪内存分配日志、[Linux]gdb查看内存区命令、gdb 查程序从哪行core等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)