如何在c中打印struct成员的值(带有指向struct的指针)

时间:2017-05-28 20:07:40

标签: c pointers struct

我正在尝试调试程序。有一个函数被称为prv_write()

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中打印bufferprv_write()的值吗?在这个阶段我不太了解结构中的结构。

理想情况下,我想打印所有struct成员的值,以便我可以完全调试系统。

1 个答案:

答案 0 :(得分:2)

打印好,你可以做到:

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函数来查找值,它将轻松打印结构和数组。

相关问题