You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从C++ Windows程序符号中获取类/结构体列表及大小?

从Windbg转储中枚举类/结构体并计算大小的方法

方法1:用x命令枚举类/结构体名称

通过Windbg的x命令结合通配符,可枚举目标模块内的类/结构体:

  • 枚举指定模块(如MyApp.exe)的所有带作用域的符号(包含类/结构体):
    x MyApp.exe!*::*
    
  • 筛选仅保留类/结构体:借助管道和findstr过滤结果(需确保符号已完整加载):
    x MyApp.exe!*::* | findstr /i "class struct"
    

方法2:用dt命令直接枚举类型并查看大小

dt命令可批量列出模块内的类型信息,直接包含大小字段:

  • 枚举模块所有类型并显示大小:
    dt -v MyApp.exe!*
    
  • 过滤特定大小的类型:如果已知堆统计的目标大小,可直接筛选,比如找大小为0x100的类型:
    dt -v MyApp.exe!* | findstr /i "Size: 0x100"
    

方法3:手动计算特定类的大小

拿到类的完整名称(含命名空间)后,用?? sizeof()命令计算:

?? sizeof(MyApp::MyClass)

关键注意点

  • 必须加载完整匹配的.pdb符号文件,否则无法枚举到完整的类/结构体信息。
  • 模板类的符号名带有模板参数(如MyApp::MyTemplate<int>),需完整输入才能正确计算大小。
  • 第三方库的类/结构体,若无对应符号则无法枚举或计算。

内容的提问来源于stack exchange,提问作者YNWA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 17:47:03