我是 Ruby 分析的新手,它似乎ruby-prof
是一个流行的选择。我刚刚安装了 gem 并调用了我的程序:
ruby-prof ./my-prog.rb
但是,输出非常冗长,因为包含所有 Ruby 核心和标准库方法以及其他 gem 的分析数据。例如,前三行是:
8.79 0.011 0.010 0.000 0.001 3343 *String#%
7.28 0.078 0.009 0.000 0.069 2068 *Array#each
4.93 0.038 0.006 0.000 0.032 1098 *Array#map
这对我来说不是远程有用的信息,因为我已经知道我的程序处理了很多字符串和数组,并且大概这些类已经对它们进行了优化。我只关心代码中的热点。
我尝试了其他一些打印机模式,例如-p graph_html
and -p call_stack
,但它们都有同样的问题。
我看到它ruby-prof
支持一些方法消除和简化:
-x, --exclude regexp exclude methods by regexp (see method elimination)
-X, --exclude-file file exclude methods by regexp listed in file (see method elimination)
--exclude-common-cycles make common iterators like Integer#times appear inlined
--exclude-common-callbacks make common callbacks invocations like Integer#times appear
但似乎没有任何明显的方法可以得到我真正想要的东西,即只为我的代码分析数据,即在 Ruby 核心/stdlib 的代码内部经过的时间,而其他宝石只计为我的内部经过的时间代码。
一旦我看到我的代码有一个方法foo
,由于被调用数千次并且性能不佳而成为性能瓶颈,那么我只想查看我的代码和调用的核心/库代码之间经过的时间细分那个特定的方法。
我不明白为什么这不是标准功能,因为我希望这是每个人都想做的事情:首先分析你自己的代码,然后一旦你用完了要优化的东西,就可能开始优化 gem您使用甚至可能使用 Ruby 核心/标准库。我错过了什么?