首页 > 系统相关 >【gdb】打印内存的值

【gdb】打印内存的值

时间:2023-10-15 19:34:55浏览次数:40  
标签:进制 16 打印 gdb 内存 格式 byte

打印内存的值

1. 例子

#include <stdio.h>

int main(void)
{
        int i = 0;
        char a[100];

        for (i = 0; i < sizeof(a); i++)
        {
                a[i] = i;
        }

        return 0;
}

gdb中使用“x”命令来打印内存的值,格式为“x/nfu addr”。含义为以f格式打印从addr开始的n个长度单元为u的内存值。参数具体含义如下:
a)n:输出单元的个数。
b)f:是输出格式。比如x是以16进制形式输出,o是以8进制形式输出,等等。
c)u:标明一个单元的长度。b是一个byteh是两个byte(halfword),w是四个byte(word),g是八个byte(giant word)。

以上面程序为例:
(1) 以16进制格式打印数组前a16个byte的值:

(gdb) x/16xb a
0x7fffffffe4a0: 0x00    0x01    0x02    0x03    0x04    0x05    0x06    0x07
0x7fffffffe4a8: 0x08    0x09    0x0a    0x0b    0x0c    0x0d    0x0e    0x0f

(2) 以无符号10进制格式打印数组a前16个byte的值:

(gdb) x/16ub a
0x7fffffffe4a0: 0       1       2       3       4       5       6       7
0x7fffffffe4a8: 8       9       10      11      12      13      14      15

3) 以2进制格式打印数组前16个abyte的值:

(gdb) x/16tb a
0x7fffffffe4a0: 00000000        00000001        00000010        00000011        00000100        00000101        00000110        00000111
0x7fffffffe4a8: 00001000        00001001        00001010        00001011        00001100        00001101    

4) 以16进制格式打印数组a前16个word(4个byte)的值:

(gdb) x/16xw a
0x7fffffffe4a0: 0x03020100      0x07060504      0x0b0a0908      0x0f0e0d0c
0x7fffffffe4b0: 0x13121110      0x17161514      0x1b1a1918      0x1f1e1d1c
0x7fffffffe4c0: 0x23222120      0x27262524      0x2b2a2928      0x2f2e2d2c
0x7fffffffe4d0: 0x33323130      0x37363534      0x3b3a3938      0x3f3e3d3c

 

标签:进制,16,打印,gdb,内存,格式,byte
From: https://www.cnblogs.com/sunbines/p/17766012.html

相关文章

  • 【gdb】进入和退出图形化调试界面
    进入和退出图形化调试界面1.例子#include<stdio.h>voidfun1(void){inti=0;i++;i=i*2;printf("%d\n",i);}voidfun2(void){intj=0;fun1();j++;j=j*2;print......
  • 打印数组中任意连续元素
    打印数组中任意连续元素1.例子#include<stdio.h>intmain(void){intarray[201];inti;for(i=0;i<201;i++)array[i]=i;return0;}在gdb中,如果要打印数组中任意连续元素的值,可以使用“parray[index]@num”命令(p是print命令的缩写)。其中index......
  • 【gdb】打印数组的索引下标
    打印数组的索引下标1.例子#include<stdio.h>intnum[10]={1<<0,1<<1,1<<2,1<<3,1<<4,1<<5,1<<6,1<<7,1<<8,1<<9};intmain(void){inti;for......
  • 【gdb】gdb目录索引
    gdb目录索引 打印1打印ASCII和宽字符字符串打印数组中任意连续元素......
  • 【gdb】打印ASCII和宽字符字符串
    打印ASCII和宽字符字符串1.例子:#include<stdio.h>#include<wchar.h>intmain(void){charstr1[]="abcd";wchar_tstr2[]=L"abcd";return0;}用gdb调试程序时,可以使用“x/s”命令打印ASCII字符串。以上面程序为例:[root@node0......
  • C++类内存布局与虚继承
    类的内存布局本文参考浅析C++类的内存布局,做了一些修改和补充1.无继承的情况为了得到类的内存布局,先设置一下输入/d1reportAllClassLayout,结果会在输出窗口打印出。最后会打印很多类,基本上最后就是自己的类的布局,也可以指定类。如果写上/d1reportSingleClassLayoutXXX(X......
  • 【gdb】设置观察点
    设置观察点1.例子:#include<stdio.h>#include<pthread.h>typedefstruct{inta;intb;intc;intd;pthread_mutex_tmutex;}ex_st;intmain(void){ex_stst={1,2,3,4,PTHREAD_MUTEX_INITIALIZER};printf("%d,%d,%d,%d\n&......
  • FreeRTOS qemu mps2-an385 bsp 移植制作 :串口打印篇
    开发环境Win1064位+VSCode,ssh远程连接ubuntuVMwareWorkstationPro16+Ubuntu20.04FreeRTOSv202212.01(备注:可以在github获取最新版本)qemuqemu-system-armmps2-an385开发板,qemu版本QEMUemulatorversion4.2.1或更高armgcc交叉编译工具链:当前使用gcc编译环境......
  • 【gdb】run和start区别
    run和start区别gdb调试器提供了多种方式来启动目标程序,其中最常用的就是run指令,其次为start指令。也就是说,run和start指令都可以用来在gdb调试器中启动程序,它们之间的区别是:1、默认情况下,run指令会一直执行程序,直到执行结束。如果程序中手动设置有断点,则run指令会执行......
  • 【gdb】断点管理
    断点管理命令说明:命令说明breakb断点命令break函数名为函数设置断点break代码函数为某一行设置断点break类名:函数名在某个类的函数设置断点break文件名:函数名在文件名指定某个函数设置断点break文件名:行数在文件名执行的代码行设置断点br......