我正在尝试调试我的代码中的一些函数。不幸的是,gdb 在系统中不可用,因此目前通过 printk 消息(它是一个 linux 内核驱动程序)完成了调试。
有一个带有一些参数的函数被调用。我想知道是否有可能知道谁以及如何调用该函数。
谢谢。
我正在尝试调试我的代码中的一些函数。不幸的是,gdb 在系统中不可用,因此目前通过 printk 消息(它是一个 linux 内核驱动程序)完成了调试。
有一个带有一些参数的函数被调用。我想知道是否有可能知道谁以及如何调用该函数。
谢谢。
您可以启用堆栈转储以查看堆栈和调用跟踪。您可以使用函数 dump_stack() 在默认控制台上打印堆栈和调用跟踪。
看一下 :
您还可以通过 Ctags 和 cscope 离线阅读代码。
在 vim 中使用 cscope fc Function_name,你会得到调用跟踪。
在 Windows 中,您可以尝试 Source Insight。
GCC 提供了函数__builtin_return_address
。
__builtin_return_address(0)
应该在调用函数中为您提供调用站点的地址。搜索最接近的值/proc/kallsyms
以找到函数。
在内核代码中调用 dump_stack() 是可行的方法。