| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
|
This needs a test. |
Sorry, something went wrong.
| self.code_lineno[code] = set() | ||
| for _, _, lineno in code.co_lines(): | ||
| self.code_lineno[code].add(lineno) |
There was a problem hiding this comment.
| self.code_lineno[code] = set() | |
| for _, _, lineno in code.co_lines(): | |
| self.code_lineno[code].add(lineno) | |
| self.code_lineno[code] = set([lno for _, _, lno in code.co_lines()]) |
Sorry, something went wrong.
|
Do you think a test that directly tests break_anywhere in test_bdb would work? It's a public documented API. Checking whether the dispatch function stopped would be a bit more complicated. |
Sorry, something went wrong.
|
I added a test for break_anywhere. Also I used the generator for set() instead of a list. |
Sorry, something went wrong.
|
I am testing this with IDLE's bdb-based debugger now. |
Sorry, something went wrong.
|
No (new) problems found. Breakpoints at top level and in def still work. |
Sorry, something went wrong.
|
Thanks @terryjreedy for confirming this. #124533 might be another interesting one to test. |
Sorry, something went wrong.
| return False | ||
| if code not in self.code_lineno: | ||
| self.code_lineno[code] = set(lineno for _, _, lineno in code.co_lines()) | ||
| return lineno in self.code_lineno[frame.f_code] |
There was a problem hiding this comment.
| return lineno in self.code_lineno[frame.f_code] | |
| return lineno in self.code_lineno[code] |
Sorry, something went wrong.
| self.frame_returning = None | ||
| self.trace_opcodes = False | ||
| self.enterframe = None | ||
| self.code_lineno = weakref.WeakKeyDictionary() |
There was a problem hiding this comment.
| self.code_lineno = weakref.WeakKeyDictionary() | |
| self.code_linenos = weakref.WeakKeyDictionary() |
Sorry, something went wrong.
| @@ -275,7 +280,23 @@ def do_clear(self, arg): | |||
| def break_anywhere(self, frame): | |||
| """Return True if there is any breakpoint for frame's filename. | |||
There was a problem hiding this comment.
this comment needs updating (it's not just filename now).
Sorry, something went wrong.
…nQKNM.rst Co-authored-by: Irit Katriel <1055913+iritkatriel@users.noreply.github.com>
| if self.stopframe and frame.f_code.co_flags & GENERATOR_AND_COROUTINE_FLAGS: | ||
| # It's possible to trigger a StopIteration exception in | ||
| # the caller so we must set the trace function in the caller | ||
| self._set_caller_tracefunc(frame) |
There was a problem hiding this comment.
how is this related to this PR?
Sorry, something went wrong.
There was a problem hiding this comment.
There is a hidden bug which was exposed by the change of break_anywhere. There's a test case of bdb testing raising StopIteration in a generator. It passed because break_anywhere always return True when the function was defined in the same file, which always sets the trace function on the caller because it is in the same file. That coincidence hide the bug where returning from a generator should stop in the caller. There's a similar call in line 177 - that's for the normal return case from #118979 - it's also my fix to a similar case.
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
Now we check whether the line number is in the code object with co_lines() so we can have an accurate answer.
A bug needs to be fixed for generators. This is not caused by the new feature, but exposed. I put those together because the changes are very small. I can separate those if that's desired.