2009-12-23 45 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的親切它demangles到

(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] 

這是相同的問題在於使用模板時遇到編譯器錯誤。但是,STL是一個相當規範和可識別的模板包。所以我希望有人在那裏創建了一個C++ filt的增強版本,它可以轉儲更接近原始函數簽名的東西。任何提示?

+0

不跟你的問題,但這是一個非常可怕的功能!七個參數,所有複雜類型 - 我會說一點重構都超過了逾期。 – 2009-12-23 16:03:59

+0

尼爾,我同意你的看法,但我不是代碼的所有者。它只是在我的回溯中出現(名稱已更改爲保護有罪); ^( – 2009-12-23 16:06:39

回答

7

STLFilt簡化和/或重新格式化冗長的C++錯誤和警告消息,重點關注與STL相關的診斷。結果使得許多甚至是最隱祕的診斷都可以理解。

+0

謝謝,尼古拉,我現在試圖吸收文檔... – 2009-12-23 16:32:02