Quite often I am debugging my code by simply inserting some temporary output instead of running the software in the debugger. I am sure that I am not alone with this practice, for many good reasons! But there is one thing I never got working so far in the ParaView/VTK source code:
How can I get the vtkDebugMacro
output displayed?
Ok, in vtkSetGet.h
I can see that it is expanded only if NDEBUG
is not defined - thus in a debug build. Which is already the first problem because very often I want to see such kind of output in a build that is exactly not a debug build! Like the practice I am following otherwise - see above.
So I went and changed the code in vtkSetGet.h
in such a way that it would always compile, because I see in the expansion that output would go to vtkOutputWindowDisplayDebugText()
anyway, which is again only happening if the logging level is set accordingly; at least this is what I understand from some source code reading (but maybe not yet enough…!??).
But trying to compile such a version of ParaView, I am getting error messages in places like this (from vtkImageReader.cxx):
#ifndef NDEBUG
int* ext = data->GetExtent();
#endif
vtkDebugMacro("Reading extent: " << ext[0] << ", " << ext[1] << ", " << ext[2] << ", " << ext[3]
<< ", " << ext[4] << ", " << ext[5]);
Well yes - makes sense: the #ifndef
should not block the definition of ext and then call vtkDebugMacro
with the assumption that it is undefined anyway. Which is of course not true any more if I make sure that it is defined!
Which leaves me a bit confused. I could of course go and change now all the occurrences of such code and make it more consistent - but then I am getting the feeling that I might be the one who has not understood certain coding/debugging concepts behind ParaView/VTK.
But maybe it is also just some leftover from “historical development” that is not properly cleaned up!? (If I am reading the hackathon announcement I see that cleanup is a main focus there - which I can easily believe! …)
Anyway, my current issues are with some SQLite related code, and I think I will simply again go for some local temporary patches in the PV/VTK code - but then I always see these vtkDebugMacro()
calls and think how nice it was to simply “activate” them somehow!