本文介绍了获取函数调用深度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好.

我想获取函数调用深度,例如

Hello.

I want to get function call depth, for example

int main()
{
   int j=0;
   for(j=0;j<10;j++)
      printf("%i",d1(j));
   return 0;
}
int d2(int i)
{
   if(i<=1)return i;
   else
   return i*d1(i-1);
}
int d1(int i)
{
   if(i%2==0)return d2(i/2);
   return i;
}


树看起来像:

主要
-> d1
-> d2
-> d1
-> d1
-> d2
---> d2

主要问题是,我不必在每个代码部分中都放置触发器功能.


Tree will look like:

main
->d1
-->d2
->d1
->d1
-->d2
--->d2

The main problem, that i mustn''t be done with puting trigger function in every code part.

int d2(int i)
{trigger();
   if(i<=1){trigger();return i;}
   else
{trigger();
   return i*d1(i-1);}
}


而且应该像


And should look like

int d2(int i)
{trigger();
   if(i<=1);return i;
   else

   return i*d1(i-1);
}


我想使用类似堆栈地址的方法(建立自己的调用堆栈并比较函数地址):


I think to do it using stack address like(build own call stack and compare function addresses):

//pseudo
trigger()
{

int i=0;
if(current_thread.address[last_address]=>&i)
{
 while(current_thread.address[last_address--]=>&i)current_thread.depth--;
 current_thread.address[last_address]=&i;
}
else
{
current_thread.address[last_address+1]=&i;
current_thread.depth++;
}

}


无需任何概要分析扩展程序(库等)即可完成此操作的主要目的之一.


One of the main purpose to do it without any profiling compilier extensions (libs,etc). Am I right doing such things?

推荐答案



这篇关于获取函数调用深度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-23 01:00