Какие методы std :: map идентичны (и могут совместно использовать символы) независимо от параметров шаблона?

У меня есть аварийный дамп, который я пытаюсь проанализировать (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<…> :: _ Стереть, и конкретно я их вижу как для StructA, так и для StructB. Я не знаю, означает ли это что-нибудь о складывании.

Кроме того, дизассемблированный код std :: map показывает вызов по адресу, который интерпретируется как std :: map.
Я думаю, это означает сворачивание кода …

5

Решение

Ты можешь использовать /OPT:NOICF отключить поведение свертывания кода.

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

1

Другие решения

Ну, я закончил восстановление с созданием файла карты.
В файле карты я вижу, что оба метода (_Erase для StructA и _Erase для StructB) имеют одинаковый адрес.
Так что это не ошибка.

0

По вопросам рекламы [email protected]