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