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

问题描述 投票:0回答:3

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

我知道有 Ruby

$DEBUG
全局变量,但据我了解 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
$0
来确定命令行是否包含字符串
'rdebug-ide'
ARGV
是一个空数组,而
$0
只是
'/home/user/file.rb'
,我怎样才能获得完整的命令RubyMine 执行的行?

ruby ruby-debug
3个回答
7
投票

这就是我所做的:

我将以下代码放入(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

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"


0
投票

如果您知道正在使用哪个调试库,则可以检查当前是否定义了该扩展定义的常量。

例如,最常见的 gem 是

ruby/debug
,它在加载时定义了
DEBUGGER__
模块,所以你可以这样做:

if defined?(DEBUGGER__) ... end
    
© www.soinside.com 2019 - 2024. All rights reserved.