內核錯誤報告通常附帶如下堆棧轉儲:
------------[ cut here ]------------ WARNING: CPU: 1 PID: 28102 at kernel/module.c:1108 module_put+0x57/0x70 Modules linked in: dvb_usb_gp8psk(-) dvb_usb dvb_core nvidia_drm(PO) nvidia_modeset(PO) snd_hda_codec_hdmi snd_hda_intel snd_hda_codec snd_hwdep snd_hda_core snd_pcm snd_timer snd soundcore nvidia(PO) [last unloaded: rc_core] CPU: 1 PID: 28102 Comm: rmmod Tainted: P WC O 4.8.4-build.1 #1 Hardware name: MSI MS-7309/MS-7309, BIOS V1.12 02/23/2009 00000000 c12ba080 00000000 00000000 c103ed6a c1616014 00000001 00006dc6 c1615862 00000454 c109e8a7 c109e8a7 00000009 ffffffff 00000000 f13f6a10 f5f5a600 c103ee33 00000009 00000000 00000000 c109e8a7 f80ca4d0 c109f617 Call Trace: [<c12ba080>] ? dump_stack+0x44/0x64 [<c103ed6a>] ? __warn+0xfa/0x120 [<c109e8a7>] ? module_put+0x57/0x70 [<c109e8a7>] ? module_put+0x57/0x70 [<c103ee33>] ? warn_slowpath_null+0x23/0x30 [<c109e8a7>] ? module_put+0x57/0x70 [<f80ca4d0>] ? gp8psk_fe_set_frontend+0x460/0x460 [dvb_usb_gp8psk] [<c109f617>] ? symbol_put_addr+0x27/0x50 [<f80bc9ca>] ? dvb_usb_adapter_frontend_exit+0x3a/0x70 [dvb_usb] [<f80bb3bf>] ? dvb_usb_exit+0x2f/0xd0 [dvb_usb] [<c13d03bc>] ? usb_disable_endpoint+0x7c/0xb0 [<f80bb48a>] ? dvb_usb_device_exit+0x2a/0x50 [dvb_usb] [<c13d2882>] ? usb_unbind_interface+0x62/0x250 [<c136b514>] ? __pm_runtime_idle+0x44/0x70 [<c13620d8>] ? __device_release_driver+0x78/0x120 [<c1362907>] ? driver_detach+0x87/0x90 [<c1361c48>] ? bus_remove_driver+0x38/0x90 [<c13d1c18>] ? usb_deregister+0x58/0xb0 [<c109fbb0>] ? SyS_delete_module+0x130/0x1f0 [<c1055654>] ? task_work_run+0x64/0x80 [<c1000fa5>] ? exit_to_usermode_loop+0x85/0x90 [<c10013f0>] ? do_fast_syscall_32+0x80/0x130 [<c1549f43>] ? sysenter_past_esp+0x40/0x6a ---[ end trace 6ebc60ef3981792f ]---
這樣的堆棧跟蹤提供了足夠的信息來識別內核源代碼中發生錯誤的那一行。根據問題的 嚴重性,它還可能包含 “Oops” 一詞,比如:
BUG: unable to handle kernel NULL pointer dereference at (null) IP: [<c06969d4>] iret_exc+0x7d0/0xa59 *pdpt = 000000002258a001 *pde = 0000000000000000 Oops: 0002 [#1] PREEMPT SMP ...
儘管有 Oops 或其他類型的堆棧跟蹤,但通常需要找到出問題的行來識別和處理缺 陷。在本章中,我們將參考“Oops”來了解需要分析的各種堆棧跟蹤。
如果內核是用 CONFIG_DEBUG_INFO
編譯的,那麼可以使用文件: