Ich habe einen Absturz-Dump, den ich analysieren möchte (VC++ 2010).Welche std :: map-Methoden sind unabhängig von Template-Parametern identisch (und können Symbole gemeinsam nutzen)?
Ich habe dann eine Aufrufliste, die so aussieht (ich habe hier viel zur besseren Lesbarkeit getrimmt):
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() ruft _Erase())
Beachten Sie den Unterschied in der Template-Parameter des Wertes (StructA vs. StructB). Nun, ich weiß, dass verschiedene Methoden, die genau die gleiche binäre haben können das gleiche Symbol in der PDB, obwohl sie tatsächlich anderen Code verwenden. Ich nehme an, das ist hier der Fall (std :: map :: _ Erase ist gleich, unabhängig vom Werttyp).
Aber wie kann ich das wissen? Gibt es eine Liste von STL-Methoden (für diese MS-Implementierung), für die dies gilt? Ist es möglich, dass es sich um einen Fehler handelt?
Update:
in den PDB Blick (in einem Texteditor), sehe ich viele std :: map < ...> :: _ Erase und speziell für sie beide STRUCTA und StructB ich sehe. Ich weiß nicht, ob das etwas mit der Faltung zu tun hat.
Darüber hinaus zeigt der disassemblierte Code von std :: map einen Aufruf an eine Adresse, die als std :: map interpretiert wird. Ich denke, dass diese mittlere Code-Faltung ...
Vielleicht, wenn Sie Ihre exe/dll mit Abhängigkeit Walker öffnen werden Sie alle _Erase Symbole finden und sehen, ob es tatsächlich zwei sind. Ich habe nie versucht, es selbst zu überprüfen, daher kann ich aus Erfahrung nicht sagen, ob dies in diesem Fall hilfreich ist. – selalerer