我正在运行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)确切行所属的字符串块名称。