# Introspection question

**URL:** <https://www.ruby-forum.com/t/introspection-question/67689>\
**Category:** Ruby\
**Created:** [September 6, 2006, 2:06am UTC](https://www.ruby-forum.com/t/introspection-question/67689 "2006-09-06T02:06:52Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![jdonnell](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/f17d59/32.png) [@jdonnell](https://www.ruby-forum.com/u/jdonnell)\
**Post date:** [September 6, 2006, 2:06am UTC](https://www.ruby-forum.com/t/introspection-question/67689/1 "2006-09-06T02:06:52Z")

</div>

is there a way for an object to tell you where it was created a la  
stacktraces?

I tried to hack it in myself, but it’s really slowwwwwww. Here was my  
hack attempt. I also wanted each object to tell me the time it was  
created which works fine.

class Object  
attr\_accessor :mp\_created\_at  
attr\_accessor :origin\_trace  
end

class Class  
alias oldNew new  
def new(\*args, &block)  
obj = oldNew(\*args, &block)  
begin  
raise “force a stack trace”  
rescue Exception =\> err  
obj.origin\_trace = err.backtrace  
end  
#a hack that I need for a reason which I haven’t taken the time to  
figure out  
obj.mp\_created\_at = Time.now() unless obj.frozen?  
return obj  
end  
end

---

<div class="post-metadata">

**Author:** ![jdonnell](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/f17d59/32.png) [@jdonnell](https://www.ruby-forum.com/u/jdonnell)\
**Post date:** [September 6, 2006, 2:56am UTC](https://www.ruby-forum.com/t/introspection-question/67689/2 "2006-09-06T02:56:56Z")

</div>

On Sep 5, 2006, at 8:05 PM, jdonnell wrote:

> end

Is this close enough?

class Class  
alias rb\_new new  
def new(\*args, &block)  
stack = caller  
obj = rb\_new(\*args, &block)  
obj.origin\_trace = stack  
obj.mp\_created\_at = Time.now unless obj.frozen?  
obj  
end  
end

---

<div class="post-metadata">

**Author:** ![jdonnell](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/f17d59/32.png) [@jdonnell](https://www.ruby-forum.com/u/jdonnell)\
**Post date:** [September 6, 2006, 11:01am UTC](https://www.ruby-forum.com/t/introspection-question/67689/3 "2006-09-06T11:01:34Z")

</div>

On 06.09.2006 02:00, jdonnell wrote:

> end  
> #a hack that I need for a reason which I haven’t taken the time to  
> figure out

Probably because you were not aware of #caller:  
[http://www.ruby-doc.org/core/classes/Kernel.html#M001968](http://www.ruby-doc.org/core/classes/Kernel.html#M001968)

> > def foo() caller 0 end  
> > =\> nil  
> > foo  
> > =\> [“(irb):6:in `foo’”, “(irb):7:in `irb\_binding’”,  
> > “/usr/lib/ruby/1.8/irb/workspace.rb:52:in `irb\_binding’”, “:0”]

> ```
> obj.mp_created_at = Time.now() unless obj.frozen?
> return obj
> 
> ```
> 
> end  
> end

Kind regards

```
robert

```

---

<div class="post-metadata">

**Author:** ![jdonnell](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/f17d59/32.png) [@jdonnell](https://www.ruby-forum.com/u/jdonnell)\
**Post date:** [September 14, 2006, 2:16am UTC](https://www.ruby-forum.com/t/introspection-question/67689/4 "2006-09-14T02:16:51Z")

</div>

Thanks 🙂 That’s exactly what i was looking for.
