ionelmc / python-hunter

Hunter is a flexible code tracing toolkit.
https://python-hunter.readthedocs.io/
BSD 2-Clause "Simplified" License
794 stars 46 forks source link

Is it possible to start debugger on a specific line? #120

Open max-arnold opened 7 months ago

max-arnold commented 7 months ago

Trying it like this:

PYTHONHUNTER='Q(kind="line",lineno=253,module_in=["mymodule"],action=Debugger())'

But the debugger starts not at the specified line (which is a variable assignment), but below it in the next function call.

Is that expected?

ionelmc commented 7 months ago

Yes, it is, because tracing in general is post-facto, the action will be called after the code being traced has been executed.

Is there a specific problem you're trying to solve there? Seems like you could give more context...

max-arnold commented 7 months ago

I'm trying to invoke pdb (for step-by step debugging and altering some variables) at specific line without editing the source code. The code fragment looks like this:

   def __init__(...
    ):
        """
        A docstring
        """

        self.parent_loader = None   #### TARGET LINE (253) ####
        self.inject_globals = {}
        self.pack = {} if pack is None else pack
        for i in self.pack:
            if isinstance(self.pack[i], salt.loader.context.NamedLoaderContext):
                self.pack[i] = self.pack[i].value()
        if opts is None:
            opts = {}
        opts = copy.deepcopy(opts)

But the debugger gets invoked in stdlib inside of the next (nearest) call:

-> def deepcopy(x, memo=None, _nil=[]):
(Pdb)