Это не специфичный для Ruby жаргон;это характерно для большинства отладок.
Относительно кадров стека
Вы, вероятно, видели следы стека:
/usr/local/rvm/gems/ree-1.8.7-2010.02/gems/redgreen-1.2.2/lib/redgreen.rb:28:in `write': Broken pipe (Errno::EPIPE)
from /usr/local/rvm/gems/ree-1.8.7-2010.02/gems/redgreen-1.2.2/lib/redgreen.rb:28:in `output_single'
from /usr/local/rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/test/unit/ui/console/testrunner.rb:72:in `add_fault'
from /usr/local/rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/test/unit/ui/console/testrunner.rb:70:in `to_proc'
from /usr/local/rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/test/unit/util/observable.rb:78:in `call'
Полная трассировка показывает вам«стек вызовов».Строка вверху - это то место, где было сгенерировано исключение, а строки под ним показывают путь через ваш код, который программа прошла для достижения этой точки.Каждая из этих строк представляет собой уровень в стеке, называемый «кадром стека».Таким образом, когда генерируется исключение, текущий кадр стека является вершиной стека.Если вы переходите на frame -1
, то вы переходите к нижней части стека вызовов.Думайте о стеке вызовов как о стеке тарелок.Когда вы вызываете функцию, вы добавляете пластину в стек, а когда вы выходите из этой функции, вы удаляете пластину из стека.Каждая тарелка это рама.Так как вы обычно заканчиваете тем, что вызываете функции внутри функций внутри функций, вы получаете довольно глубокие стеки вызовов, и обход их вверх и вниз может быть полезен при отладке для оценки локальных переменных и состояния в каждой точке стека вызовов.
Если вы хотите больше узнать о стеках вызовов, В Википедии есть хорошая статья .
Относительно потоков
Большинство всехсовременные языки программирования являются многопоточными, что означает, что они могут выполнять несколько путей кода (почти) одновременно.Итак, представьте, например, что у вас есть визуальное приложение, и вы выполняете некоторые дорогостоящие вычисления.Ваш графический пользовательский интерфейс не сможет реагировать на любые пользовательские данные, пока выполняются эти вычисления, что делает приложение замороженным для пользователя.Чтобы решить эту проблему, запустите два потока: один поток будет отвечать за принятие и обработку пользовательского ввода и рисование графического интерфейса, а другой поток будет отвечать за выполнение тяжелых вычислений.Ваш вычислительный поток может застрять в дорогостоящем цикле, а ваш поток графического интерфейса будет продолжать работать и рисовать графический интерфейс.
Если вы запускаете многопоточное приложение, тогда вам нужно выбрать, какой поток вы хотите оценитьваши команды отладки (выражения) в, так как каждый поток будет в разных точках вашего кода, и будет иметь разные стеки вызовов и разные локальные переменные и состояния и тому подобное.Это контекст оценки.
Однако я заметил, что это вопрос Rails, и Rails (по умолчанию) является однопоточным, поэтому вам не нужно беспокоиться о потоках.