缘起
目前在项目中做功能时,发现一个结构体异常的大,不到30k,我想找到这个结构中的那个元素比较占用空间,于是想起gdb可以出场了,但是没有按照预期的过程进行,听我慢慢道来。
需求
存在如下结构体
struct A{
int a;
int b;
int c;
};
在gdb中输出如下比较好,可能想的比较简单
struct A
a 的大小
b 的大小
c 的大小
初步测试
我使用gdb跟踪进程,发现能打印只有结构成员的,这个可以参考下这里,也可查看这里,可以有个初步的认识,之前也用过但是没有这方面的思考,但是这些不满足我的需求。
之前也有过参考offset的经验,按照需求,我可以写一些方法或脚本把这些现成员现实出来,比如使用0地址+类型转换。
探索
稍加思考下,编写脚本应该不通用,毕竟成员需要自己写,目前我需要的是一个输出格式的,原始数据在gdb中可定知道,所以我查看了下网上,找到一个解决方案,比较满意。
方案
编写py脚本
import gd

本文讲述了在项目中遇到结构体过大问题,通过gdb来查找占用空间的成员。文章详细介绍了需求、初步测试、探索过程,以及最终采用编写Python脚本和修改gdb配置文件的解决方案,实现结构体成员的偏移量显示,并提醒读者该方法适用于gdb7.2及以上版本。
333

被折叠的 条评论
为什么被折叠?



