【发布时间】:2020-07-11 14:02:03
【问题描述】:
是否有一种机制可以标记代码中的某个点,并将该标记携带到生成的 MSIL 中?
在查找大型方法的特定部分时会很有帮助,而不必通读所有 MSIL 来找到所需的部分。
目前,我只是放置了一个未引用的字符串变量。这将出现在调试版本中,但不会出现在生产版本中,但这是一个 hack,我希望可能有一个正确的方法。可能是编译器属性之类的,但我找不到任何东西。
根据第一条评论,添加更多详细信息...这是 MSIL 的一个大型方法部分。它与我想查看生成的 MSIL 的一行 C# 代码相关:
- ...
- IL_0645:stloc.s nLon
- IL_0647: ldloc.s ofs
- IL_0649:ldarg.1
- IL_064a: bge.s IL_0660
- IL_064c:ldloc.0
- IL_064d: ldloc.s ofs
- IL_064f:重复
- IL_0650:ldc.i4.1
- IL_0651:添加
- IL_0652:stloc.s ofs
- IL_0654:conv.i
- IL_0655:ldc.i4.2
- IL_0656:多重
- IL_0657:添加
- IL_0658:ldind.u2
- IL_0659:重复
- ...
我的问题是,除了从 IL_0000 读取并遵循 600 多行 MSIL 代码之外,是否有一种简单的方法可以通过注释或 ?? 找到此部分。
谢谢
【问题讨论】:
-
感谢您抽出宝贵时间分享您的问题。你要求什么不清楚。你的目标和困难是什么?到目前为止你做了什么?请尝试更好地解释您的问题、您的开发环境和数据结构,并分享或多或少的代码(无屏幕截图)、图像或屏幕草图以及用户故事或场景图。为了帮助您改进您的要求,请阅读How do I ask a good question 和Writing the perfect question。
-
就我个人而言,我不明白这个问题,并且 BR.S (x86 JMP) 提到了一个标签......但我的英语很差。例如,使用 ILSpy 或 Reflector,您可以看到 C# 和生成的 IL,因此您可以轻松阅读代码,不是吗?
-
我看到了更新的问题。如果我明白,你不能。您为每行 C# 代码生成了 IL,因此需要尽可能多的 IL atom 指令。你不能把东西放在中间。你所能做的就是为反汇编工具设置C#和IL,让你的眼睛去辨别列表。你也可以重构你的代码来创建更小的方法,你将拥有更干净的代码,更好的设计和可维护性。
-
我没想到 Stackoverflow 会是这样一个充满敌意的网站。您实际上是因为不理解我的问题而否决了我?这太侮辱人了。不是每个人都是专家,这就是他们来这里提问的原因。我的编辑(添加示例 CIL,这实际上与问题无关)实际上并没有增强问题本身。这个问题只需要阅读前 2 段。第三个是我使用的解决方法,它增加了上下文。在寻找我不知道的东西时,我的问题再具体不过了。
-
@.user6604437 我并不想表现出敌意。我希望我一直是敌对的反面试图帮助你。我花时间试图理解和帮助你。但我认为这个问题太深奥了,没有价值继续讨论,所以投反对票。不要生我的气,反对票就是为了这个,不管我错与否。如果你或有人说服我我错了,我会取消。所以接近投票要求澄清和更多细节,但你没有回答我......祝你工作顺利!
标签: c# attributes cil