Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pdb can only step when at botframe (PR#4) #32752

Closed
anonymous mannequin opened this issue Jul 31, 2000 · 14 comments
Closed

pdb can only step when at botframe (PR#4) #32752

anonymous mannequin opened this issue Jul 31, 2000 · 14 comments
Labels
stdlib Python modules in the Lib dir

Comments

@anonymous
Copy link
Mannequin

anonymous mannequin commented Jul 31, 2000

BPO 210682
Nosy @gvanrossum, @mhammond
Files
  • bdb.py: modified by CT to support normal behavior of the topmost frame.
  • bdbtest.py: Test code and instructions how to reproduce the buglet.
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = <Date 2002-05-29.01:33:21.000>
    created_at = <Date 2000-07-31.21:14:21.000>
    labels = ['library']
    title = 'pdb can only step when at botframe (PR#4)'
    updated_at = <Date 2002-05-29.01:33:21.000>
    user = 'https://bugs.python.org/anonymous'

    bugs.python.org fields:

    activity = <Date 2002-05-29.01:33:21.000>
    actor = 'nnorwitz'
    assignee = 'tismer'
    closed = True
    closed_date = None
    closer = None
    components = ['Library (Lib)']
    creation = <Date 2000-07-31.21:14:21.000>
    creator = 'anonymous'
    dependencies = []
    files = ['1', '2']
    hgrepos = []
    issue_num = 210682
    keywords = []
    message_count = 14.0
    messages = ['401', '402', '403', '404', '405', '406', '407', '408', '409', '410', '411', '412', '413', '414']
    nosy_count = 6.0
    nosy_names = ['gvanrossum', 'nobody', 'jhylton', 'mhammond', 'tismer', 'nnorwitz']
    pr_nums = []
    priority = 'normal'
    resolution = 'accepted'
    stage = None
    status = 'closed'
    superseder = None
    type = None
    url = 'https://bugs.python.org/issue210682'
    versions = ['Python 2.3']

    @nobody
    Copy link
    Mannequin

    nobody mannequin commented Jul 31, 2000

    Jitterbug-Id: 4
    Submitted-By: MHammond@skippinet.com.au
    Date: Mon, 12 Jul 1999 15:38:43 -0400 (EDT)
    Version: 1.5.2
    OS: Windows

    [Resubmitted by GvR]

    It is a problem that bugged me for _ages_. Since the years I first wrote
    the Pythonwin debugger Ive learnt alot about how it works :-)

    The problem is simply: when the frame being debugged is self.botframe, it
    is impossible to continue - only "step" works. A "continue" command
    functions as a step until you start debugging a frame below self.botframe.

    It is less of a problem with pdb, but makes a GUI debugger clunky - if you
    start a debug session by stepping into a module, the "go" command seems
    broken.

    The simplest way to demonstrate the problem is to create a module, and add
    a "pdb.set_trace()" statement at the top_level (ie, at indent level 0).
    You will not be able to "continue" until you enter a function.

    My solution was this: instead of run() calling "exec" directly, it calls
    another internal function. This internal function contains a single line -
    the "exec", and therefore never needs to be debugged directly. Then
    stop_here is modified accordingly.

    The end result is that "self.botframe" becomes an "intermediate" frame, and
    is never actually stopped at - ie, self.botframe effectivly becomes one
    frame _below_ the bottom frame the user is interested in.

    Im not yet trying to propose a patch, just to discuss this and see if the
    "right thing" can be determined and put into pdb.

    Thanks,

    Mark.

    ====================================================================
    Audit trail:
    Mon Jul 12 15:39:35 1999 guido moved from incoming to open

    @anonymous anonymous mannequin closed this as completed Jul 31, 2000
    @anonymous anonymous mannequin assigned tismer Jul 31, 2000
    @anonymous anonymous mannequin added the stdlib Python modules in the Lib dir label Jul 31, 2000
    @anonymous anonymous mannequin closed this as completed Jul 31, 2000
    @anonymous anonymous mannequin assigned tismer Jul 31, 2000
    @anonymous anonymous mannequin added the stdlib Python modules in the Lib dir label Jul 31, 2000
    @nobody
    Copy link
    Mannequin

    nobody mannequin commented Oct 17, 2000

    My common workaround is to always create a function called debug(): that calls the function in the module I am debugging. Instead of doing a runcall for my function I do a runcall on debug.

    @nobody
    Copy link
    Mannequin

    nobody mannequin commented Oct 17, 2000

    Sorry I forgot to sigh the comment for 2000-Oct-17 07:18
    David Hurt
    davehurt@flash.net

    @jhylton
    Copy link
    Mannequin

    jhylton mannequin commented Mar 1, 2002

    Logged In: YES
    user_id=31392

    Is this really a bug? Or just a feature request? Perhaps
    we should move it to 42 and close the report.

    @gvanrossum
    Copy link
    Member

    Logged In: YES
    user_id=6380

    Yes, it's really a bug -- it's an annoyance, you have to hit
    contine twice.

    @tismer
    Copy link
    Mannequin

    tismer mannequin commented May 23, 2002

    Logged In: YES
    user_id=105700

    There appears to be a simple solution.
    I'm not used to pdb very much, so I cannot fur sure
    say that my patch doesn't affect any extension of it,
    but it seems to work just fine.

    Idea: Allow botframe not to be a frame at all, but also None.
    This makes it possible to use f_back in line 67:
    self.botframe = frame.f_back ##!!CT
    In stop_here, we just omit the first two lines:
    def stop_here(self, frame):
    ##!!CT if self.stopframe is None:
    ##!!CT return 1
    if frame is self.stopframe:
    return 1
    while frame is not None and frame is not self.stopframe:
    if frame is self.botframe:
    return 1
    frame = frame.f_back
    return 0

    By this trick, botframe is llowed to be one level "on top"
    of the
    topmost frame, and we see the topmost frame behave as nicely
    as every other.

    -- chris

    @gvanrossum
    Copy link
    Member

    Logged In: YES
    user_id=6380

    You know, I cannot reproduce the problem!

    I created this module:

    import pdb
    def foo():
        x = 12
        y = 2
        z = x**y
        print z
        return
    pdb.set_trace()
    print 12
    print "hello world"
    foo()

    When I run it I get the pdb prompt.
    When I hit "continue" at the prompt,
    the whole program executes.

    Before we start messing with this
    I'd like to be able to reproduce
    the problem so I can confirm that
    it goes away!

    @mhammond
    Copy link
    Contributor

    Logged In: YES
    user_id=14198

    This appears to have been fixed magically in Python 2.2.
    Using Python 2.1 with the sample demonstrates the bug, while
    2.2 and current CVS both work correctly. Haven't tried 2.1.1

    A scan of the pdb and bdb logs don't show an obvious
    candidate that fixed the bug, but to be quite honest, I
    don't care *how* it was fixed now that it is <wink>

    @gvanrossum
    Copy link
    Member

    Logged In: YES
    user_id=6380

    OK, closing. Christian: please *don't* check it it!

    @tismer
    Copy link
    Mannequin

    tismer mannequin commented May 26, 2002

    Logged In: YES
    user_id=105700

    Ok, I didn't check ti in, but I disagree to close it!
    Do you think I would supply a patch if there weren't a problem?

    The problem was reported to me by an IronPort Python
    user who simply had the problem that pdb.runcall
    on a given function *does not* run, but always single steps.
    Your test doesn't get at the problem, since you don't set a
    breakpoint, which is necessary to make it show up!

    Here we go:

    • write a simple program with some 10 lines
    • start it with runcall
    • set a breakpoint
    • continue

    and it will definately step!

    With my patch, it works as expected.
    Furthermore, Mark's F5 command is documented to
    "start the program in the debugger". It never did so.
    With the patch, it does.
    Let's bring it to the end it deserves.

    regards - chris

    @gvanrossum
    Copy link
    Member

    Logged In: YES
    user_id=6380

    Can you be more specific in your example?
    I don't understand how I start a 10-line
    program with runcall, since runcall requires
    a function.
    I also want to know exactly which syntax
    you use to set the breakpoint.

    @tismer
    Copy link
    Mannequin

    tismer mannequin commented May 27, 2002

    Logged In: YES
    user_id=105700

    # test program for bdb buglet.
    # usage:
    # import pdb, bdbtest
    # pdb.runcall(bdbtest.test)

    # then, in the debugger, type "b 13":

    def test():
    	a=0
    	a=1
    	a=2
    	a=3
    	a=4
    	a=5
    	a=6
    	a=7
    	a=8
    	a=9

    # the breakpoint will be at "a=4"
    # now try to continue with "c", and you
    # will see it still single stepping.

    @gvanrossum
    Copy link
    Member

    Logged In: YES
    user_id=6380

    OK, you convinced me. Do you want to check it in or should
    I do it? If you want to do it, go ahead, and mark it as a
    2.1 and 2.2 bugfix candidate.

    And thanks for this solution! (I tried this in IDLE, and
    there's a benign effect there, too. :-)

    @nnorwitz
    Copy link
    Mannequin

    nnorwitz mannequin commented May 29, 2002

    Logged In: YES
    user_id=33168

    Checked in as bdb.py 1.38/1.39 for current (fixed whitespace),
    1.33.6.2 for 2.2
    1.31.2.1 for 2.1

    Hopefully I got it right. Closing.

    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 9, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    stdlib Python modules in the Lib dir
    Projects
    None yet
    Development

    No branches or pull requests

    2 participants