From owner-freebsd-questions@FreeBSD.ORG Mon Mar 17 14:38:36 2008 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7BE65106564A for ; Mon, 17 Mar 2008 14:38:36 +0000 (UTC) (envelope-from derek@computinginnovations.com) Received: from betty.computinginnovations.com (mail.computinginnovations.com [64.81.227.250]) by mx1.freebsd.org (Postfix) with ESMTP id 00F3C8FC38 for ; Mon, 17 Mar 2008 14:38:35 +0000 (UTC) (envelope-from derek@computinginnovations.com) Received: from p28.computinginnovations.com (dhcp-10-20-30-100.computinginnovations.com [10.20.30.100]) (authenticated bits=0) by betty.computinginnovations.com (8.14.2/8.13.8) with ESMTP id m2HEc7iP001716; Mon, 17 Mar 2008 09:38:08 -0500 (CDT) (envelope-from derek@computinginnovations.com) Message-Id: <6.0.0.22.2.20080317093201.0261ec08@mail.computinginnovations.com> X-Sender: derek@mail.computinginnovations.com X-Mailer: QUALCOMM Windows Eudora Version 6.0.0.22 Date: Mon, 17 Mar 2008 09:37:53 -0500 To: Doug Hardie From: Derek Ragona In-Reply-To: <59E2AE8C-70D4-49C8-B495-0F7CCCB042DB@lafn.org> References: <6.0.0.22.2.20080314171533.023f7c88@mail.computinginnovations.com> <511EC772-36FD-4799-B4A1-3AE690B6D048@lafn.org> <6.0.0.22.2.20080314202817.025de470@mail.computinginnovations.com> <6.0.0.22.2.20080315075146.02610a20@mail.computinginnovations.com> <59E2AE8C-70D4-49C8-B495-0F7CCCB042DB@lafn.org> Mime-Version: 1.0 X-Antivirus: avast! (VPS 080316-0, 03/16/2008), Outbound message X-Antivirus-Status: Clean X-ComputingInnovations-MailScanner-Information: Please contact the ISP for more information X-ComputingInnovations-MailScanner: Found to be clean X-ComputingInnovations-MailScanner-From: derek@computinginnovations.com X-Spam-Status: No Content-Type: text/plain; charset="us-ascii"; format=flowed X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Cc: freebsd-questions Subject: Re: C compiler issue perhaps? X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 Mar 2008 14:38:36 -0000 At 12:29 AM 3/17/2008, Doug Hardie wrote: >On Mar 15, 2008, at 05:59, Derek Ragona wrote: > >>At 09:49 PM 3/14/2008, Doug Hardie wrote: >> >>>On Mar 14, 2008, at 18:31, Derek Ragona wrote: >>> >>>>At 06:56 PM 3/14/2008, Doug Hardie wrote: >>>>>There is no code running at that point. Its just sitting there >>>>>waiting for me to enter a gdb command. >>>>> >>>>> >>>>>On Mar 14, 2008, at 15:16, 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. >>>>>> >>>>>> -Derek >>>> >>>>I understand it is waiting at a breakpoint in gdb. What I meant was >>>>put printf's in your code and run the program and look at the >>>>output. You can use fprintf's to stderr if your prefer and just >>>>look at the stderr output. >>>> >>>>It is hard to diagnose what could be a compiler error, or a coding >>>>error. Remember in C you can do many things you really shouldn't. >>>>It is also advisable to run lint over your source code too. >>> >>>All that lint shows is it doesn't like comments using // and lots of >>>errors in /usr/include files. >> >>This sounds more like a c++ program. c++ does a lot of variable >>initiation in code you usually won't see. >> >>If this is a c++ program, put conditional printf's or cout's in to >>check the code at actual runtime rather than in the debugger. >> >>You may want to use asserts. > >Nope. Very simple c code. I believe as was pointed out earlier that >this is a gdb issue. Once gdb found the right value, both it and all >the printfs show the correct value. I changed nothing. I am a bit >concerned since this is now in a production system that it may >eventually start fail again which would have some serious consequences. Doug, That reason is why you should put asserts in your program. Also check your /etc/make.conf file as well as your program's Makefile for any compiler options you may be using. Another option you may want to explore is trying a different version of gcc. There are a few versions of gcc in the ports you can install and try on your program. -Derek -- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean.