【发布时间】:2012-07-02 19:40:55
【问题描述】:
我正在尝试调试我的代码中的一些函数。不幸的是,gdb 在系统中不可用,因此目前通过 printk 消息(它是一个 linux 内核驱动程序)进行调试。
有一个带有一些参数的函数被调用。我想知道是否有可能知道谁以及如何调用该函数。
谢谢。
【问题讨论】:
标签: debugging linux-kernel kernel linux-device-driver
我正在尝试调试我的代码中的一些函数。不幸的是,gdb 在系统中不可用,因此目前通过 printk 消息(它是一个 linux 内核驱动程序)进行调试。
有一个带有一些参数的函数被调用。我想知道是否有可能知道谁以及如何调用该函数。
谢谢。
【问题讨论】:
标签: debugging linux-kernel kernel linux-device-driver
您可以启用堆栈转储以查看堆栈和调用跟踪。您可以使用函数 dump_stack() 在默认控制台上打印堆栈和调用跟踪。
看看:
【讨论】:
您还可以通过 Ctags 和 cscope 离线阅读代码。
在vim中使用cscope f c Function_name,你会得到调用跟踪。
在 windows 中,您可以尝试 Source Insight。
【讨论】:
GCC 提供函数__builtin_return_address。__builtin_return_address(0) 应该在调用函数中为您提供调用站点的地址。在/proc/kallsyms 中搜索最接近的值以查找函数。
【讨论】:
在内核代码中调用 dump_stack() 是可行的方法。
【讨论】: