2011-11-12 3 views
3

Из обратного отсчета ошибки $!.backtrace вы можете извлечь имена методов для каждого шага. Я хочу дополнительно извлечь получателя каждого вызова метода. Я уверен, что есть способ сделать это, потому что я видел this gem, у которого есть эта функция.Получение информации о получателе от обратной линии

Этот драгоценный камень, упомянутый выше, используется Kernel.set_trace_func и записывает информацию binding. Но выполнение этого для всех вызовов методов значительно замедляет работу программы. Как я могу выборочно записывать информацию binding, связанную со стеком вызовов, что приводит к ошибке?

ответ

1

Насколько я знаю, невозможно получить информацию binding после того, как было создано исключение, за исключением отслеживания выполнения.

Возможно, расширение C может иметь доступ к информации, доступной в объекте исключения (см. https://github.com/ruby/ruby/blob/trunk/error.c#L552).

Вам здесь не повезло ...

+0

Я вижу. Спасибо за информацию. – sawa