gdb:不干扰 "next" 或 "step" 的 "continue"

gdb: A "continue" that doesn't interfer with "next" or "step"

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

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

结束命令
break com32/lib/sys/module/elf_module.c:282
commands
    silent
    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))
    end
    continue
end

但是,逐行单步执行代码时,如果nextstep命令让执行遇到了断点,则断点优先,执行命令,包括continue。无论我进行了逐行调试,执行都会继续。如果我尝试跨过具有此断点的函数,也会发生这种情况。

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

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

这无法通过 gdb CLI 完成。但是,从 Python.

开始很容易做到

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

stop 工具旨在避免 commandscont 的问题。有关详细信息,请参阅 the documentation