Mam zrzut awaryjny, który próbuję analizować (VC++ 2010).Jakie metody std :: map są identyczne (i mogą udostępniać symbole) niezależnie od parametrów szablonu?
Mam następnie callstack który wygląda tak (mam przycięte dużo tutaj dla czytelności):
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() zwraca _Erase())
Uwaga różnica w parametr szablonu wartości (StructA vs. StructB). Teraz wiem, że różne metody, które mają dokładnie taką samą wartość binarną, mogą mieć taki sam symbol w PDB, nawet jeśli faktycznie używają innego kodu. Zakładam, że tak jest w tym przypadku (std :: map :: _ Erase jest takie samo bez względu na rodzaj wartości).
Ale jak mogę wiedzieć? Czy istnieje lista metod STI (dla tej implementacji MS), dla których ma to zastosowanie? Czy to możliwe, że to jakiś błąd?
Aktualizacja:
Patrząc w WPB (w edytorze tekstu), widzę wiele std :: map < ...> :: _ Erase, a konkretnie widzę je zarówno StructA i StructB. Nie wiem, czy to oznacza coś na temat składania.
Ponadto, zdemontowany kod std :: map pokazuje wywołanie adresu, który jest interpretowany jako std :: map. Domyślam się, że ten sposób składania kodu ...
Może, jeśli otworzysz plik exe/dll za pomocą programu do obsługi zależności, możesz znaleźć wszystkie symbole _Erase i sprawdzić, czy faktycznie są dwa. Nigdy nie próbowałem tego sprawdzać, więc nie mogę powiedzieć z doświadczenia, jeśli będzie to pomocne w tym przypadku. – selalerer