本文整理汇总了Python中qdb.Qdb类的典型用法代码示例。如果您正苦于以下问题:Python Qdb类的具体用法?Python Qdb怎么用?Python Qdb使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Qdb类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_set_continue_no_breaks
def test_set_continue_no_breaks(self):
"""
Asserts that set_continue works with no breakpoints.
"""
db = Qdb(cmd_manager=QueueCommandManager)
db.cmd_manager.enqueue(lambda t: t.set_continue())
db.cmd_manager.user_wait(0.2)
line_1 = line_2 = line_3 = False
with Timeout(0.1, False):
db.set_trace()
line_1 = True # EDIT IN BOTH PLACES
line_2 = True
line_3 = True
# Assert that we hit all three lines event though interaction is
# blocked.
self.assertTrue(line_1 and line_2 and line_3)
# As this was the last time we were supposed to stop, this should be
# the curframe data.
self.assertEqual(
db.get_line(self.filename, db.curframe.f_lineno),
' line_1 = True # EDIT IN BOTH PLACES'
)
示例2: test_set_trace_without_stop
def test_set_trace_without_stop(self):
"""
Asserts that calling set_trace with stop=False will start tracing
but not stop.
WARNING: This test relies on the relative line numbers inside the test.
"""
db = Qdb(cmd_manager=QueueCommandManager)
line_offset = 8 # The difference in the set_break call and line_3.
db.set_break(
self.filename,
sys._getframe().f_lineno + line_offset,
)
db.cmd_manager.user_wait(0.2)
line_1 = line_2 = line_3 = False
with Timeout(0.1, False):
db.set_trace(stop=False) # Should not stop us here.
line_1 = True
line_2 = True
line_3 = True
# Since we are stepping, we should not hit this line.
self.assertTrue(line_1)
self.assertTrue(line_2)
# We should have still stopped at this breakpoint if we are tracing.
self.assertFalse(line_3)
db.disable()
db = Qdb(cmd_manager=NopCommandManager)
line_1 = False
with Timeout(0.1, False):
db.set_trace(stop=False)
line_1 = True
self.assertTrue(line_1)
示例3: test_eval_state_update
def test_eval_state_update(self):
"""
Tests that eval may update the state of the program.
"""
# We will try to corrupt this variable with a stateful operation.
test_var = 'pure' # NOQA
db = Qdb(
uuid='eval_test',
cmd_manager=self.cmd_manager,
host=self.tracer_host,
port=self.tracer_port,
redirect_output=False,
)
sleep(0.01)
self.server.session_store.send_to_tracer(
uuid=db.uuid,
event=fmt_msg('eval', "test_var = 'mutated'")
)
self.server.session_store.send_to_tracer(
uuid=db.uuid,
event=fmt_msg('continue')
)
db.set_trace(stop=True)
self.server.session_store.slaughter(db.uuid)
self.assertEqual(test_var, 'mutated')
示例4: test_function_call_next_step
def test_function_call_next_step(self):
"""
Tests the functionality of next and step when calling functions.
This checks to make sure the function is stepped into and can be
stepped over.
"""
cmd_manager = QueueCommandManager()
db = Qdb(cmd_manager=cmd_manager)
# Queue up a next command to next over the function call.
cmd_manager.enqueue(lambda t: t.set_next(t.curframe))
# Queue up a sleep so that we block after calling next.
# This would cause us to NOT execute the f_called[0] = True line of f
# had we only called set_step. This is asserted afterwards.
cmd_manager.user_wait(0.2)
# A mutable structure to check if f is called.
f_called = NonLocal(False)
def f():
f_called.value = True
with Timeout(0.1, False):
db.set_trace()
f()
# We hit that line in f, so it should now be True.
self.assertTrue(f_called.value)
# Assert that we are currently executing the line we think we should
# be executing. Since we are just stepping, this should be setting
# curframe each time.
self.assertEqual(
db.get_line(self.filename, db.curframe.f_lineno),
' db.get_line(self.filename, db.curframe.f_lineno),'
)
db.disable()
cmd_manager = QueueCommandManager()
db = Qdb(cmd_manager=cmd_manager)
f_called = NonLocal(False)
# This time we will be only stepping, so we should not execute the
# entire call to f.
cmd_manager.enqueue(lambda t: t.set_step())
cmd_manager.user_wait(1.2)
with Timeout(0.1, False):
db.set_trace()
f()
# We should not have hit this line in f.
self.assertFalse(f_called.value)
# Since we only stepped once, this is the last time we set the frame.
self.assertEqual(
db.get_line(self.filename, db.curframe.f_lineno),
' f_called.value = True'
)
示例5: test_stack_transpose_no_skip
def test_stack_transpose_no_skip(self, direction):
"""
Tests moving up the stack.
"""
events = []
def capture_event(self, event, payload):
events.append(fmt_msg(event, payload))
class cmd_manager(type(self.cmd_manager)):
"""
Wrap send_stack by just capturing the output to make assertions on
it.
"""
def send_stack(self, tracer):
with patch.object(cmd_manager, 'send_event', capture_event):
super(cmd_manager, self).send_stack(tracer)
db = Qdb(
uuid='test_' + direction,
cmd_manager=cmd_manager(),
host=self.tracer_host,
port=self.tracer_port,
redirect_output=False,
green=True,
)
gyield()
if direction == 'down':
# We are already located in the bottom frame, let's go up one
# so that we may try going down.
self.server.session_store.send_to_tracer(
uuid=db.uuid,
event=fmt_msg('up')
)
self.server.session_store.send_to_tracer(
uuid=db.uuid,
event=fmt_msg(direction)
)
self.server.session_store.send_to_tracer(
uuid=db.uuid,
event=fmt_msg('disable', 'soft')
)
gyield()
db.set_trace()
start_ind = events[-2]['p']['index']
shift_ind = events[-1]['p']['index']
if direction == 'up':
self.assertEqual(start_ind - shift_ind, 1)
elif direction == 'down':
self.assertEqual(shift_ind - start_ind, 1)
else:
self.fail("direction is not 'up' or 'down'") # wut did u do?
示例6: test_eval_timeout
def test_eval_timeout(self):
"""
Tests that evaluating user repl commands will raise Timeouts.
"""
def g():
while True:
pass
prints = []
class cmd_manager(type(self.cmd_manager)):
"""
Captures print commands to make assertions on them.
"""
def send_print(self, input_, exc, output):
prints.append({
'input': input_,
'exc': exc,
'output': output
})
to_eval = 'g()'
db = Qdb(
uuid='timeout_test',
cmd_manager=cmd_manager(),
host=self.tracer_host,
port=self.tracer_port,
redirect_output=False,
execution_timeout=1,
green=True,
)
gyield()
self.server.session_store.send_to_tracer(
uuid=db.uuid,
event=fmt_msg('eval', to_eval)
)
self.server.session_store.send_to_tracer(
uuid=db.uuid,
event=fmt_msg('continue')
)
db.set_trace(stop=True)
self.server.session_store.slaughter(db.uuid)
self.assertTrue(prints)
print_ = prints[0]
self.assertEqual(print_['input'], to_eval)
self.assertTrue(print_['exc'])
self.assertEqual(
print_['output'],
db.exception_serializer(QdbExecutionTimeout(to_eval, 1))
)
示例7: test_send_stack_results
def test_send_stack_results(self, use_skip_fn):
"""
Tests that the results from sending the stack are accurate.
WARNING: This test uses lines of it's own source as string literals,
be sure to edit the source and the string if you make any changes.
"""
def skip_fn(filename):
return not fix_filename(__file__) in filename
events = []
def capture_event(self, event, payload):
events.append(fmt_msg(event, payload))
class cmd_manager(type(self.cmd_manager)):
"""
Wrap send_stack by just capturing the output to make assertions on
it.
"""
def send_stack(self, tracer):
with patch.object(cmd_manager, 'send_event', capture_event):
super(cmd_manager, self).send_stack(tracer)
db = Qdb(
uuid='send_stack_test',
cmd_manager=cmd_manager(),
host=self.tracer_host,
port=self.tracer_port,
redirect_output=False,
skip_fn=skip_fn if use_skip_fn else None,
green=True,
)
gyield()
self.server.session_store.send_to_tracer(
uuid=db.uuid,
event=fmt_msg('continue')
)
db.set_trace(stop=True)
self.assertTrue(events) # EDIT IN BOTH PLACES
event = events[0]
if use_skip_fn:
# Assert that we actually suppressed some frames.
self.assertTrue(len(event['p']['stack']) < len(db.stack))
self.assertEqual(
# I love dictionaries so much!
event['p']['stack'][event['p']['index']]['code'],
' self.assertTrue(events) # EDIT IN BOTH PLACES',
)
self.server.session_store.slaughter(db.uuid)
示例8: test_set_trace_with_stop
def test_set_trace_with_stop(self):
"""
Asserts that calling set_trace will put us into stepping mode.
"""
db = Qdb(cmd_manager=QueueCommandManager)
db.cmd_manager.user_wait(0.2)
line_1 = False
with Timeout(0.1, False):
db.set_trace()
line_1 = True # EDIT IN BOTH PLACES
# Since we are stepping, we should not hit this line.
self.assertFalse(line_1)
示例9: test_set_step
def test_set_step(self):
"""
Tests the functionality of set_step by asserting that it only executes
the next line and no more.
"""
db = Qdb(cmd_manager=QueueCommandManager)
# Queue up a step command.
db.cmd_manager.enqueue(lambda t: t.set_step())
stepped = False
with Timeout(0.1, False):
db.set_trace()
stepped = True
self.assertTrue(stepped)
db.disable()
db = Qdb(cmd_manager=QueueCommandManager)
db.cmd_manager.enqueue(lambda t: t.set_step())
db.cmd_manager.user_wait(0.2)
stepped = over_stepped = False
with Timeout(0.1, False):
db.set_trace()
stepped = True
over_stepped = True
self.assertTrue(stepped)
self.assertFalse(over_stepped)
示例10: test_conditional_breakpoint
def test_conditional_breakpoint(self):
"""
Tests valid conditional breakpoints.
WARNING: This test relies on the relative line numbers inside the test.
"""
db = Qdb(cmd_manager=QueueCommandManager)
loop_counter = 0
db.cmd_manager.enqueue(lambda t: self.assertEqual(loop_counter, 5))
line_offset = 5
db.set_break(
self.filename,
sys._getframe().f_lineno + line_offset,
cond='loop_counter == 5'
)
db.set_trace(stop=False)
while loop_counter < 10:
loop_counter += 1
示例11: test_redirect_stderr
def test_redirect_stderr(self):
"""
Tests that stderr is stored on the tracer.
"""
sys.stderr = stderr = StringIO()
db = Qdb(cmd_manager=NopCommandManager)
data_to_write = 'stderr'
db.set_trace(stop=False)
print >> sys.stderr, data_to_write, # Write some data to stderr.
db.disable()
self.assertEqual(db.stderr.getvalue(), data_to_write)
# Assert that the stream was restored.
self.assertIs(sys.stderr, stderr)
示例12: test_clear_break
def test_clear_break(self):
"""
Tests clearing a breakpoint.
WARNING: This test relies on the relative line numbers inside the test.
"""
db = Qdb(cmd_manager=QueueCommandManager)
clear_break_offset = 14
set_break_offset = 8
db.cmd_manager.enqueue(lambda t: t.clear_break(
self.filename,
sys._getframe().f_lineno + clear_break_offset
))
db.cmd_manager.enqueue(lambda t: t.set_continue())
db.cmd_manager.user_wait(0.2)
db.set_break(
self.filename,
sys._getframe().f_lineno + set_break_offset
)
db.set_trace(stop=False)
continued = False
with Timeout(0.1):
db.set_trace(stop=False)
for n in xrange(2):
pass
continued = True
self.assertTrue(continued)
示例13: test_conditional_breakpoint_timeout
def test_conditional_breakpoint_timeout(self):
"""
Tests conditional breakpoints that cause timeouts.
WARNING: This test relies on the relative line numbers inside the test.
"""
stopped = [False]
def stop():
stopped[0] = True
return True # Execute the assertion.
line = None
cond = 'g()'
cmd_manager = QueueCommandManager()
db = Qdb(cmd_manager=cmd_manager, execution_timeout=1)
cmd_manager.enqueue(lambda t: stop() and self.assertEqual(line, 1))
line_offset = 10
# Set a condition that will time out.
db.set_break(
self.filename,
sys._getframe().f_lineno + line_offset,
cond='g()',
)
db.set_trace(stop=False)
def g():
while True:
pass
line = 1
line = 2
line = 3
db.disable()
errors = [e['p'] for e in cmd_manager.sent if e['e'] == 'error']
self.assertEqual(len(errors), 1)
error = errors[0]
self.assertEqual(error['type'], 'condition')
negative_line_offset = 14
exc = QdbExecutionTimeout(cond, db.execution_timeout)
self.assertEqual(
error['data'], {
'line': sys._getframe().f_lineno - negative_line_offset,
'cond': cond,
'exc': type(exc).__name__,
'output': db.exception_serializer(exc),
}
)
# Make sure we stopped when we raised the exception.
self.assertTrue(stopped[0])
示例14: test_eval_results
def test_eval_results(self, input_, exc, output):
"""
Tests that evaling code returns the proper results.
"""
prints = []
class cmd_manager(type(self.cmd_manager)):
"""
Captures print commands to make assertions on them.
"""
def send_print(self, input_, exc, output):
prints.append({
'input': input_,
'exc': exc,
'output': output
})
db = Qdb(
uuid='eval_test',
cmd_manager=cmd_manager(),
host=self.tracer_host,
port=self.tracer_port,
redirect_output=False,
green=True,
)
gyield()
self.server.session_store.send_to_tracer(
uuid=db.uuid,
event=fmt_msg('eval', input_)
)
self.server.session_store.send_to_tracer(
uuid=db.uuid,
event=fmt_msg('continue')
)
db.set_trace(stop=True)
self.server.session_store.slaughter(db.uuid)
self.assertTrue(prints)
print_ = prints[0]
self.assertEqual(print_['input'], input_)
self.assertEqual(print_['exc'], exc)
self.assertEqual(print_['output'], output)
示例15: test_conditional_breakpoint_raises
def test_conditional_breakpoint_raises(self):
"""
Tests conditional breakpoints that raise an exception.
WARNING: This test relies on the relative line numbers inside the test.
"""
line = None
exc = ValueError('lol wut r u doing?')
cond = 'raiser()'
stopped = [False]
def stop():
stopped[0] = True
return True # Execute the assertion.
cmd_manager = QueueCommandManager()
db = Qdb(cmd_manager=cmd_manager)
cmd_manager.enqueue(lambda t: stop() and self.assertEqual(line, 1))
line_offset = 9
# Set a condition that will raise a ValueError.
db.set_break(
self.filename,
sys._getframe().f_lineno + line_offset,
cond=cond,
)
db.set_trace(stop=False)
def raiser():
raise exc
line = 1
line = 2 # This line number is used in the data assertion.
line = 3
db.disable()
errors = [e['p'] for e in cmd_manager.sent if e['e'] == 'error']
self.assertEqual(len(errors), 1)
error = errors[0]
self.assertEqual(error['type'], 'condition')
negative_line_offset = 13
self.assertEqual(
error['data'], {
'line': sys._getframe().f_lineno - negative_line_offset,
'cond': cond,
'exc': type(exc).__name__,
'output': db.exception_serializer(exc),
}
)
# Make sure we stopped when we raised the exception.
self.assertTrue(stopped[0])