我目前正在通过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
但是,当逐行单步执行代码时,如果next
或step
命令使执行命中断点,则断点优先,执行命令,包括{{1 }}。并且执行继续,无论我做的是逐行调试。如果我尝试跳过具有此断点的函数,也会发生这种情况。
如何在不干扰调试的情况下保持(取消)加载调试符号?
是否有continue
命令的替代方案?也许使用断点不是正确的方法?我会采取任何解决方案。
答案 0 :(得分:2)
这不能从gdb CLI完成。但是,用Python很容易做到。
在Python中,最简单的方法是定义一个自己的gdb.Breakpoint
子类,并在其上定义stop
方法。这个方法可以做你喜欢的工作,然后return False
告诉gdb继续。
stop
工具旨在避免cont
中commands
出现问题。有关详细信息,请参阅the documentation。