我想在我的代碼中調試一些函數。不幸的是,gdb在系統中不可用,所以現在通過printk消息(它是一個linux內核驅動程序)完成調試。如何知道從哪裏調用函數?
有一個函數被一些參數調用。我想知道是否有可能知道誰以及如何調用這個函數。
謝謝。
我想在我的代碼中調試一些函數。不幸的是,gdb在系統中不可用,所以現在通過printk消息(它是一個linux內核驅動程序)完成調試。如何知道從哪裏調用函數?
有一個函數被一些參數調用。我想知道是否有可能知道誰以及如何調用這個函數。
謝謝。
您可以啓用堆棧轉儲以查看堆棧和調用跟蹤。您可以使用函數dump_stack()在默認控制檯上打印堆棧和調用跟蹤。
看一看:
您還可以通過C標籤和讀取cscope的代碼下線。
在vim中使用cscope f c Function_name,您將獲得調用跟蹤。
在windows中,您可以嘗試Source Insight。
GCC提供功能__builtin_return_address
。
__builtin_return_address(0)
應該給你在呼叫功能內的呼叫站點的地址。在/proc/kallsyms
中搜索最接近的值以查找該函數。
在內核代碼中調用dump_stack()是要走的路。