rbtrace 0.2.3 → 0.2.4
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/.gitignore +1 -0
- data/Gemfile.lock +20 -0
- data/bin/rbtrace +15 -3
- data/ext/rbtrace.c +18 -2
- data/rbtrace.gemspec +1 -1
- metadata +5 -3
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
*.gem
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
rbtrace (0.2.3)
|
5
|
+
ffi (>= 1.0.5)
|
6
|
+
trollop (>= 1.16.2)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: http://rubygems.org/
|
10
|
+
specs:
|
11
|
+
ffi (1.0.5)
|
12
|
+
rake (>= 0.8.7)
|
13
|
+
rake (0.8.7)
|
14
|
+
trollop (1.16.2)
|
15
|
+
|
16
|
+
PLATFORMS
|
17
|
+
ruby
|
18
|
+
|
19
|
+
DEPENDENCIES
|
20
|
+
rbtrace!
|
data/bin/rbtrace
CHANGED
@@ -176,7 +176,7 @@ class RBTracer
|
|
176
176
|
# Returns nothing.
|
177
177
|
def add(methods)
|
178
178
|
Array(methods).each do |func|
|
179
|
-
func.strip
|
179
|
+
func = func.strip
|
180
180
|
|
181
181
|
if func =~ /^(.+)\((.+?)\)$/
|
182
182
|
func, args = $1, $2
|
@@ -195,8 +195,20 @@ class RBTracer
|
|
195
195
|
#
|
196
196
|
# Returns nothing.
|
197
197
|
def detach
|
198
|
-
|
198
|
+
begin
|
199
|
+
send_cmd('detach')
|
200
|
+
rescue Errno::ESRCH
|
201
|
+
end
|
202
|
+
|
199
203
|
puts
|
204
|
+
|
205
|
+
# drain queue
|
206
|
+
5.times do
|
207
|
+
begin
|
208
|
+
true while recv_cmd(false)
|
209
|
+
rescue
|
210
|
+
end
|
211
|
+
end
|
200
212
|
end
|
201
213
|
|
202
214
|
# Process events from the traced process.
|
@@ -364,7 +376,7 @@ class RBTracer
|
|
364
376
|
opts = Trollop.options do
|
365
377
|
version <<-EOS
|
366
378
|
rbtrace: like strace, but for ruby code
|
367
|
-
version 0.2.
|
379
|
+
version 0.2.4
|
368
380
|
(c) 2011 Aman Gupta (tmm1)
|
369
381
|
http://github.com/tmm1/rbtrace
|
370
382
|
EOS
|
data/ext/rbtrace.c
CHANGED
@@ -22,6 +22,10 @@
|
|
22
22
|
#include <node.h>
|
23
23
|
#define rb_sourcefile() (ruby_current_node ? ruby_current_node->nd_file : 0)
|
24
24
|
#define rb_sourceline() (ruby_current_node ? nd_line(ruby_current_node) : 0)
|
25
|
+
#else
|
26
|
+
// this is a nasty hack, and will probably break on anything except 1.9.2p136
|
27
|
+
int rb_thread_method_id_and_class(void *th, ID *idp, VALUE *klassp);
|
28
|
+
RUBY_EXTERN void *ruby_current_thread;
|
25
29
|
#endif
|
26
30
|
|
27
31
|
#ifndef RSTRING_PTR
|
@@ -141,6 +145,18 @@ event_hook(rb_event_t event, NODE *node, VALUE self, ID mid, VALUE klass)
|
|
141
145
|
// skip allocators
|
142
146
|
if (mid == ID_ALLOCATOR) goto out;
|
143
147
|
|
148
|
+
// some serious 1.9.2 hax
|
149
|
+
#ifdef RUBY_VM
|
150
|
+
if (mid == 0 && ruby_current_thread) {
|
151
|
+
ID _mid;
|
152
|
+
VALUE _klass;
|
153
|
+
rb_thread_method_id_and_class(ruby_current_thread, &_mid, &_klass);
|
154
|
+
|
155
|
+
mid = _mid;
|
156
|
+
klass = _klass;
|
157
|
+
}
|
158
|
+
#endif
|
159
|
+
|
144
160
|
// normalize klass and check for class-level methods
|
145
161
|
bool singleton = 0;
|
146
162
|
if (klass) {
|
@@ -215,8 +231,8 @@ event_hook(rb_event_t event, NODE *node, VALUE self, ID mid, VALUE klass)
|
|
215
231
|
}
|
216
232
|
|
217
233
|
switch (event) {
|
218
|
-
case RUBY_EVENT_C_CALL:
|
219
234
|
case RUBY_EVENT_CALL:
|
235
|
+
case RUBY_EVENT_C_CALL:
|
220
236
|
SEND_EVENT(
|
221
237
|
"%s,%d,%s,%d,%s",
|
222
238
|
event == RUBY_EVENT_CALL ? "call" : "ccall",
|
@@ -269,8 +285,8 @@ event_hook(rb_event_t event, NODE *node, VALUE self, ID mid, VALUE klass)
|
|
269
285
|
}
|
270
286
|
break;
|
271
287
|
|
272
|
-
case RUBY_EVENT_C_RETURN:
|
273
288
|
case RUBY_EVENT_RETURN:
|
289
|
+
case RUBY_EVENT_C_RETURN:
|
274
290
|
SEND_EVENT(
|
275
291
|
"%s,%d",
|
276
292
|
event == RUBY_EVENT_RETURN ? "return" : "creturn",
|
data/rbtrace.gemspec
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbtrace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 4
|
10
|
+
version: 0.2.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Aman Gupta
|
@@ -59,7 +59,9 @@ extensions:
|
|
59
59
|
extra_rdoc_files: []
|
60
60
|
|
61
61
|
files:
|
62
|
+
- .gitignore
|
62
63
|
- Gemfile
|
64
|
+
- Gemfile.lock
|
63
65
|
- README.md
|
64
66
|
- bin/rbtrace
|
65
67
|
- ext/.gitignore
|