1

lua から呼び出された C# 関数が例外をスローする可能性がある既存の C# アプリケーションのスクリプト作成について、NLua を検討しています。

これまでのところ、私はこれを見つけました:

  • 呼び出された C# 関数でlua コードが例外を処理しない場合、NLua はそれをラップして再スローし、C# レベルで処理できるようにします。

  • lua コードxpcall を介して例外を「キャッチ」する場合、例外の詳細 (例: -.Message) にアクセスする方法が見つかりませんでした。

前者では、lua レベルのスタックダンプである debug.traceback() を取得できますが、例外の詳細は取得できません。後者は例外を提供しますが、Lua スタックダンプを取得する方法はありません (.Source で lua ファイルと行を取得しますが、それだけでは十分ではありません)。

質問は:

  • NLua "xpcall" エラー ハンドラで C# 例外の詳細を取得できますか?

  • または、NLua で C# 例外を処理して (lua スタックダンプを作成する目的で)、再スローすることはできますか?

  • または、egluaState.DoFile("myScript.lua") が例外を引き起こしたときに、"lua 状態" から lua スタックダンプを取得できますか?

どんな助けでも大歓迎です。NLua は、例外処理のみを整理できれば、私が考えていることにはほぼ完璧に思えます。

4

1 に答える 1

3

pcallスクリプトから使用する必要があります。NLua は例外をラップし、 によって返された 2 番目の値で戻りpcallます。

error, exception = pcall (someFunction)

if (not error) then
    print(exception.Message)
end

GitHub の例

于 2015-09-01T20:19:18.020 に答える