如何从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
相关产品推荐
相关产品推荐

