在我的自定义分析器中,我将 gint16 值添加为
gint16 stmp16 = 0;
stmp16 = (gint16)tvb_get_letohs(tvb, suboffset);
proto_tree_add_int_format_value(Din_tree, hf_distanceValue, tvb, suboffset, 2, stmp16, "%lf", stmp16/100.0);
suboffset += 2;
它在数据报中正确显示 16 位有符号的 gint16 值,其标头字段描述为
&hf_distanceValue,
{ "Distance Value", "veh.in",
FT_INT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
但是当我尝试显示 32 位有符号 gint32 值时,出现错误
[Dissector bug, protocol CUSTOM: ..buildepanproto.c:4128: failed assertion "DISSECTOR_ASSERT_NOT_REACHED"]
使用 tvb_get_letohl(( 函数以相同的方式获取值,
gint32 stmp32 = 0;
stmp32 = (gint32)tvb_get_letohl(tvb, suboffset);
proto_tree_add_int_format_value(Din_tree, hf_speedValue, tvb, suboffset, 4, stmp32, "%lf", stmp32/1000000.0);
suboffset += 4;
&hf_speedValue,
{ "Speed Value", "veh.in",
FT_INT32, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
断言在 proto_tree_add_int_format_value(( 时失败,如果值为 gint32 类型,它在 gint16 情况下工作正常。
我不确定这是否是问题所在,但是您有 2 个具有相同过滤器名称的字段:
"Distance Value", "veh.in"
"Speed Value", "veh.in"
通常,你会有类似的东西, "veh.distance"
和 "veh.speed"
,假设您的协议的缩写是 "veh"
。 也许先尝试更改此设置以查看问题是否已解决?