2017-12-18 32 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

내가 찾은 해결 방법은 표준 : : 문자열 (C++ 기능을 래핑하는 것입니다
+0

함수에 대한 표준 C++ 구문을 사용합니다 : – Serge

+0

'demangle ("aaa" : cxx11] '("d")'작동합니까? –

+0

@MarkPlotnick 예! 이 gdb 마법에 대해 더 자세히 읽을 수있는 곳은 어디입니까? – random

답변

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"