我有一个指向结构的指针,我可以使用 .gdb 在 gdb 中打印它print /x (*s)。
然而这给了我:
...,强度 = 2 '\002'},{distance_2cm = 3045,强度 = 3 '\003'},{distance_2cm = 14735,强度 = 7 '\a'},{distance_2cm = 3345,强度 = 3 '\003'},{distance_2cm = 14272,强度 = 7 '\a'},{distance_2cm = 3735,强度 = 2 '\002'},{distance_2cm = 14617,强度 = 6 '\006'},{distance_2cm = 4239,强度 = 2 '\002'},{距离_2cm = 9741,强度 = 5 '\005'},{距离_2cm = 4892,强度 = 2 '\002'},{距离_2cm = 10686,强度 = 4 '\ 004' },{distance_2cm = 6012,强度 = 3 '\003'},{distance_2cm = 9906,强度 = 3 '\003'}}},{head = {laser_block_id = 61183,rotational_theta = 21191},lasers_arary = { {distance_2cm = 0,强度 = 2 '\002'},{distance_2cm = 0,强度 = 1 '\001'},{distance_2cm = 0,强度 = 3 '\003'},{distance_2cm = 0,强度 = 1 '\001'}, {距离_2cm = 0, 强度 = 2 '\002'}, {距离_2cm = 0, 强度 = 2 '\002'}, {距离_2cm = 0, 强度 = 1 '\001'}, { ce_2cm = 6426,强度 = 1 '\001'},{distance_2cm = 2040,强度 = 3 '\003'},{distance_2cm = 6584,强度 = 2 '\002'},{distance_2cm = 2154,强度 = 3 '\003'},{distance_2cm = 0,强度 = 1 '\001'},{distance_2cm = 2282,强度 = 3 '\003'},{distance_2cm = 0,强度 = 1 '\001'},{distance_2cm = 2428,强度 = 2 '\002'},{距离 ce_2cm = 26580,强度 = 33 '!'},{距离_2cm = 2592,强度 = 5 '\005'},{距离_2cm = 27180,强度 = 2 7 ' \033'},{距离_2cm = 2795,强度 = 3 '\003'},{距离_2cm = 0,强度 = 2'\002'},{距离_2cm = 3045,强度 = 3'\003'},{distance_2cm = 14712,强度 = 22 '\026'},{距离_2cm = 3342,强度 = 3 '\003'},{距离_2cm = 14181,强度 = 7 '\a'},{距离_2cm = 3729,强度 = 2 '\002 '}, {distance_2cm = 14474, 强度 = 6 '\006'}, {distance_2cm = 4228, 强度 = 2 '\002'}, {distance_2cm = 9744, 强度 = 1 '\001'}, {distance_2cm = 4887,强度 = 2 '\002'},{距离_2cm = 13075,强度 = 7 '\a'},{距离_2cm = 5994,强度 = 3 '\003'},{距离_2cm = 9947,强度 = 4 '\004 '}}},{head = {laser_block_id = 61183,rotational_theta = 21207},lasers_ arary = {{distance_2cm = 0,强度 = 2 '\002'},{distance_2cm = 0,强度 = 1 '\001'}, {距离_2cm = 0,强度 = 3 '\003'},{距离_2cm = 0,强度 = 1 '\001'},{距离_2cm = 0,强度 = 2 '\002'},{距离_2cm = 0,强度 = 2 '\002'}, {距离_2cm = 0, 强度 = 1 '\001'}, {距离_2cm = 0, 强度 = 1 '\001'}, {距离_2cm = 2038,强度 = 6 '\006'},{距离_2cm = 6548,强度 = 1 '\001'},{距离_2cm = 2146,强度 = 3 '\003'},{距离_2cm = 0,强度 = 1 '\001'} , {distance_2cm = 2285, 强度 = 3 '\003'}, {distance_2cm = 0, 强度 = 1 '\001'}, {distance_2cm = 2428, 强度 = 2 '\002'}, {distance_2cm = 26498, 强度= 33 '!'}, {distance_2cm = 2590, 强度 = 5 '\005'}, {distance_2cm = 26177, 强度 = 29 '\035'}, {distance_2cm = 2792, 强度 = 3 '\003'}, {distance_2cm = 0,强度 = 2 '\002'},{distance_2cm = 3044,强度 = 3 '\003'},{distance_2cm = 14743,强度 = 7 '\a'},{distance_2cm = 3344,强度 = 3 '\003'}, {距离_2cm = 14147, 强度 = 7 '\a'}, {距离_2cm = 3728, 强度 = 2 '\002'}, {距离_2cm = 14520, 强度 = 13 '\r'}, {距离_2cm = 4222,强度 = 2 '\002'},{距离_2cm = 14567,强度 = 5 '\005'},{距离_2cm = 4885,强度 = 3 '\003'},{距离_2cm = 1 0842,强度 = 6 '\006'},{distance_2cm = 5978,强度 = 3 '\003'},{distance_2cm = 9964,强度 = 6 '\006'}} }}},sd = {gps_time_stamp = 59467414,status_type = 55 '7 ', status_value = 33 '!'}}
我想以十六进制查看它,类似于下面的假设输出:
00000000: 2369 6e63 6c75 6465 203c 6368 6563 6b2e
00000010: 683e 0a0a 2369 6e63 6c75 6465 2022 635f
00000020: 7665 6c6f 6479 6e65 2f61 7267 7061 7273
00000030: 652e 6822 0a23 696e 636c 7564 6520 2263
Run Code Online (Sandbox Code Playgroud)
有没有办法用 gdb 来做到这一点?
这可以通过命令来完成x。最简单的方法是首先找到结构的大小,然后将其作为参数传递给x. 就像是:
(gdb) print sizeof(whatever)
$1 = 1024
(gdb) x/512xh &whatever
Run Code Online (Sandbox Code Playgroud)
解码x/512xh:
x表示以十六进制打印;h表示“半字”,也称为 2 个字节。gdb 手册解释了可以在此处使用的所有标志。
您可以通过更奇特的方式来eval计算长度来完成此操作。如果你经常这样做,我建议也许用 Python 编写一个新命令,进行一些处理,然后调用x.