c - 如何让 ruby​​ mkmf 识别已修补的函数?

标签 c ruby rubygems

我有兴趣使用ruby-prof并且对其内存分析方面特别感兴趣。我正在尝试将它专门用于 ruby​​ 1.9.3-p484。我知道它需要补丁,并且基本上已经应用了this尽管针对 p484 进行了修改。

Ruby 编译/构建良好,并且我的 ruby​​ 环境的 irb 具有在 GC 上定义的这些函数

irb(main):001:0> GC.malloc_allocations
=> 56769
irb(main):002:0> GC.malloc_allocated_size
=> 11939060

然后我尝试 gem install ruby​​-prof (使用我的自定义 ruby​​ 中的 gem 二进制文件)并且安装得很好。然而,它运行的 mkmf extconf 拒绝识别已修补的函数。 Irb 证实了这一点。

irb(main):004:0> have_func("rb_gc_malloc_allocations")
checking for rb_gc_malloc_allocations()... no
=> false
irb(main):005:0> have_func("rb_gc_malloc_allocated_size")
checking for rb_gc_malloc_allocated_size()... no
=> false

我知道documentation for have_func说它首先检查“通用”(不确定这意味着什么)头文件或您告诉它检查的任何其他头文件。 ruby-prof 默认情况下只检查公共(public) header (在其 extconf.rb 中)。

不幸的是,我对 C 不太感兴趣。我的补丁是否遗漏了一些东西?我还需要在 ruby​​ header 中添加一些内容吗?我需要传递一些标志给 gem install 命令,以便 ruby​​-prof 的 extconf.rb 找到正确的函数?有什么建议吗?

最佳答案

所以,我终于解决了这个问题(当然,在同事的帮助下)。事实证明,该函数确实需要在 ruby​​ header 中公开为可用。我在问题中发布的补丁需要进行一些调整,以符合 ruby​​-prof 的期望(并在 header 中公开该函数)。

我已经把它贴出来了here希望它能对 future 的知识探索者有所帮助。

关于c - 如何让 ruby​​ mkmf 识别已修补的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22082755/

相关文章:

c - C 中的简单是/否循环

c++ - 如何在excel中使用标准输入 '<'?

ruby-on-rails - 避免对 rails 中的表进行多次查询

ruby-on-rails - 安装 Rails gem 时,rails.bat 如何安装到 bin 目录?

ruby - 来自 Bundler 的 Fresh Ruby gem - 无法加载我的 version.rb 文件?

c - flock() 的范围是什么?

c - 答案永远是零

ruby - 在RubyZoho中,如何设置Task.related_to Lead.id?

ruby - 获取使用 Mechanize Ruby 打开的新选项卡的内容

macos - 您没有对/Library/Ruby/Gems/2.3.0目录的写许可权