2012-07-02 4 views
1

Я пытаюсь отладить некоторые функции в моем коде. К сожалению, gdb недоступен в системе, поэтому отладка выполняется в настоящий момент по сообщениям printk (это драйвер ядра Linux).Как узнать, откуда была вызвана функция?

Существует функция, вызываемая некоторыми параметрами. Я хотел бы знать, можно ли узнать, кто и как называется функцией.

Спасибо.

ответ

5

Вы можете включить сброс стека, чтобы увидеть стек и трассировку вызова. Вы можете использовать функцию dump_stack() для печати стека и трассировки вызовов на консоли по умолчанию.

Посмотрите:

1

Вы также можете прочитать код форума по Ctags и Cscope.

используя cscope f c Имя_функции в vim, вы получите трассировку вызова.

В окнах вы можете попробовать Source Insight.

1

GCC предоставляет функцию __builtin_return_address.
__builtin_return_address(0) должен предоставить вам адрес сайта вызова в пределах вызывающей функции. Найдите ближайшее значение в /proc/kallsyms, чтобы найти функцию.