gdb:不干扰“下一步”或“步骤”的“继续”

Posted

技术标签:

【中文标题】gdb:不干扰“下一步”或“步骤”的“继续”【英文标题】:gdb: A "continue" that doesn't interfer with "next" or "step" 【发布时间】:2015-10-13 02:44:17 【问题描述】:

我目前正在通过 qemu 的 gdb 存根调试 syslinux(一个引导加载程序)。

最近,我编写了一些 gdb 命令,每次动态(卸载)加载模块时(卸载)加载调试符号。为了不中断执行,我以continue结束了命令。

打破 com32/lib/sys/module/elf_module.c:282 命令 沉默的 Python name = gdb.parse_and_eval("module->name").string() addr = int(str(gdb.parse_and_eval("module->base_addr")), 0) gdb.execute("load-syslinux-module %s 0x%08x" % (name, addr)) 结尾 继续 结尾

但是,在逐行单步执行代码时,如果nextstep 命令使执行命中断点,则断点优先,命令被执行,包括continue。并且无论我进行的逐行调试如何,执行都会继续进行。如果我尝试跳过具有此断点的函数,也会发生这种情况。

如何在不干扰调试的情况下保持(卸载)动态加载调试符号?

continue 命令有替代方法吗?也许使用断点不是正确的方法?我会采取任何解决方案。

【问题讨论】:

【参考方案1】:

这不能通过 gdb CLI 完成。但是,使用 Python 很容易做到。

在Python中最简单的方法是定义自己的gdb.Breakpoint子类,并在其上定义stop方法。这个方法可以做你喜欢的工作,然后return False告诉gdb继续。

stop 工具旨在避免commands 中的cont 问题。详情请见the documentation。

【讨论】:

我可以用gdb.Breakpoint类做一个硬件断点吗?我没有看到任何选择。事实证明,软件断点并不总是有效。

以上是关于gdb:不干扰“下一步”或“步骤”的“继续”的主要内容,如果未能解决你的问题,请参考以下文章

xftp6 安装时用户名报错

使用 JavaScript 多步骤表单进行联系表单验证

Oracle数据库的安装步骤

Oracle安装详解

如何在不完成 Bootstrap 中的一个步骤的情况下禁用进入下一步?

基于VMware上的CentOS7安装