[英]How do I print a pointer address without materializing the struct in LLDB
[英]How do I print all the fieldnames of a struct
如何打印结构的所有字段名,这些结构的子结构中也包含逗号分隔的子结构?
typedef struct logTimestamp_s{
unsigned short lower;
unsigned short tsLow;
unsigned int tsHigh;
} logTimestamp;
typedef struct logHeader_s{
unsigned short length;
unsigned short code;
logTimestamp ts;
} logHeader;
typedef struct __attribute__ ((__packed__)){
logHeader hdr; //12
unsigned int res1; //16 unknown 4 bytes.
unsigned char id; //17 /* sub packet id */
unsigned char ver; //18 /* sub packet version */
unsigned short size; //20 /* sub packet size */
unsigned int res2; //24 unknown 4 bytes.
}log11AB;
对于ex,我正在寻找一种获取打印输出的方法,例如:
"length, code, lower, tsLow, tsHigh, res1, id, ver, size, res2"
谢谢!
恐怕您无法在简单的C程序中做到这一点。 字段名称在运行时不可用-只有编译器可以看到这些名称。 如果您不需要在运行时执行此操作,则可以考虑使用类似libclang
来解析源并提取所需的信息。
另一种选择是使用预处理器宏来创建您的结构,从而提供打印/反射的可能性。 以下SO答案提供了概念证明 。
首先,不要嘲笑我的建议,但是我确实做到了。
您仅需在调试时打印该结构,调试器即可获得所有信息。 通常,该结构以树视图的形式显示:根目录没有数据,要查看成员的数据,请展开根目录。 由于我懒得将它们全部展开(不停滚动查看它们),因此,我抓住每个成员的值并将它们(以逗号分隔)汇总为根的数据(非常宽的视图)。
当然,您没有喜欢的调试器的源代码! (我为ollydbg编写了我的非常原始的插件)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.