Re: 请教一下,!std_map怎么用?
C/C++本地代码调试
请教一下,!std_map怎么用?
qiliu3
2014-03-27, 16:53 下午
写了一个最简单的map代码:
std::map<int, int> my;
my.insert(std::map<int, int>::value_type(1, 1));
运行程序,然后windbg attach上去,查找map变量my的地址
0:000:x86>
? my
Evaluate expression: 4386100 = 0042ed34
运行
0:000:x86>
!std_map
0042ed34 MFCTest!std::map<int,int>
提示:
ReadMemory error for address ffffffffccccccd0
std::map @ 000000000042ed34 - empty
怎么回事?!std_map应该怎么用?
谢谢!
Re: 请教一下,!std_map怎么用?
格蠹老雷
2014-03-30, 18:16 下午
使用下面这段代码和WinDBG 6.3.9600.16384 X86,工作的很好
#include "stdafx.h"
#include <iostream>
#include <list>
#include <map>
using namespace std;
int main(int argc, char* argv[])
{
std::list<std::string> test;
std::map<int, int> intmap;
intmap.insert(std::map<int, int>::value_type(1, 100));
intmap.insert(std::map<int, int>::value_type(2, 200));
intmap.insert(std::map<int, int>::value_type(3, 300));
test.back();
printf("Hello World!\n");
return 0;
}
0:000> ? intmap
Evaluate expression: 1638176 = 0018ff20
0:000> !std_map 0x0018ff20 int
std::map @ 0018ff20 - size 00000003
using type "int"
00000000 - 00441480 (00441520,00441430,00441520)
0n1
00000001 - 00441430 (00441480,004414d0,004413e0)
0n2
00000002 - 004413e0 (00441520,00441430,00441520)
0n3
0:000> dt intmap -r
Local var @ 0x18ff20 Type std::map<int,int,std::less<int>,std::allocator<int> >
+0x000 _Tr : std::_Tree<int,std::pair<int const ,int>,std::map<int,int,std::less<int>,std::allocator<int> >::_Kfn,std::less<int>,std::allocator<int> >
=00436e14 _Nil : 0x00441520 std::_Tree<int,std::pair<int const ,int>,std::map<int,int,std::less<int>,std::allocator<int> >::_Kfn,std::less<int>,std::allocator<int> >::_Node
+0x000 _Left : (null)
+0x004 _Parent : (null)
+0x008 _Right : (null)
+0x00c _Value : std::pair<int const ,int>
+0x014 _Color : 1 ( _Black )
=00436e18 _Nilrefs : 1
+0x000 allocator : std::allocator<int>
+0x001 key_compare : std::less<int>
+0x004 _Head : 0x004414d0 std::_Tree<int,std::pair<int const ,int>,std::map<int,int,std::less<int>,std::allocator<int> >::_Kfn,std::less<int>,std::allocator<int> >::_Node
+0x000 _Left : 0x00441480 std::_Tree<int,std::pair<int const ,int>,std::map<int,int,std::less<int>,std::allocator<int> >::_Kfn,std::less<int>,std::allocator<int> >::_Node
+0x004 _Parent : 0x00441430 std::_Tree<int,std::pair<int const ,int>,std::map<int,int,std::less<int>,std::allocator<int> >::_Kfn,std::less<int>,std::allocator<int> >::_Node
+0x008 _Right : 0x004413e0 std::_Tree<int,std::pair<int const ,int>,std::map<int,int,std::less<int>,std::allocator<int> >::_Kfn,std::less<int>,std::allocator<int> >::_Node
+0x00c _Value : std::pair<int const ,int>
+0x014 _Color : 0 ( _Red )
+0x008 _Multi : 0 ''
+0x00c _Size : 3
Re: 请教一下,!std_map怎么用?
qiliu3
2014-03-31, 09:35 上午
我从http://www.windbg.org/上面,x86的windbg只能下载到6.2.9200.16384版本啊
Re: 请教一下,!std_map怎么用?
qiliu3
2014-04-09, 17:13 下午
修改了一下,把
my.insert(std::map<int, int>::value_type(1, 1));改为
my.insert(std::pair<int, int>(1, 1));
然后就可以用!std_map显示了,显示结果如下:
my.insert(std::pair<int, int>(1, 1));
my.insert(std::pair<int, int>(2, 2));
my.insert(std::pair<int, int>(3, 3));
0:000> !std_map 003af678 "MFCTest!std::pair<int,int>" 8
std::map @ 003af678 - size 00000000
using type "MFCTest!std::pair<int,int>" of size 8
00000000 - 0029c6d8 (0029c6b8,0029c6f8,0029c6b8)
+0x000 first : 0n1
+0x004 second : 0n1
00000001 - 0029c6f8 (0029c6d8,0029c6b8,0029c718)
+0x000 first : 0n2
+0x004 second : 0n2
00000002 - 0029c718 (0029c6b8,0029c6f8,0029c6b8)
+0x000 first : 0n3
+0x004 second : 0n3