Wes*_*ser 6 il reflection.emit .net-4.0 variable-names debug-symbols
我试图运行出现的文档页面上的示例代码System.Reflection.Emit.LocalBuilder类,但它看来,调用LocalBuilder.SetLocalSymInfo(string, int, int)没有做任何事情,因为IL反汇编显示了这个作为IL的SampleAssembly.dll:
.method public static string Function1(int32 A_0) cil managed
{
// Code size 10 (0xa)
.maxstack 1
.locals init (string V_0,
int32 V_1)
IL_0000: ldarg.0
IL_0001: stloc.1
IL_0002: ldstr "string value"
IL_0007: stloc.0
IL_0008: ldloc.0
IL_0009: ret
} // end of method Example::Function1
Run Code Online (Sandbox Code Playgroud)
为什么不在Dissasembler中列出变量名(myString和myInt)?
环境信息:
编辑:正如我在评论中提到的,有一个SampleAssembly.pdb文件与SampleAssembly.dll文件一起生成.
System.Reflection.Emit中的调试支持非常差并且很古怪(在某种程度上,对于IKVM.Reflection也是如此,因为它继承了自从之后必须使用的底层.pdb编写器API的一些破坏性. .pdb文件格式未记录).
无论如何,样本不起作用的原因是它缺少以下代码:
ISymbolDocumentWriter doc = myModule.DefineDocument("sourcefile", Guid.Empty, Guid.Empty, Guid.Empty);
myMethodIL.MarkSequencePoint(doc, 1, 0, 1, 0);
Run Code Online (Sandbox Code Playgroud)
方法中必须至少有一个序列点,因为这是内部数据结构连接在一起的方式.
| 归档时间: |
|
| 查看次数: |
309 次 |
| 最近记录: |