2017-12-18 30 views
0

私は、GDBで次のシグネチャを持つ関数を呼び出す必要があります:GDBでC++関数を呼び出す方法は?

std::string demangle(const char* name); 

私はGDBでそれを呼び出すことができますどのように?ここで

は私がしようとしているものです:、

(gdb) info function demangle* 
std::__cxx11::string demangle[abi:cxx11](char const*); 


(gdb) call demangle[abi:cxx11]("d") 
A syntax error in expression, near `:cxx11]("d")'. 
(gdb) call demangle("d") 
No symbol "demangle" in current context. 

私はG ++ 7.0にしようとしているGDB 8.0

私が見つけた回避策はSTD ::文字列で(C++の関数をラップすることです
+0

関数の標準的なC++構文を使用します: 'p demangle(" aaa ")' – Serge

+0

@Serge 'p demangle(" d ")' '現在のコンテキストでシンボル" demangle "なし。 – random

+0

' call 'demangle [abi :cxx11] '( "d") 'は動作しますか? –

答えて

0

)C関数に:

static std::string tmp_demangle_str; 

const char * cdemangle(const char* name) { 
    tmp_demangle_str = demangle(name); 
    return tmp_demangle_str.c_str(); 
} 

予想通りこの作品:

(gdb) p cdemangle("d") 
$1 = 0x7ffff7dd6070 <tmp_demangle_str+16> "double" 
関連する問題