2011-11-09 64 views
1

我試圖在Linux崩潰轉儲中調試USER進程。如何在Linux內核崩潰轉儲中檢查「USER進程」的回溯

正常的步驟去崩潰轉儲是:

  1. 轉到將轉儲所在的路徑。
  2. 使用命令crash kernel_link dump.201104181135

其中kernel_link是我爲vmlinux映像創建的軟鏈接。

現在您將處於CRASH提示狀態。 如果您運行的命令foreach <PID Of the process> bt 如:

crash> **foreach 6920 bt** 

**PID: 6920 TASK: ffff88013caaa800 CPU: 1 COMMAND: **"**climmon**"**** 

#0 [ffff88012d2cd9c8] **schedule** at ffffffff8130b76a 
#1 [ffff88012d2cdab0] **schedule_timeout** at ffffffff8130bbe7 
#2 [ffff88012d2cdb50] **schedule_timeout_uninterruptible** at ffffffff8130bc2a 
#3 [ffff88012d2cdb60] **__alloc_pages_nodemask** at ffffffff810b9e45 
#4 [ffff88012d2cdc60] **alloc_pages_curren**t at ffffffff810e1c8c 
#5 [ffff88012d2cdc90] **__page_cache_alloc** at ffffffff810b395a 
#6 [ffff88012d2cdcb0] **__do_page_cache_readahead** at ffffffff810bb592 
#7 [ffff88012d2cdd30] **ra_submit** at ffffffff810bb6ba 
#8 [ffff88012d2cdd40] **filemap_fault** at ffffffff810b3e4e 
#9 [ffff88012d2cdda0] **__do_fault** at ffffffff810caa5f 
#10 [ffff88012d2cde50] **handle_mm_fault** at ffffffff810cce69 
#11 [ffff88012d2cdf00] **do_page_fault** at ffffffff8130f560 
#12 [ffff88012d2cdf50] **page_fault** at ffffffff8130d3f5 

    RIP: 00007fd02b7e9071 RSP: 0000000040e86ea0 RFLAGS: 00010202 
    RAX: 0000000000000000 RBX: 0000000000000000 RCX: 00007fd02b7e9071 
    RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000040e86ec0 
    RBP: 0000000040e87140 R8: 0000000000000800 R9: 0000000000000000 
    R10: 0000000000000000 R11: 0000000000000202 R12: 00007fff16ec43d0 
    R13: 00007fd02bcadf00 R14: 0000000040e87950 R15: 0000000000001000 
    ORIG_RAX: ffffffffffffffff CS: 0033 SS: 002b 

如果檢查上述回溯它顯示了用於調度/處理頁面錯誤的內核函數,但不是被用戶過程中(這裏例如執行的功能。 climmon)。 所以我不能調試這個過程,因爲我無法看到在這個過程中執行的功能。 任何人都可以幫助我解決這個問題嗎?

回答

1

您無法從內核崩潰轉儲中調試用戶空間進程。如果內核崩潰,那肯定是內核的錯誤,而不是某些用戶空間進程。無論內核進程運行在哪個內核上,內核都應該始終正常運行。如果你想調試一個用戶空間進程,我建議你看看ltrace,strace和gdb。

Gergely from toptal.com

0

我不知道這是你想要的。但是你可以嘗試一個崩潰擴展調用「gcore」。它可以從內核崩潰文件轉儲用戶進程核心。

另外,請確保在傾銷時包含用戶頁面。

1

負載使用gdb轉儲: GDB的vmlinux

加載這些GDB宏:http://www.kernel.org/doc/Documentation/kdump/gdbmacros.txt

(GDB)來源gdbmacros.txt

使用 'BTT' 到「轉儲全部線程堆棧跟蹤上與CONFIG_FRAME_POINTER編譯內核 「:

(GDB)BTT

使用 'bttnobp' 到」 轉儲使用!CONFIG_FRAME_POINTER「編譯的內核上的所有線程堆棧跟蹤:

(gdb)bttnobp

相關問題