Techioz Blog

プログラムがデバッグ モードで実行されているかどうかを確認する

概要

私は RubyMine を使用して Ruby 2.0 コードを作成し、デバッグしています。そのために Ruby-debug-ide を使用します。プログラムがデバッグ モードで実行されているかどうかを知りたいです。

Ruby グローバル変数があることは知っていますが、私が理解している限り、ruby-debug-ide は -d Ruby フラグを使用していないため、それを変更しませんでした。

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 または sh を使用して、コマンド ラインに文字列「rdebug-ide」が含まれているかどうかを確認しようとしましたが、ARGV は空の配列であり、sh は単に「/home/user/file.rb」です。完全なコマンドを取得するにはどうすればよいですか? RubyMine によって行が実行されましたか?

解決策

これが私がやったことです:

次のコードを (rails) アクションに配置し、デバッグ モードと非デバッグ モードの両方で出力の差分を実行しました。

puts ENV.to_hash.to_yaml

違いの 1 つは ENV[‘RUBYLIB’] にあることに気づきました (IDE_PROCESS_DISPATCHER、DEBUGGER_STORED_RUBYLIB、RUBYOPT、および DEBUGGER_HOST もあります)

したがって、確認方法は次のとおりです。

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