代码之家  ›  专栏  ›  技术社区  ›  Andrew Grimm atk

为什么kernel p打印到标准输出?

  •  1
  • Andrew Grimm atk  · 技术社区  · 14 年前

    为什么kernel p打印到标准输出?不是 printf debugging 应该输出到标准错误吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Wayne Conrad    14 年前

    您可以定义一个全局函数“q”,它的工作方式与“p”类似,只是它打印到$stderr。

    #!/usr/bin/ruby1.8
    
    module Kernel
    
      def q(*stuff)
        stuff.each { |thing| $stderr.print(thing.inspect + "\n")}
      end
    
    end
    
    q 'foo'    # => "foo"
    

    你可能会被诱惑使用 puts 而不是 print ... + "\n" 是的。此代码使用 print 要使其线程安全: 可以在打印参数和打印新行之间中断,导致两个线程的输出出现在一行上。很少有多个线程同时向$stdout/$stderr写入代码,所以这通常不是问题。但这是一个调试工具,您最终肯定会使用它来了解线程中发生了什么。

        2
  •  1
  •   Firas Assaad    14 年前

    为什么假设kernel p用于调试?它像C语言中的kernel print或printf一样写入stdout。

    如果要写入标准错误,可以执行以下操作:

    $stderr.puts(x.inspect)
    

    顺便说一下,如果您真的想使用printf调试,我建议您阅读以下内容 article about debugging techniques