小编use*_*289的帖子

DLR - 为什么我的堆栈跟踪中没有显示调试信息?

首先,我已经阅读了使CLR/.NET语言可调试,但我仍然无法实现这一点.

我编写了一种玩具语言,通过生成Linq表达式,然后调用LambdaExpression#CompileToMethod.大多数这些表达式都附带调试信息,如下所示:

//SmithExpression#InsertDebugInfo
Expression InsertDebugInfo(Expression expression, DebugInfo debugInfo) {
    var column = 1;
    var debugExpr = Expression.DebugInfo(debugInfo.SymbolDocumentInfo
                 ,Info.LineNumber, column, Info.LineNumber, column + 1);
    return Expression.Block(debugExpr, expression);
}
Run Code Online (Sandbox Code Playgroud)

DebugInfo如下所示:

public class DebugInfo {
    /* arbitrary value from http://www.famkruithof.net/uuid/uuidgen */
    public static Guid SmithGuid = new Guid("83c65910-8376-11e2-9e96-0800200c9a66");

    public readonly SymbolDocumentInfo SymbolDocumentInfo;
    public readonly DebugInfoGenerator DebugPdbGenerator;

    public DebugInfo(String name) {
        SymbolDocumentInfo = Expression.SymbolDocument(name, SmithGuid);
        DebugPdbGenerator = DebugInfoGenerator.CreatePdbGenerator();
    }
}
Run Code Online (Sandbox Code Playgroud)

整个事情都是这样的(你可以忽略关于inits的部分):

public static Action CompileSmithExpression(SmithExpression sexpression
           ,DebugInfo debugInfo, Parameter moduleParameter, Expando module) …
Run Code Online (Sandbox Code Playgroud)

.net linq c#-4.0

7
推荐指数
1
解决办法
591
查看次数

标签 统计

.net ×1

c#-4.0 ×1

linq ×1