[Libreoffice] Assertions and Logging

Stephan Bergmann sbergman at redhat.com
Mon Nov 21 05:30:24 PST 2011


On 11/21/2011 01:30 PM, Caolán McNamara wrote:
> On Fri, 2011-11-18 at 15:25 +0100, Stephan Bergmann wrote:
>
> Alright, so we end up with
> use assert if you want an assert
> SAL_WARN if you want to warn about something odd, but which isn't
> necessarily definitely wrong
> SAL_INFO for verbose logging
>
> Practical question though, is on windows where does the output go ?

SAL_INFO/WARN just go to stderr for now.  What should work to see them 
even for a gui soffice.exe is to add something like 2>log.txt to the 
command line.  Not sure if there is enough of a Windows developer base 
that demands a more sophisticated solution?  (One could extend the 
SAL_LOG environment variable, so that a trailing ">file" part would 
append the data to a given file, for example.  Or see to hook up Window' 
OutputDebugString.)

> Should we write off all the DBG_ASSERTs as hopeless to unwind and mass
> convert them all to SAL_WARNs ?

I would initially file an easy hack to do the conversion.  If that does 
not lead to clean-up in a reasonable time-frame, I would suggest to 
mass-convert the remainder to SAL_WARN.

> How do we feel about code that does e.g.
>
> assert(pFoo);
> if (!pFoo)
>      throw catchAbleFoo("wtf");
>
> i.e. do we have a philosophical problem with gracefully/semi-gracefully
> handing should-be impossible cases ?

I think that's a perversion, and should be avoided.  It the author could 
not convince himself that !pFoo is not impossible (modulo bugs), then he 
should use OSL_WARN instead.  If however he *is* convinced that !pFoo is 
impossible absent any bugs, but argues that if there *are* bugs, the 
added if statement adds some sort of safety, I would counter-argue that 
this alleged safety net pointlessly increases complexity and is probably 
full of holes and inconsistencies anyway (as it is likely an extremely 
untested code path).

Such defensive programming IMO would need to be architected into the 
code from the beginning.  It makes little sense to add such things 
locally just here and there.  And I'm not even convinced LO is an 
application for which an elaborate defensive programming architecture 
would be justified.  If there is a bug, crash early.  (One thing we 
could IMO improve though, is to not rely on trying to save open 
documents from within a signal handler, but instead rely on frequent 
auto-save and roll back to the last saved version after a crash.)

Stephan


More information about the LibreOffice mailing list