Ruby $DEBUG 和 $VERBOSE

Juanito FatasThinking about what to do.

執行 ruby 腳本時,Command Line 有選項可以設定這兩個全局變數 $DEBUG$VERBOSE,可以用來找警告跟除錯。

考慮以下腳本:

# debug-verbose.rb
puts "$DEBUG: #{$DEBUG}"
puts "$VERBOSE: #{$VERBOSE}"

def foo
  bar = "baz"
end

$DEBUG$VERBOSE 預設值都是 false

$ ruby debug-verbose.rb
$DEBUG: false
$VERBOSE: false

true 時會印出直譯器的警告訊息。

-w, -W, -W2, --verbose 選項會把 $VERBOSE 設為真:

$ ruby -w debug-verbose.rb
debug-verbose.rb:5: warning: assigned but unused variable - bar
$DEBUG: false
$VERBOSE: true

-v 會印出 RUBY_VERSION 同時把 $VERBOSE 設為真:

$ ruby -v debug-verbose.rb
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14]
debug-verbose.rb:5: warning: assigned but unused variable - bar
$DEBUG: false
$VERBOSE: true

-v 選項通常用來修復 RubyGem 的警告。

--debug, -d$DEBUG$VERBOSE 都設為真:

$ ruby -d debug-verbose.rb
Exception `LoadError' at /Users/Juan/.rubies/ruby-2.2.2/lib/ruby/2.2.0/rubygems.rb:1222 - cannot load such file -- rubygems/defaults/operating_system
Exception `LoadError' at /Users/Juan/.rubies/ruby-2.2.2/lib/ruby/2.2.0/rubygems.rb:1231 - cannot load such file -- rubygems/defaults/ruby
debug-verbose.rb:5: warning: assigned but unused variable - bar
$DEBUG: true
$VERBOSE: true

這兩個 LoadError 錯誤是 ruby -d 預期的行為

-d 選項通常用來回報 rubygems 錯誤用。

Ruby verbose mode and how it's broken