2013-05-07 18 views
5

Analiz etmeye çalıştığım bir çökme dökümü var (VC++ 2010).Şablon parametreleri ne olursa olsun hangi std :: harita yöntemleri aynıdır (ve sembolleri paylaşabilir)?

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() 

Not farkı (net()() _Erase çağırır):

Sonra (ı okunabilirlik için burada çok kesilmiş ettik) şöyle bir çağrı yığını var değerin şablon parametresi (StructA vs. StructB). Şimdi, tam olarak aynı ikili olan farklı yöntemlerin aslında farklı bir kod kullanmasına rağmen PDB'de aynı simgeye sahip olabileceğini biliyorum. Burada durumun bu olduğunu varsayalım (std :: map :: _ Erase, değer türü ne olursa olsun aynıdır).

Ama nasıl bilebilirim? Bunun geçerli olduğu stl yöntemlerinin bir listesi var mı (bu MS uygulaması için)? Bu bir çeşit bir hata mıdır?

Güncelleme

: (Bir metin editörü) PDB içine bakıyor

, ben> :: _ ... Sil birçok std :: harita < görmek ve özellikle ben STRUCTA ve StructB ikisi için onları görüyoruz. Katlama hakkında bir şey ifade ederse bilmiyorum. Ayrıca, std :: haritasının demonte kodu std :: map olarak yorumlanan bir adrese yapılan bir çağrıyı gösterir. Bu kod katlamayı kastediyorum ...

+0

Belki de exe/dll'inizi bağımlılık yürüteç ile açacaksanız, tüm _Erase sembollerini bulabilir ve aslında iki tane olup olmadığına bakabilirsiniz. Kendimi hiç kontrol etmeyi denemedim, bu yüzden eğer bu durumda yardımcı olacaksa deneyimden söz edemem. – selalerer

cevap

0

Eh, bir harita dosyası oluşturma ile yeniden inşa sona erdi. Harita dosyasında her iki yöntemin de (_Erase for StructA ve _Erase for StructB) aynı adrese sahip olduğunu görebiliyorum. Yani bir hata değil.

1

Kod katlama davranışını devre dışı bırakmak için /OPT:NOICF'u kullanabilirsiniz.

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

+0

Teşekkürler. Postmortem yapmak için bir yolu var mı? Ya da en azından derleyiciyi birlikte katlanan/birlikte atlanan hangi işlevlerin birlikte yazdırılacağını yazdırmasını sağlayın? – Asaf

+0

@Asaf: En güvenilir sürüm, dışsaldır, çünkü gerçek tipine bağlı olarak büyük olasılıkla kod içeren bir koddur. Herhangi bir hızda, standart kütüphanede olmayan, çok fazla farklı harita türünü kullanmayan ilk sembolü bulun. –

İlgili konular