我有兴趣使用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/