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