Вопрос по exception – Как настроить глубину вызова в PowerShell?

4

Я просто пробовал что-то в PowerShell и получил сообщение об ошибкеcall depth устанавливается в 1000 в некоторой тестовой рекурсивной функции. Я искал в Интернете некоторую информацию и обнаружил, что это связано с обработкой ошибок в PowerShell (если я правильно понял):

The recursion depth limit is fixed in version 1. Deep recursion was causing problems in 64-bit mode because of the way exceptions were being processed. It was causing cascading out-of-memory errors. The net result was that we hard-limited the recursion depth on all platforms to help ensure that scripts would be portable to all platforms. - Bruce Payette, co-designer of PowerShell

я нашел этоВот.

Кроме того, я нашел эту страницу исключений в MSDN, в которой говорится, что этот предел можно настроить (но я не нашел ничего о том, как это сделать) - см. Раздел «Примечания».Вот.

How can this limit be set?

Ваш Ответ

1   ответ
4
In PowerShell V1 the maximum call depth is 100:

.NET Reflectorмы можем видеть в этом фрагменте изSystem.Management.ExecutionContext код класса,

internal int IncrementScopeDepth()
{
    using (IDisposable disposable = tracer.TraceMethod("{0}", new object[] { this.scopeDepth }))
    {
        if (this.CurrentPipelineStopping)
        {
            throw new PipelineStoppedException();
        }
        this.scopeDepth++;
        if (this.scopeDepth > 100)
        {
            ScriptCallDepthException exceptionRecord = new
            ScriptCallDepthException(this.scopeDepth, 100);
            tracer.TraceException(exceptionRecord);
            throw exceptionRecord;
        }
        return this.scopeDepth;
    }
}

что невозможно изменитьhardcoded 100.

In PowerShell V2 the maximum call depth is 1000

Опять же, при взгляде на код, кажется, не существует способа обойти максимальную глубину вызова по умолчанию.

In PowerShell V3 (CTP) there doesn't seem to be a maximum call depth (unless you run out of resources of course). This behaviour has been described as a bug on connect, so it might change in the final version.
@jumbo Да, это ошибка документации, если я не ошибаюсь. :-) Я обновил информацию относительно V3 со ссылкой на ошибку, поданную при подключении Романом Кузьминым.
Хорошая работа там. Значит, это значит, что в доцентации есть ошибка, верно? Или я ошибся? jumbo

Похожие вопросы