首页 > 系统相关 >C语言: ---gdb查看内存和寄存器内容

C语言: ---gdb查看内存和寄存器内容

时间:2022-11-01 14:32:57浏览次数:44  
标签:十六进制 变量 0x0 108 C语言 --- gdb 格式

gdb没有CodeWarrior强大,但是也提供了查看寄存器的命令:
(gdb) info register r1
r1             0xbffffb40    3221224256
(gdb) info registers
r0             0x1000052c    268436780
r1             0xbffffb40    3221224256
r2             0x48026ea0    1208118944
r3             0x14    20
r4             0xfef2d90    267333008
r5             0x0    0
r6             0x1    1
r7             0xff4f67c    267712124
r8             0x202d000    33738752
r9             0x1    1
r10            0x0    0
r11            0xbffffa70    3221224048
r12            0x20000082    536871042
r13            0x100189d0    268536272
r14            0x0    0
r15            0x0    0
r16            0x0    0
r17            0x0    0
r18            0x0    0
r19            0x0    0
r20            0x0    0
r21            0x0    0
r22            0x0    0
---Type to continue, or q to quit---
r23            0x0    0
r24            0x0    0
r25            0x0    0
r26            0x0    0
r27            0x4802f52c    1208153388
r28            0x48030018    1208156184
r29            0x0    0
r30            0xffebff4    268353524
r31            0xbffffb40    3221224256
pc             0x1000052c    0x1000052c


msr            0x2d900    186624

cr             0x2a000022    704643106

lr             0x1000052c    0x1000052c

ctr            0xc027c8fc    3223832828

xer            0x0    0

acc            0x0    0

spefscr        0x3c    60

orig_r3        0x1    1

trap           0x700    1792


你可以使用examine命令(简写是x)来查看内存地址中的值。x命令的语法如下所示:


x/


n、f、u是可选的参数。


n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。

f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。

u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字 节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。


表示一个内存地址。

n/f/u三个参数可以一起使用。例如:


命令:x/3uh 0x54320 表示,从内存地址0x54320读取内容,h表示以双字节为一个单位,3表示三个单位,u表示按十六进制显示。

输出格式

一般来说,GDB会根据变量的类型输出变量的值。但你也可以自定义GDB的输出的格式。例如,你想输出一个整数的十六进制,或是二进制来查看这个整型变量 的中的位的情况。要做到这样,你可以使用GDB的数据显示格式:


x 按十六进制格式显示变量。

d 按十进制格式显示变量。

u 按十六进制格式显示无符号整型。

o 按八进制格式显示变量。

t 按二进制格式显示变量。

a 按十六进制格式显示变量。

c 按字符格式显示变量。

f 按浮点数格式显示变量。


原文件:

+108>+108>

double z = 39.2315;
float x = 39.2315;

调试过程:

+108>+108>

Breakpoint 1, main () at testall.c:15
15 //double a = 2.0 * z;
(gdb) info addr x
Symbol "x" is static storage at address 0x100109d8.
(gdb) info addr z
Symbol "z" is static storage at address 0x100109d0.
(gdb) x /1fw 0x100109d8
0x100109d8 : 39.2314987
(gdb) p x
$1 = 39.2314987
(gdb) p z
$2 = 39.231499999999997
(gdb) x /1fg 0x100109d0
0x100109d0 : 39.231499999999997
(gdb)


由此可见float的精度差很多。+108>+108>

标签:十六进制,变量,0x0,108,C语言,---,gdb,格式
From: https://blog.51cto.com/u_14934686/5813658

相关文章

  • C++:20---类模板(template)
    一、类模板与模板类类模板:一个模板(是模板)模板类:调用类模板生成的类对象(是类实体),也称为类模板的实例化类模板的定义:与函数模板的定义是一样的template<typenameT>classBlo......
  • C语言: ---windows下VS Debug调试
    首先我先列出来常用的一些命令或者键盘控制:F5开始调试,执行到断点Shift+F5停止调试F9在光标所在行添加断点Shift+F9QuickWatchShiftCtrlF9deleteall断点F10单......
  • Redis:02---安装Redis(Linux+Windows+Docker)
    Linux安装:一、安装方式1(下载源码编译安装)第一步:从下面的网址中下载Redis最新稳定版本的源代码sudowgethttp://download.redis.io/redis-stable.tar.gz第二步:下载完之后解......
  • C语言学习:结构
    structnamect{charfmame[LEN];charlname[LEN];intletter;};全局创建结构,注意末尾有分号在main函数内创建结构1.1structnamect{charfma......
  • leetcode111-二叉树的最小深度
    111.二叉树的最小深度 这道题相比 104.二叉树的最大深度 还是难上一些的,但也不算太难。BFS/***Definitionforabinarytreenode.*structTreeNode{......
  • STC32G12K128-CAN
    第二部分,因为需要和其他部件通过CAN进行交互,此处记录一下STC32-CAN驱动部分,毕竟是国产芯片,数据手册看起来非常方便。希望咱们国产芯片越做越好哈此处参考了芯片手册的例子......
  • 动态规划-公共子序列
    公共子序列是二维动态规划的典型问题,一般用了求两个字符串的相似程度。我们看一个案例:案例1:给定两个字符串 text1和 text2,返回这两个字符串的最长公共子序列的长度......
  • ceph-slow ops
    https://zhuanlan.zhihu.com/p/440464163https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/3/html/troubleshooting_guide/troubleshooting-osds#slo......
  • 部署前端项目分离项目 - 部署
    本篇文章中部署《前后端分离项目》所需的所有部署工作 58Vue项目配置域名 59 手动替换localhost为虚拟机ip 60删除原有的dist目录 61执行打包命令 ......
  • 部署前端项目分离项目 - 准备工作
    0本篇文章中部署《前后端分离项目》所需的所有准备步骤 1设置虚拟机网络 2在VMware中开启虚拟机 3等待虚拟机开机  4虚拟机开机成功,进入到虚拟机的......