ruby追蹤檔案載入和類的定義

來源:互聯網
上載者:User

標籤:style   ar   檔案   on   ad   ef   size   as   程式   

classtrace.rb:

#encoding: utf-8module 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  endendalias 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負載檔案enddef load(*args)  ClassTrace::T << [args[0], caller[0]] #將load方式載入的檔案和載入該檔案的位置放入一個數組  origin_load(*args) #load負載檔案enddef Object.inherited(c) #定義鉤子方法inherited方法,當有新的類定義時調用此方法將類名和定義的位置加入到T常量  ClassTrace::T << [c, caller[0]] endat_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-8require ‘./classtrace‘require ‘./test‘class Test; endputs "11111"



test.rb

#encoding: utf-8class 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追蹤檔案載入和類的定義

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.