better_rails_debugger 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 378633b02ace347f31f2e5350248b08903e24e87
4
- data.tar.gz: cf4e8e7b1614196b194ef32060c46a24237bac98
3
+ metadata.gz: 8db111d53acaca8f9189541d980913115548ad5d
4
+ data.tar.gz: 3019083b26fc20710e60f1e117c24ed8ab11fb36
5
5
  SHA512:
6
- metadata.gz: 454b43fb094ea115cb30bdd1aa700dcb73b5cf5aaae41bbce2019e2c7e9c0cb62c0c2e497ba5fc91f2ffe5ebee5426a595f202f4d23cc13538963a2999474933
7
- data.tar.gz: ea0d02c5e10418a224e075d0e9eab163b3bc57e9fa4a31f204c6a1d9f1c18e6990ece288207baa946e8c0f671173b134d27a414d86e01c4b3e548e88b7fc7443
6
+ metadata.gz: e2cd39a23ed59ad9287721aba2d9df1aac1848939ce417626f7fa39447846218140359a294d858c510806cffb0c976c183af409d23fc733cba50539be6983702
7
+ data.tar.gz: 64c5dfab31505814a7ecfa858b662da32fa23620e0c8b857aa35a4065252270be67e4b82bc05f8a6f4fc5ce7470134aed7b004ffda5cfd8f38b9fa97dbe0d69f
data/README.md CHANGED
@@ -84,7 +84,7 @@ class ApplicationController < ActionController::Base
84
84
  around_action :do_analysis
85
85
 
86
86
  def do_analysis
87
- BetterRailsDebugger::MemoryAnalyzer.instance.analyze "#{request.url}", "5a98a93f50f04b079458fd57" do
87
+ BetterRailsDebugger::Analyzer.instance.analyze "#{request.url}", "5a98a93f50f04b079458fd57" do
88
88
  yield
89
89
  end
90
90
  end
@@ -65,7 +65,8 @@ module BetterRailsDebugger
65
65
  def analysis_group_params
66
66
  params.require(:analysis_group).permit([:name, :collect_memory_information, :analise_memory_in_code,
67
67
  :analise_memory_in_gems, :record_objects_in, :times_to_run,
68
- :analyze_repeated_instances])
68
+ :analyze_repeated_instances, :generate_method_execution_history,
69
+ :calculate_execution_time_of_methods])
69
70
  end
70
71
 
71
72
  def get_group
@@ -2,6 +2,31 @@ require_dependency "better_rails_debugger/application_controller"
2
2
 
3
3
  module BetterRailsDebugger
4
4
  class GroupInstancesController < ApplicationController
5
+ def show
6
+ begin
7
+ @instance = GroupInstance.find params[:id]
8
+ rescue Mongoid::Errors::DocumentNotFound
9
+ redirect_to analysis_groups_path, flash: {error: 'Instance not found'}
10
+ return
11
+ end
12
+ @most_used_methods = @instance.most_used_methods(4)
13
+ @file_allocations = @instance.files_with_more_allocations(4)
14
+ end
15
+
16
+ def tracer
17
+ begin
18
+ @instance = GroupInstance.find params[:id]
19
+ rescue Mongoid::Errors::DocumentNotFound
20
+ redirect_to analysis_groups_path, flash: {error: 'Instance not found'}
21
+ return
22
+ end
23
+ @traces = @instance.trace_point_items.order(created_at: 'desc').limit(20)
24
+ filter_traces
25
+ @traces = @traces.paginate(page: (params[:page] || 1), per_page: 20)
26
+
27
+ @file_allocations = @instance.files_with_more_allocations(4)
28
+ end
29
+
5
30
  def objects
6
31
  begin
7
32
  @instance = GroupInstance.find params[:id]
@@ -10,7 +35,7 @@ module BetterRailsDebugger
10
35
  return
11
36
  end
12
37
  @objects = @instance.objects.order(created_at: 'desc').limit(20)
13
- filter
38
+ filter_objects
14
39
  @objects = @objects.paginate(page: (params[:page] || 1), per_page: 20)
15
40
 
16
41
  @file_allocations = @instance.files_with_more_allocations(4)
@@ -31,7 +56,7 @@ module BetterRailsDebugger
31
56
  end
32
57
 
33
58
  private
34
- def filter
59
+ def filter_objects
35
60
  if ['asc', 'desc'].include? params[:order] and ['location', 'memsize', 'class'].include? params[:column]
36
61
  if params[:column] == 'location'
37
62
  @objects = @objects.order({source_file: params[:order], source_line: params[:order]})
@@ -49,5 +74,22 @@ module BetterRailsDebugger
49
74
  pp @objects
50
75
  end
51
76
  end
77
+
78
+ def filter_traces
79
+ if ['asc', 'desc'].include? params[:order] and ['location', 'method', 'times'].include? params[:column]
80
+ if params[:column] == 'location'
81
+ @traces = @traces.order({source_file: params[:order], source_line: params[:order]})
82
+ elsif params[:column] == 'method'
83
+ @traces = @traces.order({method_id: params[:order]})
84
+ end
85
+ end
86
+ if params[:filter].present?
87
+ @objects = @objects.or({source_file: /.*#{params[:filter]}.*/i},
88
+ {source_line: /.*#{params[:filter]}.*/i},
89
+ {memsize: /.*#{params[:filter]}.*/i},
90
+ {class_name: /.*#{params[:filter]}.*/i})
91
+ pp @objects
92
+ end
93
+ end
52
94
  end
53
95
  end
@@ -14,6 +14,8 @@ module BetterRailsDebugger
14
14
  Rails.logger.error "[BetterRailsDebugger AnalysisRecorderJob] GroupInstance '#{recorded[:instance_id]}' not found. Skiping..."
15
15
  return
16
16
  end
17
+ instance.status = 'processing'
18
+ instance.save
17
19
 
18
20
  # Now, with the group present... we can start to work on it
19
21
  # group = instance.analysis_group
@@ -30,6 +32,7 @@ module BetterRailsDebugger
30
32
  end
31
33
  instance.allocations_per_file = allocations_per_file.to_json
32
34
  instance.memsize_per_file = memsize_per_file.to_json
35
+ instance.status = 'finished'
33
36
  instance.save
34
37
 
35
38
  end
@@ -21,6 +21,10 @@ module BetterRailsDebugger
21
21
  field :times_to_run, type: Integer, default: 0 # 0: Infinite
22
22
  field :analyze_repeated_instances, type: Boolean, default: true # if false, Check the identifier and do run the analyzer if already exist one with the same identifier
23
23
 
24
+ ## Code execution options
25
+ field :generate_method_execution_history, type: Boolean, default: false
26
+ field :calculate_execution_time_of_methods, type: Boolean, default: false
27
+
24
28
  # Internal use
25
29
  field :analise_paths, type: Array, default: []
26
30
 
@@ -5,13 +5,14 @@ module BetterRailsDebugger
5
5
 
6
6
  belongs_to :analysis_group, class_name: "::BetterRailsDebugger::AnalysisGroup"
7
7
  has_many :objects, class_name: "::BetterRailsDebugger::ObjectInformation", inverse_of: :group_instance, dependent: :delete_all
8
+ has_many :trace_point_items, class_name: "::BetterRailsDebugger::TracePointItem", inverse_of: :group_instance, dependent: :delete_all
8
9
 
9
10
  # Basic information
10
11
  field :identifier, type: String
11
12
  field :metadata, type: Hash
12
13
 
13
14
  # Status information
14
- field :processed, type: Boolean
15
+ field :status, type: String
15
16
  field :total_classes, type: Integer # Total number of used Classes
16
17
  field :total_memory, type: Integer # Total memory used in bytes
17
18
  field :total_files, type: Integer # Total file used on allocation
@@ -21,17 +22,72 @@ module BetterRailsDebugger
21
22
  field :allocations_per_file, type: String
22
23
  field :memsize_per_file, type: String
23
24
 
24
- def track_allocation_of?(path)
25
- return true if match_file_list?(path) or called_from_caller_file?(path)
26
- false
25
+ ## Memory methods
26
+
27
+ def memsize_per_file_hash
28
+ return @memsize_per_file_hash if @memsize_per_file_hash.present?
29
+ @memsize_per_file_hash = JSON.parse(memsize_per_file.to_s) rescue {}
27
30
  end
28
31
 
29
- def files_with_more_allocations(n)
30
- JSON.parse(allocations_per_file).to_a.sort_by do |a| a[1] end.reverse[0..n]
32
+ def allocations_per_file_hash
33
+ return @allocations_per_file if @allocations_per_file.present?
34
+ @allocations_per_file = JSON.parse(allocations_per_file.to_s) rescue {}
31
35
  end
32
36
 
33
37
  def files_that_use_more_memory(n)
34
- JSON.parse(memsize_per_file).to_a.sort_by do |a| a[1] end.reverse[0..n]
38
+ memsize_per_file_hash.to_a.sort_by do |a| a[1] end.reverse[0..n]
39
+ end
40
+
41
+ def files_with_more_allocations(n)
42
+ allocations_per_file_hash.to_a.sort_by do |a| a[1] end.reverse[0..n]
43
+ end
44
+
45
+ def count_methods
46
+ return @count_methods if @count_methods
47
+ @count_methods = Hash.new
48
+ trace_point_items.each do |item|
49
+ @count_methods["#{item.source_file}:#{item.source_line}"] ||= {
50
+ item: item,
51
+ count: 0
52
+ }
53
+ @count_methods["#{item.source_file}:#{item.source_line}"][:count] += 1
54
+ end
55
+ @count_methods
56
+ end
57
+
58
+ def most_used_methods(n)
59
+ count_methods.to_a.sort_by do |a| a[1][:count] end.reverse[0..n].to_h
60
+ end
61
+
62
+ # Return an array of hash file => mem that consume more than 10 MB(default) or ram aprox
63
+ # TODO: The amount of consumed ram must be configurable
64
+ def big_files(max_size=10.megabytes)
65
+ return @big_files if @big_files
66
+ @big_files = (memsize_per_file_hash || {}).select do |key, size|
67
+ size >= max_size
68
+ end
69
+ end
70
+
71
+ # Return an array of hashed that contains some information about the classes that consume more than `max_size` bytess
72
+ def big_classes(max_size=1.megabytes)
73
+ return @big_classes if @big_classes
74
+ @big_classes = {}
75
+ ObjectInformation.where(:group_instance_id => self.id, :memsize.gt => max_size).all.each do |object|
76
+ @big_classes[object.class_name] ||= {total_mem: 0, average: 0, count: 0}
77
+ @big_classes[object.class_name][:total_mem] += object.memsize
78
+ @big_classes[object.class_name][:count] += 1
79
+ end
80
+ @big_classes.each_pair do |klass, hash|
81
+ @big_classes[klass][:average] = @big_classes[klass][:total_mem] / @big_classes[klass][:count]
82
+ end
83
+ @big_classes
84
+ end
85
+
86
+ ## Trace point methods
87
+
88
+ def track_allocation_of?(path)
89
+ return true if match_file_list?(path) or called_from_caller_file?(path)
90
+ false
35
91
  end
36
92
 
37
93
  private
@@ -0,0 +1,11 @@
1
+ module BetterRailsDebugger
2
+ class TracePointItem
3
+ include Mongoid::Document
4
+
5
+ belongs_to :group_instance, class_name: "::BetterRailsDebugger::GroupInstance"
6
+
7
+ field :source_file, type: String
8
+ field :source_line, type: Integer
9
+ field :method_id, type: String
10
+ end
11
+ end
@@ -4,7 +4,7 @@
4
4
  = f.text_field :name, min: 3, class: 'form-control form-control-lg col-10'
5
5
 
6
6
  %fielset.form-group
7
- %legend Settings
7
+ %legend Memory Settings
8
8
  .form-group.d-flex.justify-content-start
9
9
  = f.label :times_to_run, class: 'col-2'
10
10
  .col-10
@@ -37,5 +37,22 @@
37
37
  .col-10
38
38
  = f.check_box :analise_memory_in_gems
39
39
  .text-danger.d-inline Analise memory of all gems in the block it's really slow
40
+ / Disabled by the moment
41
+ %fielset.form-group
42
+ %legend.d-inline
43
+ Code execution
44
+ %i.small.d-inline.text-danger
45
+ (under development, do not enable it yet)
46
+ .form-group.d-flex.justify-content-start
47
+ = f.label :generate_method_execution_history, class: 'col-2'
48
+ .col-10
49
+ = f.check_box :generate_method_execution_history
50
+ .text-secondary.d-inline Generate and store the whole backtrace of method executed.
51
+
52
+ .form-group.d-flex.justify-content-start
53
+ = f.label :calculate_execution_time_of_methods, class: 'col-2'
54
+ .col-10
55
+ = f.check_box :calculate_execution_time_of_methods
56
+ .text-secondary.d-inline Generate and store the whole backtrace of method executed.
40
57
 
41
58
  %button.btn.btn-primary{:type => "submit"} Confirm
@@ -29,7 +29,7 @@
29
29
  %tbody
30
30
  - @instances.each do |instance|
31
31
  %tr.d-flex
32
- %td.col-8= link_to instance.identifier, objects_group_instance_path(instance.id)
32
+ %td.col-8= link_to instance.identifier, group_instance_path(instance.id)
33
33
  %th.col-2= instance.created_at.strftime("%c")
34
34
  %td.col-2= link_to "Objects", objects_group_instance_path(instance.id), class: 'btn btn-sm btn-information'
35
35
  = will_paginate @instances, renderer: WillPaginate::ActionView::BootstrapLinkRenderer
@@ -0,0 +1,47 @@
1
+ %h4 Memory summary
2
+ - if @instance.big_files.any?
3
+ %p
4
+ There are
5
+ %i.text-danger
6
+ = @instance.big_files.size
7
+ file that you should check.
8
+ %table.table.border.border-secondary.border-top-0
9
+ %thead.bg-secondary.text-white
10
+ %tr.d-flex
11
+ %th.col-10 File
12
+ %th.col-2 Memory
13
+
14
+ %tbody
15
+ - @instance.big_files.each do |file, size|
16
+ %tr.d-flex
17
+ %td.col-10
18
+ %span.text-primary
19
+ = file
20
+ %td.col-2= number_to_human_size size
21
+
22
+ - else
23
+ %p.text-success Congratulations! all your files looks good!
24
+
25
+ - if @instance.big_classes.any?
26
+ %p
27
+ There are
28
+ %i.text-danger
29
+ = @instance.big_classes.size
30
+ classes that you should check.
31
+
32
+ %table.table.border.border-secondary.border-top-0
33
+ %thead.bg-secondary.text-white
34
+ %tr.d-flex
35
+ %th.col-10 Class
36
+ %th.col-2 Average memory
37
+
38
+ %tbody
39
+ - @instance.big_classes.each_pair do |klass, hash|
40
+ %tr.d-flex
41
+ %td.col-10
42
+ %span.text-danger
43
+ = klass
44
+ %td.col-2= number_to_human_size hash[:average]
45
+ - else
46
+ %p.text-success There is no particular class that you should care about.
47
+ = link_to "Check all objects allocated", objects_group_instance_path(@instance)
@@ -0,0 +1,3 @@
1
+ %h4 Trace summary
2
+
3
+ = link_to "Check all objects allocated", tracer_group_instance_path(@instance)
@@ -22,7 +22,9 @@
22
22
  %li.breadcrumb-item
23
23
  %a{:href => analysis_group_path(@instance.analysis_group.id)}= @instance.analysis_group.name
24
24
  %li.breadcrumb-item
25
- %a{:href => "#"}= @instance.identifier
25
+ %a{:href => group_instance_path(@instance)}= @instance.identifier
26
+ %li.breadcrumb-item.active
27
+ %a{:href => "#"} Objects
26
28
 
27
29
  .alert.alert-warning{:role => "alert"}
28
30
  %h4.alert-heading
@@ -0,0 +1,35 @@
1
+ .card
2
+ .card-header
3
+ = @instance.identifier
4
+ = "-"
5
+ = @instance.created_at.strftime("%c")
6
+ .card-body
7
+
8
+ - content_for :header_nav do
9
+ %ul.nav.navbar-nav.d-md-down-none
10
+ %li.nav-item
11
+ %a.nav-link.navbar-toggler.sidebar-toggler{:href => "#"} ☰
12
+ %li.nav-item.px-3
13
+ %a.nav-link{:href => group_instance_path(@instance)} List
14
+
15
+ %ul.navbar-nav.ml-md-auto
16
+
17
+
18
+ - content_for :breadcrum do
19
+ %ol.breadcrumb
20
+ %li.breadcrumb-item
21
+ %a{:href => analysis_groups_path} Analysis Groups
22
+ %li.breadcrumb-item
23
+ %a{:href => analysis_group_path(@instance.analysis_group.id)}= @instance.analysis_group.name
24
+ %li.breadcrumb-item
25
+ %a{:href => "#"}= @instance.identifier
26
+
27
+ %h2 Summary
28
+
29
+ - if @instance.status != 'finished'
30
+ .text-warning
31
+ The system didn't finished to collect and process all the information.
32
+
33
+ = render partial: 'better_rails_debugger/group_instances/memory_summary'
34
+
35
+ =# render partial: 'better_rails_debugger/group_instances/method_summary'
@@ -0,0 +1,38 @@
1
+ .card
2
+ .card-header
3
+ = @instance.identifier
4
+ = "-"
5
+ = @instance.created_at.strftime("%c")
6
+ .card-body
7
+
8
+ - content_for :header_nav do
9
+ %ul.nav.navbar-nav.d-md-down-none
10
+ %li.nav-item
11
+ %a.nav-link.navbar-toggler.sidebar-toggler{:href => "#"} ☰
12
+ %li.nav-item.px-3
13
+ %a.nav-link{:href => group_instance_path(@instance)} List
14
+
15
+ %ul.navbar-nav.ml-md-auto
16
+
17
+
18
+ - content_for :breadcrum do
19
+ %ol.breadcrumb
20
+ %li.breadcrumb-item
21
+ %a{:href => analysis_groups_path} Analysis Groups
22
+ %li.breadcrumb-item
23
+ %a{:href => analysis_group_path(@instance.analysis_group.id)}= @instance.analysis_group.name
24
+ %li.breadcrumb-item
25
+ %a{:href => "#"}= @instance.identifier
26
+
27
+ %table.table.border.border-secondary.border-top-0
28
+ %thead.bg-secondary.text-white
29
+ %tr.d-flex
30
+ %th.col-8= order_link "Location", 'location', @instance
31
+ %th.col-2= order_link "Method", 'method', @instance
32
+ %th.col-2 Times
33
+ %tbody
34
+ - @instance.count_methods.each_pair do |location, hash|
35
+ %tr.d-flex
36
+ %td.col-8= location
37
+ %td.col-2= hash[:item].method_id
38
+ %td.col-2= hash[:count]
data/config/routes.rb CHANGED
@@ -5,6 +5,7 @@ BetterRailsDebugger::Engine.routes.draw do
5
5
  resources :group_instances do
6
6
  member do
7
7
  get 'objects'
8
+ get 'tracer'
8
9
  get 'code'
9
10
  end
10
11
  end
@@ -1,7 +1,7 @@
1
1
  require 'objspace'
2
2
 
3
3
  module BetterRailsDebugger
4
- class MemoryAnalyzer
4
+ class Analyzer
5
5
  include Singleton
6
6
 
7
7
 
@@ -13,6 +13,7 @@ module BetterRailsDebugger
13
13
  yield
14
14
  return
15
15
  end
16
+ start_trace_point group
16
17
  # If we reached the max time to execute the code, just execute the code and do not collect information
17
18
  if times_to_run_exceeded?(group) or skip_instance?(group, identifier)
18
19
  yield
@@ -20,7 +21,28 @@ module BetterRailsDebugger
20
21
  ::ObjectSpace.trace_object_allocations do
21
22
  yield
22
23
  end
23
- collect_information(identifier, group_id)
24
+ end
25
+ end_trace_point
26
+ collect_information(identifier, group_id)
27
+ end
28
+
29
+ def start_trace_point(group)
30
+ if group.generate_method_execution_history
31
+ @trace_point_history = []
32
+ tracer
33
+ tracer.enable
34
+ end
35
+ end
36
+
37
+ def end_trace_point
38
+ tracer.disable
39
+ end
40
+
41
+ def tracer
42
+ return @tracer if @tracer
43
+ @tracer = TracePoint.new do |tp|
44
+ # Record everything but us
45
+ @trace_point_history << {source_file: tp.path, source_line: tp.lineno, method_id: tp.method_id} if tp.path !~ /better_rails_debugger/
24
46
  end
25
47
  end
26
48
 
@@ -51,9 +73,10 @@ module BetterRailsDebugger
51
73
  Mongoid.logger.level = Logger::FATAL
52
74
  end
53
75
 
54
- instance = ::BetterRailsDebugger::GroupInstance.create identifier: identifier, analysis_group_id: group_id, caller_file: caller[3][/[^:]+/]
76
+ instance = ::BetterRailsDebugger::GroupInstance.create identifier: identifier, analysis_group_id: group_id, caller_file: caller[3][/[^:]+/], status: 'pending'
55
77
 
56
78
  collect_memory_information(instance)
79
+ collect_trace_point_history(instance)
57
80
 
58
81
  # Now, it's time to analyze all collected data and generate a report
59
82
  ::BetterRailsDebugger::AnalysisRecorderJob.perform_later({ instance_id: instance.id.to_s })
@@ -91,6 +114,15 @@ module BetterRailsDebugger
91
114
  ::BetterRailsDebugger::ObjectInformation.collection.insert_many(objects)
92
115
  end
93
116
 
117
+ def collect_trace_point_history(instance)
118
+ return if !@trace_point_history.kind_of? Array
119
+ ::BetterRailsDebugger::TracePointItem.collection.insert_many(@trace_point_history.map do |item|
120
+ item[:group_instance_id] = instance.id
121
+ item
122
+ end)
123
+ end
124
+
125
+
94
126
  def all_valid_classes
95
127
  return @all_valid_classes if @all_valid_classes
96
128
  if !@all_classes
@@ -1,3 +1,3 @@
1
1
  module BetterRailsDebugger
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
@@ -6,7 +6,7 @@ require "will_paginate-bootstrap4"
6
6
  require "font-awesome-rails"
7
7
 
8
8
  require "better_rails_debugger/config"
9
- require "better_rails_debugger/memory_analyzer"
9
+ require "better_rails_debugger/analyzer"
10
10
 
11
11
  Haml.init_rails(binding)
12
12
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: better_rails_debugger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andres Jose Borek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-03 00:00:00.000000000 Z
11
+ date: 2018-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -186,13 +186,18 @@ files:
186
186
  - app/models/better_rails_debugger/application_record.rb
187
187
  - app/models/better_rails_debugger/group_instance.rb
188
188
  - app/models/better_rails_debugger/object_information.rb
189
+ - app/models/better_rails_debugger/trace_point_item.rb
189
190
  - app/views/better_rails_debugger/analysis_groups/_form.html.haml
190
191
  - app/views/better_rails_debugger/analysis_groups/edit.html.haml
191
192
  - app/views/better_rails_debugger/analysis_groups/index.html.haml
192
193
  - app/views/better_rails_debugger/analysis_groups/new.html.haml
193
194
  - app/views/better_rails_debugger/analysis_groups/show.html.haml
195
+ - app/views/better_rails_debugger/group_instances/_memory_summary.html.haml
196
+ - app/views/better_rails_debugger/group_instances/_method_summary.html.haml
194
197
  - app/views/better_rails_debugger/group_instances/_stats_summary.html.haml
195
198
  - app/views/better_rails_debugger/group_instances/objects.html.haml
199
+ - app/views/better_rails_debugger/group_instances/show.html.haml
200
+ - app/views/better_rails_debugger/group_instances/tracer.html.haml
196
201
  - app/views/better_rails_debugger/memory/index.html.haml
197
202
  - app/views/better_rails_debugger/memory/show.html.haml
198
203
  - app/views/better_rails_debugger/shared/_header.html.haml
@@ -202,9 +207,9 @@ files:
202
207
  - config/mongoid.yml
203
208
  - config/routes.rb
204
209
  - lib/better_rails_debugger.rb
210
+ - lib/better_rails_debugger/analyzer.rb
205
211
  - lib/better_rails_debugger/config.rb
206
212
  - lib/better_rails_debugger/engine.rb
207
- - lib/better_rails_debugger/memory_analyzer.rb
208
213
  - lib/better_rails_debugger/version.rb
209
214
  - lib/tasks/better_rails_debugger_tasks.rake
210
215
  homepage: ''