使用ipdb在一个单元中调试python代码(jupyter或Ipython)。
我正在使用带Firefox的Jupyter(或Ipython)笔记本,并希望在单元格中调试一些Python代码.我正在使用'导入IPDB; ipdb.set_trace()'作为断点,例如,我的单元格具有以下代码: a=4 import ipdb; ipdb.set_trace() b=5 print a print b 使用Shift+Enter执行后,我会给我这个错误: -------------------------------------------------------------------------- MultipleInstanceError Traceback (most recent call last) in () 1 a=4 ----> 2 import ipdb; ipdb.set_trace() 3
12 2023-03-08
编程技术问答社区
用IPython对Python进行断点诱导的交互式调试
说我有一个ipython会话,我从中称呼一些脚本: > run my_script.py 有没有办法在my_script.py中诱导断点,我可以从ipython检查工作空间? 我记得在以前版本的ipython中读过: from IPython.Debugger import Tracer; def my_function(): x = 5 Tracer() print 5; 但是subsodule Debugger似乎不再可用. 假设我已经打开了一个ipython会话:如何停止我选择的位置并使用ipython检查工作空间? 通常,我更喜欢不需要我预先指定行号的解决方案,因为我希望上面有多个这样的呼叫,而不必跟踪行号他们是. 解决方案 Tracer()仍然存在于另一个模块中.您可以执行以下操作: from IPython.core.debugger import Tracer def my_funct
6 2023-01-31
编程技术问答社区
在Python调试器中等待一个异步函数
当python调试器内部时,await await await async函数是否有可能调用? 说我在某些main.py文件中有以下代码: import asyncio async def bar(x): return x + 1 async def foo(): import ipdb; ipdb.set_trace() asyncio.run(foo()) 现在,我想在调试器中使用一些参数测试调用bar()以测试结果.以下发生了: $ python3 main.py > /Users/user/test/main.py(8)foo() 7 import ipdb; ipdb.set_trace() ----> 8 return None 9 ipdb> bar(1) main.py:1: RuntimeWarning: co
38 2023-01-18
编程技术问答社区
��名称错误:名称';get_ipython#39;未定义�� 在准备调试会话时,通过��导入ipdb��
我正在尝试使用PIP 8.1.2上的python上安装和使用python 3.3.5 32位的IPDB(IPYTHON启用PDB). 我已经通过PIP安装(必须单独安装它)在Windows CMD中没有错误: pip install ipdb 我写了一个简单的测试脚本,希望在打印"测试"字符串之前停止在调试器中停止, ipdb_test.py : import ipdb ipdb.set_trace() print('test') 从空闲编辑器运行它时,以下例外显示: Traceback (most recent call last): File "C:\Python33.5-32\lib\site-packages\ipdb\__main__.py", line 44, in get_ipython NameError: name 'get_ipython' is not defined During handling of
38 2022-12-15
编程技术问答社区
python ipdb偶尔会显示没有代码行
用 中断python代码的执行 import ipdb; ipdb.set_trace() 有时(但并非总是)将我丢进IPDB ,即使我发出l命令,也没有显示周围的代码行.即,我得到了类似 的东西 > /path/to/file.py(58)main() ipdb> 而不是 > /path/to/file.py(58)main() -> print('hello 2') 55 print('hello') 56 import pdb; pdb.set_trace() 57 58 -> print('hello 2') 59 print('hello 3') ipdb> 有人知道如何显示代码行吗? 编辑:如果i s tep进入新功能(位于另一个文件中),则每一侧都会出现单个周围线. 解决方案 ipdb是围绕Python调试器的包装器a>因此,在ipdb无法显示行号的情况下,pdb也无法做到. pdb
4 2022-12-15
编程技术问答社区
ipdb显示颜色代码而不是颜色
使用import ipdb; ipdb.set_trace()插入断点. 当第一次达到断点时,颜色很好,但是当第二次击中bp时(按c)等显示颜色代码而不是真颜色. ←[1;32m 72 ←[1;33m ←[1;32mimport←[0m ←[0mipdb←[0m←[1;33m;←[0m ←[0mipdb←[0m←[1;33m.←[0m←[0mset_trace←[0m←[1;33m(←[0m←[1;33m)←[0m ←[1;31m# XXX BREAKPO INT←[0m←[1;33m←[0m←[0m 在Windows 7,Python 2.7和2.6中有相同的问题.我认为有关方法的一项工作是使用Nocolor方案(如何获得Nocolor方案?)以及如何使用可用的配色方案来解决此问题?谢谢! 解决方案 在Windows使用IPDB时,这是一个已知问题: https://github. com/gotcha/ipdb/eskent/
6 2022-12-15
编程技术问答社区
如何在Windows上用Anaconda安装ipdb?
我已经安装了Python 2.7,但我想尝试 ipython 所以我通过 anaconda 在Ipython网站上推荐(尽管不确定这样做的优点/缺点是什么).现在,我想使用 ipdb debugger.我想我需要确保它在python而不是普通python的Anaconda版本下安装. 如何安装?通常,如果我想在Anaconda下安装一些任意的Python模块,该如何执行此操作? 解决方案 实际上,我认为在IPDB的情况下,它已经与Anaconda一起安装.但是总的来说,似乎您只需在必要时通过PIP或Easy_install安装东西即可.我缺少的关键是要确保您使用的是Anaconda(脚本目录中的.bat文件)而不是系统python的python的pip/easy_install随附的pip/easy_install.所以: Anaconda\Scripts\easy_install somepackage 这将在Anaconda\lib\site-package
34 2022-12-15
编程技术问答社区
ipdb,多线程和自动加载程序导致编程错误
我正在使用IPDB调试器在本地调试多线程Web应用程序(Django,Plone).由于我在调试提示符处时会发生自动加载,因此通常IPDB似乎会感到困惑.产生的堆栈跟踪出现 /Users/mikko/code/xxxx/venv/lib/python2.7/site-packages/IPython/core/history.pyc in writeout_cache(self, conn) 605 with self.db_input_cache_lock: 606 try: --> 607 self._writeout_input_cache(conn) 608 except sqlite3.IntegrityError: 609 self.new_session(conn) /Users/mikko/code/xxx
4 2022-12-15
编程技术问答社区
跨ipdb会话的历史记录
这个问题是询问 ,但我找不到一个很好的答案.所以,我想再次问. 我希望我的IPDB在会话中记住命令.目前,它可以在ipython会议上执行的命令,而不是从旧的IPDB会话中执行的命令.如果我能拥有此功能,那将是一个巨大的节省时间. 有人可以解决这个问题吗? 解决方案 我也有同样的问题,所以我 forked 该项目并添加一个补丁以持久使用历史.您可以使用PIP安装IPDB的分叉版本: pip install git+https://github.com/michelesr/ipdb.git 只需确保您的Ipython版本为5.0或更高即可.实施信息可以在此文章. 其他解决方案 如果您正在使用另一个调试器, trepan 确实在跨越了历史记录会议. 其他解决方案 创建具有以下内容的文件 在您的~/.pdbrc中使用execfile(...)导入该文件 def use_file_history(): import os fr
4 2022-12-15
编程技术问答社区
ipython ipdb,当通过ipdb调用时。set_trace(),调试时不记得命令历史记录
ipython确实记得命令历史记录,如果我正常运行ipython,例如为了弄乱回复中的基本内容,但我希望能够从上一个调试会话中拉出调试命令,我正在通过正常运行程序来进行调试,该程序包含 import ipdb def info(type, value, info): import traceback traceback.print_exception(type, value, info) ipdb.pm() import sys sys.excepthook = info trace = ipdb.set_trace 是要设置它,以便我可以在程序中的任何地方编写trace()在运行程序时开始调试,或者以自动启动邮政在验证后调试,当它自行死亡时. python与ipython有关快速代码/测试迭代率已经超越了其他语言,而我在这一点上很接近涅rv虫... 解决方案 我使用 pudb 而不是.它使从调试器获得真正的ipython外壳,并保存所有
16 2022-12-15
编程技术问答社区
如何在事后调试时退出ipdb?
我喜欢通过以下方式检查python脚本中的错误 $ python3 -m pdb my_script.py 这将我送入PDB提示符,从我可以继续执行的位置,当它达到错误时,我可以检查变量,然后q退出脚本执行以返回我的外壳. 我尝试使用Ipython调试器模块,因为它更彩色: $ python3 -m ipdb my_script.py 但是,一旦检查错误,我就无法退出调试器.使用q退出命令只是在重新执行脚本和验尸模式之间继续切换它: $ python3 -m ipdb my_script.py ipdb> c Uncaught exception. Entering post mortem debugging Running 'cont' or 'step' will restart the program ipdb> Inspect some variables at this point ipdb> q Post mortem debugger finishe
6 2022-12-15
编程技术问答社区
在Python 3中使用列表生成器时,pdb模块可能存在的错误
在Python 3中运行此代码后: import pdb def foo(): nums = [1, 2, 3] a = 5 pdb.set_trace() foo() 以下表达式工作: (Pdb) print(nums) [1, 2, 3] (Pdb) print(a) 5 (Pdb) [x for x in nums] [1, 2, 3] 但是以下表达失败: (Pdb) [x*a for x in nums] *** NameError: global name 'a' is not defined 上面的python 2.7. 效果很好 这是一个错误还是我缺少某些东西? 更新:请参阅新的接受答案.这确实是一个错误(或有问题的设计),现已通过在PDB中引入新命令和模式来解决. 解决方案 如果您在[I] PDB会话中键入interact,则获得了一个交互式会话,并且列表综合确实在此模式下按预期工作 来
2 2022-10-07
编程技术问答社区
将生成器对象转换为列表以便调试
当我使用ipython在Python进行调试时,有时会达到一个突破点,我想检查一个当前是发电机的变量.我想到的最简单的方法是将其转换为列表,但是我不清楚在ipdb中以一行做到这一点的简单方法,因为我是Python的新手. 解决方案 只需在发电机上调用list lst = list(gen) lst 请注意,这会影响不会返回任何进一步项目的生成器. 您也不能在ipython中直接调用list,因为它与列出代码行的命令相冲突. 在此文件上测试: def gen(): yield 1 yield 2 yield 3 yield 4 yield 5 import ipdb ipdb.set_trace() g1 = gen() text = "aha" + "bebe" mylst = range(10, 20) 运行时哪个: $ python code.py > /home/javl/sandbox/
6 2022-10-07
编程技术问答社区
退出 Python 调试器 ipdb
我经常使用ipdb,以跳到隔离的代码,即很难编写使用它的真实脚本.相反,我写了一个最小的测试用例,并跳入它. 工作流程的示例: def func(): ... import ipdb ipdb.set_trace() ... def test_case(): ... func() ... 然后,调用 py.test test_file.py -s -k test_case 现在,通常我只检查一个或两个变量,然后要退出.更改代码并重新进行. 我该如何退出?手册说q退出了调试器.它不是(真的).在调试器实际终止之前,您必须退出几次. CTRL-C和CTRL-D的行为相同(击中Ctrl-D几次的额外挫败感最终也退出了终端). 有没有明智的方法来戒烟?这个工作流程甚至明智吗?什么是标准方法? 解决方案 我将以下内容放在我的.pdbrc 中 import os alias kk os.system
102 2022-09-17
编程技术问答社区
获取对当前异常的引用
$ ./runtests.py -v tests/managers/test_customer.py:CustomerManagerTest.test_register_without_subscription --ipdb ... test_register_without_subscription (tests.managers.test_customer.CustomerManagerTest) ... - TRACEBACK -------------------------------------------------------------------- Traceback (most recent call last): File "/usr/lib/python2.7/unittest/case.py", line 331, in run testMethod() File "*****/tests/managers/test_customer.p
8 2022-09-16
编程技术问答社区
使用ipdb与emacs'gud在代码中没有明确的断点
我正在使用python.el 如果我从菜单中选择"调试器",然后输入'python -m pdb myfile.py',gud启动,在一个拆分框架中,我将一个提示符(pdb)提示,而我的python代码在另一个则是caret在第一行,表明它已经准备好了.例如," n"步骤到下一行,而看台相应地移动. 相反,如果我输入'python -m ipdb myfile.py',则框架拆分和一个拆分被标记为GUD,但没有IPDB控制台可见.换句话说,这种启动IPDB的方式似乎不起作用.如果我使用ipdb.set_trace()手动将断点插入我的Python代码,则IPDB工作正常,除了它不使用GUD接口.这是故意的,以便IPDB的堆栈跟踪可以很好地工作吗? 如果是这样,那很好,但是有没有一种方法可以从emacs启动IPDB,而无需手动添加set_trace()命令? 解决方案 这里的基本问题是 gud 正在寻找(Pdb)提示,并且 ipdb 不会以这种方式提示.有三种方法可以解
8 2022-09-06
编程技术问答社区
用pdb调试Python时提出BdbQuit问题
最近,当将pdb调试器添加到我的python 2.7.10代码时,我会收到此消息: Traceback (most recent call last): File "/Users/isaachess/Programming/vivint/Platform/MessageProcessing/vivint_cloud/queues/connectors/amqplib_connector.py", line 191, in acking_callback callback(message.body) File "/Users/isaachess/Programming/vivint/Platform/MessageProcessing/vivint_cloud/queues/consumable_message_queue.py", line 32, in deserialized_callback self._callback_method(msg) F
346 2022-08-24
编程技术问答社区
是否可以删除用ipdb.set_trace()设置的断点?
我在Python代码中的某个地方使用了ipdb.set_trace().是否可以使用IPDB命令忽略此断点? clear告诉我,它清除了所有断点,但是当IPDB偶然发现与ipdb.set_trace()>. 时,它再次停止. disable 1告诉我:No breakpoint numbered 1 ignore 1说:Breakpoint index '1' is not valid 澄清:当然,我可以简单地从源代码中删除断点.但这需要退出调试器并重新开始.通常,它需要大量工作才能到达某个地方并重新启动调试器,这会使生活更加困难.另外,如果有一个巨大的循环,并且您希望在循环中检查对象,则最容易的是直接在对象之后放置一个断裂点.然后,我如何跳过循环(以及所有成千上万的调用set_trace()),并在循环后使用next? 逐步浏览代码 解决方案 好吧,您可以利用python中的任何东西都是对象的事实.在调试器中,您可以做这样的事情: def f(): pa
30 2022-08-18
编程技术问答社区
保存断点到文件
在调试我的Python代码时,我通过命令行通过IPDB运行一个脚本,并设置了许多断点.然后,我对一个或多个模块和重新运行进行了一些更改.但是,如果我只使用运行模块不要重新加载.为了确保它们的确如此,我可以存在并完全重新启动Python,但是我需要重置所有断点,如果我有很多东西,如果我一遍又一遍地完成. 是否有一种方法可以将断点保存到(i)pdb中的文件,以便在不更改行号的小更改之后,我可以转储断点,重新启动Python + PDB,然后重新加载我的断点?等效于matlabs X = dbstatus,保存/加载X,设置dbstop(X). 解决方案 您可以将断点保存到.pdbrc文件中,或在全球范围内将断点保存到您的家中.文件应该具有这样的东西: # breakpoint 1 break /path/to/file:lineno # breakpoint 2 break /path/to/file:lineno 您可以像在交互式模式下一样定义断点各种方式.因此,
62 2022-08-18
编程技术问答社区
在Tornado'的ioloop中启动异常的pdb
在独立的 Python 程序中执行此操作通常很有用: def excepthook(typ, value, tb): traceback.print_exception(typ, value, tb) pdb.pm() ... if log.getEffectiveLevel() == logging.DEBUG: sys.excepthook = excepthook (即如果发生未捕获的异常,程序将进入 pdb 事后分析模式) 但这不适用于 Tornado ioloop bc 似乎 ioloop 捕获未捕获的异常并打印或记录它们.如果我安装上面的钩子,程序只有在按下 Ctrl-C 时才会进入事后模式,这有点晚了.:-) 有没有办法在没有猴子修补 Tornado 的情况下实现这一点? 解决方案 你可以继承 tornado 的 IOLoop 并覆盖 handle_callback_exception.请参阅 http://www.tor
118 2022-08-10
编程技术问答社区