p e.backtrace
me encontré en una sesión de IRB, que no tiene una fuente y todavía dio información relevante.
=> ["(irb):11:in `foo'",
"(irb):17:in `irb_binding'",
"/usr/lib64/ruby/1.8/irb/workspace.rb:52:in `irb_binding'",
"/usr/lib64/ruby/1.8/irb/workspace.rb:52"]
Si desea una traza muy bien analizada, la siguiente expresión regular puede ser útil:
p x.backtrace.map{ |x|
x.match(/^(.+?):(\d+)(|:in `(.+)')$/);
[$1,$2,$4]
}
[
["(irb)", "11", "foo"],
["(irb)", "48", "irb_binding"],
["/usr/lib64/ruby/1.8/irb/workspace.rb", "52", "irb_binding"],
["/usr/lib64/ruby/1.8/irb/workspace.rb", "52", nil]
]
(Regex/debe/ser seguro contra caracteres extraños en los nombres de función o directorios/nombres de archivo) (Si usted se pregunta dónde camefrom foo, he hecho una definición para agarrar la excepción a cabo:.
>>def foo
>> thisFunctionDoesNotExist
>> rescue Exception => e
>> return e
>>end
>>x = foo
>>x.backtrace
'.last' obtiene el nombre del método. El número de línea es un elemento antes de eso. – kixorz