如何让debuginfo处理已编译的委托

时间:2016-05-13 18:50:34

标签: c# linq cil

我正在开展宠物项目: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而堆栈跟踪中没有其他信息。

如何让堆栈跟踪也显示行信息。

0 个答案:

没有答案