Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Issue with breakpoints in multithreading

Aperta
#14 1 commento 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
python
Ambito
devtools

Direzione di ricerca

Start with the parallel_fibonacci.py reproduction and the trepan3k entry point; set breakpoints on lines 10 and 29, then compare the behavior with pydb --threading. Trace how trepan3k handles threads and breakpoint dispatch, and consider the issue done when breakpoints inside fibonacci_task and queue_task stop execution as shown in the report.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Hi,
It seems trepan3k is not able to stop in breakpoints put inside a function launched as a thread target.
For example, for the script:

import threading
from queue import Queue

fibo_dict = {}
input_list = [3,5,7,9]
shared_queue = Queue()
queue_condition = threading.Condition()

def fibonacci_task(condition):
      with condition: # line 10

        while shared_queue.empty():
            print("[{}] - waiting for elements in queue..".format(threading.current_thread().name))
            condition.wait()

        else:
            value = shared_queue.get()
            a, b = 0, 1
            for item in range(value):
                a, b = b, a + b
                fibo_dict[value] = a

        shared_queue.task_done()
        print("[{}] fibonacci of key [{}] with result [{}]".
              format(threading.current_thread().name, value, fibo_dict[value]))

def queue_task(condition):
    print('Starting queue_task...') # line 29
    with condition:
        for item in input_list:
            shared_queue.put(item)

        print("Notifying fibonacci task threads that the queue is ready to consume...")
        condition.notifyAll()

def main():
    threads = []
    for i in range(3):
        thread = threading.Thread(target=fibonacci_task, args=(queue_condition,))
        thread.daemon = False
        threads.append(thread)

    [thread.start() for thread in threads]

    prod = threading.Thread(name='queue_task_thread', target=queue_task, args=(queue_condition,))
    prod.daemon = False
    prod.start()

    [thread.join() for thread in threads]

    print("[{}] - Result {}".format(threading.current_thread().name, fibo_dict))

if __name__=='__main__':
    main()

If we put breakpoints inside fibonacci_task or queue_task functions:
Trepan3k Execution flow:

$ trepan3k parallel_fibonacci.py
(/tmp/python-debug/trepan3k_issue/parallel_fibonacci.py:1): <module>
-> 1 import threading
(trepan3k) break 10
Breakpoint 1 set at line 10 of file /tmp/python-debug/trepan3k_issue/parallel_fibonacci.py
(trepan3k) break 29
Breakpoint 2 set at line 29 of file /tmp/python-debug/trepan3k_issue/parallel_fibonacci.py
(trepan3k) continue
[Thread-1] - waiting for elements in queue..
[Thread-2] - waiting for elements in queue..
[Thread-3] - waiting for elements in queue..
Starting queue_task...
Notifying fibonacci task threads that the queue is ready to consume...
[Thread-3] fibonacci of key [3] with result [2]
[Thread-2] fibonacci of key [5] with result [5]
[Thread-1] fibonacci of key [7] with result [13]
[MainThread] - Result {3: 2, 5: 5, 7: 13}
The program finished - quit or restart
(/tmp/python-debug/trepan3k_issue/parallel_fibonacci.py:56 @131): <module>
-> 56     main()   

The debug session ends without stopping in the breakpoints.

If we launch the same debug sessoin with pydb:
Pydb Execution flow:

$ pydb --threading parallel_fibonacci.py 
--Call level -1 
Current thread is MainThread
(/tmp/python-debug/trepan3k_issue/parallel_fibonacci.py:1):  <module>
1 import threading
(Pydb) break 10
Breakpoint 1 set in file /tmp/python-debug/trepan3k_issue/parallel_fibonacci.py, line 10.
(Pydb) break 29
Breakpoint 2 set in file /tmp/python-debug/trepan3k_issue/parallel_fibonacci.py, line 29.
(Pydb) continue
Current thread is Thread-1
(/tmp/python-debug/trepan3k_issue/parallel_fibonacci.py:10):  fibonacci_task
10     with condition:
(Pydb) continue
Current thread is Thread-2
(/tmp/python-debug/trepan3k_issue/parallel_fibonacci.py:10):  fibonacci_task
10     with condition:
(Pydb) continue
[Thread-1] - waiting for elements in queue..
Current thread is Thread-3
(/tmp/python-debug/trepan3k_issue/parallel_fibonacci.py:10):  fibonacci_task
10     with condition:
(Pydb) continue
Current thread is queue_task_thread
(/tmp/python-debug/trepan3k_issue/parallel_fibonacci.py:29):  queue_task
29     print('Starting queue_task...')
(Pydb) [Thread-2] - waiting for elements in queue..

Hope this is useful
Regards

Lingua principale
Python
Stelle
176
Fork
17
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di Trepan-Debuggers/python3-trepan

Tutte le issue di Trepan-Debuggers/python3-trepan

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.