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

时间:2015-10-13 02:44:18

标签: gdb breakpoints

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

最近,我写了一些gdb命令,每次动态(un)加载模块时(un)加载调试符号。为了不中断执行,我用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命令使执行命中断点,则断点优先,执行命令,包括{{1 }}。并且执行继续,无论我做的是逐行调试。如果我尝试跳过具有此断点的函数,也会发生这种情况。

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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