backtracer 0.2.0 → 0.2.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/Rakefile CHANGED
@@ -7,7 +7,7 @@ begin
7
7
  # gemspec.homepage = "http://github.com/technicalpickles/the-perfect-gem"
8
8
  # gemspec.description = "TODO"
9
9
  # gemspec.authors = ["Josh Nichols"]
10
- # gemspec.dependency
10
+ gemspec.dependency 'sane'
11
11
  end
12
12
  rescue LoadError
13
13
  puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
data/lib/backtracer.rb CHANGED
@@ -1,20 +1,30 @@
1
1
  # this one display full BT with code, at the end [no performance loss]
2
- SCRIPT_LINES__ = {}
2
+
3
+ require File.dirname(__FILE__) + "/shared"
4
+ require 'sane'
5
+
3
6
  at_exit {
4
- puts "==== "
5
- if $!
6
- backtrace_with_code = $!.backtrace.map{|bt|
7
- file, line, junk = bt.split(":")
8
- line = line.to_i - 1
9
- actual_file = SCRIPT_LINES__[file]
10
- actual_line = actual_file[line] if actual_file
11
- "#{bt}\n\t#{actual_line.strip if actual_line}"
12
- }
13
- puts backtrace_with_code
14
- puts "===="
15
- else
16
- puts "(no exception to backtrace)"
17
- end
18
-
19
7
 
8
+ if $!
9
+ puts "==== "
10
+ bt2 = $!.backtrace
11
+ backtrace_with_code = $!.backtrace.map{ |bt_line|
12
+ if OS.windows? && bt_line[1..1] == ':'
13
+ #["C", "/dev/ruby/allgems/lib/allgems/GemWorker.rb", "91", "in `unpack'"]
14
+ drive, file, line, junk = bt_line.split(":")
15
+ file = drive + ":" + file
16
+ else
17
+ file, line, junk = bt_line.split(":")
18
+ end
19
+ line = line.to_i
20
+ # line -= 1 unless line == 0 # not sure if needed
21
+ actual_line = Tracer.get_line(file, line)
22
+ "#{bt_line}\n\t#{actual_line.strip if actual_line}"
23
+ }
24
+ puts backtrace_with_code
25
+ puts "===="
26
+ else
27
+ puts "(no exception found to backtrace)"
28
+ end
29
+ exit!
20
30
  }
@@ -12,6 +12,7 @@ Debugger.start # we use this to track args.
12
12
  #
13
13
  # tracer main class
14
14
  #
15
+ require File.dirname(__FILE__) + "/shared"
15
16
  class Tracer
16
17
  @RCS_ID='-$Id: tracer.rb,v 1.8 1998/05/19 03:42:49 keiju Exp keiju $-'
17
18
 
@@ -82,33 +83,6 @@ class Tracer
82
83
  self.class.get_line(file, line)
83
84
  end
84
85
 
85
- def self.get_line(file, line)
86
- @get_line_procs ||= {}
87
- if p = @get_line_procs[file]
88
- return p.call(line)
89
- end
90
-
91
- unless list = SCRIPT_LINES__[file]
92
- begin
93
- raise 'might be a .so file' if file =~ /\.so$/
94
- f = open(file)
95
- begin
96
- SCRIPT_LINES__[file] = list = f.readlines
97
- ensure
98
- f.close
99
- end
100
-
101
- rescue
102
- SCRIPT_LINES__[file] = list = []
103
- end
104
- end
105
-
106
- if l = list[line - 1]
107
- l
108
- else
109
- "-\n"
110
- end
111
- end
112
86
 
113
87
  def get_thread_no
114
88
  if no = @threads[Thread.current.object_id]
data/lib/shared.rb ADDED
@@ -0,0 +1,35 @@
1
+ # tracer shared for the get_line aspect
2
+ #
3
+ class Tracer
4
+
5
+ def self.get_line(file, line)
6
+ @get_line_procs ||= {}
7
+ if p = @get_line_procs[file]
8
+ return p.call(line)
9
+ end
10
+
11
+ unless list = SCRIPT_LINES__[file]
12
+ begin
13
+ raise 'might be a .so file' if file =~ /\.so$/
14
+ f = open(file)
15
+ begin
16
+ SCRIPT_LINES__[file] = list = f.readlines
17
+ ensure
18
+ f.close
19
+ end
20
+
21
+ rescue
22
+ SCRIPT_LINES__[file] = list = []
23
+ end
24
+ end
25
+
26
+ if l = list[line - 1]
27
+ l
28
+ else
29
+ "-\n"
30
+ end
31
+ end
32
+
33
+ end
34
+
35
+ SCRIPT_LINES__ = {} unless defined? SCRIPT_LINES__
data/lib/tracerr.rb CHANGED
@@ -119,8 +119,8 @@ class Tracer
119
119
  return unless p.call event, file, line, id, binding, klass
120
120
  end
121
121
 
122
- saved_crit = Thread.critical
123
- Thread.critical = true
122
+ (saved_crit = Thread.critical) rescue nil
123
+ (Thread.critical = true) rescue nil
124
124
  stdout.printf("#%d:%s:%d:%s:%s: %s",
125
125
  get_thread_no,
126
126
  file,
@@ -128,7 +128,7 @@ class Tracer
128
128
  klass || '',
129
129
  EVENT_SYMBOL[event],
130
130
  get_line(file, line))
131
- Thread.critical = saved_crit
131
+ (Thread.critical = saved_crit) rescue nil
132
132
  end
133
133
 
134
134
  Single = new
@@ -155,7 +155,7 @@ class Tracer
155
155
  end
156
156
 
157
157
  SCRIPT_LINES__ = {} unless defined? SCRIPT_LINES__
158
-
158
+ puts caller(0).size
159
159
  if $0 == __FILE__
160
160
  # direct call
161
161
 
@@ -163,6 +163,6 @@ if $0 == __FILE__
163
163
  ARGV.shift
164
164
  Tracer.on
165
165
  require $0
166
- elsif caller(0).size == 1
166
+ elsif caller(0).size <= 2
167
167
  Tracer.on
168
168
  end
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.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors: []
7
7
 
@@ -37,6 +37,7 @@ files:
37
37
  - lib/backtracer_tracer.rb
38
38
  - lib/backtracer_tracer_args.rb
39
39
  - lib/core_backtracer.rb
40
+ - lib/shared.rb
40
41
  - lib/tracerr.rb
41
42
  has_rdoc: true
42
43
  homepage:
@@ -62,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
62
63
  requirements: []
63
64
 
64
65
  rubyforge_project:
65
- rubygems_version: 1.3.4
66
+ rubygems_version: 1.3.5
66
67
  signing_key:
67
68
  specification_version: 3
68
69
  summary: Quality backtraces for ruby