最初发表:泰晓科技 – 聚焦嵌入式 Linux,追本溯源,见微知著!
原文链接:如何快速定位 Linux Panic 出错的代码行
评论说明:为更好地聚合大家的讨论,请到上面原文的评论区回复。
问题描述
内核调试中最常见的一个问题是:内核Panic后,如何快速定位到出错的代码行?
就是这样一个常见的问题,面试过的大部分同学都未能很好地回答,这里希望能够做很彻底地解答。
问题分析
内核Panic时,一般会打印回调,并打印出当前出错的地址:
kernel/panic.c:panic():
#ifdef CONFIG_DEBUG_BUGVERBOSE
/*
* Avoid nested stack-dumping if a panic occurs during oops processing
*/
if (!test_taint(TAINT_DIE) && oops_in_progress <= 1)
dump_stack();
#endif
而dump_stack()
调用关系如下:
dump_stack() --> __dump_stack