2017-10-07 21 views
0

私は、私はインターネットでこのためのマクロを見つけ 、いくつかのQString変数を調べたい:gdbユーザ定義関数:複雑な引数を渡す方法?

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マクロに渡すことができますか?

+0

関連性がありますhttp://tromey.com/blog/?p=501 –

答えて

2

残念ながら、gdbは、その文字が括弧などの中にあっても、入力を常に任意のスペース文字でユーザー定義関数に分割します。

だからあなたはちょうどあなたがあなたが渡したい引数にスペースを使用していないことを確認することができます

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

私はこれをより便利にするために何か良い方法を知って、スペースを許可していません。

関連する問題