PyCharm Professional调试Google App Engine时手动线程断点失效问题
PyCharm Professional调试Google App Engine时手动线程无法触发断点的问题
我最近碰到了完全一样的头疼问题——在PyCharm Professional里调试Google App Engine(GAE)代码时,手动启动的线程根本触发不了断点。不管是用threading.Thread创建的线程,还是官方支持的concurrent.futures.ThreadPoolExecutor(2.7回溯版本),在dev_appserver上调试时都存在这个问题。
问题复现环境
我是在以下环境中确认这个问题存在的:
- PyCharm版本:2017.2、2017.3.4
- GAE SDK版本:1.9.66
- 操作系统:Ubuntu Linux
复现代码
你可以在任意GAE请求处理器中调用这段代码来复现问题:
import threading import time from concurrent.futures import ThreadPoolExecutor def thread_task(): print("线程任务开始") # 这里设置断点,调试时不会触发 time.sleep(1) print("线程任务结束") def test_threads(): # 测试threading.Thread t = threading.Thread(target=thread_task) t.start() t.join() # 测试ThreadPoolExecutor executor = ThreadPoolExecutor(max_workers=1) future = executor.submit(thread_task) future.result()
临时调试替代方案
目前我还没找到官方的修复补丁,但可以用这些临时办法来调试线程逻辑:
- 在线程任务关键位置添加
print日志输出,虽然不如断点交互性强,但能追踪代码执行流程 - 暂时切换到命令行调试工具
pdb,手动启动调试会话来捕获线程中的断点 - 尝试升级PyCharm到2018及以上版本,后续版本大概率修复了这个GAE调试的兼容性问题
内容的提问来源于stack exchange,提问作者Alek Kowalczyk
相关产品推荐
相关产品推荐

