我怎么知道调用函数的位置?

时间:2012-07-02 11:36:40

标签: debugging linux-kernel kernel linux-device-driver

我正在尝试调试代码中的一些函数。不幸的是,gdb在系统中不可用,所以目前通过printk消息(它是一个Linux内核驱动程序)完成调试。

使用某些参数调用函数。我想知道是否可以知道该功能的使用者和方式。

感谢。

4 个答案:

答案 0 :(得分:5)

您可以启用堆栈转储以查看堆栈和调用跟踪。您可以使用函数dump_stack()在默认控制台上打印堆栈和调用跟踪。

看看:

答案 1 :(得分:1)

您还可以通过Ctags和cscope离线阅读代码。

在vim中使用cscope f c Function_name,您将获得呼叫追踪。

在Windows中,您可以尝试使用Source Insight。

答案 2 :(得分:1)

GCC提供__builtin_return_address功能 __builtin_return_address(0)应该在调用函数中为您提供呼叫站点的地址。在/proc/kallsyms中搜索最近的值以查找函数。

答案 3 :(得分:1)

在内核代码中调用dump_stack()是可行的方法。