From murdoch at stats.uwo.ca  Mon Feb 23 01:18:00 2009
From: murdoch at stats.uwo.ca (Duncan Murdoch)
Date: Sun, 22 Feb 2009 19:18:00 -0500
Subject: [Rd] 'unique' error message
	is	printed	despite	silent=TRUE	(PR#13547)
In-Reply-To: <49A1DE22.50900@idi.ntnu.no>
References: <20090222191519.17912282C76C@mail.pubhealth.ku.dk>	<49A1B292.1070908@biostat.ku.dk>	<49A1BEB5.6050701@idi.ntnu.no>
	<49A1C13F.5090109@stats.uwo.ca> <49A1C5B9.9050905@idi.ntnu.no>
	<49A1D8A1.2070203@stats.uwo.ca> <49A1DE22.50900@idi.ntnu.no>
Message-ID: <49A1EB38.4030805@stats.uwo.ca>

On 22/02/2009 6:22 PM, Wacek Kusnierczyk wrote:
> Duncan Murdoch wrote:
>> On 22/02/2009 4:38 PM, Wacek Kusnierczyk wrote:
>>> Duncan Murdoch wrote:
>>>>> hmm, why wouldn't you use something like
>>>>>
>>>>>     DEBUG(x)
>>>>>
>>>>> with DEBUG being a macro defined so that it's replacement is void
>>>>> unless
>>>>> a specific flag or environment variable is set specifically for the
>>>>> purpose of debugging?  you would then avoid confusing users' code just
>>>>> because one PrintValue has been inadvertently left in the sources.
>>>> But then we'd confuse developers, who would see a huge dump of messages
>>>> from every other debugging session, when they just wanted to see their
>>>> own, and who would be forced to wade through leftover never-used
>>>> DEBUG(x) calls in code when they were reading the source.
>>>>
>>> my point was not that such DEBUG statements should be left there in the
>>> code for all eternity.  to the contrary, their role would be quite the
>>> same as that of the PrintValue discussed here.  it would, however, be
>>> easier to switch between printing and not printing such debugging
>>> messages, and also easier to spot DEBUG statements inadvertently left in
>>> the code. 
>> Sorry, I misunderstood.  Yes, that might be handy.
>>
>> The main problem is agreeing on what macros to write, and what should
>> happen when the external flag is set. In my experience, people who are
>> good at debugging have long-established idiosyncratic habits, and are
>> just annoyed when things change.
>>
> 
> well, ok, but it sounds odd to me that in a large multideveloper project
> where not only people are allowed to use their idiosyncratic habits (and
> leave bug-inducing footprints behind), but even the idea of having a
> consistent way of printing debug messages seems not to have been
> discussed (how much am i off here?).

I think you are just trolling now.  How could we stop people from using 
whatever method they wanted when debugging?  And we don't "allow" people 
to leave bugs behind, but sometimes (being fallible) they do anyways.

> 
>> For example, a number of people have suggested that compiles should
>> switch to optimization level 0 when compiling for debugging.  This
>> makes stepping through code easier, because (as far as I recall)
>> variables aren't optimized out, code isn't rearranged, etc.  But it
>> means some bugs change their behaviour:  and I really hate that.  So I
>> wouldn't mind if it were possible to request that, but I'd want to
>> make sure the default is to ask for debugging support without it:  I
>> don't want to waste my time looking at a different program when I'm
>> trying to track something down.
> 
>> If we had DEBUG(x) which became PrintValue(x) when a certain flag was
>> set, I probably wouldn't use it, because it requires two things:  set
>> the flag as well as add the statement.  I'd find that just irritating.
>> (I rarely use PrintValue in any case:  most of the types of bugs I'm
>> looking for need Rprintf or REprintf instead.  So we'd need at least
>> three macros.)
>>
> 
> it was just a loose suggestion, and you certainly know better both the r
> sources and the developers' habits.  i have no vote.
> 
>>>> This is not a common error:  as far as I know, there are no other
>>>> unintentional PrintValue calls anywhere in the source.  So I think the
>>>> current system (just take them out before committing) is working.
>>> grep --include=*.c -R '\bPrintValue\b' src | wc -l
>>>
>>> reports 21 occurrences of PrintValue, though of course i cannot say
>>> anything about their being intentional or not unless i examine the
>>> sources.  if they were DEBUGs, you'd know for sure they're not supposed
>>> to stay there in a release version.
>> I did a quick examination of the source and I think the ones that
>> aren't commented out look intentional.  (I was following my rule 5 of
>> debugging:  look for similar errors elsewhere.)
>>
>>> it's just to wish that those who introduce debugging PrintValues
>>> examined diffs carefully before their code is released.  given the size
>>> of r sources (and their fairly ad hoc shape here and there), few others
>>> than the author will know for sure whether the PrintValue is a debugger
>>> or not?  apparently, no one has noticed in this case.  were it DEBUG
>>> instead of PrintValue, it would suffice to run a grep to catch it.
>> People who commit any changes should examine them carefully, and in
>> general they do.  Sometimes things slip by.  In this case, the slip
>> was there for 5 years before anyone noticed it, and I don't think it
>> caused a lot of harm:  it was an error message that printed incorrectly.
> 
> yes, though irrespectively of the consequences, it still was a bug, no? 
> (have you thanked stavros for reporting it?)

I hope he realizes that we do appreciate the report.  That's why it got 
such quick attention.  (I don't expect him to thank me for fixing it, 
either.)

Duncan Murdoch



[Rd] 'unique' error message is printed despite silent=TRUE (PR#13547)
Duncan Murdoch