[Libreoffice] Assertions and Logging
Stephan Bergmann
sbergman at redhat.com
Tue Nov 22 01:50:39 PST 2011
I pushed the proposed changes as
<http://cgit.freedesktop.org/libreoffice/core/commit/?id=70a6b9ffbd676a1384433a86205d2cd4f2d4f4b1>
and
<http://cgit.freedesktop.org/libreoffice/binfilter/commit/?id=d45d5ee81e3d3f1779774af3f400ce3f1aa6697d>.
Any further refinements (where to send the log output, performance
considerations) can carry on from there.
I added a short summary as
<https://wiki.documentfoundation.org/Development#Assertions_and_Logging>; feel
free to expand. I also filed easy hack
<https://bugs.freedesktop.org/show_bug.cgi?id=43157> "Clean up
OSL_ASSERT, DBG_ASSERT, etc." As already discussed, if any uses of the
obsolete functionality still remains after a while, I would initiate a
mass-conversion OSL_ASSERT->SAL_WARN, OSL_TRACE->SAL_INFO, etc.
I made a few further changes to the proposed patches when I pushed them:
- DBG_ASSERT etc. from tools/debug.hxx still are only enabled depending
on DBG_UTIL. Trying an --enable-debug --disable-dbgutil build, it broke
at many places that #ifdef DBG_UTIL some code that is later used within
a DBG_ASSERT (e.g., an additional variable capturing some old value,
modified later and checked afterwards, or a function parameter name that
is only used within a DBG_ASSERT). This is a lot of work to clean up
(see the easy hack above).
- I replaced the single SAL_LOG_LEVEL (with values 0, 1, 2) with
individual defines SAL_LOG_INFO and SAL_LOG_WARN. This makes it easier
to replace the code mentioned above, going from
#ifdef DBG_UTIL
int old = x;
#endif
... // modify x
DBG_ASSERT(x > old);
to
#if defined SAL_LOG_WARN // instead of: SAL_LOG_LEVEL >= 1
int old = x;
#endif
.. // modify x
SAL_WARN_IF(x <= old, "...");
(Where for such a cheap initialization like "int old = x;" it would also
work to have that variable included unconditionally, followed by a
"(void) old; // avoid warnings"; but there are also cases of more
expensive initialization, that you would likely want to keep excluded
from production builds.)
- The SAL_INFO/WARN messages are now defined to be always UTF-8, and
rtl/oustringostreaminserter.hxx always converts to UTF-8. That
minimizes information loss and would potentially enable use of
SAL_STREAM for construction of UNO exception messages, see the recent
thread about that. However, I do not bother to convert the data output
to stderr from UTF-8 to any other encoding.
Stephan
More information about the LibreOffice
mailing list