我正在开展宠物项目:Javascript / Scheme思维模式中的编程语言可以找到项目here
我查看了现有的Stackoverflow问题,例如Making a CLR/.NET Language Debuggable。然而,大多数这些解决方案涉及生成组件。由于种种原因,我宁愿避免创建新的组件。
class Program
{
public static void ThrowingFunction()
{
throw new Exception("Test Exception");
}
static void Main(string[] args)
{
Action thw = ThrowingFunction;
ParameterExpression param = Expression.Parameter(typeof(int), "arg");
SymbolDocumentInfo info = Expression.SymbolDocument("example-script", new Guid("83c65910-8376-11e2-9e96-0800200c9a66"));
Expression<Func<int,int>> exp = Expression.Lambda<Func<int,int>>(
Expression.Block(
Expression.DebugInfo(info,1,1,1,20),
Expression.Invoke(Expression.Constant(thw, typeof(Action))),
Expression.Add(param,Expression.Constant(1))
),
new List<ParameterExpression> { param }
);
Console.WriteLine(exp);
Func<int,int> Fn = exp.Compile(DebugInfoGenerator.CreatePdbGenerator());
try {
Fn(1);
}
catch (Exception e) {
Console.WriteLine(e);
Console.WriteLine(e.InnerException);
}
}
}
上面的代码可以正常工作,但调试信息不包含lambda的行信息,而是倾斜地引用lambda_method而堆栈跟踪中没有其他信息。
如何让堆栈跟踪也显示行信息。