如何读取gdb中的结构值?

时间:2017-02-09 11:52:57

标签: gdb

例如,当我输入

  

p dest-msgs [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>}

1 个答案:

答案 0 :(得分:1)

让我们看看我们在这里有什么:

  

p dest-&gt; msgs [count]

所以,你似乎从数组中打印出一个特定的元素。 Gdb回应:

  

$ 9 = {

$9只是一个人工名称,您以后可以使用它来引用此结果。结果从一个开口支撑开始。这意味着它是一种结构。它继续:

  

hdr = {ver = 5'\ 005',magic = 18'\ 022',evt_len = 588},

结构的第一个成员名称为hdr,其值为,参见下一个左大括号,同样是一个结构。这个嵌套结构有三个成员(右括号告诉我们必须停止计数的地方),名为vermagicevt_len。你看到他们各自的价值观。然后是

  

evt = {hdr = {ver = ...

也就是说,evt是外部结构的第二个成员,它也是一个结构,它有成员hdr,它也是一个结构。等等。