newstr
を作成したとして
:呼び出しのstd ::〜GDBでのbasic_string()
define newstr
set ($arg0)=(std::string*)malloc(sizeof(std::string))
call ($arg0)->basic_string()
# 'assign' returns *this; casting return to void avoids printing of the struct.
call (void)(($arg0)->assign($arg1))
end
それを素晴らしい作品:
define delstr
call ($arg0)->~basic_string($arg0)
call free($arg0)
set ($arg0)=(void*)0
end
:tidynessのために私も
delstr
を作成したので
(gdb) newstr $foo "hello world"
(gdb) p $foo->c_str()
$57 = 0xb22e388 "hello world"
は、私は、他のカスタムGDBコマンドでnewstr
を使用
それは動作しますが、デストラクタの呼び出しは、迷惑なメッセージが生成します。
(gdb) delstr $foo
warning: Using non-standard conversion to match method std::string::~basic_string to supplied arguments
$62 = 0
は、私が「非標準変換」メッセージを回避することはできますか? (私はgdb 7.10を使用しています)
:私はGDBに対してテストする場合は、このプログラムを使用し、私はからの戻り値を印刷からGDBを防ぐためにトリックを「voidにキャスト」使用newstr' 'で'コール 'コマンド。しかし、 'delstr'の最後のコマンドは' set'です。これは常に設定された値を出力します。しかし、私は 'delstr'が何かを印刷するのを望んでいません。そのプリントを避けるために使うことができる別のトリックがありますか? –
実際、私は_really_好きなのは便利変数を "設定解除"することですが、gdbはそれを行う方法がありません - そうですか? –