我希望能够在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。 我不想在debugging器下开始运行Linux。 注意:如果你是一个内核开发新手,想要在debugging器下运行Linux,不要付出努力…这将被certificate是徒劳无功的(步调毫无意义)。
Linux内核在这里有非常有名的dump_stack()
函数,它可以打印堆栈的内容。 根据查看堆栈信息将它放在你的函数中。
@rakib当然是正确的。
另外,我想指出的是,可以定义简单而优雅的宏,以便在需要时帮助打印调试信息。 多年来,我已经把这些宏和习惯放到一个头文件中, 您可以查看并下载:“方便的标题” 。
有宏/函数来:
Whe 🙂