Issue with breakpoints in multithreading
まだ誰も着手していません。
評価
調査の方向性
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.
索引モデルが issue の本文から書いたものです。
説明
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
- 主要言語
- Python
- スター
- 176
- フォーク
- 17
- PR マージ指標
- 30日以内にマージされた PR はありません
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
Trepan-Debuggers/python3-trepan のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 52/100
Trepan-Debuggers/python3-trepan#85 · コメント 1 件 ·
-
Volunteer wanted
難易度 4/5 3〜5日 初心者へのやさしさ 25/100
Trepan-Debuggers/python3-trepan#54 · コメント 4 件 ·
-
Need information
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
Trepan-Debuggers/python3-trepan#46 · コメント 1 件 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 30/100
Trepan-Debuggers/python3-trepan#44 · コメント 3 件 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 42/100
Trepan-Debuggers/python3-trepan#13 · コメント 1 件 ·
Trepan-Debuggers/python3-trepan の issue をすべて見る
似ている issue
-
難易度 1/5 1時間未満 初心者へのやさしさ 90/100
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
zostera/django-bootstrap4#894 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
use-agent-os/agent-os#3276 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
zephyrproject-rtos/zephyr#119726 ·
-
area/auth bug comp/agent P3 platform/discord type/security
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
NousResearch/hermes-agent#117848 ·