0

我在 C# - lua 项目上运行。该项目的所有逻辑都在 lua 部分,c# 部分包含内置控制台以显示结果并接受输入。所以调试几乎都发生在lua部分。我的 lua 代码如下所示:

[lua]
#region main
1  foo(blah)
2  bar(blah) -- bad argument, will provoke error
#end

#region functionsholder
1  function foo(argument)
2    --do something
3  end
4  function bar(argument)
5    --do something with argument.
6  end
#end

然后在我的项目中,c# 包含两个字符串块,即 main 和 functionsholder。然后我的 c# 代码运行如下:

[c#]
1   public void runscript(string name)
2   try
3   {
4       lua.Dostring(name);
5   }
6   catch (LuaException e)
7   {
8       Console.Writeline("An unhandled exception occured at string chunk " + name + ".");
9       Console.WriteLine(e);
10  }
11  runscript("functionsholder"); // need to load functions first.
12  runscript("main"); // start main code block, and by above, this result in exception.

问题(我认为)是日志消息。

An unhandled exception occured at string chunk main.
LuaInterface.LuaException: [string "chunk"]:5: bad argument #1 to 'pairs' (table expected, got nil)
   위치: LuaInterface.Lua.ThrowExceptionFromError(Int32 oldTop)
   위치: LuaInterface.Lua.DoString(String chunk)
   위치: SomeProject.SomeClass.runscript(String name) 파일 d:\Git\SomeSolution\SomeProject\SomeClass.cs:줄 4

要调试此代码,我认为了解代码失败的位置很重要。但是我无法获得正确的信息,因为 LuaException 只提供行号信息,而不是块名称。我的错误处理代码给出了一个块名称,但它没有用,因为在其他块中抛出了异常。

到目前为止,感谢您耐心阅读本文,我的问题就在这里(而且很明显):如何获得正确的错误消息以进行调查?我想要两个信息,它们是 1)抛出异常的行号。2) 确切行所属的字符串块名称。

4

0 回答 0