2012-05-24 47 views
0

這是一個非常奇怪的錯誤,我有時會與某些庫(無論是否包含在框架中)一起獲得。某些代碼段隨機退出當前方法

例如,這個時候我LuaInterface得到它這樣做:

//' s = string to existing file path 
lua.DoFile(s) 
Dim func = lua.GetFunction("ohai_regex()") 
Dim ret = func.Call() 'doesnt do anything 
//' file s contains function ohai() 
MessageBox.Show("Geronimo!") 'NEVER gets reached 

我期望的func.Call()到如果事情到了返回異常,或做任何事情出錯了,但在這裏它只是謀殺我立即返回的方法!這裏同樣的東西也在一個循環中,它沒有得到更多的迭代,它只是停止執行這個函數,並繼續運行程序。

現在這已經發生了幾次。我不記得其他時間。

(也許我使用了這裏的LuaInterface編碼是錯誤的,但是這不是我的點...)

+0

環繞着'try catch',可能你會在那個電話中得到例外 – Reniuz

+0

@Reniuz實際上工作...上次我有同樣的問題,它沒有工作。所以也許這是一個「正常」CLR異常處理程序偷偷摸摸的異常,但不是我自己的'try catch'機制。這是否應該在clr中發生? – sinni800

回答

1

我看到了兩個可能的原因:

  • 代碼確實實際拋出一個異常,然後在其他層次上抓住它並忽略它。
  • 庫中的代碼被破壞,所以它從堆棧中消耗自己的返回地址,並在返回時使用方法的返回地址。
+0

我實際上可以嘗試捕獲錯誤,但不使用Visual Studio中的調試機制。實際上CLR中可能會發生「吃完自己的回報地址」嗎?瘋狂......也許它與本地代碼有關? – sinni800

+0

@ sinni800:像這樣的代碼通常不會在託管代碼中出現。當我從IL代碼動態創建代碼時,我已經體驗過它。 – Guffa

+0

嗯,好吧。但LuaInterface例如調用本地庫lua51.dll – sinni800