WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] debugging frustration

To: Mark Williamson <Mark.Williamson@xxxxxxxxxxxx>
Subject: Re: [Xen-devel] debugging frustration
From: Anthony Liguori <anthony@xxxxxxxxxxxxx>
Date: Mon, 14 Feb 2005 09:03:05 -0600
Cc: xen-devel@xxxxxxxxxxxxxxxxxxxxx, Arthur Bergman <abergman@xxxxxxxxxxx>
Delivery-date: Mon, 14 Feb 2005 15:05:54 +0000
Envelope-to: xen+James.Bulpin@xxxxxxxxxxxx
In-reply-to: <200502141424.38935.maw48@xxxxxxxxxxxx>
List-archive: <http://sourceforge.net/mailarchive/forum.php?forum=xen-devel>
List-help: <mailto:xen-devel-request@lists.sourceforge.net?subject=help>
List-id: List for Xen developers <xen-devel.lists.sourceforge.net>
List-post: <mailto:xen-devel@lists.sourceforge.net>
List-subscribe: <https://lists.sourceforge.net/lists/listinfo/xen-devel>, <mailto:xen-devel-request@lists.sourceforge.net?subject=subscribe>
List-unsubscribe: <https://lists.sourceforge.net/lists/listinfo/xen-devel>, <mailto:xen-devel-request@lists.sourceforge.net?subject=unsubscribe>
References: <6964b3969b0cbc632c2161cb16ad0e8b@xxxxxxxxxxx> <200502141424.38935.maw48@xxxxxxxxxxxx>
Sender: xen-devel-admin@xxxxxxxxxxxxxxxxxxxxx
User-agent: Mozilla Thunderbird 1.0 (X11/20041206)
Mark Williamson wrote:

Also, is there a reason that not having DEBUG in turns dprintf into do
{} while(0) instead of just turning into ""
The do {} while (0) idiom is commonly used in macros to protect against the following. Say you had a macro that looked like this:

#define DEBUG(a, b)  if (a > debug_level) printf(b);

If you called it like this:

if (ptr == NULL)
  DEBUG(10, "Bad pointer");
else
  *ptr = 2;

What would actually happen is that the else clause would get attached to the if from the DEBUG() statement and you would get very odd behavior.

Using do {} while (0) is just the common solution to this problem. It's not the only solution, but it's what most people use.

Regards,
Anthony Liguori

It makes the macro behave more like a proper statement. e.g. If we try to do:

if ( 1 == 2 debug_print("foo!") )
{

}

It won't compile, even if debugging is switched off. If we just did "#define debug_print(...)" then this would compile and we'd only notice the error when debugging was switched on.

That's a quite contrived example but basically it keeps the developers honest ;-)

Cheers,
Mark


-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/xen-devel



--
Anthony Liguori
anthony@xxxxxxxxxxxxx



-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/xen-devel

<Prev in Thread] Current Thread [Next in Thread>