Module: Ruined
- Includes:
- WEBrick
- Defined in:
- lib/ruined/ruinmain.rb
Defined Under Namespace
Classes: Context, DebugServlet, Thread
Constant Summary
collapse
- RUINED_VERSION =
'0.0.8'
- IGNORES =
[:$&, :$', :$+, :$_, :$`, :$~, :$KCODE, :$= ]
Class Method Summary
collapse
Class Method Details
.add_unbreakable(t) ⇒ Object
273
274
275
276
277
|
# File 'lib/ruined/ruinmain.rb', line 273
def self.add_unbreakable(t)
@monitor.synchronize {
@unbreakable_threads << t
}
end
|
.breakpoints ⇒ Object
191
192
193
|
# File 'lib/ruined/ruinmain.rb', line 191
def self.breakpoints
@breakpoints
end
|
.current_context ⇒ Object
186
187
188
189
|
# File 'lib/ruined/ruinmain.rb', line 186
def self.current_context
raise RuntimeException.new('bug: no context !!') unless @current
@current.to_hash
end
|
.global_vars ⇒ Object
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
|
# File 'lib/ruined/ruinmain.rb', line 217
def self.global_vars
script = <<EOD
(global_variables - Ruined::IGNORES).map do |v|
if v.to_s =~ /\\A\\$[1-9]/
nil
else
{ :name => v.to_s, :value => eval(v.to_s) }
end
end - [nil]
EOD
a = eval(script)
if @current
0.upto(a.size - 1) do |i|
if @current.tlses.has_key?(a[i][:name])
a[i][:value] = @current.tlses[a[i][:name]]
end
end
end
a
end
|
.local_call?(addr) ⇒ Boolean
291
292
293
|
# File 'lib/ruined/ruinmain.rb', line 291
def self.local_call?(addr)
['127.0.0.1', '::1'].include?(addr[3])
end
|
.local_vars ⇒ Object
195
196
197
198
199
200
201
202
|
# File 'lib/ruined/ruinmain.rb', line 195
def self.local_vars
script = <<EOD
local_variables.map do |_0|
(_0 == :_) ? nil : { :name => _0.to_s, :value => eval(_0.to_s) }
end - [nil]
EOD
(@current) ? eval(script, @current.binding) : []
end
|
.logger ⇒ Object
.output ⇒ Object
261
262
263
264
265
266
267
268
269
270
271
|
# File 'lib/ruined/ruinmain.rb', line 261
def self.output
return '' unless StringIO === $stdout
out = $stdout
$stdout = StringIO.new
out.pos = 0
ret = ''
out.each_line do |x|
ret << "#{HTMLUtils.escape(x.chomp)}<br/>"
end
ret
end
|
.release(t, obj = nil) ⇒ Object
252
253
254
255
256
257
258
259
|
# File 'lib/ruined/ruinmain.rb', line 252
def self.release(t, obj = nil)
return unless @queue
logger.debug("------------release #{t}")
@monitor.synchronize {
@queue[t].push obj
}
logger.debug("------------release exit #{t}")
end
|
.remove_unbreakable(t) ⇒ Object
279
280
281
282
283
|
# File 'lib/ruined/ruinmain.rb', line 279
def self.remove_unbreakable(t)
@monitor.synchronize {
@unbreakable_threads.delete t
}
end
|
.self_vars ⇒ Object
204
205
206
207
208
209
210
211
212
213
214
215
|
# File 'lib/ruined/ruinmain.rb', line 204
def self.self_vars
script = <<EOD
[{ :name => 'class', :value => self.class.to_s }] +
instance_variables.map do |v|
{ :name => v.to_s, :value => instance_eval(v.to_s) }
end +
self.class.class_variables.map do |v|
{ :name => v.to_s, :value => instance_eval(v.to_s) }
end
EOD
(@current) ? eval(script, @current.binding) : []
end
|
.set(var, val) ⇒ Object
238
239
240
|
# File 'lib/ruined/ruinmain.rb', line 238
def self.set(var, val)
eval("#{var} = #{val}", @current.binding)
end
|
.status_to_s(s) ⇒ Object
307
308
309
310
311
312
313
314
315
|
# File 'lib/ruined/ruinmain.rb', line 307
def self.status_to_s(s)
if s.nil?
'dead'
elsif s == false
'aborted'
else
s
end
end
|
.unbreakable?(t) ⇒ Boolean
285
286
287
288
289
|
# File 'lib/ruined/ruinmain.rb', line 285
def self.unbreakable?(t)
@monitor.synchronize {
@unbreakable_threads.include? t
}
end
|
.user_threads(current) ⇒ Object
295
296
297
298
299
300
301
302
303
304
305
|
# File 'lib/ruined/ruinmain.rb', line 295
def self.user_threads(current)
r = []
@monitor.synchronize {
@user_threads.each do |t, c|
r << [:file => File.basename(c.file), :line => c.line,
:self => (c == current),
:status => status_to_s(t.status)]
end
r
}
end
|
.wait(t) ⇒ Object
242
243
244
245
246
247
248
249
250
|
# File 'lib/ruined/ruinmain.rb', line 242
def self.wait(t)
return unless @queue
logger.debug("------------wait #{t}")
o = @queue[t].pop
if t == 1
@current = o
end
logger.debug("------------wait exit #{t}")
end
|