Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 15 Mar 2008 16:16:17 -0500
From:      Derek Ragona <derek@computinginnovations.com>
To:        Chuck Robey <chuckr@chuckr.org>
Cc:        freebsd-questions <freebsd-questions@freebsd.org>
Subject:   Re: C compiler issue perhaps?
Message-ID:  <6.0.0.22.2.20080315161039.0260cbe0@mail.computinginnovations.com>
In-Reply-To: <47DC0136.5020707@chuckr.org>
References:  <A768FF06-4601-42C6-A491-634F5135DCCD@lafn.org> <6.0.0.22.2.20080314171533.023f7c88@mail.computinginnovations.com> <47DC0136.5020707@chuckr.org>

next in thread | previous in thread | raw e-mail | index | archive | help
At 12:02 PM 3/15/2008, Chuck Robey wrote:
>-----BEGIN PGP SIGNED MESSAGE-----
>Hash: SHA1
>
>Derek Ragona wrote:
> > At 05:10 PM 3/14/2008, Doug Hardie wrote:
> >> I have a program I was testing with gdb.  I was trying to figure out
> >> why c.rmonths was always zero when it should have been 6.  Stepped
> >> through using the gdb n command.  Here is the output:
> >>
> >> (gdb)
> >> 215                             c.rmonths = (edate - tdate) / toMONTHS;
> >> (gdb)
> >> 223                     c.dial_in = u.dial_in[0];
> >> (gdb)
> >> 224                     c.dsl = u.dsl[0];
> >> (gdb) p c.rmonths
> >> $1 = 0
> >> (gdb) p c
> >> $2 = {fa = 0, pwp = 0, disp_email = 0, imonths = 0, rmonths = 6,
> >>   type = 73 'I', cd = 0 '\0', dial_in = 82 'R', dsl = 0 '\0',
> >>   dsl_kit = 0 '\0', ip = 0 '\0', domain = 0 '\0', n_domain = 0 '\0',
> >>   renewal = 89 'Y', program = "I\000\000"}
> >> (gdb) p c->rmonths
> >> $3 = 6
> >> (gdb) p c.rmonths
> >> $4 = 6
> >>
> >>
> >> Notice, the first time i print it its zero.  The second time its 6.
> >> What gives here?  I have seen this before but couldn't pin it down.
> >> The program is not compiled with any optimization.  It is in a shared
> >> library though.
> >
> > It is hard to tell without the code you used.  I would put some printf's
> > in the code and see what and when that variable gets set to in actual
> > running code.
>
>2points:
>
>(1) yes, you are right, without the source code, any guesses are at the
>     same level as black magic, useless
>(2) if the user is learning to use gdb, then it is really bad manners to
>     suggest that printfs should be used.  While I  have made massive use
>     of printfs before I got used to gdb, gdb is incredibly more powerful,
>     can do any and all that any prints might accomplish, and anyone who
>     is willing to learn to use that debugger should be encouraged, not
>     given bad habits that really should be a fallback only to environments
>     where gdb won't work.

Chuck,

On your point 2 let me say that there are simply times when a developer 
needs to check run-time code versus running the code in a 
debugger.  Debuggers are a great tool, but they do cause some side-effects 
as was noted in the original post.  If the debugger is not consistent in 
the variable values, it is of little use if those values are causing a 
problem.  What I originally suggested was using conditionally compiled 
fprintf's to check those variable values running the program by itself 
instead of inside gdb.  I know adding additional code, even just fprintf's, 
can change the way a program is compiled and optimized.  But this at least 
gives another way to validate the variables.

         -Derek

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6.0.0.22.2.20080315161039.0260cbe0>