【问题标题】:How can I know where has a function been called from?我怎么知道从哪里调用了函数?
【发布时间】:2012-07-02 19:40:55
【问题描述】:

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

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    看看:

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-08-07
            • 2021-12-01
            • 1970-01-01
            • 2013-03-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多