我有一个正在尝试分析的故障转储(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<...>::_Erase,特别是 StructA 和 StructB。我不知道这是否意味着折叠。
此外,std::map 的反汇编代码显示了对地址的调用,该地址被解释为 std::map。我猜这意味着代码折叠......