1

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

有一个带有一些参数的函数被调用。我想知道是否有可能知道谁以及如何调用该函数。

谢谢。

4

4 回答 4

5

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

看一下 :

于 2012-07-02T11:42:03.253 回答
1

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

在 vim 中使用 cscope fc Function_name,你会得到调用跟踪。

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

于 2012-07-03T04:13:58.263 回答
1

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

于 2012-07-03T07:01:06.803 回答
1

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

于 2012-07-04T07:09:42.127 回答