簡體   English   中英

防止崩潰進程發生堆棧溢出異常

[英]Prevent Stack Overflow Exception from crashing process

假設我有一個應用程序,用戶可以在其中提供用JavaScript編寫的腳本來執行某些任務。 這是使用Jint完成的。 但是,編寫錯誤的腳本會導致JintEngine.Run()JintEngine.Run() Stack Overflow異常,從而導致整個應用程序崩潰。 我寧願告訴用戶腳本中的錯誤。

我試圖在另一個應用程序域上運行Jint,這沒有幫助,導致SOE上的AFAIK默認操作正在退出進程。 可以通過使用CLR托管來改變任何其他方式嗎?

我知道我可以運行單獨的流程,這是我的后備,但我不想這樣做。

正如您所懷疑的那樣,除非您自己托管CLR,否則捕獲運行時生成的StackOverflowException是不可能的[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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM