سؤال

في بيئة التطوير الخاصة بي ، أقوم بتجميع قاعدة رمز باستخدام 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&
)
{
   // ...
}

عندما تكون هذه الوظيفة في Traceback ، فإن الإخراج المشوهة على النظام الأساسي هو:

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

هذه هي نفس المشكلة التي واجهتها أخطاء البرمجيات عند استخدام القوالب. ومع ذلك ، فإن STL عبارة عن حزمة منتظمة إلى حد ما ويمكن التعرف عليها من القوالب. لذا فإن ما آمل أن يكون هناك شخص ما قد أنشأ نسخة محسّنة من C ++ Filt والتي من شأنها أن تتخلص من شيء أقرب إلى توقيع الوظيفة الأصلية. أي تلميحات؟

هل كانت مفيدة؟

المحلول

stlfilt يبسط و/أو إعادة تهيئة خطأ C ++ منذ فترة طويلة ورسائل تحذير ، مع التركيز على التشخيصات المتعلقة بـ STL. تجعل النتيجة العديد من التشخيصات الأكثر تشجيعًا مفهومة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top