[Libvir] [PATCH] If ./configure --enable-debug=yes, print libvirt calls

This can prove useful if we want to track down problems like the double-call of domainSuspend. Also attached below is the output of virt-manager when this tracing is enabled. Note that if --enable-debug is not set, then no extra code is added to libvirt. Rich. -- Emerging Technologies, Red Hat - http://et.redhat.com/~rjones/ Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod Street, Windsor, Berkshire, SL4 1TE, United Kingdom. Registered in England and Wales under Company Registration No. 03798903 libvirt: virInitialize () libvirt: virInitialize () libvirt: virInitialize () libvirt: virInitialize () libvirt: virInitialize () libvirt: virInitialize () libvirt: virInitialize () libvirt: virInitialize () libvirt: virConnectOpen (name=xen) libvirt: do_open: proceeding with name=xen:/// libvirt: do_open: trying driver 0 (Test) ... libvirt: do_open: driver 0 returned DECLINED libvirt: do_open: trying driver 1 (QEMU) ... libvirt: do_open: driver 1 returned DECLINED libvirt: do_open: trying driver 2 (Xen) ... libvirt: do_open: driver 2 returned SUCCESS libvir: Remote error : No such file or directory libvir: warning : Failed to find the network: Is the daemon running ? libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c510, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virDomainLookupByID (conn=0x1052760, id=0) libvirt: virDomainGetUUID (domain=0x104c660, uuid=0x7fff3a55ccd0) libvirt: virDomainLookupByID (conn=0x1052760, id=12) libvirt: virDomainGetUUID (domain=0x105a510, uuid=0x7fff3a55ccd0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c400) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c400) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55cca0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55cad0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55cad0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetName (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetName (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectGetType (conn=0x1052760) libvirt: virConnectGetType (conn=0x1052760) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainSuspend (domain=0x105a510) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55bab0) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainResume (domain=0x105a510) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55bab0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectNumOfNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfNetworks libvirt: virConnectNumOfDefinedNetworks (conn=0x1052760) libvir: error : this function is not supported by the hypervisor: virConnectNumOfDefinedNetworks libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virConnectListDomains (conn=0x1052760, ids=0x7fff3a55c010, maxids=500) libvirt: virConnectNumOfDefinedDomains (conn=0x1052760) libvirt: virNodeGetInfo (conn=0x1052760, info=0x7fff3a55c7a0) libvirt: virDomainGetInfo (domain=0x104c660, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetInfo (domain=0x105a510, info=0x7fff3a55c5d0) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x105a510) libvirt: virDomainGetID (domain=0x104c660) libvirt: virDomainGetID (domain=0x105a510)

On Wed, Jul 11, 2007 at 04:36:23PM +0100, Richard W.M. Jones wrote:
This can prove useful if we want to track down problems like the double-call of domainSuspend.
Also attached below is the output of virt-manager when this tracing is enabled.
Note that if --enable-debug is not set, then no extra code is added to libvirt.
I would like this, I have just one thing which worries me, it's the vararg macros, I'm not sure how widely it's supported outside of gcc .. Daniel -- Red Hat Virtualization group http://redhat.com/virtualization/ Daniel Veillard | virtualization library http://libvirt.org/ veillard@redhat.com | libxml GNOME XML XSLT toolkit http://xmlsoft.org/ http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/

On Wed, Jul 11, 2007 at 12:02:26PM -0400, Daniel Veillard wrote:
On Wed, Jul 11, 2007 at 04:36:23PM +0100, Richard W.M. Jones wrote:
This can prove useful if we want to track down problems like the double-call of domainSuspend.
Also attached below is the output of virt-manager when this tracing is enabled.
Note that if --enable-debug is not set, then no extra code is added to libvirt.
I would like this, I have just one thing which worries me, it's the vararg macros, I'm not sure how widely it's supported outside of gcc ..
If it doesn't work on non-GCC, then those people can simply not add --enable-debug to their configure flags. Dan. -- |=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=| |=- Perl modules: http://search.cpan.org/~danberr/ -=| |=- Projects: http://freshmeat.net/~danielpb/ -=| |=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|

On Wed, Jul 11, 2007 at 05:06:31PM +0100, Daniel P. Berrange wrote:
On Wed, Jul 11, 2007 at 12:02:26PM -0400, Daniel Veillard wrote:
On Wed, Jul 11, 2007 at 04:36:23PM +0100, Richard W.M. Jones wrote:
This can prove useful if we want to track down problems like the double-call of domainSuspend.
Also attached below is the output of virt-manager when this tracing is enabled.
Note that if --enable-debug is not set, then no extra code is added to libvirt.
I would like this, I have just one thing which worries me, it's the vararg macros, I'm not sure how widely it's supported outside of gcc ..
If it doesn't work on non-GCC, then those people can simply not add --enable-debug to their configure flags.
Disagree +#define DEBUG0 +#define DEBUG(fs,...) +#endif /* !ENABLE_DEBUG */ just won't work for them, not all statements are within #ifdef ENABLE_DEBUG #endif it won't compile even if ENABLE_DEBUG is not defined. Daniel -- Red Hat Virtualization group http://redhat.com/virtualization/ Daniel Veillard | virtualization library http://libvirt.org/ veillard@redhat.com | libxml GNOME XML XSLT toolkit http://xmlsoft.org/ http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/

Daniel Veillard wrote:
On Wed, Jul 11, 2007 at 05:06:31PM +0100, Daniel P. Berrange wrote:
On Wed, Jul 11, 2007 at 12:02:26PM -0400, Daniel Veillard wrote:
On Wed, Jul 11, 2007 at 04:36:23PM +0100, Richard W.M. Jones wrote:
This can prove useful if we want to track down problems like the double-call of domainSuspend.
Also attached below is the output of virt-manager when this tracing is enabled.
Note that if --enable-debug is not set, then no extra code is added to libvirt. I would like this, I have just one thing which worries me, it's the vararg macros, I'm not sure how widely it's supported outside of gcc .. If it doesn't work on non-GCC, then those people can simply not add --enable-debug to their configure flags.
Disagree
+#define DEBUG0 +#define DEBUG(fs,...) +#endif /* !ENABLE_DEBUG */
just won't work for them, not all statements are within #ifdef ENABLE_DEBUG #endif
it won't compile even if ENABLE_DEBUG is not defined.
Am I missing something here? For me it does compile with and without --enable-debug=yes, but then of course I'm only using gcc. My understanding is that __VA_ARGS__ is the ISO C way of doing varargs in macro definitions. gcc has its own variation (#define F(args...)) which I deliberately avoided for portability reasons. The only odd thing we're doing in the --enable-debug case is using ##__VA_ARGS__, where the "##" swallows the preceeding comma. I have no idea if this is ISO C or not. It is mentioned in the CPP info page, but it's not clear if it is standard. In any case because we have two macros (DEBUG0 and DEBUG) it is trivial to rewrite the patch to avoid this. Rich. -- Emerging Technologies, Red Hat - http://et.redhat.com/~rjones/ Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod Street, Windsor, Berkshire, SL4 1TE, United Kingdom. Registered in England and Wales under Company Registration No. 03798903

On Wed, Jul 11, 2007 at 05:24:08PM +0100, Richard W.M. Jones wrote:
Daniel Veillard wrote:
On Wed, Jul 11, 2007 at 05:06:31PM +0100, Daniel P. Berrange wrote:
On Wed, Jul 11, 2007 at 12:02:26PM -0400, Daniel Veillard wrote:
On Wed, Jul 11, 2007 at 04:36:23PM +0100, Richard W.M. Jones wrote:
This can prove useful if we want to track down problems like the double-call of domainSuspend.
Also attached below is the output of virt-manager when this tracing is enabled.
Note that if --enable-debug is not set, then no extra code is added to libvirt. I would like this, I have just one thing which worries me, it's the vararg macros, I'm not sure how widely it's supported outside of gcc .. If it doesn't work on non-GCC, then those people can simply not add --enable-debug to their configure flags.
Disagree
+#define DEBUG0 +#define DEBUG(fs,...) +#endif /* !ENABLE_DEBUG */
just won't work for them, not all statements are within #ifdef ENABLE_DEBUG #endif
it won't compile even if ENABLE_DEBUG is not defined.
Am I missing something here?
For me it does compile with and without --enable-debug=yes, but then of course I'm only using gcc.
My understanding is that __VA_ARGS__ is the ISO C way of doing varargs in macro definitions. gcc has its own variation (#define F(args...)) which I deliberately avoided for portability reasons.
The only odd thing we're doing in the --enable-debug case is using ##__VA_ARGS__, where the "##" swallows the preceeding comma. I have no idea if this is ISO C or not. It is mentioned in the CPP info page, but it's not clear if it is standard. In any case because we have two macros (DEBUG0 and DEBUG) it is trivial to rewrite the patch to avoid this.
Yeah, I understand I'm being a bit picky, but it's usually easier to get fixed at check-in than when someone doing a port hits it (if this ever happens !) Daniel -- Red Hat Virtualization group http://redhat.com/virtualization/ Daniel Veillard | virtualization library http://libvirt.org/ veillard@redhat.com | libxml GNOME XML XSLT toolkit http://xmlsoft.org/ http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/

Updated patch. Rich. -- Emerging Technologies, Red Hat - http://et.redhat.com/~rjones/ Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod Street, Windsor, Berkshire, SL4 1TE, United Kingdom. Registered in England and Wales under Company Registration No. 03798903

On Wed, Jul 11, 2007 at 05:36:54PM +0100, Richard W.M. Jones wrote:
Updated patch.
Hum, apparently there is a misunderstanding This fixes to use C99 syntax, but if you don't have C99 then +#define DEBUG(fs,...) and the various DEBUG statement would lead to an error I think. Maybe I should just ignore this and see if someone ever hit it. +1 Daniel -- Red Hat Virtualization group http://redhat.com/virtualization/ Daniel Veillard | virtualization library http://libvirt.org/ veillard@redhat.com | libxml GNOME XML XSLT toolkit http://xmlsoft.org/ http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/
participants (3)
-
Daniel P. Berrange
-
Daniel Veillard
-
Richard W.M. Jones