【问题标题】:how to disable all breakpoints at once in DDD debugger (pydb mode)如何在 DDD 调试器中一次禁用所有断点(pydb 模式)
【发布时间】:2016-08-19 14:14:52
【问题描述】:

使用 gdb,我们可以禁用断点,如 ftp://ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_32.html 中所述。在文档上,要禁用所有断点,它说只提供disalbe 而没有断点列表。但在我的 ddd(data-display-debuger) 中,它不起作用。我该怎么做?或者我如何指定范围? (我试过 1-10 还是不行)。

编辑:我使用 DDD 使用命令ddd -pydb prog.py arg1 arg2.. 进行 python 调试,所以它实际上是 pydb 命令,而不是 gdb 命令。答案见cmets,后来发现对于pydb来说,不带任何参数的命令delete会删除所有的断点。要禁用所有断点,您必须修改 gdb.py 并查看下面的 cmets。

【问题讨论】:

  • 我看到disable 1 2 3 4 5 6 7 8 9 有效。
  • 它适用于我(ddd 3.3.12,gdb 7.7.1)。你运行的是什么版本?
  • GNU DDD 3.3.12 (x86_64-redhat-linux-gnu) 和 GNU gdb (GDB) Red Hat Enterprise Linux (7.2-83.el6)。可能是 GDB 版本差异?
  • 我看看我有没有这些版本。如果你再次输入info b,然后是disable,然后是info b,输出有什么不同吗?在Enb 列中甚至没有一个断点有n
  • 哦。你没有使用 gdb,你使用的是 pydb。 pydb 的命令集受到 gdb 的启发,但它们并不相同。但是 pydb 很容易修改,因为它附带了所有的源代码,都是用 python 编写的。在gdb.py 中查找do_disable 并将self.errmsg('No breakpoint number given.') 更改为for bp in bdb.Breakpoint.bpbynumber: bp.disable()

标签: debugging gdb breakpoints ddd-debugger


【解决方案1】:

pydb 支持的命令与 gdb 中的命令类似,但并不完全相同。目前,如果没有给出参数,pydb 的 disable 命令会报错。您可以编辑 pydb 的源代码(在许多系统上可以在 /usr/share/pyshared/pydb/ 中找到)并更改 do_disable(在 gdb.py 中)以便如果没有给 disable 的参数提供,它将禁用所有断点:

*** gdb.py.orig 2009-11-17 17:00:21.000000000 -0800
--- gdb.py  2016-08-20 17:12:09.561338798 -0700
***************
*** 1067,1069 ****
          if len(args) == 0:
!             self.errmsg('No breakpoint number given.')
              return
--- 1067,1071 ----
          if len(args) == 0:
!             for bp in bdb.Breakpoint.bpbynumber:
!                 if bp:
!                     bp.disable()
              return

【讨论】:

  • 谢谢,我现在用起来很方便.. :)
猜你喜欢
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
  • 2015-04-10
相关资源
最近更新 更多