mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-18 07:47:17 +00:00
31 lines
2.2 KiB
Text
31 lines
2.2 KiB
Text
|
Changes made to the DEBUG system. New header file gstdebug.h holds the stuff to keep it out of gst.h's
|
||
|
hair. DEBUG prints out the process id, cothread id, source filename and line number. Two new macros
|
||
|
DEBUG_ENTER and DEBUG_LEAVE are used to show the entry and exit of a given function. This eventually
|
||
|
might be used to construct call trace graphs, even taking cothreads into account. This would be quite
|
||
|
useful in visualizing the scheduling mechanism.
|
||
|
|
||
|
Minor changes to various debug messages.
|
||
|
|
||
|
Also sitting in gstdebug.h is a prototypical DEBUG_ENTER that's capable of performing DEBUG_LEAVE
|
||
|
automatically. It does this by utilizing a little-known GCC extension that allows one to call a
|
||
|
function with the same parameters as the current function. The macro uses this to basically call
|
||
|
itself. A boolean is used to ensure that when it calls itself it actually runs the body of the
|
||
|
function. In the meantime it prints stuff out before and after the real function, as well as
|
||
|
constructing a debugging string. This can be used eventually to provide call-wide data on the DEBUG
|
||
|
lines, instead of having to replicate data on each call to DEBUG. More research is needed into how this
|
||
|
would most cleanly be fit into some other chunk of code, like GStreamer (I think of this DEBUG trick as
|
||
|
a separate project, sorta).
|
||
|
|
||
|
Unfortunately, the aforementioned DEBUG trick interacts quite poorly with cothreads. Almost any time
|
||
|
it's used in a function that has anything remotely to do with a cothread context (as in, it runs in
|
||
|
one), a segfault results from the __builtin_apply call, which is the heart of the whole thing. If
|
||
|
someone who really knows assembly could analyze the resulting code to see what's really going on, we
|
||
|
might find a way to fix either the macro or the cothreads (I'm thinking that there's something we missed
|
||
|
in constructing the cothreads themselves) so this works in all cases.
|
||
|
|
||
|
In the meantime, please insert both DEBUG_ENTER and DEBUG_LEAVE in your functions. Be sure to put
|
||
|
DEBUG_ENTER after your variable declarations and before any functional code, not to put the function
|
||
|
name in any DEBUG strings (it's already there, trust me), and put a DEBUG_LEAVE if you care enough.
|
||
|
|
||
|
Changes are going to happen in the way DEBUGs and other printouts occur, so stay tuned.
|