2013-05-07 11 views
5

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 ...

+0

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

Odpowiedz

0

Cóż, skończyło się na odbudowie z tworzenia pliku mapy. W pliku mapy widzę, że obie metody (_Erase for StructA i _Erase for StructB) mają ten sam adres. To nie jest błąd.

1

Możesz użyć kodu /OPT:NOICF, aby wyłączyć funkcję składania kodu.

http://msdn.microsoft.com/en-us/library/bxwfs976%28v=vs.80%29.aspx

+0

Dzięki. Czy istnieje sposób na przeprowadzenie postmortem? Lub przynajmniej zmusić kompilator do drukowania, które funkcje złożyły razem/pominęły składanie? – Asaf

+0

@Asaf: Najbardziej zaufana wersja jest zewnętrzna, ponieważ jest to ta, która najprawdopodobniej posiada kod w zależności od prawdziwego typu. W każdym razie znajdź pierwszy symbol, który nie znajduje się w standardowej bibliotece, która, mam nadzieję, nie używa zbyt wielu różnych typów map. –

Powiązane problemy