gpt4 book ai didi

ruby-on-rails - ruby-debug gem 中的框架、线程和其他一些术语,它们是什么意思?

转载 作者:数据小太阳 更新时间:2023-10-29 07:51:17 26 4
gpt4 key购买 nike

我现在正在尝试学习 ruby​​-debug gem,但是有很多行话我跟不上。想知道是否有人可以帮忙解释一下?

我在 http://bashdb.sourceforge.net/ruby-debug.html 中找不到它们任何一个。作者假设我们已经了解它们(无论如何我可以在哪里了解它们?)。

例如这里是在rdb中调用help frame的结果。我无奈地不理解我加粗的所有项目。

Move the current frame to the specified frame number.

A negative number indicates position from the other end. So 'frame -1' moves to the oldest frame, and 'frame 0' moves to the newest frame.

Without an argument, the command prints the current stack frame. Since the current position is redisplayed, it may trigger a resyncronization if there is a front end also watching over things.

If a thread number is given then we set the context for evaluating expressions to that frame of that thread.

最佳答案

这不是特定于 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,那么您将移动到调用堆栈的底部。将调用堆栈想象成一堆盘子。当你调用一个函数时,你将一个盘子添加到堆栈中,当你从该函数返回时,你从堆栈中删除一个盘子。每个盘子都是一个框架。由于您通常最终会在函数内的函数内调用函数,因此您最终会得到相当深的调用堆栈,在它们上上下移动对于调试、评估调用堆栈中每个点的局部变量和状态很有用。

如果您想阅读有关调用堆栈的更多信息,Wikipedia has a nice article .

关于线程

大多数现代编程语言都是多线程的,这意味着它们可以(几乎)同时执行多个代码路径。因此,假设您有一个可视化应用程序,并且您执行了一些昂贵的计算。当该计算正在运行时,您的 GUI 将无法对任何用户输入使用react,这使得应用程序对用户来说似乎是卡住的。您可以通过运行两个线程来解决这个问题:一个线程负责接受和处理用户输入以及绘制 GUI,另一个线程负责进行繁重的计算。您的计算线程可能会陷入代价高昂的循环,而您的 GUI 线程将继续运行并绘制 GUI。

如果您正在运行多线程应用程序,那么您必须选择要在哪个线程中评估调试命令(表达式),因为每个线程将位于代码的不同位置,并且会有不同的调用堆栈和不同的局部变量和状态等。这是评估上下文。

但是,我注意到这是一个 Rails 问题,Rails(默认情况下)是单线程的,因此您不必担心线程问题。

关于ruby-on-rails - ruby-debug gem 中的框架、线程和其他一些术语,它们是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3590158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com