分析しようとしているクラッシュ ダンプがあります (VC++ 2010)。
次に、次のようなコールスタックがあります (読みやすくするために、ここでは多くの部分を削除しました)。
myapp.exe!std::_Tree<std::_Tmap_traits<unsigned int,StructB,std::less<unsigned int> ... >::_Erase(...)
myapp.exe!std::_Tree<std::_Tmap_traits<unsigned int,StructA,std::less<unsigned int>,... >::clear()
(clear() は _Erase() を呼び出します)
値のテンプレート パラメーターの違いに注意してください (StructA と StructB)。これで、まったく同じバイナリを持つさまざまなメソッドが、実際には異なるコードを使用していても、PDB で同じシンボルを持つことができることがわかりました。ここではこれが当てはまると思います(値の型に関係なく std::map::_Erase は同じです)。
しかし、どうすれば知ることができますか?これが適用される stl メソッド (この MS 実装用) のリストはありますか? ある種のバグである可能性はありますか?
アップデート:
(テキスト エディターで) PDB を調べると、多くの std::map<...>::_Erase が表示されます。具体的には、StructA と StructB の両方で表示されます。折り畳みに意味があるかどうかはわかりません。
さらに、std::map の逆アセンブルされたコードは、std::map として解釈されるアドレスへの呼び出しを示しています。これはコードの折りたたみを意味すると思います...