Skip to content

Instantly share code, notes, and snippets.

@dividedmind

dividedmind/appmap-diff.md

Last active Oct 25, 2020
Embed
What would you like to do?
Simple execution trace diff with AppLand

Simple execution trace diff

At AppLand we're currently working on ways in which we can visualize how changes to the code affect program design and execution. But it turns out you don't need any fancy visuals to be able to tell something useful.

(BTW, see the whole code gallery!)

If you're not familiar with AppLand, at the very basic level, it allows you to record program execution traces. These traces can then be processed to surface interdependencies between code artifacts (such as classes, objects and functions), creating a visual map of a piece of software, how it's designed and how it operates. Go check out https://app.land if you haven't already -- there are plenty of examples of open source software to explore!

However, let's step back and focus on the core capability: execution traces. What if we could tell how a specific patch affects the execution before even reading and understanding the change?

For example, say that Acme Corp has a very important module, fizzbuzz.rb:

module FizzBuzz
  module_function
  
  def fizz? i
    i % 3 == 0
  end

  def buzz? i
    i % 5 == 0
  end

  def fizzbuzz i
    if fizz?(i) && buzz?(i)
      return 'fizzbuzz'
    end
    
    if fizz?(i)
      return 'fizz'
    end
    
    if buzz?(i)
      return 'buzz'
    end
    
    return i
  end
end

It's executed like here, in test.rb:

require 'fizzbuzz'
puts (1..36).map(&FizzBuzz.method(:fizzbuzz)).join ' '

Now a new employee wants to impress the management with her mad coding skills, and says she can vastly improve performance by optimizing the module. Here's what she came up with:

module FizzBuzz
  module_function
  
  def fizz? i
    i % 3 == 0
  end

  def buzz? i
    i % 5 == 0
  end

  def fizzbuzz i
    matches = [fizz?(i), buzz?(i)]
    return i unless matches.any?
    [matches[0] ? 'fizz' : '', matches[1] ? 'buzz' : ''].join
  end
end

For the sake of the argument imagine it's a subtle change in a larger codebase. Can we tell how the execution changed?

We'll first use appmap-ruby to record the execution. Annoyingly for such a one-off it insists on having a config file, but it's not too difficult to make it happy by creating appmap.yml:

name: fizzbuzz
packages:
- path: fizzbuzz.rb

Now we can record the execution (note you probably need to set RUBYLIB=. if you're following at home so Ruby can find fizzbuzz.rb):

$ appmap record -o fizz.json test.rb
$ cat fizz.json
{"version":"1.2","metadata":{"app":"fizzbuzz","language":{"name":"ruby","engine"
:"ruby","version":"2.5.5"},"client":{"name":"appmap","url":"https://github.com/a
pplandinc/appmap-ruby","version":"0.37.0"}},"classMap":[{"name":"fizzbuzz.rb","t
ype":"package","children":[{"name":"FizzBuzz","type":"class","children":[{"name"
:"fizzbuzz","type":"function","location":"fizzbuzz.rb:13","static":true},{"name"
:"fizz?","type":"function","location":"fizzbuzz.rb:5","static":true},{"name":"bu
zz?","type":"function","location":"fizzbuzz.rb:9","static":true}]}]}],"events":[
{"id":1,"event":"call","thread_id":47377370105340,"defined_class":"FizzBuzz","me
thod_id":"fizzbuzz","path":"fizzbuzz.rb","lineno":13,"static":true,"parameters":
[{"name":"i","class":"Integer","object_id":3,"value":"1","kind":"req"}],"receive
...

Ok, not terribly illuminating. We'd like to record the execution after applying the change and compare, but this wall of JSON doesn't seem to inviting. But let's take a closer look:

$ jq '.events[0]' fizz.json
{
  "id": 1,
  "event": "call",
  "thread_id": 47377370105340,
  "defined_class": "FizzBuzz",
  "method_id": "fizzbuzz",
  "path": "fizzbuzz.rb",
  "lineno": 13,
  "static": true,
  "parameters": [
    {
      "name": "i",
      "class": "Integer",
      "object_id": 3,
      "value": "1",
      "kind": "req"
    }
  ],
  "receiver": {
    "class": "Module",
    "object_id": 47377376841220,
    "value": "FizzBuzz"
  }
}

Now we're getting somewhere? We don't care about most of these if we only want to compare traces. So let's transform it to just what we need:

$ jq -r '.events[] | [.event, .method_id] | join(" ")' fizz.json | tee fizz1.trace
call fizzbuzz
call fizz?
return
call buzz?
return
return
call fizzbuzz
call fizz?
return
call buzz?
...

Cool! Let's apply the patch and repeat the recording and transformation to get fizz2.trace:

patch -p1 < newfizz.patch
appmap record -o fizz2.json test.rb
jq -r '.events[] | [.event, .method_id] | join(" ")' fizz2.json > fizz2.trace
diff -u fizz[12].trace

Lo and behold:

--- fizz1.trace 2020-10-21 15:25:14.744000000 +0200
+++ fizz2.trace 2020-10-21 15:25:10.716000000 +0200
@@ -1,16 +1,12 @@
 call fizzbuzz
 call fizz?
 return
-call fizz?
-return
 call buzz?
 return
 return
 call fizzbuzz
 call fizz?
 return
-call fizz?
-return
 call buzz?
 return
 return
@@ -19,22 +15,16 @@
[...repeats 11 more times...]

It does improve performance! It saves a bunch of calls to fizz? which obviously is a very expensive method. LGTM!

(As an aside, note it also immediately reveals something which might not be clear at the first glance at the code: we're not saving any buzzes, just fizzes.)

{
"version": "1.2",
"metadata": {
"app": "fizzbuzz",
"language": {
"name": "ruby",
"engine": "ruby",
"version": "2.5.5"
},
"client": {
"name": "appmap",
"url": "https://github.com/applandinc/appmap-ruby",
"version": "0.36.0"
}
},
"classMap": [
{
"name": "fizzbuzz.rb",
"type": "package",
"children": [
{
"name": "FizzBuzz",
"type": "class",
"children": [
{
"name": "fizzbuzz",
"type": "function",
"location": "fizzbuzz.rb:13",
"static": true
},
{
"name": "fizz?",
"type": "function",
"location": "fizzbuzz.rb:5",
"static": true
},
{
"name": "buzz?",
"type": "function",
"location": "fizzbuzz.rb:9",
"static": true
}
]
}
]
}
],
"events": [
{
"id": 1,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 3,
"value": "1",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 2,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 3,
"value": "1",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 3,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 2,
"elapsed": 1.8401e-05
},
{
"id": 4,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 3,
"value": "1",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 5,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 4,
"elapsed": 3.1125e-05
},
{
"id": 6,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 3,
"value": "1",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 7,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 6,
"elapsed": 1.533e-05
},
{
"id": 8,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 1,
"elapsed": 0.000301914,
"return_value": {
"class": "Integer",
"value": "1",
"object_id": 3
}
},
{
"id": 9,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 5,
"value": "2",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 10,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 5,
"value": "2",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 11,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 10,
"elapsed": 1.5107e-05
},
{
"id": 12,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 5,
"value": "2",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 13,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 12,
"elapsed": 1.8599e-05
},
{
"id": 14,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 5,
"value": "2",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 15,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 14,
"elapsed": 1.4e-05
},
{
"id": 16,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 9,
"elapsed": 0.000224296,
"return_value": {
"class": "Integer",
"value": "2",
"object_id": 5
}
},
{
"id": 17,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 7,
"value": "3",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 18,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 7,
"value": "3",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 19,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 18,
"elapsed": 1.3887e-05,
"return_value": {
"class": "TrueClass",
"value": "true",
"object_id": 20
}
},
{
"id": 20,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 7,
"value": "3",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 21,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 20,
"elapsed": 1.4986e-05
},
{
"id": 22,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 7,
"value": "3",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 23,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 22,
"elapsed": 4.8083e-05,
"return_value": {
"class": "TrueClass",
"value": "true",
"object_id": 20
}
},
{
"id": 24,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 17,
"elapsed": 0.000256366,
"return_value": {
"class": "String",
"value": "fizz",
"object_id": 48362914053640
}
},
{
"id": 25,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 9,
"value": "4",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 26,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 9,
"value": "4",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 27,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 26,
"elapsed": 1.406e-05
},
{
"id": 28,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 9,
"value": "4",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 29,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 28,
"elapsed": 1.4037e-05
},
{
"id": 30,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 9,
"value": "4",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 31,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 30,
"elapsed": 1.6576e-05
},
{
"id": 32,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 25,
"elapsed": 0.000222247,
"return_value": {
"class": "Integer",
"value": "4",
"object_id": 9
}
},
{
"id": 33,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 11,
"value": "5",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 34,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 11,
"value": "5",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 35,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 34,
"elapsed": 1.4001e-05
},
{
"id": 36,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 11,
"value": "5",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 37,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 36,
"elapsed": 1.3924e-05
},
{
"id": 38,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 11,
"value": "5",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 39,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 38,
"elapsed": 1.5558e-05,
"return_value": {
"class": "TrueClass",
"value": "true",
"object_id": 20
}
},
{
"id": 40,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 33,
"elapsed": 0.000215101,
"return_value": {
"class": "String",
"value": "buzz",
"object_id": 48362913904360
}
},
{
"id": 41,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 13,
"value": "6",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 42,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 13,
"value": "6",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 43,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 42,
"elapsed": 1.4075e-05,
"return_value": {
"class": "TrueClass",
"value": "true",
"object_id": 20
}
},
{
"id": 44,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 13,
"value": "6",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 45,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 44,
"elapsed": 1.4417e-05
},
{
"id": 46,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 13,
"value": "6",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 47,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 46,
"elapsed": 1.4149e-05,
"return_value": {
"class": "TrueClass",
"value": "true",
"object_id": 20
}
},
{
"id": 48,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 41,
"elapsed": 0.000232977,
"return_value": {
"class": "String",
"value": "fizz",
"object_id": 48362913682440
}
},
{
"id": 49,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 15,
"value": "7",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 50,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 15,
"value": "7",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 51,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 50,
"elapsed": 1.3959e-05
},
{
"id": 52,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 15,
"value": "7",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 53,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 52,
"elapsed": 1.6907e-05
},
{
"id": 54,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 15,
"value": "7",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 55,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 54,
"elapsed": 1.3795e-05
},
{
"id": 56,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 49,
"elapsed": 0.000237582,
"return_value": {
"class": "Integer",
"value": "7",
"object_id": 15
}
},
{
"id": 57,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 17,
"value": "8",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 58,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 17,
"value": "8",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 59,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 58,
"elapsed": 1.3954e-05
},
{
"id": 60,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 17,
"value": "8",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 61,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 60,
"elapsed": 1.4507e-05
},
{
"id": 62,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 17,
"value": "8",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 63,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 62,
"elapsed": 1.3887e-05
},
{
"id": 64,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 57,
"elapsed": 0.000209435,
"return_value": {
"class": "Integer",
"value": "8",
"object_id": 17
}
},
{
"id": 65,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 19,
"value": "9",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 66,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 19,
"value": "9",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 67,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 66,
"elapsed": 1.4152e-05,
"return_value": {
"class": "TrueClass",
"value": "true",
"object_id": 20
}
},
{
"id": 68,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 19,
"value": "9",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 69,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 68,
"elapsed": 1.4e-05
},
{
"id": 70,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 19,
"value": "9",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 71,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 70,
"elapsed": 1.3935e-05,
"return_value": {
"class": "TrueClass",
"value": "true",
"object_id": 20
}
},
{
"id": 72,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 65,
"elapsed": 0.000206727,
"return_value": {
"class": "String",
"value": "fizz",
"object_id": 48362913646700
}
},
{
"id": 73,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 21,
"value": "10",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 74,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 21,
"value": "10",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 75,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 74,
"elapsed": 1.7066e-05
},
{
"id": 76,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 21,
"value": "10",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 77,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 76,
"elapsed": 1.4225e-05
},
{
"id": 78,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 21,
"value": "10",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 79,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 78,
"elapsed": 1.3878e-05,
"return_value": {
"class": "TrueClass",
"value": "true",
"object_id": 20
}
},
{
"id": 80,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 73,
"elapsed": 0.00022062,
"return_value": {
"class": "String",
"value": "buzz",
"object_id": 48362913631960
}
},
{
"id": 81,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 23,
"value": "11",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 82,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 23,
"value": "11",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 83,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 82,
"elapsed": 1.3953e-05
},
{
"id": 84,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 23,
"value": "11",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 85,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 84,
"elapsed": 1.6151e-05
},
{
"id": 86,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 23,
"value": "11",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 87,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 86,
"elapsed": 1.3995e-05
},
{
"id": 88,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 81,
"elapsed": 0.000236776,
"return_value": {
"class": "Integer",
"value": "11",
"object_id": 23
}
},
{
"id": 89,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 25,
"value": "12",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 90,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 25,
"value": "12",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 91,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 90,
"elapsed": 1.3912e-05,
"return_value": {
"class": "TrueClass",
"value": "true",
"object_id": 20
}
},
{
"id": 92,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 25,
"value": "12",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 93,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 92,
"elapsed": 3.0221e-05
},
{
"id": 94,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 25,
"value": "12",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 95,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 94,
"elapsed": 1.3902e-05,
"return_value": {
"class": "TrueClass",
"value": "true",
"object_id": 20
}
},
{
"id": 96,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 89,
"elapsed": 0.000225984,
"return_value": {
"class": "String",
"value": "fizz",
"object_id": 48362913495260
}
},
{
"id": 97,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 27,
"value": "13",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 98,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 27,
"value": "13",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 99,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 98,
"elapsed": 3.0661e-05
},
{
"id": 100,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 27,
"value": "13",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 101,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 100,
"elapsed": 0
},
{
"id": 102,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 27,
"value": "13",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 103,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 102,
"elapsed": 1.3126e-05
},
{
"id": 104,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 97,
"elapsed": 0.000208278,
"return_value": {
"class": "Integer",
"value": "13",
"object_id": 27
}
},
{
"id": 105,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 29,
"value": "14",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 106,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 29,
"value": "14",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 107,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 106,
"elapsed": 4.248e-06
},
{
"id": 108,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 29,
"value": "14",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 109,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 108,
"elapsed": 2.6814e-05
},
{
"id": 110,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 29,
"value": "14",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 111,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 110,
"elapsed": 1.3475e-05
},
{
"id": 112,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 105,
"elapsed": 0.000191075,
"return_value": {
"class": "Integer",
"value": "14",
"object_id": 29
}
},
{
"id": 113,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 31,
"value": "15",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 114,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 31,
"value": "15",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 115,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 114,
"elapsed": 1.8211e-05,
"return_value": {
"class": "TrueClass",
"value": "true",
"object_id": 20
}
},
{
"id": 116,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 31,
"value": "15",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 117,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 116,
"elapsed": 1.4407e-05,
"return_value": {
"class": "TrueClass",
"value": "true",
"object_id": 20
}
},
{
"id": 118,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 113,
"elapsed": 0.000230375,
"return_value": {
"class": "String",
"value": "fizzbuzz",
"object_id": 48362913420580
}
},
{
"id": 119,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 33,
"value": "16",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 120,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 33,
"value": "16",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 121,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 120,
"elapsed": 1.3858e-05
},
{
"id": 122,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 33,
"value": "16",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 123,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 122,
"elapsed": 1.3621e-05
},
{
"id": 124,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 33,
"value": "16",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 125,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 124,
"elapsed": 1.7431e-05
},
{
"id": 126,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 119,
"elapsed": 0.00023259,
"return_value": {
"class": "Integer",
"value": "16",
"object_id": 33
}
},
{
"id": 127,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 35,
"value": "17",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 128,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 35,
"value": "17",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 129,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 128,
"elapsed": 1.3905e-05
},
{
"id": 130,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 35,
"value": "17",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 131,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 130,
"elapsed": 1.3735e-05
},
{
"id": 132,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 35,
"value": "17",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 133,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 132,
"elapsed": 1.3742e-05
},
{
"id": 134,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 127,
"elapsed": 0.000198348,
"return_value": {
"class": "Integer",
"value": "17",
"object_id": 35
}
},
{
"id": 135,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 37,
"value": "18",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 136,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 37,
"value": "18",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 137,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 136,
"elapsed": 1.4021e-05,
"return_value": {
"class": "TrueClass",
"value": "true",
"object_id": 20
}
},
{
"id": 138,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 37,
"value": "18",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 139,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 138,
"elapsed": 1.3882e-05
},
{
"id": 140,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 37,
"value": "18",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 141,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 140,
"elapsed": 1.3887e-05,
"return_value": {
"class": "TrueClass",
"value": "true",
"object_id": 20
}
},
{
"id": 142,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 135,
"elapsed": 0.000224664,
"return_value": {
"class": "String",
"value": "fizz",
"object_id": 48362913294940
}
},
{
"id": 143,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 39,
"value": "19",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 144,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 39,
"value": "19",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 145,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 144,
"elapsed": 1.5607e-05
},
{
"id": 146,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 39,
"value": "19",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 147,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 146,
"elapsed": 1.3816e-05
},
{
"id": 148,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 39,
"value": "19",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 149,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 148,
"elapsed": 1.3569e-05
},
{
"id": 150,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 143,
"elapsed": 0.000241586,
"return_value": {
"class": "Integer",
"value": "19",
"object_id": 39
}
},
{
"id": 151,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 41,
"value": "20",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 152,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 41,
"value": "20",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 153,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 152,
"elapsed": 1.4164e-05
},
{
"id": 154,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 41,
"value": "20",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 155,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 154,
"elapsed": 1.3762e-05
},
{
"id": 156,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 41,
"value": "20",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 157,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 156,
"elapsed": 1.3607e-05,
"return_value": {
"class": "TrueClass",
"value": "true",
"object_id": 20
}
},
{
"id": 158,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 151,
"elapsed": 0.000204435,
"return_value": {
"class": "String",
"value": "buzz",
"object_id": 48362913326920
}
},
{
"id": 159,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 43,
"value": "21",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 160,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 43,
"value": "21",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 161,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 160,
"elapsed": 1.3886e-05,
"return_value": {
"class": "TrueClass",
"value": "true",
"object_id": 20
}
},
{
"id": 162,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "buzz?",
"path": "fizzbuzz.rb",
"lineno": 9,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 43,
"value": "21",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 163,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 162,
"elapsed": 1.4164e-05
},
{
"id": 164,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 43,
"value": "21",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 165,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 164,
"elapsed": 1.3848e-05,
"return_value": {
"class": "TrueClass",
"value": "true",
"object_id": 20
}
},
{
"id": 166,
"event": "return",
"thread_id": 48362904716800,
"parent_id": 159,
"elapsed": 0.00021025,
"return_value": {
"class": "String",
"value": "fizz",
"object_id": 48362913286880
}
},
{
"id": 167,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizzbuzz",
"path": "fizzbuzz.rb",
"lineno": 13,
"static": true,
"parameters": [
{
"name": "i",
"class": "Integer",
"object_id": 45,
"value": "22",
"kind": "req"
}
],
"receiver": {
"class": "Module",
"object_id": 48362915294960,
"value": "FizzBuzz"
}
},
{
"id": 168,
"event": "call",
"thread_id": 48362904716800,
"defined_class": "FizzBuzz",
"method_id": "fizz?",
"path": "fizzbuzz.rb",
"lineno": 5,
"static": true,
"parameters": [
{