At 12:02 PM 3/15/2008, Chuck Robey wrote:
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.


(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.


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.


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

_______________________________________________ mailing list
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to