Re: premature aborts?
Hi,
Hmmm, logging. I have always been a fan of multilevel logging
(one determines the severity level of messages on a more or less
ad-hoc fashion [I use it for debugging also: initially, the debug
levels are low, and as the code matures, the debug levels climb; s
one may only see the latest debug messages while retaining old ones
in the code to be turned on at a switch])
So, everything that apkt-get prints with E: should be
logged. All the nice informational messages (get blah from where) may
be optional.
Like, continuosly updated messages are -10; get file blah are
level 0; errors are level 100; default logging is level 50. Gives us
plenty of leeway.
manoj
for C aficianados, this is an excerpt from one of my debug header
files that shows what I mean
--
The absent are always in the wrong.
Manoj Srivastava <srivasta@acm.org> <http://www.datasync.com/%7Esrivasta/>
Key C7261095 fingerprint = CB D9 F4 12 68 07 E4 05 CC 2D 27 12 1D F5 E8 6E
#ifdef BEGIN_BLOCK
#undef BEGIN_BLOCK
#endif /* BEGIN_BLOCK */
#ifdef END_BLOCK
#undef END_BLOCK
#endif /* END_BLOCK */
#define BEGIN_BLOCK do {
#define END_BLOCK } while (0)
/* ------------------------------------------------------------------------- */
/* Debugging */
/*
* DEBUGMASK provides explicit control over which debug levels are to be
* turned on, ie, DEBUGMASK = 0xFFFFFFFFL gives 32 DEBUG levels (all on);
* DEBUGMASK = 0x00000001L turns on level 1, DEBUGMASK = 0x00000009L
* turns on level 1 and 4, and so on.
*/
#ifndef DEBUGMASK
# define DEBUGMASK 0xFFFFFFFFL /* 32 DEBUG levels (all on) */
#else
# ifndef DEBUG
# define DEBUG 1 /* default level, in case the user did */
/* not turn it on*/
# endif
#endif
/* DEBUG takes integral values >= 0 */
#ifdef DEBUG
#define MAX_DEBUGLEVEL 32
/* Macro to print debug messages. example pargs is
* (stderr, "%s", "abcd"). Level takes values 1 to 32
* All messages at or below level DEBUG are suppressed. Assigning
* a high value for DEBUG ( = 32 ) can suppress all the messages.
*/
#define DEBUGMSG(level, pargs) \
BEGIN_BLOCK \
if (level && (level >= DEBUG) && (DEBUGMASK & \
(unsigned long int)(level <MAX_DEBUGLEVEL ? 1 << (level - 1): \
1 << (level % MAX_DEBUGLEVEL)))) \
fprintf pargs; \
END_BLOCK
#define DEBUGN(level,pargs) \
BEGIN_BLOCK\
if(level && (level >= DEBUG && (DEBUGMASK & \
(unsigned long int)(level <MAX_DEBUGLEVEL ? 1 << (level - 1): \
1 << (level % MAX_DEBUGLEVEL))))) \
{\
/* that is, this is a a valid debug statement */ \
fprintf(stderr,(char *)"------------------------------------------\n");\
fprintf(stderr,(char *)"D %s(%d):[%d]\n\t", __FILE__,__LINE__,level);\
fprintf pargs;\
fprintf(stderr,(char *)"\n");\
}\
END_BLOCK
#define DEBUG0(level,str) DEBUGN(level, (stderr,str))
#define DEBUG1(level,str,a1) DEBUGN(level, (stderr,str,a1))
#define DEBUG2(level,str,a1,a2) DEBUGN(level, (stderr,str,a1,a2))
#define DEBUG3(level,str,a1,a2,a3) DEBUGN(level, (stderr,str,a1,a2,a3))
#define DEBUG4(level,str,a1,a2,a3,a4) DEBUGN(level, (stderr,str,a1,a2,a3,a4))
#define DEBUG5(level,str,a1,a2,a3,a4,a5) \
DEBUGN(level, (stderr,str,a1,a2,a3,a4,a5))
#else /* DEBUG not defined */
#define DEBUGMSG(level, pargs)
#ifdef DEBUGMASK
# undef DEBUGMASK
# define DEBUGMASK /* remove the definition */
#endif /* DEBUGMASK */
#define ASSERT(expr)
#define DEBUG0(level,s)
#define DEBUG1(level,s,a1)
#define DEBUG2(level,s,a1,a2)
#define DEBUG3(level,s,a1,a2,a3)
#define DEBUG4(level,s,a1,a2,a3,a4)
#define DEBUG5(level,s,a1,a2,a3,a4,a5)
#define DEBUGN(level,pargs)
#endif /* DEBUG */
--
To UNSUBSCRIBE, email to deity-request@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Reply to: