在我的開發環境中,我正在使用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的增強版本,它可以轉儲更接近原始函數簽名的東西。任何提示?
不跟你的問題,但這是一個非常可怕的功能!七個參數,所有複雜類型 - 我會說一點重構都超過了逾期。 – 2009-12-23 16:03:59
尼爾,我同意你的看法,但我不是代碼的所有者。它只是在我的回溯中出現(名稱已更改爲保護有罪); ^( – 2009-12-23 16:06:39