我只是注意到在中使用l(即 list命令)时出现了奇怪的行为ipdb。我想我过去曾经见过与Perl调试器类似的东西,但这仍然让我感到困惑。
我第一次调用它时,它会在当前步骤(断点)周围正确显示约10行代码。但是,如果我反复按它,它将不再显示当前位置周围的代码,而是显示其下方的代码。
最终list显示了脚本的最后几行,如果我再按l一次,它将不再显示任何内容。
为什么会这样,以及如何使其与我第一次调用时一致?
我使用安装了ipdbpip,但我仍然得到
ImportError: No module named ipdb.
我是否必须做其他事情才能引入这个模块?当然,我import ipdb也在我的文件的顶部。我的想法是:我安装了 Python 2.7 和 Python 3。Pip 安装ipdb到 Python 2.7 目录,但我正在运行的 Python 模块使用的是 Python 3。我认为这是问题所在,但我该如何解决它,以便ipdb可以与我的 Python 3 模块一起使用?谢谢!
在pdb / ipdb调试中,有用的interact命令为我提供了功能齐全的交互式Python控制台。
但是,即使我一ipdb开始使用,它似乎始终是“标准” Python控制台。有没有一种配置ipdb的方法,interact它将为我提供IPython控制台,而不是标准的Python?有趣的是,我确实收到了IPython样式提示,但是却没有使用IPython魔术,例如%whos:
In [24]: 1/0
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-24-05c9758a9c21> in <module>()
----> 1 1/0
ZeroDivisionError: division by zero
In [25]: %debug
> <ipython-input-24-05c9758a9c21>(1)<module>()
----> 1 1/0
ipdb> interact
*interactive*
In : %whos
File "<console>", line 1
%whos
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
有没有办法让ipdb小号interact给我的全功能IPython控制台?
我正在使用带有ipdb的交互式图形Python调试器(Canopy的图形化调试器).我正在处理的脚本有多个导入的模块和几个调用它们各自的功能.每当我尝试调试运行时,执行就会在对导入模块的函数(特别是子进程)的调用中卡住.我的两个主要问题是:
1)在调试模式下运行会大大减慢速度吗?代码实际上是不是卡住了,而只是以一种非常缓慢的速度运行?
2)有没有办法完全传递代码并运行它们就好像我甚至没有调试一样?我想阻止调试器进入子进程,只是执行它就像正常运行一样.
我可能会抛弃图形化调试器,并从终端做所有事情,但我想避免这种情况,因为图形界面非常方便,节省了很多打字.
我用旋风ioloop开发应用,当它涉及到http_client.fetch的callback,我要开始PDB import pdb; pdb.set_trace(),但将引发一个例外:
> /home/yiwei.liyw/dsa-engine/src/collect/engine_task.py(52)task_created()
-> print response.body
(Pdb)
2015-10-26 15:30:38,629 ERROR ioloop.py:612 Exception in callback <functools.partial object at 0x7fe0d98e5e68>
Traceback (most recent call last):
File "/home/yiwei.liyw/dsa-engine/venv/lib/python2.7/site-packages/tornado/ioloop.py", line 592, in _run_callback
ret = callback()
File "/home/yiwei.liyw/dsa-engine/venv/lib/python2.7/site-packages/tornado/stack_context.py", line 275, in null_wrapper
return fn(*args, **kwargs)
File "/home/yiwei.liyw/dsa-engine/src/collect/engine_task.py", line 52, in task_created
print response.body
File "/home/yiwei.liyw/dsa-engine/src/collect/engine_task.py", line 52, in task_created
print response.body
File "/home/tops/lib/python2.7/bdb.py", line 49, in trace_dispatch
return self.dispatch_line(frame)
File "/home/tops/lib/python2.7/bdb.py", line 68, in dispatch_line
if …Run Code Online (Sandbox Code Playgroud) 在空白的 Jupyter 笔记本中,我在单元格中输入以下代码:
from IPython.core.debugger import set_trace
set_trace()
print("hello")
Run Code Online (Sandbox Code Playgroud)
运行单元后,我进入调试模式(第一个屏幕截图)。我想跳到下一行,因此我使用命令 n(ext),就像在 pdb 中一样。但随后我并没有像我预期的那样执行打印命令,而是执行一些内部 IPython 代码(第二个屏幕截图)。如何转到单元格代码中的下一行?
编辑:根据一个答案的建议,我用 替换set_trace(),breakpoint()但结果仍然相同。
我正在尝试调试一个quicksort(A, l, r)具有名为 的局部变量的函数l。然而,在 ipdb 中,它也对应于查看当前行周围代码的命令。所以我看到这样的事情:
ipdb> dir()
['A', 'ipdb', 'l', 'r']
ipdb> A
[2, 4, 6, 1, 3, 5, 7, 8]
ipdb> l
14 A[0], A[p] = A[p], A[0]
15
16 def quicksort(A, l, r):
17 # n = len(A)
18 import ipdb; ipdb.set_trace()
---> 19 if len(A) == 1:
20 return
21 else:
22 # choose_pivot(A)
23 q = partition(A, l, r)
24 quicksort(A, l, q-1)
Run Code Online (Sandbox Code Playgroud)
然而,在这种情况下,我实际上想做的是查看 的值l。有没有办法“转义”默认l命令并查看变量的值l?
我正在使用 ipdb 调试我的 python,如下所示:
python -m ipdb my_test.py -d my_input_config -o my_output
Run Code Online (Sandbox Code Playgroud)
并得到以下错误:
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/runpy.py:125: RuntimeWarning: 'ipdb.__main__' found in sys.modules after import of package 'ipdb', but prior to execution of 'ipdb.__main__'; this may result in unpredictable behaviour
warn(RuntimeWarning(msg))
Run Code Online (Sandbox Code Playgroud)
这是什么意思,我该如何解决?谢谢!
我将Django项目更新为2.2.2版,现在当我调用ipdb进行调试时,服务器会告诉我该错误。如果我回到Django 2.2.1,该错误就会消失。
System check identified no issues (0 silenced).
June 06, 2019 - 08:19:36
Django version 2.2.2, using settings 'laserapp.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
> /home/lynde/public_html/laserapp/gestion/views.py(192)get_context_data()
191 import ipdb; ipdb.set_trace()
--> 192 context = super(ResumeOrderCodeView, self).get_context_data(**kwargs)
193 try:
Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/home/lynde/public_html/env/laser/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/home/lynde/public_html/env/laser/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/lynde/public_html/env/laser/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/lynde/public_html/env/laser/lib/python3.6/site-packages/django/core/management/commands/runserver.py", …Run Code Online (Sandbox Code Playgroud) ipdb ×10
python ×8
debugging ×3
ipython ×3
python-3.x ×3
pdb ×2
python-2.7 ×2
anaconda ×1
canopy ×1
celery ×1
django ×1
postgresql ×1
tornado ×1
windows ×1