2

私の開発環境では、GNU C++ 3.4.6 を使用してコード ベースをコンパイルしています。コードは開発中であり、残念ながら時々クラッシュします。デマングラーを介してトレースバックを実行できるのは素晴らしいことです。私は 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 は親切にデマングルします

(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 の拡張バージョンを作成したことです。ヒントはありますか?

4

1 に答える 1

7

STLFiltは、STL 関連の診断に重点を置いて、長々とした C++ エラーおよび警告メッセージを簡素化および/または再フォーマットします。その結果、最も難解な診断の多くでさえ理解できるようになります。

于 2009-12-23T16:01:11.153 に答える