backtracer 0.6.5 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.5
1
+ 0.7.1
data/bin/backtracer CHANGED
@@ -1,15 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- if (ARGV.include? '-h') || (ARGV.include? '--help')
3
+ if (ARGV.include? '-h') || (ARGV.include? '--help') || ARGV.length == 0
4
4
  dir = File.dirname(__FILE__) + '/../lib'
5
5
  puts 'options: '
6
6
  for file in Dir[dir + '/backtracer_*.rb'].sort.reverse
7
7
  puts '--' + File.basename(file)[11..-4] # of backtracer_locals.rb, just locals
8
8
  end
9
- puts 'ex: $ backtracer filename.rb arg1 arg2'
9
+ puts 'ex\'s:', '$ backtracer filename.rb arg1 arg2'
10
10
  puts '$ backtracer --simple filename.rb arg1 arg2'
11
- puts 'or its equivalent: $ ruby -rbacktracer_simple filename.rb arg1 arg2'
12
- puts '$ ruby -rtracerr'
11
+ puts 'or its equivalent:', '$ ruby -rbacktracer_simple filename.rb arg1 arg2'
13
12
  exit
14
13
  end
15
14
 
data/lib/backtracer.rb CHANGED
@@ -6,6 +6,7 @@ DOZE = Config::CONFIG['host_os'] =~ /mswin|mingw/
6
6
  require File.dirname(__FILE__) + "/shared"
7
7
 
8
8
  at_exit {
9
+ exception_that_killed_us = $!
9
10
  if $! && !$!.is_a?(SystemExit) # SystemExit's are normal, not exceptional
10
11
  print "\n"
11
12
  print "\t" unless defined?($same_line)
@@ -16,7 +17,7 @@ at_exit {
16
17
  $!.backtrace.each{|bt_line| max = [bt_line.length, max].max}
17
18
 
18
19
  backtrace_with_code = $!.backtrace.map{ |bt_line|
19
- next if bt_line.include? 'bin/backtracer' # binary lines...
20
+ next if bt_line.include? 'bin/backtracer' # lines from ourself...
20
21
  if DOZE && bt_line[1..1] == ':'
21
22
 
22
23
  drive, file, line, junk = bt_line.split(":")
@@ -26,15 +27,48 @@ at_exit {
26
27
  file, line, junk = bt_line.split(":")
27
28
  end
28
29
  line = line.to_i
29
- actual_line = Tracer.get_line(file, line)
30
-
31
- "%-#{max + 1}s #{"\n\t" unless defined?($same_line)}%s" % [bt_line, (actual_line.strip if actual_line)]
32
- }.compact
30
+ actual_code = Tracer.get_line(file, line)
31
+ output_line = ' '
32
+ output_line += "%-#{max + 1}s " % bt_line unless $no_code_line_numbers
33
+ if actual_code && actual_code != '-'
34
+ output_line += "\n\t" unless defined?($same_line)
35
+ output_line += actual_code.strip
36
+ end
37
+ output_line
38
+ }
39
+
40
+ previous_line = nil
41
+ count = 0
42
+
43
+ backtrace_with_code = backtrace_with_code.map{|line|
44
+ if previous_line == nil
45
+ # startup
46
+ previous_line = line
47
+ line
48
+ elsif previous_line == line
49
+ # redundant line
50
+ count += 1
51
+
52
+ nil
53
+ else
54
+ # good line
55
+ previous_line = line
56
+ if count > 0
57
+ # first good line after a string of bad
58
+ a = [" (repeat #{count} times) ", line]
59
+ count = 0
60
+ a
61
+ else
62
+ line
63
+ end
64
+ end
65
+ }.flatten.compact
66
+
67
+
33
68
  puts backtrace_with_code
34
69
  puts # blank line
35
70
  # for some reason this can be nil...
36
- $!.set_backtrace [] if $! # avoid the original backtrace being outputted--though annoyingly it does still output its #to_s...
37
-
71
+ exception_that_killed_us.set_backtrace [] # avoid the original backtrace being outputted--though annoyingly it does still output its #to_s...
38
72
  else
39
73
  puts "(backtracer: no exception found to backtrace)" if $DEBUG
40
74
  end
@@ -1,6 +1,4 @@
1
1
  # this one display full BT with code, at the end [no performance loss]
2
- require 'rbconfig'
3
- WINDOZE = Config::CONFIG['host_os'] =~ /mswin|mingw/
4
2
  $same_line = true
5
3
 
6
4
  require File.dirname(__FILE__) + "/shared"
@@ -0,0 +1,5 @@
1
+ # this one display full BT with code, at the end [no performance loss]
2
+ $no_code_line_numbers = true
3
+ $same_line = true
4
+ require File.dirname(__FILE__) + "/shared"
5
+ require File.dirname(__FILE__) + "/backtracer.rb"
@@ -1,2 +1,2 @@
1
1
  # this is the default
2
- require File.dirname(__FILE__) + '/core_backtracer.rb'
2
+ require File.dirname(__FILE__) + '/core_backtracer_locals.rb'
@@ -1,2 +1,2 @@
1
1
  $print_trace = true
2
- require File.dirname(__FILE__) + '/core_backtracer.rb'
2
+ require File.dirname(__FILE__) + '/core_backtracer_locals.rb'
@@ -1,3 +1,3 @@
1
1
  # this is the default
2
2
  $VERBOSE = 1 # how we tell it to do args currently
3
- require File.dirname(__FILE__) + '/core_backtracer.rb'
3
+ require File.dirname(__FILE__) + '/core_backtracer_locals.rb'
data/test/test.rb ADDED
@@ -0,0 +1,9 @@
1
+ def go number
2
+ if number == 4
3
+ raise 'done'
4
+ else
5
+ go number + 1
6
+ end
7
+ end
8
+
9
+ go 0
data/test/test2.rb ADDED
@@ -0,0 +1,10 @@
1
+ def go1 n
2
+ raise 'done' if n == 30
3
+ go2 n
4
+ end
5
+
6
+ def go2 n
7
+ go1 n + 1
8
+ end
9
+
10
+ go2 0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: backtracer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.5
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors: []
7
7
 
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-30 00:00:00 -07:00
12
+ date: 2010-01-12 00:00:00 -07:00
13
13
  default_executable: backtracer
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -43,17 +43,19 @@ files:
43
43
  - examples/run_all_styles_of_backtracer.rb
44
44
  - examples/run_large_style_output.rb
45
45
  - lib/backtracer.rb
46
+ - lib/backtracer_code_same_line.rb
46
47
  - lib/backtracer_ctrl_c_debugger.rb
47
- - lib/backtracer_inline.rb
48
+ - lib/backtracer_just_code_lines.rb
48
49
  - lib/backtracer_locals.rb
49
50
  - lib/backtracer_pinger.rb
50
51
  - lib/backtracer_simple.rb
51
52
  - lib/backtracer_tracer.rb
52
53
  - lib/backtracer_tracer_args.rb
53
- - lib/backtracer_tracer_exception_creation.rb
54
- - lib/core_backtracer.rb
54
+ - lib/core_backtracer_locals.rb
55
55
  - lib/shared.rb
56
56
  - lib/tracerr.rb
57
+ - test/test.rb
58
+ - test/test2.rb
57
59
  has_rdoc: true
58
60
  homepage:
59
61
  licenses: []
@@ -83,6 +85,8 @@ signing_key:
83
85
  specification_version: 3
84
86
  summary: Quality backtraces for ruby
85
87
  test_files:
88
+ - test/test.rb
89
+ - test/test2.rb
86
90
  - examples/crash.rb
87
91
  - examples/crash_longer.rb
88
92
  - examples/run_all_styles_of_backtracer.rb
@@ -1,21 +0,0 @@
1
- require 'faster_rubygems'
2
- require 'event_hook'
3
-
4
- class Demo < EventHook
5
- def self.process(*args)
6
-
7
- # args => [64, #<RuntimeError: hello>, :initialize, Exception]
8
- begin
9
- if args[1].is_a? Exception
10
- puts args.inspect
11
- end
12
- rescue
13
- # fantastically, this check fails within rails at times
14
- end
15
- end
16
- end
17
-
18
- Demo.start_hook
19
-
20
- # TODO 1.9 compat
21
- #set_trace_func proc {|*args| puts args.inspect }