В моей среде разработки я компилирую кодовую базу, используя GNU C ++ 3.4.6. Код находится в стадии разработки, и, к сожалению, время от времени происходит сбой. Приятно иметь возможность запускать трассировку через деманглер, и я использую C ++ фильтром 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]
с ++ фильт любезно расшифровывает его до
(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 ++ Filter, которая выдает что-то ближе к исходной сигнатуре функции. Есть намеки?