- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,我已经阅读Making a CLR/.NET Language Debuggable,但是仍然难以实现。
我编写了一种玩具语言,该语言可以通过生成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);
}
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();
}
}
public static Action CompileSmithExpression(SmithExpression sexpression
,DebugInfo debugInfo, Parameter moduleParameter, Expando module) {
AssemblyName assemblyName =
new AssemblyName(
"RuntimeHelpers.CompileToSmithExpression helper assembly"
);
AssemblyBuilder assemblyBuilder =
AppDomain.CurrentDomain.DefineDynamicAssembly(
assemblyName, AssemblyBuilderAccess.RunAndSave
);
ModuleBuilder moduleBuilder = assemblyBuilder
.DefineDynamicModule(assemblyName.Name, "onlyModule.dll");
var debugAttributes =
DebuggableAttribute.DebuggingModes.Default |
DebuggableAttribute.DebuggingModes.DisableOptimizations;
ConstructorInfo constructor =
typeof(DebuggableAttribute)
.GetConstructor(new Type[] {
typeof(DebuggableAttribute.DebuggingModes)
}
);
var cab = new CustomAttributeBuilder(constructor, new object[] { debugAttributes });
assemblyBuilder.SetCustomAttribute(cab);
moduleBuilder.SetCustomAttribute(cab);
TypeBuilder typeBuilder =
moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
//inits generates expressions that set 'constant' fields to their values.
//the call also adds the 'constant' fields to the typeBuilder.
//Must call ToArray() to make it run.
var inits = FieldInits(sexpression, typeBuilder).ToArray();
var ex = sexpression.ToExpression(debugInfo);
var fullDlrExpression = Expression.Block(inits.Append(ex));
var parameters = new ParameterExpression[] { moduleParameter.DlrParameter };
var lambda = Expression.Lambda(fullDlrExpression, parameters);
/* Method will take the module as a parameter. */
MethodBuilder meth = typeBuilder.DefineMethod(
"MyMethod",
MethodAttributes.Public | MethodAttributes.Static,
typeof(void),
new Type[] { typeof(Expando) } );
lambda.CompileToMethod(meth, debugInfo.DebugPdbGenerator);
Type madeType = typeBuilder.CreateType();
return () => madeType.GetMethod("MyMethod").Invoke(null, new Object[] { module });
}
Unhandled Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.MissingMemberException: Can't invoke member error of [] []
at (wrapper dynamic-method) object.CallSite.Target (System.Runtime.CompilerServices.Closure,System.Runtime.CompilerServices.CallSite,Smith.Expando) <IL 0x0004f, 0x00127>
at System.Dynamic.UpdateDelegates.UpdateAndExecute1<Smith.Expando, object> (System.Runtime.CompilerServices.CallSite,Smith.Expando) <0x0040b>
at MyDynamicType.MyMethod (Smith.Expando) <IL 0x002bc, 0x00aaa>
at (wrapper managed-to-native) System.Reflection.MonoMethod.InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&) <IL 0x00016, 0x00067>
etc...
最佳答案
您的异常是嵌套异常。要打印出堆栈跟踪,请查看InnerException。
catch (Exception ex)
{
while (ex != null) {
Debug.Print(ex.ToString());
ex = ex.InnerException();
}
}
关于.net - DLR-为什么调试信息没有显示在我的堆栈跟踪中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15593223/
我在一个较大的 C# 项目的一小部分中使用 DLR,IronPython 是有问题的语言。 对于系统的某些部分,用户可以输入一个小脚本来为它们定制行为。我想要做的是能够限制他们使用无副作用的纯函数或在
首先,我已经阅读Making a CLR/.NET Language Debuggable,但是仍然难以实现。 我编写了一种玩具语言,该语言可以通过生成Linq表达式,然后调用LambdaExpres
.Net 4 将具有 DLR(动态语言运行时)。我知道它将用于 Iron Python 和 Iron Ruby 之类的东西。但这就是它的全部好处吗? DLR 有什么用处? DLR 是如何工作的? 最佳
是否可以从非托管代码(例如 C++ 或 Delphi)调用托管代码,特别是 IronRuby 或 IronPython? 例如,我们有一个用 Delphi 编写的应用程序正在迁移到 C#.NET。我们
我到处都读到 .net 4 中的新 DLR,他们说它的一个很好的用途是反射,并且总是显示的代码片段类似于 dynamic d = GetSomeObject(); d.DoSomething(); d
我打算创建一个 Web 服务,以尽可能快的速度执行大量手动指定的计算,并且一直在探索 DLR 的使用。 抱歉,如果本文很长,请随意浏览并了解总体要点。 我一直在使用 IronPython 库,因为它使
我正在考虑限制使用 C# 的 dynamic 关键字。我的initial time trials令人惊讶 - 100,000 次迭代的性能下降不到一秒(可能是由于 DLR 缓存)。 不过,我无权访问内
我需要 DLR 的帮助。我正在实现 IDynamicMetaObjectProvider 和 DynamicMetaObject,但我在获取预期的返回类型时遇到了一些问题。我在元对象中覆盖了 Bind
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 8年前关闭。 Improve thi
随着 .NET 4.0 测试版的推出,以及 .NET 动态语言运行时的更广泛的可用性,我猜这些类型的主题将变得“更热”。 我对 DLR 和 PowerShell 之间的概念差异感到困惑。在我看来,如果
我使用 Antlr 编写了一个 DSL,用于从我的语法文件生成词法分析器和解析器。解析器生成一个抽象语法树,其中包含我可以计算的各种节点(例如函数节点)。在函数节点的代码中,我负责绑定(bind)——
我目前正在使用 DLR 执行以下操作来创建和执行简单的 Python 计算: ScriptRuntime runtime = Python.CreateRuntime(); ScriptEngine
我需要指出正确的方向。我已将 Iron Python 脚本宿主嵌入到一个简单的 C# 应用程序中,但现在我需要了解锁定用户生成的 IronPython 或 IronRuby 脚本的安全性的最佳实践。
DLR 层的职责是什么? 最佳答案 来自 http://msdn.microsoft.com/en-us/library/dd233052.aspx 处的文档. The purpose of the
我正在尝试学习如何在 DLR 之上编写简单的脚本语言,方法是使用一个名为 ToyScript 的非常古老的 DLR 示例。但是 ToyScript 似乎不支持以下脚本结构,我想在我的实现中使用它: p
我对 DynamicMethods、表达式树和 DLR 之间的交互和关系有一些疑问。 我知道 LambdaExpression.Compile 在内部使用 ILGenerator 来创建委托(dele
我必须为 .NET 的静态类型语言开发一个编译器,我正在考虑为此使用 DLR,而不是构建所有部分(词法分析器/解析器、语法、语义、代码生成)。 DLR 是否适合这种情况?或者直接为 .NET 构建编译
我刚刚开始尝试更多地了解 .Net VM 基础,但立即被某些东西抛弃了。我知道有一个叫做 DLR 的新东西,它允许 C# 中的所有动态内容和 IronX 语言的运行。但是现在我正在阅读有关这种称为 B
我正在构建一个针对 .NET 的编译器,并且我之前已经直接生成了 CIL,但是生成 DLR 树将使我的生活变得更加轻松。我支持一些动态功能,即运行时函数创建和鸭子类型,但绝大多数代码是完全静态的。 既
来自维基百科关于 DLR 的条目, 看起来 DLR 的目的是为了使用 Python、Ruby 等语言。这就是 DLR 的全部吗?还有其他好处吗?为什么要为 ASP.net 项目或 Winform 应用
我是一名优秀的程序员,十分优秀!