Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ gdb上的格式化检查内存_C++_Gdb - Fatal编程技术网

C++ gdb上的格式化检查内存

C++ gdb上的格式化检查内存,c++,gdb,C++,Gdb,调试C/C++代码时,我使用以下命令检查内存 (gdb)x/32xub data 0x7fef824b2c6a: 8 0 39 235 101 169 0 30 0x7fef824b2c72: 73 219 25 195 8 0 69 0 0x7fef824b2c7a: 0 60 17 223 64 0 54 6 0x7fef824b2c82: 245 43 85 190 0 3 147 32 我想有16个字节在一行,每个字节显示在2个十

调试C/C++代码时,我使用以下命令检查内存

(gdb)x/32xub data
0x7fef824b2c6a: 8   0   39  235 101 169 0   30
0x7fef824b2c72: 73  219 25  195 8   0   69  0
0x7fef824b2c7a: 0   60  17  223 64  0   54  6
0x7fef824b2c82: 245 43  85  190 0   3   147 32
我想有16个字节在一行,每个字节显示在2个十六进制数字。 不知道该怎么办。我看不到你的帮助。 有什么想法吗?谢谢

更新1

刚刚意识到,当再次执行时,它会以十六进制数字显示每个字节。但是,它是每行8字节,而不是16字节

(gdb) x/32x prevPkt
0x7fef824b2c6a: 0x08    0x00    0x27    0xeb    0x65    0xa9    0x00    0x1e
0x7fef824b2c72: 0x49    0xdb    0x19    0xc3    0x08    0x00    0x45    0x00
0x7fef824b2c7a: 0x00    0x3c    0x11    0xdf    0x40    0x00    0x36    0x06
0x7fef824b2c82: 0xf5    0x2b    0x55    0xbe    0x00    0x03    0x93    0x20

您可以使用宏执行此操作。(这是根据我对的回答改编的)

定义xb16
不要重复
设置$addr=(字符*)($arg0)
设置$endaddr=$addr+$arg1
而$addr<$endaddr
printf“%p:”,$addr
设置$lineendaddr=$addr+16
如果$lineendaddr>$endaddr
设置$lineendaddr=$endaddr
终止
设置$a=$addr
而$a<$lineendaddr
printf“0x%02x”,*(未签名字符*)$a
一美元一套++
终止
printf“\n”
设置$addr=$addr+16
终止
终止
文件xb16
用法:xb16地址计数
以十六进制输出字节,每行16个
终止

您可以使用宏执行此操作。(这是根据我对的回答改编的)

定义xb16
不要重复
设置$addr=(字符*)($arg0)
设置$endaddr=$addr+$arg1
而$addr<$endaddr
printf“%p:”,$addr
设置$lineendaddr=$addr+16
如果$lineendaddr>$endaddr
设置$lineendaddr=$endaddr
终止
设置$a=$addr
而$a<$lineendaddr
printf“0x%02x”,*(未签名字符*)$a
一美元一套++
终止
printf“\n”
设置$addr=$addr+16
终止
终止
文件xb16
用法:xb16地址计数
以十六进制输出字节,每行16个
终止
define xb16
    dont-repeat
    set $addr = (char *)($arg0)
    set $endaddr = $addr + $arg1
    while $addr < $endaddr
        printf "%p: ", $addr
        set $lineendaddr = $addr + 16
        if $lineendaddr > $endaddr
            set $lineendaddr = $endaddr
        end
        set $a = $addr
        while $a < $lineendaddr
            printf "0x%02x ", *(unsigned char *)$a
            set $a++
        end
        printf "\n"
        set $addr = $addr + 16
    end
end

document xb16
usage: xb16 address count
outputs bytes in hex, 16 per row
end