gpt4 book ai didi

.net-4.0 - 为什么 LocalBuilder.SetLocalSymInfo 不发出变量名?

转载 作者:行者123 更新时间:2023-12-04 14:49:27 25 4
gpt4 key购买 nike

我尝试运行 System.Reflection.Emit.LocalBuilder 文档页面上显示的示例代码类,但似乎对 LocalBuilder.SetLocalSymInfo(string, int, int) 的调用没有做任何事情,因为 IL Dissasembler 将其显示为 SampleAssembly.dll 的 IL:

.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

为什么反汇编程序中没有列出变量名称( myStringmyInt )?

环境信息:
  • Windows 7 64 位
  • Visual Studio 2010 专业版 SP1
  • .Net 4.0.30319 SP1
  • 目标框架:.Net 4 客户端配置文件
  • 调试配置(针对使用 System.Reflection.Emit 的程序)

  • 编辑:正如我在评论中指出的,有一个 SampleAssembly.pdb 文件与 SampleAssembly.dll 文件一起生成。

    最佳答案

    System.Reflection.Emit 中的调试支持很差而且很古怪(在一定程度上这对 IKVM.Reflection 也是如此,因为它继承了自.pdb 文件格式未记录)。

    无论如何,示例不起作用的原因是它缺少以下代码:

    ISymbolDocumentWriter doc = myModule.DefineDocument("sourcefile", Guid.Empty, Guid.Empty, Guid.Empty);

    myMethodIL.MarkSequencePoint(doc, 1, 0, 1, 0);

    方法中必须至少有一个序列点,因为这是内部数据结构绑定(bind)在一起的方式。

    关于.net-4.0 - 为什么 LocalBuilder.SetLocalSymInfo 不发出变量名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9253498/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com