[英]How to print the current thread stack trace inside the Linux kernel?
我希望能夠打印 Linux 內核中線程的堆棧跟蹤。
詳細說明:我想向特定函數(例如swap_writepage()
)添加代碼,這些函數將打印調用此函數的線程的完整堆棧跟蹤。 像這樣的東西:
int swap_writepage(struct page *page, struct writeback_control *wbc)
{
/* code goes here to print stack trace */
int ret = 0;
if (try_to_free_swap(page)) {
unlock_page(page);
goto out;
}
if (frontswap_store(page) == 0) {
set_page_writeback(page);
unlock_page(page);
end_page_writeback(page);
goto out;
}
ret = __swap_writepage(page, wbc, end_swap_bio_write);
out:
return ret;
}
我的故事:最近,Linux 內核開發人員在改進用 C 編寫的內核時開始采用面向對象的原則。由於 C 不是面向對象的語言,所以事情開始變得非常丑陋且難以理解,更不用說沒有像樣的可以分析 C 代碼的 IDE。 我不想開始在調試器下運行 Linux。 注意:如果您是內核開發新手並且想在調試器下運行 Linux,請不要為此付出努力……這將被證明是徒勞的(單步執行是沒有意義的)。
Linux 內核有一個非常有名的函數,叫做dump_stack()
here ,它打印堆棧的內容。 根據查看堆棧信息將其放入您的函數中。
@rakib 當然是完全正確的。
此外,我想指出的是,可以定義簡單而優雅的宏來幫助在需要時打印調試信息。 多年來,我將這些宏和便利例程放入頭文件中; 您可以在此處查看並下載:“A Header of Convenience” 。
有宏/函數可以:
哇:-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.