码迷,mamicode.com
首页 > 其他好文 > 详细

ruby跟踪文件加载和类的定义

时间:2014-10-13 23:45:37      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:style   ar   文件   on   ad   ef   size   as   程序   

classtrace.rb:

#encoding: utf-8
module ClassTrace
  T = [] #定义数组常量T,存放trace信息
  if x = ARGV.index("--traceout") #如果ruby命令后面有--traceout参数,则记录到文件中,否则输出
    OUT = File.open(ARGV[x + 1], ‘w‘)
    ARGV[x, 2] = nil
  else
    OUT = STDERR
  end
end

alias origin_require require #给require定义别名方法origin_require,下面要重新定义
alias origin_load load #给load方法定义别名方法origin_load,下面要重新定义load方法

def require(file)
  ClassTrace::T << [file, caller[0]] #将require方式加载的文件和加载该文件的位置放入一个数组,并添加到T常量中
  origin_require(file) #require加载文件
end

def load(*args)
  ClassTrace::T << [args[0], caller[0]] #将load方式加载的文件和加载该文件的位置放入一个数组
  origin_load(*args) #load加载文件
end

def Object.inherited(c) #定义钩子方法inherited方法,当有新的类定义时调用此方法将类名和定义的位置加入到T常量
  ClassTrace::T << [c, caller[0]] 
end

at_exit{ #当程序退出执行时
  o = ClassTrace::OUT
  o.puts ‘=‘ * 60 
  o.puts ‘Files Loaded and Classes Defined:‘
  o.puts ‘=‘ * 60
  ClassTrace::T.each do |what, where| #遍历trace信息数组T,将信息写入到文件或输出
    if what.is_a? Class
      o.puts "Defined: #{what.ancestors.join(‘<-‘)} at #{where}"
    else
      o.puts "Loaded: #{what} at #{where}"
    end
  end
}



index.rb

#encoding: utf-8
require ‘./classtrace‘
require ‘./test‘
class Test; end
puts "11111"



test.rb

#encoding: utf-8
class TestClass; end



ruby index.rb --traceout /tmp/trace #将index.rb文件中加载的文件和定义的类的trace信息写入到/tmp/trace文件,像这样:

============================================================

Files Loaded and Classes Defined:

============================================================

Loaded: ./test at index.rb:3:in `<main>‘

Defined: TestClass<-Object<-Kernel<-BasicObject at /Users/fangxiang/work/ruby/test/test.rb:2:in `<top (required)>‘

Defined: Test<-Object<-Kernel<-BasicObject at index.rb:4:in `<main>‘




ruby跟踪文件加载和类的定义

标签:style   ar   文件   on   ad   ef   size   as   程序   

原文地址:http://my.oschina.net/fxhover/blog/330278

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!