我们从Python开源项目中,提取了以下50个代码示例,用于说明如何使用pdb.Pdb()。
def __init__(self, addr="127.0.0.1", port=4444): """Initialize the socket and initialize pdb.""" # Backup stdin and stdout before replacing them by the socket handle self.old_stdout = sys.stdout self.old_stdin = sys.stdin # Open a 'reusable' socket to let the webapp reload on the same port self.skt = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.skt.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) self.skt.bind((addr, port)) self.skt.listen(1) (clientsocket, address) = self.skt.accept() handle = clientsocket.makefile('rw') pdb.Pdb.__init__(self, completekey='tab', stdin=handle, stdout=handle) sys.stdout = sys.stdin = handle
def _getDebugger(self): dbg = pdb.Pdb() try: import readline except ImportError: print "readline module not available" hasattr(sys, 'exc_clear') and sys.exc_clear() for path in ('.pdbrc', 'pdbrc'): if os.path.exists(path): try: rcFile = file(path, 'r') except IOError: hasattr(sys, 'exc_clear') and sys.exc_clear() else: dbg.rcLines.extend(rcFile.readlines()) return dbg
def pytest_configure(config): if config.getvalue("usepdb") or config.getvalue("usepdb_cls"): config.pluginmanager.register(PdbInvoke(), 'pdbinvoke') if config.getvalue("usepdb_cls"): modname, classname = config.getvalue("usepdb_cls").split(":") __import__(modname) pdb_cls = getattr(sys.modules[modname], classname) else: pdb_cls = pdb.Pdb pytestPDB._pdb_cls = pdb_cls old = (pdb.set_trace, pytestPDB._pluginmanager) def fin(): pdb.set_trace, pytestPDB._pluginmanager = old pytestPDB._config = None pytestPDB._pdb_cls = pdb.Pdb pdb.set_trace = pytest.set_trace pytestPDB._pluginmanager = config.pluginmanager pytestPDB._config = config config._cleanup.append(fin)
def main(): '''Run module as a script Uses :py:func:`pdb.main` function directly, but prior to that it mocks :py:class:`pdb.Pdb` class with powerline-specific class instance. ''' orig_pdb = pdb.Pdb @use_powerline_prompt class Pdb(pdb.Pdb, object): def __init__(self): orig_pdb.__init__(self) pdb.Pdb = Pdb return pdb.main()
def __init__(self, *args, **kwds): self.ConfigFactory = kwds.pop('Config', None) self.start_lineno = kwds.pop('start_lineno', None) self.start_filename = kwds.pop('start_filename', None) self.config = self.get_config(self.ConfigFactory) self.config.setup(self) if self.config.disable_pytest_capturing: self._disable_pytest_capture_maybe() pdb.Pdb.__init__(self, *args, **kwds) self.prompt = self.config.prompt self.mycompleter = None self.display_list = {} # frame --> (name --> last seen value) self.sticky = self.config.sticky_by_default self.sticky_ranges = {} # frame --> (start, end) self.tb_lineno = {} # frame --> lineno where the exception raised self.history = [] self.show_hidden_frames = False self.hidden_frames = [] self.stdout = self.ensure_file_can_write_unicode(self.stdout)
def do_debug(self, arg): # this is a hack (as usual :-)) # # inside the original do_debug, there is a call to the global "Pdb" to # instantiate the recursive debugger: we want to intercept this call # and instantiate *our* Pdb, passing our custom config. Therefore we # dynamically rebind the globals. # def new_pdb_with_config(*args): kwds = dict(Config=self.ConfigFactory) return self.__class__(*args, **kwds) newglobals = { 'Pdb': new_pdb_with_config, 'sys': sys, } if sys.version_info < (3, ): do_debug_func = pdb.Pdb.do_debug.im_func else: do_debug_func = pdb.Pdb.do_debug orig_do_debug = rebind_globals(do_debug_func, newglobals) return orig_do_debug(self, arg)
def set_trace(frame=None, Pdb=Pdb, **kwds): global GLOBAL_PDB if frame is None: frame = sys._getframe().f_back if GLOBAL_PDB: pdb = GLOBAL_PDB else: filename = frame.f_code.co_filename lineno = frame.f_lineno pdb = Pdb(start_lineno=lineno, start_filename=filename, **kwds) GLOBAL_PDB = pdb if hasattr(pdb, 'curframe'): del pdb.curframe pdb.set_trace(frame)
def run_with_pdb(cmd, *args, **kwargs): # Stolen from pdb.main pdb_context = pdb.Pdb() try: ret = pdb_context.runcall(cmd, **kwargs) print("The program finished") return ret except pdb.Restart: print("Restarting %s with arguments: %s, %s" % (cmd.__name__, args, kwargs)) # Yes, that's a hack return run_with_pdb(cmd, *args, **kwargs) except SystemExit: # In most cases SystemExit does not warrant a post-mortem session. print("The program exited via sys.exit(). Exit status:", end=' ') print(sys.exc_info()[1]) except SyntaxError: traceback.print_exc() sys.exit(1) except: traceback.print_exc() print("Uncaught exception. Entering post mortem debugging") print("Running 'cont' or 'step' will restart the program") t = sys.exc_info()[2] pdb_context.interaction(None, t) print("Post mortem debugger finished.")
def test_pdb_skip_modules(): """This illustrates the simple case of module skipping. >>> def skip_module(): ... import string ... import pdb; pdb.Pdb(skip=['stri*'], nosigint=True).set_trace() ... string.capwords('FOO') >>> with PdbTestInput([ ... 'step', ... 'continue', ... ]): ... skip_module() > <doctest test.test_pdb.test_pdb_skip_modules[0]>(4)skip_module() -> string.capwords('FOO') (Pdb) step --Return-- > <doctest test.test_pdb.test_pdb_skip_modules[0]>(4)skip_module()->None -> string.capwords('FOO') (Pdb) continue """ # Module for testing skipping of module that makes a callback
def test_pdb_run_with_code_object(): """Testing run and runeval with code object as a first argument. >>> with PdbTestInput(['step','x', 'continue']): # doctest: +ELLIPSIS ... pdb_invoke('run', compile('x=1', '<string>', 'exec')) > <string>(1)<module>()... (Pdb) step --Return-- > <string>(1)<module>()->None (Pdb) x 1 (Pdb) continue >>> with PdbTestInput(['x', 'continue']): ... x=0 ... pdb_invoke('runeval', compile('x+1', '<string>', 'eval')) > <string>(1)<module>()->None (Pdb) x 1 (Pdb) continue """
def test_pdb_issue4201(self): test_src = textwrap.dedent("""\ def f(): pass import pdb pdb.Pdb(nosigint=True).runcall(f) """) with temp_dir() as d: script_name = make_script(d, 'script', test_src) p = spawn_python(script_name) p.stdin.write(b'l\n') data = kill_python(p) self.assertIn(script_name.encode('utf-8'), data) zip_name, run_name = make_zip_script(d, "test_zip", script_name, '__main__.py') p = spawn_python(zip_name) p.stdin.write(b'l\n') data = kill_python(p) self.assertIn(run_name.encode('utf-8'), data)
def debug_script(src, pm=False, globs=None): "Debug a test script. `src` is the script, as a string." import pdb if globs: globs = globs.copy() else: globs = {} if pm: try: exec(src, globs, globs) except: print(sys.exc_info()[1]) p = pdb.Pdb(nosigint=True) p.reset() p.interaction(None, sys.exc_info()[2]) else: pdb.Pdb(nosigint=True).run("exec(%r)" % src, globs, globs)
def _exec_main(parser, values): sconsflags = os.environ.get('SCONSFLAGS', '') all_args = sconsflags.split() + sys.argv[1:] options, args = parser.parse_args(all_args, values) if isinstance(options.debug, list) and "pdb" in options.debug: import pdb pdb.Pdb().runcall(_main, parser) elif options.profile_file: # compat layer imports "cProfile" for us if it's available. from profile import Profile prof = Profile() try: prof.runcall(_main, parser) finally: prof.dump_stats(options.profile_file) else: _main(parser)
def test_pdb_issue4201(self): test_src = textwrap.dedent("""\ def f(): pass import pdb pdb.Pdb(nosigint=True).runcall(f) """) with temp_dir() as d: script_name = make_script(d, 'script', test_src) p = spawn_python(script_name) p.stdin.write(b'l\n') data = kill_python(p) # bdb/pdb applies normcase to its filename before displaying self.assertIn(os.path.normcase(script_name.encode('utf-8')), data) zip_name, run_name = make_zip_script(d, "test_zip", script_name, '__main__.py') p = spawn_python(zip_name) p.stdin.write(b'l\n') data = kill_python(p) # bdb/pdb applies normcase to its filename before displaying self.assertIn(os.path.normcase(run_name.encode('utf-8')), data)
def setup(self, f, tb): if tb is not None: return pdb.Pdb.setup(self, f, tb) else: # Imitate what the parent function is doing as much as possible, # but without a traceback self.forget() self.stack, self.curindex = self.get_stack(f, tb) # XXX We may still need to reproduce the following lines: """ while tb: # when setting up post-mortem debugging with a traceback, save all # the original line numbers to be displayed along the current line # numbers (which can be different, e.g. due to finally clauses) lineno = lasti2lineno(tb.tb_frame.f_code, tb.tb_lasti) self.tb_lineno[tb.tb_frame] = lineno tb = tb.tb_next """ self.curframe = self.stack[self.curindex][0] # The f_locals dictionary is updated from the actual frame # locals whenever the .f_locals accessor is called, so we # cache it here to ensure that modifications are not overwritten. self.curframe_locals = self.curframe.f_locals return self.execRcLines()
def _wrappedPdb(): """ Wrap an instance of C{pdb.Pdb} with readline support and load any .rcs. """ dbg = pdb.Pdb() try: namedModule('readline') except ImportError: print("readline module not available") for path in ('.pdbrc', 'pdbrc'): if os.path.exists(path): try: rcFile = open(path, 'r') except IOError: pass else: with rcFile: dbg.rcLines.extend(rcFile.readlines()) return dbg
def test_runnerDebuggerDefaultsToPdb(self): """ Trial uses pdb if no debugger is specified by `--debugger` """ self.parseOptions(['--debug', 'twisted.trial.test.sample']) pdbrcFile = FilePath("pdbrc") pdbrcFile.touch() self.runcall_called = False def runcall(pdb, suite, result): self.runcall_called = True self.patch(pdb.Pdb, "runcall", runcall) self.runSampleSuite(self.getRunner()) self.assertTrue(self.runcall_called)
def test_runnerDebuggerWithExplicitlyPassedPdb(self): """ Trial uses pdb if pdb is passed explicitly to the `--debugger` arg. """ self.parseOptions([ '--reporter', 'capturing', '--debugger', 'pdb', '--debug', 'twisted.trial.test.sample', ]) self.runcall_called = False def runcall(pdb, suite, result): self.runcall_called = True self.patch(pdb.Pdb, "runcall", runcall) self.runSampleSuite(self.getRunner()) self.assertTrue(self.runcall_called)
def set_trace(self, bp, frameCount=1): #find useful frame self.currFrame = sys._getframe() interactFrame = self.currFrame while frameCount > 0: interactFrame = interactFrame.f_back frameCount -= 1 #cache this as the latest bp self.lastBp = bp.getParts() #set up and start debuggger import pdb self.pdb = pdb.Pdb() #self.pdb.do_alias('aa bpdb.addPdbAliases()') self.addPdbAliases() self.pdb.set_trace(interactFrame); #bp invoke methods