在 Linux 内核中,有没有一种方法可以获取函数的调用者?我知道__func__返回正在执行的函数名称。我正在寻找调用"__func__"的函数。
在 Linux 内核中,有没有一种方法可以获取函数的调用者?我知道__func__返回正在执行的函数名称。我正在寻找调用"__func__"的函数。
__builtin_return_address(0)
获取调用者。__builtin_return_address(1)
,以此类推。%pS
打印它,例如:printk("Caller is %pS\n", __builtin_return_address(0));
如果您不想打印它,可以使用kallsyms_lookup()
等。
你还可以通过调用dump_stack()函数打印整个调用堆栈的内容。
是否需要框架指针取决于架构,如果我没记错的话。对于x86,它们肯定是要利用这些特性的。还要注意,内联可能会因为这个原因而扭曲 builtin_return_address
的准确性。
如果你只想要一个堆栈转储来查看如何到达某个位置,最好使用 dump_stack()
函数,而不是尝试与 builtin_return_address
进行操作。