在我的开发环境中,我使用编译GNU C ++ 3.4.6代码库。法规目前正在制订,现在再不幸崩溃。很高兴能够通过demangler运行回溯,我用c ++ filt的3.4。问题是当函数有一些STL参数。考虑

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的增强版本,这将倾倒的东西更接近原始函数签名。任何提示?

有帮助吗?

解决方案

STLFilt 简化和/或重新格式化冗长C ++错误和警告消息,以专注于STL相关的诊断。结果使许多即使是最隐蔽诊断理解。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top