내가 분석하려고하는 크래시 덤프가 있습니다 (VC++ 2010).템플릿 매개 변수에 관계없이 어떤 std :: map 메서드가 동일하고 기호를 공유 할 수 있습니까?
이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()
참고의 차이 (지우기()() _erase를 호출) :
그때 (내가 가독성 여기를 많이 손질 한) 같이 보이는 호출 스택을 값의 템플리트 매개 변수 (StructA 대 StructB). 이제 정확히 동일한 바이너리를 가진 여러 가지 메소드가 실제로 다른 코드를 사용하더라도 PDB에서 동일한 심볼을 가질 수 있다는 것을 알고 있습니다. 이 경우가 여기에 해당한다고 가정합니다 (std :: map :: _ Erase는 값 유형과 상관없이 동일합니다).
하지만 어떻게 알 수 있습니까? 이것이 적용되는 stl 메소드 (이 MS 구현의 경우) 목록이 있습니까? 그것은 일종의 버그 일 수 있습니까?
업데이트
(텍스트 편집기)를 PDB에 찾고, 나는> :: _ ... 지우기를 여러 표준 : :지도 <를 참조하십시오 특히 나는 StructA 및 StructB 모두를 참조하십시오. 나는 그것이 접는 것에 대해 어떤 의미인지 모른다.
또한 std :: map의 디스 어셈블 된 코드는 std :: map으로 해석되는 주소에 대한 호출을 보여줍니다. 이 평균 코드 접기 같아요 ...
아마도 당신이 exe/dll을 의존성 워커와 함께 열면 모든 _Erase 심볼을 찾아 실제로 두 개 있는지 확인할 수 있습니다. 나는 이것을 직접 확인하려하지 않으므로이 경우에 도움이된다면 경험으로 말할 수는 없다. – selalerer