[Vala] Implementing Tracing Functionality in Vala



Hi,

I am working to add Tracing Functionality to Vala, and can use some help on
which direction to take.

What is Tracing Functionality?
=========================
When you compile with the "--trace" flag, and run a vala program, every
time a Vala Function (not a library/System function) is called, a message
is printed in your console.

For example, if you have a program like
function foo(int x) {
  // do something
}

int main() {
  foo (42);
}

And you run this program, there will be an output like:
[TRACE] foo(42)

I am modelling this on Mono's Tracing functionality [1]

Why is tracing functionality useful?
=============================
It will help vastly while debugging and for a new contributor to quickly
identify the code path, so he/she can identify the relevant functions which
are executed when a bug is reproduced or a feature is activated.

This gives a much better starting point for people unfamiliar with the
codebase, which I hope will be orders of magnitude more productive than
"grep"ping the code each time.

How am I implementing tracing?
============================
I have attached a patch with an initial version of tracing functionality.
It merely adds a "printf" whenever there is a new function call. It
currently fails to compile programs because it doesn't add stdio.h to the C
Code.

But it is certainly possible and quite easy to add tracing functionality.

My Questions
============
1. If I polish the functionality, are you willing to merge this feature
upstream?

2. I found 2 places where I can add this functionality so far: in
ValaCCodeFunction and ValaCCodeMethodModule (latter as suggested by flo on
#vala)

I felt the first one was easier, so I went ahead with that. Should I
continue in this direction or should I consider adding it in the Method
Module?

3. Is there a way to get the current Line Number and File of the source
vala file that is being converted?

4. I understand that this would have some pretty annoying issues in
multi-threaded programs. So I thought that I could have an output like this:
[Thread/Process ID][Trace] filename.vala:32 foo_bar_func(param, param)

so the output can be written to a file, and then:
cat output.txt | grep threadID | less

can be used to study the logs, and this will be free of any issues. I don't
know enough C to get the Thread/Process ID. Can you tell me how to do this?

Thank you,
Anirudh

[1]: http://www.mono-project.com/Debugging#Tracing_Program_Execution

-- 
Co-founder and Developer, RazorFlow
http://razorflow.com

Attachment: 0001-Initial-work-on-a-trace-feature.patch
Description: Binary data



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]