(全网率先解决)Pycharm在Debug的时候出现frames are not available;Variable:Connected

先说说我的情况,这样可以让你对号入座。

  1. 我是本地笔记本电脑使用Pycharm,但是Pycharm的Python解释器连接的是远程的实验室linux服务器。也就是说,你猜到了,我的是Pycharm专业版,因为专业版才有远程连接这个功能。
  2. 我运行代码一切正常,但是在调试的时候有点不对劲。除了上述frames are not available,在Variable那里还显示:Connected。另外,第一步调试可以成功跳到你的任何一个断点,但是此时Console几乎是挂掉的,查看变量没反应,然后点击下一步调试,直接无终止运行下去,有病。

我卡在这里很久,因为运行一切正常嘛!就是调试***。一开始我以为是项目太大了?导致那些数据变量都传不过来,本地内存存不下?我在想,不至于吧,数据变量是在服务器上啊,我想要看哪个变量,只传输那个变量过来而已,本地内存存不下是绝不可能的,而且一个变量能有多大,撑死1M吧,一个10000*10000的矩阵估计也没有1M吧。我本地内存16个G,难道存不下?

后来又想是不是连接服务器的网速的问题,也不至于啊,都2021年了,网速至少1M/s,我这5M起步吧。秒传啊。。

又想,是不是服务器被太多人用,所以他们把服务器内存占满了,导致调试不动了?不可能啊,我运行项目都没丝毫问题,
而且我还登录了服务器看了一下,内存还很多。所以肯定有鬼。

后来我终于发现了这个惊天大秘密:前方高能!!!



























(全网率先解决)Pycharm在Debug的时候出现frames are not available;Variable:Connected_第1张图片

我的代码中使用了多线程,即下面的num_workers=10多线程在linux服务器上运行是没有问题的。

dataloader = DataLoader(dataset, 
                        batch_size=args.batch_size, 
                        shuffle=True, 
                        num_workers=10,
                        collate_fn=MyDataset.collate_fn)

但是调试的时候会出问题,我的猜测是我们的Pycharm调试界面只支持主进程,线程开了之后就不能用了。

正如我上面所展示的,上面只是DataLoader的定义,还没有正式使用这个东西,所以调试功能在正式使用多线程之前一切正常

但是到了下面之后,enumerate(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)

这个问题困扰了我一下午,因为多线程调试并不会报错,只是用不了。解决了之后,很开心,因为全网百度谷歌找了都没有这个问题的答案,都是些牛头不对马嘴的胡扯答案!!!!

所以,如果帮到了你,请务必点赞,让我也感受感受你们解决了问题的喜悦!


完结撒花

你可能感兴趣的:(安装以及错误,pycharm,python)