Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

C/C++本地代码调试

帖子发起人: qiliu3   发起时间: 2014-03-27 16:53 下午   回复: 3

Print Search
帖子排序:    
   2014-03-27, 16:53 下午
qiliu3 离线,最后访问时间: 2014/6/10 2:03:42 qiliu3

发帖数前75位
注册: 2014-02-14
发 贴: 16
请教一下,!std_map怎么用?
Reply Quote
写了一个最简单的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应该怎么用?
谢谢!

IP 地址: 已记录   报告
   2014-03-30, 18:16 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 请教一下,!std_map怎么用?
Reply Quote
使用下面这段代码和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



IP 地址: 已记录   报告
   2014-03-31, 09:35 上午
qiliu3 离线,最后访问时间: 2014/6/10 2:03:42 qiliu3

发帖数前75位
注册: 2014-02-14
发 贴: 16
Re: 请教一下,!std_map怎么用?
Reply Quote
我从http://www.windbg.org/上面,x86的windbg只能下载到6.2.9200.16384版本啊
IP 地址: 已记录   报告
   2014-04-09, 17:13 下午
qiliu3 离线,最后访问时间: 2014/6/10 2:03:42 qiliu3

发帖数前75位
注册: 2014-02-14
发 贴: 16
Re: 请教一下,!std_map怎么用?
Reply Quote
修改了一下,把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

IP 地址: 已记录   报告
高端调试 » 软件调试 » C/C++本地代码调试 » Re: 请教一下,!std_map怎么用?

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.