5

ユーザーがJavaScriptで記述されたスクリプトを提供して、その中で何らかのタスクを実行できるアプリケーションがあるとします。これは、Jint を使用して行われます。ただし、不適切に記述されたスクリプトは、スタック オーバーフロー例外を引き起こし、JintEngine.Run()アプリケーション全体をクラッシュさせる可能性があります。スクリプトのエラーについてユーザーに通知したいと思います。

別のアプリケーション ドメインで Jint を実行しようとしましたが、役に立ちませんでした。SOE での AFAIK デフォルト アクションがプロセスを終了しているためです。CLR ホスティングを使用する以外の方法で変更できますか?

別のプロセスを実行できることはわかっていますが、それが私のフォールバックですが、それはしたくありません。

4

1 に答える 1

7

ご想像のとおり、自分で CLR をホストしていない限り、ランタイムによって生成された StackOverflowException をキャッチすることはできません [1]。Microsoft のドキュメントが示唆しているように、最善の策は、スタック オーバーフローが発生する前にそれを検出することです。

Jint を使用する場合、これは、実行エンジンにフックし、独自のコードを任意のメソッド呼び出しにアタッチする方法を見つけることを意味します。幸いなことに、彼らのドキュメントの簡単な概要を見ると、まさにそれを行うデバッグ モードがあることがわかります。[2]

デバッグ モードで実行すると、スクリプトの実行が遅くなることは間違いありません。オーバーフローを検出する利点がペナルティに値するかどうかを判断するのはあなた次第です。実際に問題になることを確認するために、そのペナルティを測定することをお勧めします。考えられる軽減策の 1 つは、デバッグ モードがアクティブになるタイミングをユーザーが選択できるようにすることです。

-マーク

[1] http://msdn.microsoft.com/en-us/library/system.stackoverflowexception.aspx (備考を参照)

[2] http://jint.codeplex.com/wikipage?title=デバッグ&referringTitle=ドキュメント

于 2011-02-10T03:26:37.337 に答える