GDB 用户定义函数:如何传递复杂参数

gdb user-defined functions: how to pass complex argument?

本文关键字:何传递 复杂 参数 用户 定义 函数 GDB      更新时间:2023-10-16

我想检查几个QString变量,所以我在互联网上找到了宏:

define printqstring
    printf "(QString)0x%x (length=%i): "",&$arg0,$arg0.d->size
    set $i=0
    while $i < ($arg0).d->size
        set $c=$arg0.d->data[$i++]
        if $c < 32 || $c > 127
                printf "\u0x%04x", $c
        else
                printf "%c", (char)$c
        end
    end
    printf ""n"
end

但是当我尝试使用它时,我遇到了这样的错误:

(gdb) printqstring ((MyWidget *)0xd98cb0)->caption_
A syntax error in expression, near `,((MyWidget.d->size'.

如果我尝试手动使用宏中的命令,它们工作正常:

(gdb) printf "(QString)0x%x (length=%i): "",&((MyWidget *)0xd98cb0)->caption_,((MyWidget *)0xd98cb0)->caption_.d->size
(QString)0xd98ccc (length=3)

那么如何将如此复杂的参数传递给 gdb 宏呢?

不幸的是,

gdb 总是在任何空格字符处划分用户定义函数的输入,即使该字符在括号内或类似的东西。

因此,您可以确保在要传递的参数中不使用任何空格:

(gdb) printqstring ((MyWidget*)0xd98cb0)->caption_
                             ^~~ removed space

我不知道有什么好方法可以让这更方便并允许空间。