我用来pdbpp调试程序。我想知道是否可以在不同会话之间保存和恢复pdbpp(或pdb)状态。
我的意思是,我想在调试器进程的独立调用之间保留所有断点、别名、显示列表等。
我知道状态是在单个调试器进程中保留的。但是如果我退出调试器并再次启动它会怎么样?可以恢复状态吗?
在pdb中调试时,我发现错误,因此更改了代码。
现在我想重新开始调试。我可以在不退出 pdb 的情况下执行此操作,这样我就不必为 python 脚本指定命令行参数吗?或者我需要退出pdb然后再次进入?
我正在使用 PyQt 应用程序,因此在开始调试之前,在 Python 文件中,我有pyqtRemoveInputHook()停止事件循环的行,然后ipdb.set_trace(). 这将通过终端进入交互式调试会话。完成调试后,我需要手动在终端中键入c; pyqtRestoreInputHook()以继续运行程序并恢复事件循环。告诉或继续,并且c被解释为 Python 代码。虽然这不是太麻烦,但我想以某种方式创建一个函数,允许 python 命令告诉或者给定的字符串是伪键盘命令。ipdbpdbpyqtRestoreInputHook()ipdbpdb
换句话说,我试图找到一个基本上ipdb.run_user_input(my_string)可以my_string是任何正常函数ipdb或pdb函数(如next、c、step、list等)的函数。
谢谢!
pdb我的目标是使用 JupyterLab或在 JupyterLab 中运行一些 python 脚本ipdb来捕获我的调试历史记录。
set_trace()我首先在我的 python 脚本中插入:
import torch
from IPython.core.debugger import set_trace
def train_batch(model_instance, inputs_source, labels_source, inputs_target, optimizer, args):
inputs = torch.cat((inputs_source, inputs_target), dim=0)
total_loss, train_stats = model_instance.get_loss(inputs, labels_source)
total_loss[args.train_loss].backward()
set_trace() # insert breakpoint
optimizer.step()
return train_stats
Run Code Online (Sandbox Code Playgroud)
然后我在 JupyterLab 中运行此脚本:
!python ./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
Run Code Online (Sandbox Code Playgroud)
执行在断点处停止,但不提供交互框来提示任何ipdb …
考虑以下情况:
有没有办法只恢复 1 个线程?演示
当我在 Visual Studio 中将 C# 项目构建为发行版时,生成的 .exe 包含以下字符串:
\nC:\\Users\\jornane\\source\\repos\\\xc2\xabsolution\xc2\xbb\\\xc2\xabproject\xc2\xbb\\obj\\Release\\\xc2\xabname\xc2\xbb.pdb\nRun Code Online (Sandbox Code Playgroud)\n.exe 文件泄露了我的用户名和存储项目的路径。有什么办法可以防止这种情况发生吗?我理解为什么该路径适用于调试版本,但不适用于发布版本。
\n我使用 google colab 并尝试使用 pdb.set_trace() 设置断点,但是当我键入命令时,字符被隐藏。当我键入如下图所示的命令时,“*********”之类的内容会出现在“>pdb”命令后面。我尝试在单元格中使用 stty sane 和重置命令,但它不起作用。有谁知道如何解决这个问题?
当执行以下代码时:
from IPython.core import ultratb
sys.excepthook = ultratb.FormattedTB(mode='Verbose', color_scheme='Linux', call_pdb=1)
Run Code Online (Sandbox Code Playgroud)
为了捕获异常,我收到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/dinari/miniconda3/envs/testenv/lib/python3.8/site-packages/IPython/core/ultratb.py", line 994, in __init__
VerboseTB.__init__(self, color_scheme=color_scheme, call_pdb=call_pdb,
File "/Users/dinari/miniconda3/envs/testenv/lib/python3.8/site-packages/IPython/core/ultratb.py", line 638, in __init__
TBTools.__init__(
File "/Users/dinari/miniconda3/envs/testenv/lib/python3.8/site-packages/IPython/core/ultratb.py", line 242, in __init__
self.pdb = debugger_cls()
TypeError: 'NoneType' object is not callable
Run Code Online (Sandbox Code Playgroud)
使用 python 3.8.2 和 IPython 8.4.0
pdb 否则工作正常。
有解决这个问题的想法吗?
我想调试一个python项目
问题是,我不知道在哪里设置一个断点,
我想做的是,能够调用一个方法
SomeClass( some_ctor_arguments ).some_method()`
Run Code Online (Sandbox Code Playgroud)
并立即调试调试器
我怎么做?
我试过pdb.run( string_command )但它似乎没有正常工作
>>> import pdb
>>> import <some-package>
>>> pdb.run( .... )
> <string>(1)<module>()
(Pdb) s
NameError: "name '<some-package>' is not defined"
Run Code Online (Sandbox Code Playgroud) 让我们说我写
(Pdb) p dir(object)
Run Code Online (Sandbox Code Playgroud)
而且,现在我的屏幕上有一个属性列表.如何在仍处于调试模式时清除此文本?重要的是,我不想失去我在代码中的位置.
pdb ×10
python ×6
debugging ×3
ipython ×2
.net ×1
assemblies ×1
ipdb ×1
jupyter ×1
msbuild ×1
pycharm ×1
python-2.7 ×1
python-3.x ×1