按在https://stackoverflow.com/a/11311786/890753 @EvanED我創建了一個GDB命令newstr
創建一個新的std :: string,並把它放在一個方便的gdb變量:調用的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
它偉大工程:
(gdb) newstr $foo "hello world"
(gdb) p $foo->c_str()
$57 = 0xb22e388 "hello world"
我在其他自定義gdb命令使用newstr
,所以tidyness我還創建delstr
:
define delstr
call ($arg0)->~basic_string($arg0)
call free($arg0)
set ($arg0)=(void*)0
end
它的工作原理,但析構函數調用產生一個惱人的消息:
(gdb) delstr $foo
warning: Using non-standard conversion to match method std::string::~basic_string to supplied arguments
$62 = 0
我可以避開「非標轉換」的消息? (我正在使用gdb 7.10。)
另外:在'newstr'我用了一個「轉換爲void」招防止GDB從打印返回值的'調用「命令。但'delstr'中的最後一個命令是一個總是打印設置值的'set'。但我不想'delstr'打印任何東西。我還有另一個可以用來避免打印的技巧嗎? –
其實我最喜歡的是「取消」便利變量,但gdb沒有辦法做到這一點 - 是嗎? –