将MACRO __FUNCTION__与内联函数一起使用

时间:2011-01-04 06:33:06

标签: linux-kernel

我想在linux内核的kmalloc函数中添加调试消息。所以我的目标是打印所有调用kmalloc的函数。

我尝试添加

printk(“来电者:%s尺寸:%d”, FUNCTION ,尺寸);

在slab.h中的kmalloc函数中

但是, FUNCTION 的结果是kmalloc本身。我意识到在内联函数之前首先处理MACRO(fyi,kmalloc是内联函数)。

现在,我的问题是,向kmalloc添加调试消息的最简单方法是什么?

先谢谢你们。

2 个答案:

答案 0 :(得分:2)

printk("%pS\n", __builtin_return_address(1)); /* or was it (0)? don't remember */

前提是您在编译期间不使用-fomit-frame-pointer。如果结果不起作用,您仍然可以使用dump_stack()

答案 1 :(得分:0)

前段时间我正在研究Linux内核,我想做类似的事情,但是对于不同的功能。我最终做的是将 FUNCTION 重命名为 __ FUNCTION 并为其添加一个额外的char *参数,然后通过名称FUNCTION添加一个宏,如下例所示:

#define FUNCTION(i)  __FUNCTION(i,__FUNCTION__)

void __FUNCTION(int arg, char *func)
{
    printk("%s\n", func);
    //do what ever FUNCTION does
}

需要在适当的头文件中定义宏,以便使用FUNCTION()将其包含在所有源文件中。所有对FUNCTION的调用将被__FUNCTION替换并打印调用者。但是,在您的情况下,kmalloc是在头文件中定义的内联函数,您只需在函数上方添加该宏。