2011-02-09 4 views
5

Предположим, у меня есть приложение, в котором пользователь может предоставить скрипт, написанный на JavaScript, для выполнения какой-либо задачи в нем. Это делается с помощью Jint. Однако плохо написанный сценарий может вызвать исключение переполнения стека в JintEngine.Run() и, следовательно, сбой всего приложения. Я хотел бы сообщить пользователю об ошибке в скрипте.Предотвращение переполнения стека Исключение из процесса сбоя

Я попытался запустить Jint в другом домене приложения, что не помогло, так как действие по умолчанию AFAIK на SOE выходит из процесса. Может быть, это изменилось иначе, чем при использовании CLR-хостинга?

Я знаю, что могу запускать отдельный процесс, и это мой отказ, тем не менее я бы не хотел этого делать.

+1

возможно дубликат [C# уловом переполнение стека исключений] (http://stackoverflow.com/questions/1599219/c-catch-a-stack-overflow-exception) – porges

+0

Я прочитал это, однако не нашел ответа, если это можно сделать любым другим способом, кроме использования хоста CLR. –

ответ

7

Как вы подозревали, невозможно исключить StackOverflowException, сгенерированное средой выполнения, если вы не принимаете CLR самостоятельно [1]. Как предполагает документация Microsoft, лучше всего попытаться обнаружить переполнение стека, прежде чем это произойдет.

В случае использования Jint это означает найти способ подключиться к механизму выполнения и прикрепить свой код к произвольным вызовам метода. К счастью, краткий обзор их документации показывает, что у них есть режим отладки, который делает именно это! [2]

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

-Марк

[1] http://msdn.microsoft.com/en-us/library/system.stackoverflowexception.aspx (см замечания)

[2] http://jint.codeplex.com/wikipage?title=Debugging&referringTitle=Documentation

+0

Хорошо ответил. Спасибо! –

Смежные вопросы