示例#1
0
    def __call__(self, depth=0, max_count=None, gui=False):
        depth += 1
        if max_count:
            frame = sys._getframe(depth)
            key = id(frame.f_code), frame.f_lineno
            del frame
            self._count_dict[key] = count = 1 + self._count_dict.get(key, 0)
            if max_count < count:
                return
        if gui:
            import rpdb2
            if rpdb2.g_debugger is None:
                rpdb2_CStateManager = rpdb2.CStateManager

                def CStateManager(*args, **kw):
                    rpdb2.CStateManager = rpdb2_CStateManager
                    state_manager = rpdb2.CStateManager(*args, **kw)
                    self._rpdb2_set_state = state_manager.set_state
                    return state_manager

                rpdb2.CStateManager = CStateManager
            return debug.winpdb(depth)
        try:
            debugger = self.__dict__['_debugger']
        except KeyError:
            assert 'rpdb2' not in sys.modules
            self._debugger = debugger = debug.getPdb()
            self._bdb_interaction = debugger.interaction
        return debugger.set_trace(sys._getframe(depth))
示例#2
0
文件: cluster.py 项目: Nexedi/neoppod
    def __call__(self, max_count=None, depth=0, text=None):
        depth += 1
        if max_count:
            frame = sys._getframe(depth)
            key = id(frame.f_code), frame.f_lineno
            del frame
            self._count_dict[key] = count = 1 + self._count_dict.get(key, 0)
            if max_count < count:
                return
        if not text:
            try:
                import rpdb2
            except ImportError:
                if text is not None:
                    raise
            else:
                if rpdb2.g_debugger is None:
                    rpdb2_CStateManager = rpdb2.CStateManager

                    def CStateManager(*args, **kw):
                        rpdb2.CStateManager = rpdb2_CStateManager
                        state_manager = rpdb2.CStateManager(*args, **kw)
                        self._rpdb2_set_state = state_manager.set_state
                        return state_manager

                    rpdb2.CStateManager = CStateManager
                return debug.winpdb(depth)
        try:
            debugger = self.__dict__["_debugger"]
        except KeyError:
            assert "rpdb2" not in sys.modules
            self._debugger = debugger = debug.getPdb()
            self._bdb_interaction = debugger.interaction
        return debugger.set_trace(sys._getframe(depth))
示例#3
0
    def apply(self):
        assert not self.applied
        setattr(self._patched, self._name, self._patch)
        self.applied = True

    def revert(self):
        del self.applied
        self._revert()

    def __del__(self):
        if self.applied:
            self.revert()

    def __enter__(self):
        self.apply()
        return weakref.proxy(self)

    def __exit__(self, t, v, tb):
        self.__del__()


def unpickle_state(data):
    unpickler = Unpickler(StringIO(data))
    unpickler.persistent_load = PersistentReferenceFactory().persistent_load
    unpickler.load()  # skip the class tuple
    return unpickler.load()

__builtin__.pdb = lambda depth=0: \
    debug.getPdb().set_trace(sys._getframe(depth+1))
示例#4
0
        self._patch = patch
        try:
            orig = patched.__dict__[name]
            self._revert = lambda: setattr(patched, name, orig)
        except KeyError:
            self._revert = lambda: delattr(patched, name)

    def apply(self):
        assert not self.applied
        setattr(self._patched, self._name, self._patch)
        self.applied = True

    def revert(self):
        del self.applied
        self._revert()

    def __del__(self):
        if self.applied:
            self.revert()

    def __enter__(self):
        self.apply()
        return weakref.proxy(self)

    def __exit__(self, t, v, tb):
        self.__del__()


__builtin__.pdb = lambda depth=0: \
    debug.getPdb().set_trace(sys._getframe(depth+1))