我有一个正在尝试分析的故障转储 (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)。 现在,我知 Prop 有完全相同二进制文件的不同方法在 PDB 中可以具有相同的符号,即使它们实际上使用不同的代码也是如此。 我假设这里就是这种情况(无论值类型如何,std::map::_Erase 都是相同的)。
但是我怎么知道呢?是否有适用的 STL 方法列表(针对此 MS 实现)? 这可能是某种错误吗?
更新:
查看 PDB(在文本编辑器中),我看到许多 std::map<...>::_Erase,特别是 StructA 和 StructB。我不知道折叠是否意味着什么。
此外,std::map 的反汇编代码显示了对解释为 std::map 的地址的调用。 我猜这意味着代码折叠......
最佳答案
您可以使用/OPT:NOICF
来禁用代码折叠行为。
http://msdn.microsoft.com/en-us/library/bxwfs976%28v=vs.80%29.aspx
关于c++ - 无论模板参数如何,哪些 std::map 方法是相同的(并且可能共享符号)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16427124/