- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
问题:如果我有一个精心设计的断点条件,我不想每次重新启动时都必须 pdb.set_trace()
然后手动粘贴断点命令我的程序。
有没有办法在我的源代码中设置断点?
我尝试了什么:我阅读了文档并尝试插入这一行:
pdb.run('break 445, a == 1')
但是一旦执行到那一行我就得到了这个错误:
pdb.run('break 445, a == 1')
File "C:\Python25\lib\pdb.py", line 1123, in run
Pdb().run(statement, globals, locals)
File "C:\Python25\lib\bdb.py", line 366, in run
exec cmd in globals, locals
File "<string>", line 1
break 445, a == 1
^
SyntaxError: invalid syntax
最佳答案
pdb
不能这样做。但您可以通过多种方式在您自己的程序中自行构建它。
第一种方法是简单地用一个全局变量来门控断点入口。像这样的事情会很微不足道(简单的例子):
_breakpoints = {}
def reset_breakpoints(disabled=[]):
global _breakpoints
_breakpoints = dict((x, False) for x in disabled)
def set_breakpoint(tag, condition=True):
if tag not in _breakpoints:
_breakpoints[tag] = True
if condition:
pdb.set_trace()
else:
if _breakpoints[tag] and condition:
pdb.set_trace()
def mycode():
some_command()
set_breakpoint('mycode0')
another_command()
set_breakpoint('mycode1', x == 4)
第一次通过时,您不会在字典中找到它,因此您将添加它并停止。但是,您可以更改字典中的值,然后您将首先检查是否应该停止,而不是实际停止。您可以使用 eval
等做更复杂的条件,但像上面那样做可能更容易。这是相当轻量级的,让您可以完全控制事情何时停止。唯一的问题是,如果您将某些内容设置为 False
,您必须记住在重新启动调试 session 时自己初始化 dict(通常清除它)。它没有集成到调试器中,但成本也不高。
另一件要记住的事情......在你进入其中之前,你没有调试器可以控制。这意味着除非您首先执行 pdb.run()
,否则您实际上并不在调试器中,并且没有停止就无法进入调试器(据我所知)。但是,一旦进入调试器,就可以使用堆栈获取 pdb 对象,但需要一些技巧。这是在 IPython 中,不幸的是,实际堆栈深度可能会有所不同,具体取决于您使用的是哪个 pdb 等,但您可以尝试类似下面的方法来获取对当前运行的 Pdb 对象的引用。拥有它后,您可以使用它的界面直接与它交互。一个例子:
In [331]: %debug pass
NOTE: Enter 'c' at the ipdb> prompt to continue execution.
None
> <string>(1)<module>()
ipdb> import inspect
ipdb> f = inspect.stack()[6]
ipdb> f0 = f[0]
ipdb> myipdb = f0.f_locals['self']
ipdb> myipdb.
myipdb.aliases myipdb.dispatch_exception myipdb.do_next myipdb.fncache myipdb.help_help myipdb.lastcmd myipdb.runctx
myipdb.botframe myipdb.dispatch_line myipdb.do_p myipdb.forget myipdb.help_ignore myipdb.lineinfo myipdb.runeval
myipdb.bp_commands myipdb.dispatch_return myipdb.do_pdef myipdb.format_stack_entry myipdb.help_j myipdb.lineno myipdb.set_break
myipdb.break_anywhere myipdb.displayhook myipdb.do_pdoc myipdb.get_all_breaks myipdb.help_jump myipdb.list_command_pydb myipdb.set_colors
myipdb.break_here myipdb.do_EOF myipdb.do_pfile myipdb.get_break myipdb.help_l myipdb.lookupmodule myipdb.set_continue
myipdb.breaks myipdb.do_a myipdb.do_pinfo myipdb.get_breaks myipdb.help_list myipdb.mainpyfile myipdb.set_next
myipdb.canonic myipdb.do_alias myipdb.do_pinfo2 myipdb.get_file_breaks myipdb.help_n myipdb.misc_header myipdb.set_quit
myipdb.checkline myipdb.do_args myipdb.do_pp myipdb.get_names myipdb.help_next myipdb.new_do_down myipdb.set_return
myipdb.clear_all_breaks myipdb.do_b myipdb.do_psource myipdb.get_stack myipdb.help_p myipdb.new_do_frame myipdb.set_step
myipdb.clear_all_file_breaks myipdb.do_break myipdb.do_q myipdb.handle_command_def myipdb.help_pdb myipdb.new_do_quit myipdb.set_trace
myipdb.clear_bpbynumber myipdb.do_bt myipdb.do_quit myipdb.help_EOF myipdb.help_pp myipdb.new_do_restart myipdb.set_until
myipdb.clear_break myipdb.do_c myipdb.do_r myipdb.help_a myipdb.help_q myipdb.new_do_up myipdb.setup
myipdb.cmdloop myipdb.do_cl myipdb.do_restart myipdb.help_alias myipdb.help_quit myipdb.nohelp myipdb.shell
myipdb.cmdqueue myipdb.do_clear myipdb.do_return myipdb.help_args myipdb.help_r myipdb.onecmd myipdb.stack
myipdb.color_scheme_table myipdb.do_commands myipdb.do_retval myipdb.help_b myipdb.help_restart myipdb.parseline myipdb.stdin
myipdb.columnize myipdb.do_condition myipdb.do_run myipdb.help_break myipdb.help_return myipdb.parser myipdb.stdout
myipdb.commands myipdb.do_cont myipdb.do_rv myipdb.help_bt myipdb.help_run myipdb.postcmd myipdb.stop_here
myipdb.commands_bnum myipdb.do_continue myipdb.do_s myipdb.help_c myipdb.help_s myipdb.postloop myipdb.stopframe
myipdb.commands_defining myipdb.do_d myipdb.do_step myipdb.help_cl myipdb.help_step myipdb.precmd myipdb.stoplineno
myipdb.commands_doprompt myipdb.do_debug myipdb.do_tbreak myipdb.help_clear myipdb.help_tbreak myipdb.preloop myipdb.trace_dispatch
myipdb.commands_resuming myipdb.do_disable myipdb.do_u myipdb.help_commands myipdb.help_u myipdb.print_list_lines myipdb.undoc_header
myipdb.commands_silent myipdb.do_down myipdb.do_unalias myipdb.help_condition myipdb.help_unalias myipdb.print_stack_entry myipdb.use_rawinput
myipdb.complete myipdb.do_enable myipdb.do_unt myipdb.help_cont myipdb.help_unt myipdb.print_stack_trace myipdb.user_call
myipdb.complete_help myipdb.do_exit myipdb.do_until myipdb.help_continue myipdb.help_until myipdb.print_topics myipdb.user_exception
myipdb.completedefault myipdb.do_h myipdb.do_up myipdb.help_d myipdb.help_up myipdb.prompt myipdb.user_line
myipdb.completekey myipdb.do_help myipdb.do_w myipdb.help_debug myipdb.help_w myipdb.quitting myipdb.user_return
myipdb.completenames myipdb.do_ignore myipdb.do_whatis myipdb.help_disable myipdb.help_whatis myipdb.rcLines
myipdb.curframe myipdb.do_j myipdb.do_where myipdb.help_down myipdb.help_where myipdb.reset
myipdb.curindex myipdb.do_jump myipdb.doc_header myipdb.help_enable myipdb.identchars myipdb.returnframe
myipdb.default myipdb.do_l myipdb.doc_leader myipdb.help_exec myipdb.interaction myipdb.ruler
myipdb.defaultFile myipdb.do_list myipdb.emptyline myipdb.help_exit myipdb.intro myipdb.run
myipdb.dispatch_call myipdb.do_n myipdb.execRcLines myipdb.help_h myipdb.is_pydb myipdb.runcall
ipdb> myipdb.
关于python - 如何从源代码中设置 pdb 中断条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22557758/
我正在启动一个 web api 项目,当我尝试在逻辑层(这是一个单独的 csproj)中设置断点时我注意到了这个问题,它显示了未经验证的断点。 深入研究后,我发现调试控制台显示“无法找到或打开 PDB
我已经下载了 FreeImage 源代码并自己为 X64 MT DLL 进行了静态构建。 一切正常,除了当我在 freeimage.lib 文件中使用链接时,我收到很多烦人的链接器警告,我不太了解原因
Ubuntu 16.04 Python 3.5.2 如果我运行 python,在 virtualenv 中,我会得到 Python 3.5.2。 问题是: (photoarchive) admin@s
在 pdb 模式下,我经常想单步执行一个函数。这是一个说明我可能会做什么的情况。给定代码: def f(x): print('doing important stuff..') res
我有父进程调用它的子进程。我把 import pdb; pdb.set_trace() 进入子进程代码。 当我使用 python -m pdb parent.py 启动父级时,它被卡住了。调试器不响应
这个问题在这里已经有了答案: Cannot find or open the PDB file in Visual Studio C++ 2010 (7 个答案) 关闭 8 年前。 我正在使用最近升
我对 python 和 pdb 比较陌生,但我对 gdb 有很多经验。 我的问题是,如果我在某个时候在我的代码中设置了一些断点,我将想要更改某些内容并重新运行我的调试 session ,同时保留这些断
我对编译器和链接器 PDB 文件分别有什么区别感到困惑(即在 Visual Studio 中,Project Properties > C/C++ > Output Files >程序数据库文件名 v
我有一个 PDB 文件列表。我想使用 BioPython 中的 Bio.PDB 模块提取所有文件的配体(因此,杂原子)并将每个单独保存到 PDB 文件中。 我尝试了一些解决方案,例如:Remove h
尝试使用 pdb 调试我的基于 python 的 roguelike。我想弄清楚的是,函数handle_keys()是否像我所问的那样返回0。我有另一个函数没有按预期运行,所以我试图找出问题发生的地方
我有私有(private) pdb 文件,我必须将其转换为公共(public)文件。有工具吗? 最佳答案 使用PDBCopy . pdbcopy 是 Windows 调试工具的一部分,可通过 Wind
在静态编译的链接阶段在 Windows 上构建时可能会出现 LNK4099 警告。 例如使用 nmake 和 VC10 进行构建时,我收到一连串 LNK4099 警告,例如: libcurl_a_de
我的 Visual Studio 2013 ASP.NET webform 应用程序有 3 个 DLL 程序集。调试时,DLL 和 PDB 仅在三个 DLL 中的两个(项目/VB 模块和一个 C# 模
我有一个 Python 程序,里面有一个函数 foo()。 我使用 PDB 运行程序,并在程序中某处的任意断点处停止。 现在,我可以很容易地从 PDB 中调用 foo(),我只需键入: !foo()
我正在尝试使用 this tutorial 学习 pdb引用自 another stackoverflow question ,我正处于“入门”部分的第 3 步。 In [12]: %paste #
我有 DLL,并且有用于创建 DLL 的确切源代码。当我们从客户那里获得转储文件时,我希望我们的本地符号服务器能够工作。 (在我们产品的下一个补丁/版本之前无法在客户站点更新 DLL) 最佳答案 这似
这个问题可能真的很愚蠢,但就是这样。以下语句触发特定电子邮件的异常: File "/Users/me/tools/maildir-deduplicate/maildir_deduplicate/m
在从我的旧 XP 移动到新的 vista PC 后,我在 VS2005 中的一个旧项目中收到以下几个警告: UnitTest++.vsnet2005.lib(TestRunner.obj) : 警告
我正在尝试使用 Visual Studio 编译 Qt 4.8.6 项目(我使用的是用于 Qt4.8.6 的 visual studio 插件)。我在调试和 Release模式 (-debug-and
我想用ipdb而不是 pdb与 py.test --pdb选项。这可能吗?如果是这样,如何? 显然,我可以使用 import ipdb; ipdb.set_trace()在代码中但需要运行测试,观察它
我是一名优秀的程序员,十分优秀!