Python JupyterLab中的pdb未进入交互模式

Python JupyterLab中的pdb未进入交互模式,python,jupyter-notebook,jupyter,pdb,Python,Jupyter Notebook,Jupyter,Pdb,我的目标是在JupyterLab中使用pdb或ipdb运行一些python脚本,以捕获我的调试历史记录 我首先在python脚本中插入了set_trace(): 导入火炬 从IPython.core.debugger导入集\u跟踪 def序列批次(模型实例、输入源、标签源、输入目标、优化器、参数): 输入=torch.cat((输入源、输入目标),尺寸=0) 总损耗,列车统计=模型实例。获取损耗(输入,标签源) 总损耗[args.train\u loss].backward() 设置_trace

我的目标是在JupyterLab中使用
pdb
ipdb
运行一些python脚本,以捕获我的调试历史记录

我首先在python脚本中插入了
set_trace()

导入火炬
从IPython.core.debugger导入集\u跟踪
def序列批次(模型实例、输入源、标签源、输入目标、优化器、参数):
输入=torch.cat((输入源、输入目标),尺寸=0)
总损耗,列车统计=模型实例。获取损耗(输入,标签源)
总损耗[args.train\u loss].backward()
设置_trace()#插入断点
optimizer.step()
返程列车统计
然后在我的JupyterLab中运行此脚本:

!python./trainer/train.py\
--基本配置。/config/sgd\u vannila\u 0.001.yml\
--数据集办公之家\
--第50类\
--src_地址。/data/office home/Art.txt\
--tgt_地址。/data/office home/Clipart.txt\
--名称transfer.debug.rand\u noise\
--火车站10000步\
--种子2\
--过滤器类=0,50\
--评估间隔50
执行在断点处停止,但不提供交互式框来提示任何
ipdb
指令。同样的情况也发生在
pdb
或jupyter笔记本电脑上


我尝试过的事情:

  • 重新启动Chrome浏览器或我的笔记本电脑没有帮助
  • 在笔记本代码块中添加断点是可行的(请参见下面的屏幕截图),但我希望能够调试python模块文件中编写的代码

版本信息:

  • ipdb-0.12.2
  • Python 3.6.9
  • JupyterLab 0.35.5
我认为
%debug
是您需要的。尝试将下面的代码段插入jupyterlab单元格并运行它:

def foo(a,b):
    return(a+b)
c = foo(a=1, b=str(1))
这会引发
类型错误

现在,如果您在下面插入一个单元格,键入
%debug
并运行它,您将得到以下结果:

现在您可以运行任何命令,如
h(elp)

希望这个h(elps)


编辑:

OP提供了以下澄清:

我实际上在寻找一种积极主动的方式来插入中断 点,即如何插入断点,即使没有任何错误

在这种情况下,您可以将IPython.core.debugger导入集_trace中的
与ipdb命令
bt
结合使用。下面是一个例子:

from IPython.core.debugger import set_trace

def foo(a,b):
    return(a+b)
set_trace()
c = foo(a=1, b=1)
这将触发以下事件:

现在,运行命令
bt
,我希望您能得到您想要的东西。无论如何,我希望这能回答“断点无误”部分。 我不打算包括运行
bt
的全部输出,因为这是一个相当多的输出。但下面是运行
?bt
以获得有关该特定命令的更多帮助的输出:


您可以使用%run magic命令执行此操作

%run ./trainer/train.py \
--base_config ./config/sgd_vannila_0.001.yml \
--dataset Office-Home \
--class_num 50 \
--src_address ./data/office-home/Art.txt \
--tgt_address ./data/office-home/Clipart.txt \
--name transfer.debug.rand_noise \
--train_steps 10000 \
--seed 2 \
--filter_classes=0,50 \
--eval_interval 50

非常感谢。这真是太好了!我实际上在寻找一种插入断点的主动方式,即即使没有任何错误也如何插入断点。@JiangXiang我明白了!这是有道理的。但我不认为从一开始就很清楚这就是你真正想要的。你想在聊天中讨论一下吗?再次感谢!如果我将您的代码放在名为
mytest.py
.py
文件中,并使用
在jupyter中运行它,那么它就不起作用了!python mytest.py
。它显示的是
ipdb>
,但没有输入框来输入命令。@JiangXiang您已经将您的问题标记为
JupyterLab
。因此,我的建议是针对
.ipynb
文件,而不是
.py
。也就是说,在我这方面,这种方法在控制台中的效果和在笔记本电脑中的效果一样好。我的
JupyterLab
安装可能有问题。我稍后会再检查。非常感谢。最后,这是有效的!非常感谢!