2009-12-23 8 views
2

제 개발 환경에서 GNU C++ 3.4.6을 사용하여 코드 기반을 컴파일 중입니다. 코드가 개발 중이며 불행히도 지금은 충돌이 발생합니다. 데 랭글러 (demangler)를 통해 역 추적을 수행하는 것이 좋으며, 나는 C++ filt 3.4를 사용합니다. 문제는 함수에 여러 STL 매개 변수가있는 경우에 발생합니다. 이 기능은 역 추적에있을 때STL 인식 C++ filt

My_callback::operator()(
    Status&, 
    std::set<std::string> const&, 
    std::vector<My_parameter*> const&, 
    My_attribute_set const&, 
    std::vector<My_parameter_base*> const&, 
    std::vector<My_parameter> const&, 
    std::set<std::string> const& 
) 
{ 
    // ... 
} 

을 고려, 내 플랫폼에서 난도질 출력은 다음과 같습니다

(_ZN30My_callbackclER11StatusRKSt3setISsSt4lessISsESaISsEERKSt6vectorIP13My_parameterSaISB_EERK17My_attribute_setRKS9_IP18My_parameter_baseSaISK_EERKS9_ISA_SaISA_EES8_+0x76a) [0x13ffdaa] 

C++ filt을 친절이 동일

(My_callback::operator()(Status&, std::set<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::vector<My_parameter*, std::allocator<My_parameter*> > const&, My_attribute_set const&, std::vector<My_parameter_base*, std::allocator<My_parameter_base*> > const&, std::vector<My_parameter, std::allocator<My_parameter> > const&, std::set<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)+0x76a) [0x13ffdaa] 

에 demangles 템플릿을 사용할 때 컴파일러 오류가 발생했습니다. 그러나 STL은 상당히 규칙적이고 인식 할 수있는 템플릿 패키지입니다. 그래서 내가 바라는 바는 누군가가 원래의 함수 시그니처에 가까운 것을 버리는 C++ filt의 향상된 버전을 만들었다는 것입니다. 어떤 힌트?

+0

질문과 관련이 없지만 매우 끔찍한 기능입니다! 7 가지 매개 변수, 모든 복잡한 유형 - 조금 리팩터링이 지연된 것보다 많습니다. –

+0

Neil, 나는 당신에게 동의하지만, 나는 그 코드의 소유자가 아닙니다. 그냥 내 추적 기록에 나타납니다 (이름은 유죄를 보호하기 위해 변경되었습니다)^( –

답변

7

STLFilt은 STL 관련 진단을 중심으로 장황한 C++ 오류 및 경고 메시지를 단순화 및/또는 다시 포맷합니다. 그 결과 대부분의 숨겨진 진단을 이해할 수 있습니다.

+0

감사합니다, Nikola. 지금 문서를 흡수하려고합니다 ... –