[英]How to print the value of struct members in c (with a pointer to a struct)
我正在尝试调试程序。 有一个函数叫做prv_write()
static uint8_t prv_write(uint16_t instanceId,
int numData,
lwm2m_data_t * dataArray,
lwm2m_object_t * objectP)
正在传递此函数(第3个参数)指向结构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;
};
有人可以解释我如何在函数prv_write()
打印length
和buffer
的值吗? 在这个阶段,我还不太了解struct内部的结构。
理想情况下,我想打印所有struct成员的值,以便可以完全调试系统。
很好地打印它,您只需执行以下操作:
for (int i=0; i<dataArray->value.asbuffer.length; ++i)
printf("%d ", dataArray->value.asBuffer.buffer[i]);
printf("\n");
如果需要在代码的多个位置执行此操作,则可以为此创建一个宏:
#define SHOW_LWM2M_DATA(DA) do { \
for (int i=0; i< (DA)->value.asbuffer.length; ++i) \
printf("%d", (DA)->value.asBuffer.buffer[i]); \
printf("\n"); } while (0)
( do { } while(0)
仅用于使宏的行为像普通函数一样)
并随着代码的发展在很多地方使用该宏:
pipSHOW_LWM2M_DATA(dataArray);
但是,如果您想对代码的这一部分进行内省,我的建议是使用gdb
(或lldb
),并使用其print
功能设置观察点或断点来查找值,它将轻松打印结构和数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.