如何调试动态生成的方法?

Qué*_*dre 5 .net debugging il dynamic visual-studio-2012

我有一个动态创建的程序集,一个模块,一个类和一个动态生成的方法。

AssemblyBuilder assembly = AppDomain.CurrentDomain.DefineDynamicAssembly(...);
ModuleBuilder module = assembly.DefineDynamicModule(...);
TypeBuilder tb = module.DefineType(...);
MethodBuilder mb = tb.DefineMethod(...);
ILGenerator gen = mb.GetILGenerator();
Run Code Online (Sandbox Code Playgroud)

如何调试使用生成的方法代码ILGenerator?我使用Visual Studio 2012调试器,但它只是逐步执行方法调用。

San*_*nen 5

您需要将生成的代码标记为可调试。
就像是:

Type daType = typeof(DebuggableAttribute);
ConstructorInfo ctorInfo = daType.GetConstructor(new Type[] { typeof(DebuggableAttribute.DebuggingModes) });
CustomAttributeBuilder caBuilder = new CustomAttributeBuilder(ctorInfo, new object[] { 
  DebuggableAttribute.DebuggingModes.DisableOptimizations | 
  DebuggableAttribute.DebuggingModes.Default
});
assembly.SetCustomAttribute(caBuilder);
Run Code Online (Sandbox Code Playgroud)

您还应该添加一个源文件:

ISymbolDocumentWriter doc = module.DefineDocument(@"SourceCode.txt", Guid.Empty, Guid.Empty, Guid.Empty);
Run Code Online (Sandbox Code Playgroud)

您现在应该能够进入动态生成的方法。