Docs header transparent bg

调试

调试 Bundler 可能很困难,不要灰心 🤗。

在尝试调试之前,请确保您已按照 开发设置 文档进行操作。

最简单的调试方法是打印调试信息。在您想要查看对象或变量的代码中的任何位置放置 puts 语句,您将在控制台输出中看到您的 puts

这在运行测试时尤其有用。

ruby puts "stacktrace: #{caller_locations(0).join("\n")}" puts "@definition: #{@definition}" puts "specification.class.name: #{specification.class.name}" puts "spec.method(:to_checksum).source_location: #{spec.method(:to_checksum).source_location}" # 等等

要了解有关打印调试策略的更多信息,[TODO:链接到文档]

REPL 调试

REPL(或 Read-Eval-Print Loop)是一种与您的代码交互的方式。

使用 REPL,您可以查看对象和变量的值、堆栈跟踪、方法定义位置等。

要使用 REPL,请在您想要查看周围环境的任何位置放置一个 binding.irb。当您的代码到达断点时,将打开一个交互式 irb 控制台。

要了解有关使用 IRB 的更多信息,[TODO:链接到文档]

交互式调试

交互式调试类似于 REPL + 按行前进代码执行的能力。

在本地测试 Bundler 时,您可以使用任何您熟悉的调试器进行交互式调试。

debugpry-byebug 是常见的首选。debug 从 Ruby v3.1 开始包含在内。

您只需要全局安装您选择的调试器 gem。然后,您需要在命令行上运行本地 Bundler 之前要求它。

bash RUBYOPT=-rdebug dbundle # 对于 debug gem RUBYOPT=-rpry-byebug dbundle # 对于 pry-byebug

注意 交互式调试在测试套件中不可用。大多数测试使用 Open3 在子进程中运行 Bundler 并将输出捕获到字符串中,这使得即使您可以加载它,也无法使用 pry。

本地设置

在本地测试的最简单方法是设置一个包含 Gemfile 的目录并运行您的 Bundler shell 别名(有关设置别名的说明,请参阅 开发设置 文档)。

我们建议将此目录放在 tmp 中,这样您的本地测试就不会意外地被提交。

bash cd tmp mkdir [本地测试目录名称] && cd [本地测试目录名称] dbundle init

然后,您应该有一个 Gemfile 供您根据需要编辑以进行测试。

RubyGems 测试用例

默认情况下,初始化的 Gemfile 的远程地址为 "http://rubygems.org.cn"。您可以添加任何托管在 rubygems 上的 gem,然后运行您的 Bundler shell 别名 (dbundle) 来测试您的代码。

```ruby # frozen_string_literal: true

source “http://rubygems.org.cn”

gem ‘tiny_css’ ```

在您希望调试器暂停的任何地方设置断点 (binding.break 用于 debugbinding.pry 用于 pry-byebug)。运行您的 Bundler shell 别名。

bash RUBYOPT=-rdebug dbundle

您的断点将在您的控制台中显示,并处于暂停状态。

来自本地远程的 Gem

如果您想要测试非常具体的场景(例如,在运行测试套件时失败的示例),最简单的方法是使用先前测试套件运行中的临时 gem。

如果您还没有,请并行运行测试套件。

bash bin/parallel_rspec

然后您将在 bundler/tmp 目录中找到构建的 gem,例如 bundler/tmp/1/gems/remote1/

您可以使用指向测试运行中构建的 gem 的文件源来设置您的 Gemfile。

```ruby # frozen_string_literal: true

source “file:///[path to repo’s bundler directory]/tmp/1/gems/remote1/”

gem “rack”, ‘=0.9.1’ ```

然后,您可以像在从 RubyGems 源获取 gem 的先前示例中一样进行测试。