pycharm在Debug时,出现frames are not available; Variable: Connected.
本文为全文搬运:https://blog.csdn.net/qq_43391414/article/details/120688655。
亲测有效:
先说说我的情况,这样可以让你对号入座。
1. 我是Pycharm的Python解释器连接远程的实验室linux服务器。也就是说,你猜到了,我的是Pycharm专业版,因为专业版才有远程连接这个功能。
2. 我运行代码一切正常。但是在调试的时候有点不对劲。除了上述frames are not available, 在Variable那里还显示:connected。另外,第一步调试可以成功调到你的任何一个断点,但是此时console几乎是挂掉的,查看变量没反应,然后点击下一步调试,直接无终止运行下去。
(我卡在这里很久,因为运行一切正常嘛,就是调试卡住了。一开始我以为项目太大了?导致那些数据变量都传不过来,本地内存存不下?后面想想不至于)
后来终于发现问题了,前方高能!!!
我的代码中使用了多线程,即下面的num_workers=10。多线程在Linux服务器上运行是没有问题的。
1 dataloader = DataLoader(dataset,
2 batch_size=args.batch_size,
3 shuffle=True,
4 num_workers=10,
5 collate_fn=MyDataset.collate_fn)
但是调试的时候会出现问题,我的猜测是我们的pycharm调试界面只支持主进程,线程开了之后就不能用了。
正如我上面所展示的,上面只是DataLoader的定义,还没有正式使用这个东西,所以调试功能在正式使用多线程之前一切正常。
但是到了下面之后,emurate(dataloader)开始正式使用上面定义的多线程,从此往后,Pycharm调试界面将会卡死。
for epoch in range(args.epochs):
model.train()
epoch_loss = []
for idx, feed_dict in enumerate(dataloader):
print(idx)
所以解决方法很简单了,不管你的代码是不是和我一样,请检查你的代码是否用了多线程。运行的时候开启多线程加快运行速度,但是调试的时候在代码中把多线程关闭!!!
dataloader = DataLoader(dataset,
batch_size=args.batch_size,
shuffle=True,
num_workers=0, #或者直接不要这个参数,默认是0
collate_fn=MyDataset.collate_fn)
问题解决!!
这个问题困扰了我一下午,因为多线程调试并不会报错,只是用不了。