Hi,
There is sth weird when I am debugging a new
dissector in Ethereal. During debugging, the execution order of program
statements is not following the program flow. For example, in the following
capture of debugging session, it jumpped around the statement 2105 quite a few
times until finally execute it. I have never met such problems with GDB.
A sample debugging
session:
2105
gchar * pdu_type_string = val_to_str(pdu_type, pdu_types, (gdb)
n 2092 { (gdb)
n 2105
gchar * pdu_type_string = val_to_str(pdu_type, pdu_types, (gdb)
n 2097 gchar * str = NULL; (gdb)
n 2101
proto_tree * argu_tree = NULL; (gdb) print pdu_type_string $14 = (gchar *)
0x0 (gdb)
n 2102
proto_tree * subtree = NULL; (gdb)
n 2105
gchar * pdu_type_string = val_to_str(pdu_type, pdu_types, (gdb)
n 2108 ret
= asn1_sequence_decode (asn1, &len, &header_length); (gdb) print
pdu_type_string $15 = (gchar *) 0x0 (gdb)
n 2105
gchar * pdu_type_string = val_to_str(pdu_type, pdu_types, (gdb) print
pdu_type_string
$16 = (gchar *) 0x4047f5c8 "System
Status"
By
the way, after I successfully dissect the first two packets in the dump file,
the program suddenly aborted because of failing on the following assertion: **
ERROR **: file tvbuff.c: line 379 (check_offset_length_no_exception): assertion
failed: (tvb->initialized). Could anybody help me out here?
Assertion failure backtrace:
#5 0x40172a89 in check_offset_length_no_exception (tvb=0x8185bec,
offset=0, length=1, offset_ptr=0xbfffe238,
length_ptr=0xbfffe23c, exception=0xbfffe26c) at
tvbuff.c:379 #6 0x4017362d in ensure_contiguous_no_exception
(tvb=0x8185bec, offset=0, length=1, exception=0xbfffe26c)
at tvbuff.c:815 #7 0x40173706 in ensure_contiguous (tvb=0x8185bec,
offset=0, length=1) at tvbuff.c:850 #8 0x40173b3b
in tvb_get_guint8 (tvb=0x8185bec, offset=0) at tvbuff.c:1020 #9
0x4042a3f4 in asn1_octet_decode (asn1=0x8185bec, ch=0xbfffe2eb
"") at ../asn1.c:135 #10 0x4042a7a6 in
asn1_int32_value_decode (asn1=0x8185bec, enc_len=2,
integer=0xbfffe348) at ../asn1.c:480
Many Thanks!
Michael
|