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

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

Я знаю, что есть глобальная переменная Ruby $DEBUG, но, насколько я понимаю, ruby-debug-ide не изменил ее, потому что не использовал флаг ruby ​​-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?


person ShockwaveNN    schedule 26.02.2014    source источник
comment
ты пробовал ENV['debugger_host'].nil?   -  person Abdo    schedule 26.02.2014
comment
ENV['debugger_host'].ноль? правда в обоих случаях   -  person ShockwaveNN    schedule 26.02.2014


Ответы (2)


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

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

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
person Abdo    schedule 26.02.2014
comment
Работает, по крайней мере, в RubyMine + rvm. Спасибо! - person skywinder; 03.03.2015
comment
@PerLundberg проверьте мой метод и сделайте свой собственный, чтобы выяснить, что работает для вашей среды. - person Abdo; 09.08.2017
comment
@Abdo Проверено сейчас. Ни RUBYLIB, ни другие упомянутые переменные env не имеют каких-либо необычных значений при запуске через отладчик VSCode. - person Per Lundberg; 10.08.2017
comment
@PerLundberg Я не использую VSCode, но предлагаю изменить команду отладки (должно быть где-то, где вы можете добавить к ней переменные). Теперь, когда я думаю об этом вопросе/ответе, я не уверен, что это было полезно. Вы пробовали gem pry-rails ? - person Abdo; 10.08.2017
comment
Как упоминал @PerLundberg, при запуске VSCode puts ENV.to_hash.to_yaml с (F5) или без (Ctrl + F5) отладчик возвращает тот же результат. - person Halil ŞEN; 05.03.2019

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

person Flamine    schedule 26.02.2014
comment
Добро пожаловать в Stack Overflow! Не могли бы вы отредактировать свой ответ, включив в него пример, показывающий, как использовать переменную $LOAD_PATH для достижения того, чего хочет OP? - person toro2k; 26.02.2014
comment
Извините за введение в заблуждение. У меня этот вариант работает только если чистый .rb файл. Но если я использую его в своем проекте - и отладка, и запуск $LOAD_PATH содержат "ruby-debug", не знаю, почему - person ShockwaveNN; 26.02.2014