Определите, работает ли программа в режиме отладки

Я использую RubyMine для написания и отладки своего кода Ruby 2.0. Для этого он использует ruby-debug-ide. Я хочу знать, работает ли программа в режиме отладки.

Я знаю, что есть Рубин $DEBUG глобальная переменная, но, насколько я понимаю, ruby-debug-ide не изменила ее, потому что она не использовала -d рубиновый флаг.

Если я отлаживаю свой файл с помощью 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 ответа

Решение

Вот что я сделал:

Я поместил следующий код в действие (rails) и сделал diff на выходах как в режиме отладки, так и без отладки:

puts ENV.to_hash.to_yaml

Я заметил, что одно из различий заключается в ENV['RUBYLIB'] (есть также IDE_PROCESS_DISPATCHER, DEBUGGER_STORED_RUBYLIB, RUBYOPT, and DEBUGGER_HOST)

Вот как вы можете проверить:

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

Вам нужна глобальная переменная $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" если я использую режим отладки.

Другие вопросы по тегам