capturing enter and exit of every function


 
Thread Tools Search this Thread
Top Forums Programming capturing enter and exit of every function
# 1  
Old 09-04-2008
capturing enter and exit of every function

If I have a "Hello World" function (just prints that) and a similar "Goodbye World" function... is there a way (maybe a compiler option?) that I can get them to be executed directly as the absolute first and last things run in every function call.

So for example, the following code:
Code:
int foo()
{
cout << "I think therefor I am" << endl;
return 0;
}

should print out:
Quote:
Hello World
I think therefor I am
Goodbye World
I assume from this model, that a simple find&replace would work, even using something like grep/sed to add a call to hello() as the first call, and a goodbye() as the last thing before any return/function-exit... but is this doable without manually (including a sed script as "manual") modifying the code? IE, is there a pre-call/post-call function wrapper?...
# 2  
Old 09-05-2008
IF this is exactly what you want - no - manual is your only option. But since that has almost no real world use - are you looking to instrument your code somehow? profiling?

You can also literally write a single generic wrapper that calls each function that takes a function pointer as an argument:
1. hello()
2. function pointer call to selected funtion
3. foo()

then in your code call generic(function1); generic(function5); etc.

Last edited by jim mcnamara; 09-05-2008 at 08:26 AM..
# 3  
Old 09-09-2008
Quote:
Originally Posted by jjinno
If I have a "Hello World" function (just prints that) and a similar "Goodbye World" function... is there a way (maybe a compiler option?) that I can get them to be executed directly as the absolute first and last things run in every function call.

So for example, the following code:
Code:
int foo()
{
cout << "I think therefor I am" << endl;
return 0;
}

should print out:


I assume from this model, that a simple find&replace would work, even using something like grep/sed to add a call to hello() as the first call, and a goodbye() as the last thing before any return/function-exit... but is this doable without manually (including a sed script as "manual") modifying the code? IE, is there a pre-call/post-call function wrapper?...
You can actually use a sed script to replace lines beginning with "{" and "}" with preprocessor directives:
Code:
#define FBEGIN {
#define FEND }

Now the sed scripts:
Code:
sed -i 's/^{$/FBEGIN/' *.c
sed -i 's/^}$/FEND/' *.c

Compile and make sure it works. Once it does, you can change your macros so that FBEGIN and FEND call a function too, like something that logs to a file:
Code:
#define FBEGIN { fprintf(stderr,"%s:%d: Entering function\n",__FILE__,__LINE__);


Last edited by otheus; 09-09-2008 at 10:23 AM.. Reason: fixed sed script
# 4  
Old 09-10-2008
Quote:
Originally Posted by jjinno
If I have a "Hello World" function (just prints that) and a similar "Goodbye World" function... is there a way (maybe a compiler option?) that I can get them to be executed directly as the absolute first and last things run in every function call.

So for example, the following code:
Code:
int foo()
{
cout << "I think therefor I am" << endl;
return 0;
}

should print out:


I assume from this model, that a simple find&replace would work, even using something like grep/sed to add a call to hello() as the first call, and a goodbye() as the last thing before any return/function-exit... but is this doable without manually (including a sed script as "manual") modifying the code? IE, is there a pre-call/post-call function wrapper?...
See this post on instrumenting code - Perret Yannick - Re: How to use '-finstrument-functions' in C++ programs ?.
# 5  
Old 09-10-2008
Quote:
Originally Posted by vino
That's awesome.
# 6  
Old 09-10-2008
Here is a good article on how to do it - including using graphviz to visualize the output.

Visualize function calls with Graphviz
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Function - Make your function return an exit status

Hi All, Good Day, seeking for your assistance on how to not perform my 2nd, 3rd,4th etc.. function if my 1st function is in else condition. #Body function1() { if then echo "exist" else echo "not exist" } #if not exist in function1 my all other function will not proceed.... (4 Replies)
Discussion started by: meister29
4 Replies

2. Shell Programming and Scripting

Returning and capturing multiple return values from a function

Hi I am pretty confused in returning and capturing multiple values i have defined a function which should return values "total, difference" i have used as #!/usr/bin/ksh calc() { total=$1+$2 echo "$total" diff=$2-$1 echo "$diff" } I have invoked this function as calc 5 8 Now i... (2 Replies)
Discussion started by: Priya Amaresh
2 Replies

3. Shell Programming and Scripting

PERL - press Enter function hanging

Hi, I have a sub function called pressEnter within my perl menu script which basically means that the script will await an interaction from the user before moving on. Unfortunately when the script goes into pressEnter it just hangs (even if you press enter!!). Any ideas on what could be... (4 Replies)
Discussion started by: chris01010
4 Replies

4. Shell Programming and Scripting

After exit from function it should not call other function

Below is my script that is function properly per my conditions but I am facing one problem here that is when one function fails then Iy should not check other functions but it calls the other function too So anyone can help me how could i achieve this? iNOUT i AM GIVING TO THE... (1 Reply)
Discussion started by: rohit22hamirpur
1 Replies

5. UNIX for Advanced & Expert Users

Cannot exit from a function?

Hi, Is there a way to exit from a subcommand, which is a function in my example below? #!/bin/ksh function exitFunction { if ]; then echo "success" elif ]; then echo "failed" exit 1 # the exit problem fi exit 0 } ... (2 Replies)
Discussion started by: chstr_14
2 Replies

6. Shell Programming and Scripting

Exit from function

Hi, I just want to exit from function if some condition doesnt meet then control should go back to main program and start running from where it left.. When i used "exit" inside the function, its simply exited from entire script and it didnt run anymore.. Any idea how to do this.. Thanks... (3 Replies)
Discussion started by: nram_krishna@ya
3 Replies

7. Shell Programming and Scripting

Capturing the exit status of the script running in background

Hi All, I have a scenario where I am executing some child shell scripts in background (using &)through a master parent script. Is there a way I can capture the exit status of each individual child script after the execution is completed. (2 Replies)
Discussion started by: paragkalra
2 Replies

8. Shell Programming and Scripting

exit from function

Hi all, My kshell code is not working, when I use a function to return something. But when I use the same function as without returning any values, it is working. Pls help me here. Code1 : func1 () { y=`echo $x | grep XXX| cut -f 2 -d ' '` if ; then exit 100 ... (2 Replies)
Discussion started by: poova
2 Replies

9. Shell Programming and Scripting

Exit script if the user dosent enter any data within 5 seconds

Hello friends, Kindly help me in developing a script that asks user to enter a value and will wait for 5 seconds for the feedback. If there is no answer from the user the script will perform exit or it will continue doing something else Ex: If yu have a multi OS system i believe while... (3 Replies)
Discussion started by: frozensmilz
3 Replies

10. UNIX for Dummies Questions & Answers

capturing exit status ($?) in subshell ??

I am trying to capture the exit status of a parent shell in a subshell. I am using the trap .. Exit command in the subshell I cant use the export command in the parent shell to to export a variable with the exit status to the subshell. I would have tooooo many parent shells to change. ... (2 Replies)
Discussion started by: Bob Bannon
2 Replies
Login or Register to Ask a Question