Removing unncessary class states in bdb.Breakpoint
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 77.2k
- Fork
- 35.9k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
Feature or enhancement
Proposal:
According to the comment in the Breakpoint class
Keeping state in the class is a mistake -- this means you cannot have more than one active Bdb instance.
I can support this idea further. Currently, Breakpoint has three class states, next, bplist, and bpbynumber.
class Breakpoint:
...
next = 1
bplist = {}
bpbynumber = [None]
These states are used to enable the reuse of previously set breakpoint instances across multiple interactive sessions or other use cases. However, relying on class states is not the only way to achieve this goal.
Using class states in this case has several clear limitations. As noted in the comment, it makes it difficult to maintain more than one active Bdb instance. Additionally, logic dependent on class state can make the behavior of a new Bdb instance unpredictable in many scenarios unless the exact states of Breakpoint is fully known. Another drawback of maintaining states in the Breakpoint class is that it tightly couples the behavior of all Bdb instances. For example, the deleteMe method must be called periodically by a Bdb instance to ensure the Breakpoint class remains in a valid state.
# example deleteMe calls in Bdb methods
class Bdb:
...
def clear_break(self, filename, lineno):
...
for bp in Breakpoint.bplist[filename, lineno][:]:
bp.deleteMe() # here
self._prune_breaks(filename, lineno)
return None
def clear_bpbynumber(self, arg):
...
try:
bp = self.get_bpbynumber(arg)
except ValueError as err:
return str(err)
bp.deleteMe() # here
self._prune_breaks(bp.file, bp.line)
return None
As an alternative, instance-level state can be maintained within Bdb or derived classes such as Pdb, allowing each instance to manage its own breakpoint data independently. This approach can still support the reuse of previously set breakpoint instances across multiple interactive sessions.
Has this already been discussed elsewhere?
No response given
Links to previous discussion of this feature:
No response
Linked PRs
- gh-127410
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia da Lib/bdb.py, in particolare dalla classe Breakpoint e dai metodi Bdb mostrati nell’issue, quindi esamina la PR collegata gh-127410. Determina come viene attualmente condiviso lo stato dei breakpoint tra le istanze di Bdb e quale effetto avrebbe su Bdb e Pdb la proprietà proposta a livello di istanza. Il lavoro è completo quando il design supporta istanze indipendenti di debugger attive senza fare affidamento sullo stato condiviso della classe Breakpoint.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- devtools
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 20/100