2017-02-09 62 views
0

例如,当I型如何读取gdb中的结构值?

p DEST-封邮件[COUNT]

显示以下值。如何理解这些价值的意义?

p dest->msgs[count] 
$9 = {hdr = {ver = 5 '\005', magic = 18 '\022', evt_len = 588}, evt = {hdr = {ver = 3 '\003', magic = 18 '\022', evt_len = 552}, service_id = 1, instance = 0, comp_id = -2136604671, 
    comp_name = "tsd", '\0' <repeats 14 times>, flags = 0, objid = 0, file = "ts.c", '\0' <repeats 11 times>, func = "tsTimeMcast_h\000\000", line = 1667, local_time_sec = 1483252020, 
    local_time_usec = 28575, time_sec = 1483252020, time_usec = 28675, global_seq = 4014, external_seq = 2146, iq_drop = 0, rq_drop = 0, 
    arg_offset = "\000\002\005\006", '\0' <repeats 11 times>, arg = "LOCL\000\000\000\000External\000\000\000\000EXT\000LOCL", '\0' <repeats 227 times>, msgdef = {msg_id = 0, 
     attributes = 0, class = 0, severity = 0, msg_value = "\000\000\000\000\000\000\000\000\000", message = '\0' <repeats 128 times>, arg_type = 0, arg_num = 0, 
     cat_name = "\000\000\000\000\000\000\000"}}, name = '\0' <repeats 31 times>} 
+0

'set print pretty on'更具可读性,然后是默认的紧凑格式。 – ks1322

回答

1

让我们看看我们在这里:

p dest->封邮件[统计]

所以,你从一个阵列打印一个特定的元素,它似乎。 GDB回应:

$ 9 = {

$9只是一个人为的名称,你可以使用以后参考这个结果。结果从一个开放的大括号开始。这意味着它是一个结构。如此下去:

HDR = {版本= 5 '\ 005',魔法= 18 '\ 022',evt_len = 588},

结构的第一个成员具有名称hdr它的价值是,看下一个大括号,又是一个结构。这个嵌套结构有三个成员(闭合大括号告诉我们我们必须停止计数),它们分别命名为ver,magicevt_len。你看到他们各自的价值观。然后如下

EVT = {HDR = {版本= ...

即,evt是外部结构,而这又是一个结构的第二构件,其具有构件hdr,其又是一个结构。等等。