我想在linux内核的kmalloc函数中添加调试消息。所以我的目标是打印所有调用kmalloc的函数。
我尝试添加
printk(“来电者:%s尺寸:%d”, FUNCTION ,尺寸);
在slab.h中的kmalloc函数中
但是, FUNCTION 的结果是kmalloc本身。我意识到在内联函数之前首先处理MACRO(fyi,kmalloc是内联函数)。
现在,我的问题是,向kmalloc添加调试消息的最简单方法是什么?
先谢谢你们。
答案 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是在头文件中定义的内联函数,您只需在函数上方添加该宏。