防止方法上的 JIT 内联

2024-01-05

我的情况比较特殊。我一直在开发一个用于发送电子邮件的开源库。在这个库中,我需要一种可靠的方法来获取调用方法。我已经用一个完成了这个StackTrace通过分析StackFrame里面的物体。这在关闭优化的调试模式项目中没有问题。

当我切换到打开优化的发布模式时,就会出现问题。堆栈跟踪如下所示:

> FindActionName at offset 66 in file:line:column <filename unknown>:0:0
> Email at offset 296 in file:line:column <filename unknown>:0:0
> CallingEmailFromRealControllerShouldFindMailersActionName at offset 184
     in file:line:column <filename unknown>:0:0
> _InvokeMethodFast at offset 0 in file:line:column <filename unknown>:0:0
> InvokeMethodFast at offset 152 in file:line:column <filename unknown>:0:0
...

这是取自失败的单元测试。在此跟踪的第 3 行中,我应该看到一个名为TestEmail这是在其他地方定义的,但我相信 JITter 正在内联它。我读过,您可以通过将方法设为虚拟来防止内联,但这不起作用。有谁知道防止方法内联的可靠方法,以便您的方法将显示在堆栈跟踪中?


你可以使用MethodImplAttribute http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.methodimplattribute.aspx并指定MethodImplOptions.NoInlining http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.methodimploptions.aspx.

[MethodImpl(MethodImplOptions.NoInlining)]
void YourMethod()
{
    // do something
}

请注意,这仍然不能保证您可以获得源代码中所示的实际调用方法。您的方法不会被内联,但您的方法的调用者可以内联到它自己的调用者中,等等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止方法上的 JIT 内联 的相关文章

随机推荐

  • 如何在C/c++中设置获取互斥锁的优先级

    我有3个进程 同等优先级 P1 P2 P3 定时器 获取互斥锁的优先级如下 P1 1 priority P2 2 priority P3 timer 3 priority 如果假设p3来获取互斥锁 然后p2来等待互斥体 之后 p1 来了 它
  • 在编译文件中包含 mingw 库

    我正在使用 cmake 生成 Eclipse CDT MinGW 项目 Eclipse 版本开普勒 这是我的 Cmakelist project IMGTODICOM find package ITK REQUIRED include IT
  • 信号量相当于进程吗?

    我有一个分叉两个孩子的父进程 我需要强制这些子进程运行时的特定顺序 例如 父进程从文件中获取 命令 并且根据该命令 父进程将使用未命名管道将该命令传递给子进程 a 或子进程 b 我需要按照父级从文件接收命令的顺序在子级中发生一些事情 我使用
  • 如何创建具有多个参数的SqlParameterCollection?

    我正在尝试创建一个SqlParameterCollection 但在添加一些时出现错误SqlParameter in sp Add method 请帮助我如何添加参数以及如何将其传递给我声明一个的另一个函数SqlConnection and
  • 如何在Android单元测试中用模拟数据填充适配器?

    在我的应用程序中 我从服务器获取一些数据并显示到RecyclerView 我可以获取数据并填充adapter并显示为RecyclerView 但我想为此编写测试模拟测试并填充adapter用于显示RecyclerView 我使用此链接作为
  • 性能 pthread_spinlock_t 比我自己的无锁 std::atomic_flag 实现(围绕 std::list)好 2 倍

    我想用我自己的自旋锁实现替换 pthread spinlock t 示例 然而 我的实现结果实际上远远低于 pthread spinlock t 性能 虽然 pthread spinlock t 结果约为 0 9 秒 但我自己的实现大约需要
  • 如何以编程方式更改导航栏中 UIVisualEffectView 的 alpha?

    我有一个滚动视图 用于根据用户滚动视图的距离来控制其他元素的 Alpha 首先 我设置了模糊视图 首先 这里的阿尔法似乎不适用 var effect UIBlurEffectStyle light if available iOS 10 0
  • 为什么我收到错误 ld: failed to conversion GOTPCREL relocation;将 C++ 与使用 nasm 或 as 组装的目标文件链接时,使用 --no-relax 重新链接?

    我正在编写一个小型 x86 64 内核 我正在设置 IDT 并遇到了一个我不太明白的奇怪错误 这是一个最小的例子 entry s extern InterruptHandler global isr0 align 4 isr0 jmp sh
  • 将 XML 数据存储在 mongodb 集合中

    我对 mongodb 这样的 NoSQL 数据库还比较陌生 所以请原谅我的无知 背景 现在 我有一个执行以下操作的系统 从客户端收集系统数据 将该信息输出到 xml 文档中 Perl 脚本获取 xml 标签中的数据并将其放入 mySQL 数
  • Edittext的Listview的动态长度不保存输入

    我有编辑文本框的列表视图 我还有一个按钮可以将新行添加到列表中 因此列表长度是动态的 但是 当我在编辑文本中输入文本并按添加按钮时 我的输入消失了 我认为当我向列表中添加新行时 我的输入没有被捕获 如何保存输入 以便在更改行数时保留我的文本
  • sqlite:只读数据库中的临时表/视图?

    看来 sqlite 不允许我在只读数据库中创建临时视图 我错过了什么吗 如果它是临时的 我认为数据库连接模式应该不重要 我什至指定了 PRAGMA temp store MEMORY 它没有帮助 除了使用视图之外 还有其他合理的选择吗 您可
  • 使用 Ubuntu 服务器 17.04 php 7 和 apache2 加载 oci8.so 时出错

    我在一台Ubuntu Server 17 04上经历了下载Oracle即时客户端 SDK等的整个过程 然后使用alien将rpm包转换为deb 安装 设置路径 下载pecl oci8 编译并安装 没有错误 等 然后添加以下行 扩展名 usr
  • .NET Core 应用程序进程内存在对象被释放后不会减少

    我在 Windows 中运行的 ASP NET Core 2 1 应用程序遇到问题 该应用程序增加了内存消耗 直到最终崩溃并需要终止 NET Core Host过程 我怀疑原因可能是每小时在后台运行一次的同步任务 并且我已确认禁用它可以解决
  • 数据访问层的设计模式

    我有一个使用数据库 MongoDB 来存储信息的应用程序 过去 我使用了一个充满静态方法的类来保存和检索数据 但后来我意识到这不是非常面向对象或面向未来的 尽管我不太可能更改数据库 但我宁愿拥有一些不会将我与 MongoDB 联系得太紧密的
  • javafx2 中的菜单项工具提示

    javafx2中有两个问题 如何为菜单项设置工具提示 如何设置菜单项的大小 宽度 如果您有答案 请告诉我 这两个问题的答案都直接向全班同学提供自定义菜单项 http docs oracle com javafx 2 api javafx s
  • FreeLibraryAndExitThread 在卸载注入的 DLL 时导致程序崩溃

    我正在编写一个 DLL 它被注入到游戏中 以便进行一些逆向工程 有一段时间 当我对程序进行更改时 我能够成功地注入 弹出和重新注入 我在用着FreeLibraryAndExitThread卸载 将 XInput 添加到程序中以便我可以捕获用
  • Java练习:使用递归方法打印星号三角形及其倒三角形

    我需要打印一个三角形及其倒三角形 站在其尖端 我设法只打印出三角形 我知道我可以轻松使用 for 循环 但我想知道如何使用递归 就我而言 我不知道如何打印三角形和倒三角形 谢谢 Example desired output My code
  • ASP.NET MVC - 视图模型、域模型和数据模型[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用样本函数将数据拆分为训练/测试集

    我刚刚开始使用 R 我不确定如何将我的数据集与以下示例代码合并 sample x size replace FALSE prob NULL 我有一个数据集 需要将其放入训练集 75 和测试集 25 中 我不确定应该在 x 和 size 中输
  • 防止方法上的 JIT 内联

    我的情况比较特殊 我一直在开发一个用于发送电子邮件的开源库 在这个库中 我需要一种可靠的方法来获取调用方法 我已经用一个完成了这个StackTrace通过分析StackFrame里面的物体 这在关闭优化的调试模式项目中没有问题 当我切换到打