问题标签 [il]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c#-4.0 - 在运行时生成类型
我需要在运行时创建具有属性的类型。类型必须如下所示:
问题是如何创建 Set 方法?现在我使用以下代码:
但是当我尝试为属性设置值时,抛出异常
c# - C# 编译优化:空合并运算符 - 已更新 - 反射器的错误?
问候!我对 C# 编译器如何执行优化感到有些困惑。
我编写了以下 getter 来弥补“惰性”初始化,以及 null 的情况下的默认值:
静态类助手:
这是Reflector拆解的结果:
看起来它会以不同于假设的方式工作......
更新
工作正常(从配置,覆盖),但反射器显示相同:
.net - 用于编辑.IL 文件的工具?
目前我为此目的使用记事本。是否有任何用于编辑 .NET 中间语言文件的特定工具?
Dotnet IL Editor (DILE) 在编辑文件之前会反汇编文件,我不需要该功能 - 只需要以最有效的方式进行实际编辑。
c# - 何时以及如何使用 Ldvirtftn 操作码?
以下示例程序是我试图掌握ldvirtftn
操作码的用法。您会看到名称表明这是在将虚拟函数指针加载到堆栈时使用的操作码。在示例代码中,我创建了一个具有 2 个静态方法的类型,Ldftn
并且Ldvirtftn
这两个方法都返回Base.Method()
第一个函数的开放委托,Ldftn
使用ldftn
操作码,并且像Base.Method
虚拟一样意外地工作。第二种方法使用Ldvirtftn
并显然创建了一个无效程序。我究竟做错了什么?除了混淆之外,这个操作码的目的是什么?
.net - 反汇编 .NET IL 以查找错误消息
我的团队正在尝试查找 .NET 中出现错误消息的位置,该消息windows service
封装了由 Microsoft 构建并驻留在我们服务器上的 Web 服务,以支持我们使用的业务产品。微软亲自告诉我们,我们收到的错误实际上是他们的错误之一,但是他们无法确定发生的位置或原因。这是一个关键的业务流程,给我们的团队带来了很大的痛苦。
据我们所知,这个错误是随机发生的,并且没有我们可以通过查看堆栈跟踪发现的共性。堆栈跟踪上的最后一次调用是我们尝试从服务读取响应的方法调用,没有提示我们在对服务的方法调用中发生错误的位置或原因。Microsoft Windows 服务未将任何错误记录到事件查看器。
我们想通过查找正在抛出的错误消息字符串来跟踪此错误的来源。如果我们能识别出产生这个错误的方法调用,我们就可以更接近于缩小如何解决这个错误。
虽然我们无权访问此服务的源代码,但我们可以使用 IL 反汇编程序 (idlasm.exe) 查看 IL。我已经为一些程序集转储了 IL,但它们不是文字字符串。
是否可以在 IL 中找到文字字符串?我假设它是编码的——我只是对 IL 了解不够,无法确定在哪里查找,或者如何识别 IL 中的字符串。如果它在 IL 中不作为带有方法的文字字符串存在,并且存储在资源中,那么还能在哪里找到错误消息?
堆栈跟踪,替换了应用程序名称。
一些附带说明是,在出现此错误消息时有大量可用内存,并且当此错误发生时,对任何方法的每次后续调用都会返回相同的错误。它只会通过重新启动 Microsoft 服务而消退。
我们已经缩小了对我们网站使用的服务的每次调用,但无法复制此消息。我们可以使开发中的服务超载大约 1000 倍于生产中的流量,并导致内存不足异常(通过消耗所有内存),但不会导致消息“Can be
由递归函数调用引起”。微软称 Agian 是他们的产品专门抛出的一个独特错误。
更新
我们设法在一个.etx
文件中找到了文字错误消息,如下所示:
我假设@1@15@0@
,@2@1@0@
和@2@END@0@
是程序集用来引用这些字符串的某种引用。有没有人有任何关于如何将这些绑定到使用这些字符串的程序集之一的信息?到目前为止,IL 转储中似乎没有任何数据与@
符号的格式匹配。
f# - F# 函数的通用版本导致无效的 IL?
所以我写了一个小二分搜索函数(不是我需要,只是因为我可以),例如,当我使它特定于字符串或整数时,它工作得很好。当我尝试使用泛型类型签名时,我开始遇到异常。
使用泛型类型的函数副本'a
:
当它被调用时,我得到以下信息:
难道我做错了什么?(再次,当我使用string
orint
而不是 时'a
,一切正常......)
编辑:
我已经编译了 Mono 2.9 左右,然后这个函数在 FSI 中工作。现在,等待 Debian 和 Ubuntu 升级... :D
c# - 创建 DynamicMethod 为属性赋值?
这是一个学习练习。我创建了一个方法,它接受一个 Foo 和一个字符串并设置 A 属性。我使用 Reflector 反汇编来制作以下发射代码。反汇编如下所示:
好的,所以我在那之后模拟了我的发射代码:
我得到了这个例外:
krunk 是什么意思,我该如何解决?
编辑:
我想可能是因为目标方法是私有的,但我不太确定。从DynamicMethod MSDN 页面:
下面的代码示例创建一个与类型逻辑关联的 DynamicMethod。该关联使其可以访问该类型的私有成员。
.net - 为什么生成的 IL 代码以 Nop 开头?
我正在浏览我的一个程序集的一些 IL(通过 ILDasm),我注意到我的所有方法都以 nop
指令开头。
有谁知道这是为什么?
.net - IL中是否有评论之类的东西?
我意识到没有人只是坐下来直接用 IL 开发软件(是吗?)。但是假设您想与其他人共享一段 IL 代码(例如 C# 编译器的输出)以供讨论,并且您还想用一些注释对其进行注释。IL 中是否有实际的注释语法,以便您可以在不使文本作为 IL 无效的情况下执行此操作?没什么大不了的,只是好奇。
c# - Does initialization of local variable with null impacts performance?
Lets compare two pieces of code:
and
I was always thinking that these pieces of code are equal. But after I have build these code (Release mode with optimization checked) and compared IL methods generated I have noticed that there are two more IL instructions in the first sample:
1st sample code IL:
.maxstack 1
.locals init ([0] string str)
IL_0000: ldnull
IL_0001: stloc.0
IL_0002: ldstr "Test"
IL_0007: stloc.0
IL_0008: ldloc.0
IL_0009: call void [mscorlib]System.Console::WriteLine(string)
IL_000e: ret
2nd sample code IL:
.maxstack 1
.locals init ([0] string str)
IL_0000: ldstr "Test"
IL_0005: stloc.0
IL_0006: ldloc.0
IL_0007: call void [mscorlib]System.Console::WriteLine(string)
IL_000c: ret
Possibly this code is optimized by JIT compiller? So does the initialization of local bethod variable with null impacts the performence (I understand that it is very simple operation but any case) and we should avoid it? Thanks beforehand.