我正在使用.gdbinit文件,该文件应该在每个hook_stop处打印所有寄存器的值,然后打印堆栈和数据帧。但是,当运行许多程序时,通常会有不可用的段寄存器,这引起了我的问题。脚本遇到此类寄存器时将中止。我收到错误消息:Error while running hook_stop: value is not available。由于该错误,没有打印其余的段寄存器,也没有打印堆栈和数据帧。

我想知道是否有一种方法可以处理gdb脚本语言中的错误,或者更好的是,仅测试寄存器是否可用,如果有则仅打印它。我已经尝试过:

if $ds
    printf " %04X  ", $ds
else
    printf " ----  "
end


但这仍然给我错误。我通读了几个小时的文档,找不到任何有效的方法。有什么想法吗?

#1 楼

我知道了。您可以通过python进行检查来确定一个值是否可用:
将其保存在python文件中并在您的.gdbinit中提供它: />
class IsValid (gdb.Function):
    def __init__ (self):
        super (IsValid, self).__init__("isvalid")

    def invoke (self, var):
        if var.__str__() == "<unavailable>":
            return 0
        else:
            return 1

IsValid ()