Recursion 仪器时间分析器:什么是<;已达到调用堆栈限制>;什么意思?我能控制限额吗?

Recursion 仪器时间分析器:什么是<;已达到调用堆栈限制>;什么意思?我能控制限额吗?,recursion,profiling,instruments,stack-trace,Recursion,Profiling,Instruments,Stack Trace,“> 当我的程序执行深度递归算法时,Instruments中的时间分析器会创建一个新的入口点函数,名为。我想这意味着时间分析器在采样时回溯当前堆栈时会有一些限制 我可以控制这个限制吗?如果可以,如何控制 编辑 我尝试了首选项->DTrace->Max Backtrace Depth设置,但似乎没有效果 下面是一个具有深度递归的简短程序,它可以到达定义的深度,并在那里停留一段时间: #define RECURSION_DEPTH 200 void recurse( unsigned const

“>

当我的程序执行深度递归算法时,Instruments中的时间分析器会创建一个新的入口点函数,名为
。我想这意味着时间分析器在采样时回溯当前堆栈时会有一些限制

我可以控制这个限制吗?如果可以,如何控制

编辑

我尝试了
首选项->DTrace->Max Backtrace Depth
设置,但似乎没有效果

下面是一个具有深度递归的简短程序,它可以到达定义的深度,并在那里停留一段时间:

#define RECURSION_DEPTH 200

void recurse( unsigned const depth )
{
    if( RECURSION_DEPTH == depth ) for( unsigned i = 0; i < 1000000000; ++i );
    else recurse( depth + 1 );
}

int main()
{
    recurse( 1 );
    return 0;
}
#定义递归\u深度200
无效递归(无符号常量深度)
{
(无符号i=0;i<100000000;++i)的if(递归深度==深度);
否则递归(深度+1);
}
int main()
{
递归(1);
返回0;
}

当我对该程序进行时间分析时,即使我将DTrace首选项设置为远大于200的数字,我仍会继续看到
现象。

您可以在DTrace部分中根据仪器的首选项设置最大调用堆栈深度。初始调用堆栈限制为128


此设置似乎对我没有任何影响。有关详细信息,请参阅我对问题的编辑。我不知道有任何其他方法可以设置最大调用堆栈深度。因为您说您的代码具有深度递归,所以我唯一能建议的另一件事是选择调用树部分的展平递归复选框。据我所知,oOption仅更改收集信息的方式。在采样过程中,调用堆栈的第一部分已被丢弃。