2011-11-09 3 views
1

LinuxクラッシュダンプでUSERプロセスをデバッグしようとしました。クラッシュダンプに行くLinuxカーネルクラッシュダンプの "USER process"のバックトレースを確認する方法

通常の手順は次のとおりです。

  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を参照することをお勧めします。 toptal.com

0

それはあなたが望むものであるならば、私は知らないから

Gergely。しかし、クラッシュ・エクステンション・コール「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でコンパイルされたカーネルのすべてのスレッドスタックトレース:

(bdb)bttnobp

関連する問題