如何打印以筛选结构及其所有内容?

时间:2013-01-28 21:58:41

标签: c++ c debugging linux-kernel printk

我想在c / c++中找到一个宏,它将struct typedef和一个指向struct的指针作为输入,并打印出所有内容:

假设我有一个名为struct account的结构。

struct account {
   int account_number;
   char *first_name;
   char *last_name;
   float balance;
};

我用这种方式:

struct account my_account= {    
    .account_number = 321321,
    .first_name = 0x12345678,
    .last_name = 0,
    .balance = 222 };

我想要一个linux kernel / c lanaguge中的宏看起来像这样:

PRINT_STRUCT_CONTENT(struct_type, pointer)

并打印以下内容:

my_account= {
account_number = 321321,
first_name = 0x12345678,
last_name = 0,
balance = 222
}

我的想法是在内核中使用dir python函数


Write a Macro to stringify the contents of a struct

Your most general C macro for printing variable values in different types

Is there a C preprocessor macro to print out a struct?

Writing a while loop in the C preprocessor

2 个答案:

答案 0 :(得分:2)

您可以使用print_hex_dumpprint_hex_dump_bytes
示例:

struct mystruct *p;
print_hex_dump_bytes("mystruct: ", DUMP_PREFIX_ADDRESS, p, sizeof(*p));

答案 1 :(得分:1)

您可能需要查看kernel trace event API。它比简单的printk稍微复杂一点,但它可以动态切换并进行一些prett(-ier)打印。而且开销很低。