コード内のいくつかの関数をデバッグしようとしています。残念ながら、gdbはシステムで使用できないため、現時点では、printkメッセージ(Linuxカーネルドライバー)によってデバッグが行われます。
いくつかのパラメータで呼び出されている関数があります。誰がどのように関数を呼び出したかを知ることができるかどうか知りたいです。
ありがとう。
コード内のいくつかの関数をデバッグしようとしています。残念ながら、gdbはシステムで使用できないため、現時点では、printkメッセージ(Linuxカーネルドライバー)によってデバッグが行われます。
いくつかのパラメータで呼び出されている関数があります。誰がどのように関数を呼び出したかを知ることができるかどうか知りたいです。
ありがとう。
スタック ダンプを有効にして、スタックと呼び出しトレースを表示できます。関数 dump_stack() を使用して、スタックとコール トレースをデフォルト コンソールに出力できます。
見て :
GCC は関数を提供します__builtin_return_address
。
__builtin_return_address(0)
呼び出し元の関数内で、呼び出しサイトのアドレスを提供する必要があります。で最も近い値/proc/kallsyms
を検索して関数を見つけます。
Ctags と cscope を使用してオフラインでコードを読むこともできます。
vim で cscope fc Function_name を使用すると、呼び出しトレースが取得されます。
Windows では、Source Insight を試すことができます。
カーネル コードで dump_stack() を呼び出す方法です。