确定程序是否在调试模式下运行

时间:2014-02-26 11:21:23

标签: ruby ruby-debug

我使用RubyMine编写和调试我的Ruby 2.0代码。它为此目的使用ruby-debug-ide。我想知道程序是否在调试模式下运行。

我知道有一个Ruby $DEBUG全局变量,但据我所知,ruby-debug-ide没有改变它,因为它没有使用-d ruby​​标志。 / p>

如果我使用Rubymine调试我的文件,执行的命令如下所示:

/home/user/.rvm/rubies/ruby-2.0.0-p353/bin/ruby -e at_exit{sleep(1)};$stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) /home/user/.rvm/gems/ruby-2.0.0-p353/gems/ruby-debug-ide-0.4.22/bin/rdebug-ide --disable-int-handler --port 37737 --dispatcher-port 47992 -- /home/user/file.rb

我尝试使用ARGV$0来确定命令行是否包含字符串'rdebug-ide',但ARGV是一个空数组,而$0是只是'/home/user/file.rb',如何获得RubyMine执行的完整命令行?

2 个答案:

答案 0 :(得分:5)

这就是我所做的:

我将以下代码放在(rails)操作中,并在调试和非调试模式下对输出执行diff:

puts ENV.to_hash.to_yaml

我注意到其中一个差异在于ENV['RUBYLIB'](还有IDE_PROCESS_DISPATCHERDEBUGGER_STORED_RUBYLIBRUBYOPTand DEBUGGER_HOST

所以这是你要检查的方式:

if ENV['RUBYLIB'] =~ /ruby-debug-ide/
  puts 'in debug mode'
else
  puts 'not in debug mode'
end

答案 1 :(得分:1)

您需要全局变量$LOAD_PATH

a = $LOAD_PATH
a.each do |current_path|
    puts 'Debug mode' if current_path.include?('rb/gems')
end
如果我使用调试模式,

$LOAD_PATH有这一行"/home/username/RubyMine-6.0.2/rb/gems"