#!/usr/bin/env python # Taken from http://snippets.dzone.com/posts/show/7248 # Updated to SO_REUSEADDR import pdb import socket import sys class Rdb(pdb.Pdb): def __init__(self, port=4444): self.old_stdout = sys.stdout self.old_stdin = sys.stdin self.skt = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.skt.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.skt.bind((socket.gethostname(), 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 do_continue(self, arg): sys.stdout = self.old_stdout sys.stdin = self.old_stdin self.skt.close() self.set_continue() return 1 do_c = do_cont = do_continue # Example usage - connect with 'telnet 4444' if __name__=='__main__': def buggy_method(): x = 3 #from rdb import * rd = Rdb(); rd.set_trace() print x buggy_method()