1
我正在尝试调试一个程序。有一种被称为prv_write()
如何在c中打印struct成员的值(用指向结构的指针)
static uint8_t prv_write(uint16_t instanceId,
int numData,
lwm2m_data_t * dataArray,
lwm2m_object_t * objectP)
此功能被传递(第三个参数)的指针,结构lwm2m_data_t
其定义为函数:
typedef struct _lwm2m_data_t lwm2m_data_t;
struct _lwm2m_data_t
{
lwm2m_data_type_t type;
uint16_t id;
union
{
bool asBoolean;
int64_t asInteger;
double asFloat;
struct
{
size_t length;
uint8_t * buffer;
} asBuffer;
struct
{
size_t count;
lwm2m_data_t * array;
} asChildren;
struct
{
uint16_t objectId;
uint16_t objectInstanceId;
} asObjLink;
} value;
};
有人能解释我怎么能打印值length
和buffer
里面的函数prv_write()
?在这个阶段,我不是很了解结构内部的结构。
理想情况下,我想打印所有结构成员的值,以便我可以完全调试系统。
•为什么使用宏而不是函数? •缺少正确的“类型”检查。 •宏参数必须括在括号内。 •'%d'后应该有一个空格。 –
→OP明确表示他想调试/内省一些代码,所以作为一个丢弃工具,一个宏将填补这项工作。但我同意一个功能很好地填补了这项工作。 →其余的,谢谢它是固定的。 – zmo
您只修复了我提到的三件事之一,因此在调用具有错误类型的数据对象时,代码仍会调用未定义的行为。 –