mdb写経/組み込みコマンド

2012/09/20

dcmds

$?
ターゲットがユーザープロセスまたはコアファイルの場合、まず、ターゲットのプロセス ID と現在のシグナルを出力して、次に、代表スレッドの汎用レジスタセットを出力します。
> $?
%g0 = 0x0000000000000000                 %l0 = 0x000000000183f800 page_retire_kstat+0x1d0
%g1 = 0x0000000000000000                 %l1 = 0x0000000001931800 kmem_bigtsb_default_arena+0x1e0
%g2 = 0x0000000000000000                 %l2 = 0x0000000000000000
%g3 = 0x0000000000000000                 %l3 = 0x00000300062c1e38
%g4 = 0x0000000000000000                 %l4 = 0x000000000198e400 kvps+0x328
%g5 = 0x0000000000000000                 %l5 = 0x0000000000000001
%g6 = 0x0000000000000000                 %l6 = 0x000000000183f800 page_retire_kstat+0x1d0
%g7 = 0x0000000000000000                 %l7 = 0x0000000001931800 kmem_bigtsb_default_arena+0x1e0

%o0 = 0x0000000000000000                 %i0 = 0x000000000000000f
%o1 = 0x0000000000000000                 %i1 = 0x0000030008eb0000
%o2 = 0x0000000000000000                 %i2 = 0x000002a101299c60
%o3 = 0x0000000000000000                 %i3 = 0x0000030016eb1290
%o4 = 0x0000000000000000                 %i4 = 0x0000000000000001
%o5 = 0x0000000000000000                 %i5 = 0x000000000183f800 page_retire_kstat+0x1d0
%o6 = 0x0000000001912b81 panic_stack+0x35a1 %i6 = 0x0000000001912c91 panic_stack+0x36b1
%o7 = 0x0000000000000000                 %i7 = 0x0000000001056598 vpanic+0xcc

%ccr = 0x00 xcc=nzvc icc=nzvc
%fprs = 0x00 fef=0 du=0 dl=0
%asi = 0x00
   %y = 0x0000000000000000
  %pc = 0x000000000107e694 panicsys+0x48
%npc = 0x0000000000000000
  %sp = 0x0000000001912b81 unbiased=0x0000000001913380
  %fp = 0x0000000001912c91

  %tick = 0x0000af41ea658a08
   %tba = 0x0000000000000000
    %tt = 0x0
    %tl = 0x0
   %pil = 0xf
%pstate = 0x000 cle=0 tle=0 mm=TSO red=0 pef=0 am=0 priv=0 ie=0 ag=0

       %cwp = 0x00  %cansave = 0x00
%canrestore = 0x00 %otherwin = 0x00
    %wstate = 0x00 %cleanwin = 0x0

$C [ count ]
C スタックのバックトレースを、スタックフレームポインタの情報も含めて出力します。この dcmd の前に明示的な address がある場合には、その仮想記憶アドレスから始まるバックトレースを表示します。その他の場合には、代表スレッドのスタックを表示します。オプションのカウント値が引数として指定されている場合には、出力の各スタックフレームに対して、count 引数で指定された数の引数だけが表示されます。
> $C
0000000001912b81 panicsys+0x48(f, 30008eb0000, 2a101299c60, 30016eb1290, 1, 183f800)
0000000001912c91 vpanic+0xcc(10d4ce8, 2a1012993d8, 10d4c00, 2a101299c60, 1, 183f800)
000002a101298aa1 panic+0x1c(10d4ce8, 193a000, 0, c0, 2a101299400, 1)
000002a101298b51 sync_handler+0x138(30008eb0000, 0, 10d4c00, 2a101299c60, 1, 183f800)
000002a101298c21 vx_handler+0x94(2a101299580, 73, 19d7000, 1, 18482f8, 18481f0)
000002a101298cd1 promif_enter_mon+0xa8(183d000, c, 10da1e8, 10d9e40, 183d000, 10da000)
000002a101298d91 kern_cif_handler+0x24(2a1012997a8, 0, 10dae58, 1, 183d400, 104efd0)
000002a101298e41 client_handler+0x2c(104e63c, 2a1012997a8, 0, 18a7218, 1919000, 104e63c)
000002a101298ef1 prom_enter_mon+0x24(0, 0, 18ef000, 1, 183d400, 10dae58)
000002a101298fc1 debug_enter+0x10c(a, a, 1, 193f800, 183a400, 0)
000002a101299091 abort_seq_softintr+0xfc(0, 0, 183a400, 2a101299d40, 2, 1)
000002a101299251 intr_thread+0x258(16, 0, 1000000000000, 101010101010101, 1000000000000, 12)
000002a1012690f1 cpu_halt+0x104(1913b90, 1, 1913b90, 1913a58, 6, 30008eb0000)
000002a1012691a1 idle+0x120(183ec00, 7, 30008eb0000, 30008d65364, 183ed70, ffffffffffffffff)
000002a101269251 thread_start+4(0, 0, 0, 0, 0, 0

[ base ] $d
スケジューリングクラステーブルを表示します。
> ::class
SLOT NAME       INIT FCN                 CLASS FCN
   0 SYS        sys_init                 sys_classfuncs
   1 TS         ts_init                  ts_classfuncs
   2 SDC        sysdc_init               sysdc_classfuncs
   3 FX         fx_init                  fx_classfuncs
   4            0                        0
   5            0                        0
   6            0                        0
   7            0                        0
   8            0                        0
   9            0                        0

$e
既知の外部すなわち大域的なオブジェクト型シンボルや関数シンボルのリスト、そのシンボルの値、およびターゲットの仮想アドレス空間内の対応位置に格納される最初の 4 バイト (32 ビット mdb) または 8 バイト (64 ビット mdb) のリストを出力します。::nm dcmd には、シンボルテーブルの表示用にさらに柔軟なオプションが用意されています。
> $e
_fini(7bb9a014):        1b1c031a8210000f
_info(7bb9a028):        1b1c031a92100008
_init(7bb9a000):        1b1c031a8210000f
pm_stop_pm_walk(7bb9a508):      9de3bf50f65e20f8
pc_info(7bb9a370):      191c031ada5b22c0
pm_start_pm_walk(7bb9a3f8):     9de3bf50f85e20f8
_fini(7b32e234):        9de3bf503b1c01aa
_info(7b32e260):        1b1c01aa92100008
_init(7b32e100):        9de3bf303b1c01aa
iptun_ioc_fini(7b32e4c4):       1b0000118210000f
iptun_ioc_init(7b32e4a4):       1b0000118210000f
iptun_delete(7b330370): 9de3bf4091362000
iptun_create(7b32ffc4): 9de3bf20c077a7f7
iptun_modify(7b330510): 9de3bf40d0062000
iptun_taskq(70001fb8):  3001c437928
iptun_cache(70001fc0):  3001c4de008
    :
    :

$M
$< dcmd で使用するために kmdb によってキャッシュされるマクロファイルの一覧を示します。
> $M
MACRO                NATIVE EQUIVALENT
bufctl               ::bufctl
bufctl_audit         ::bufctl -v
cpu                  ::cpuinfo -v
cpun                 ::cpuinfo -v
cpus                 ::walk cpu |::cpuinfo -v
devinfo              ::print struct dev_info
devinfo.minor        ::minornodes
devinfo.next         ::walk devi_next |::devinfo -s
devinfo.parent       ::walk devinfo_parents |::devinfo -s
devinfo.prop         ::devinfo
devinfo.sibling      ::walk devinfo_siblings |::devinfo -s
devinfo_brief        ::devinfo -s
devinfo_major        ::devbindings -s
devnames_major       ::devnames -m
devt                 ::devt
devt2snode           ::dev2snode
findthreads          ::walk thread |::thread
major2snode          ::major2snode
mblk                 ::mblk -v
modctl.brief         ::modctl
modules              ::modinfo
mount                ::fsinfo
msgbuf               ::msgbuf
mutex                ::mutex
panicbuf             ::panicinfo
pid2proc             ::pid2proc |::print proc_t
proc2u               ::print proc_t p_user
procargs             ::print proc_t p_user.u_psargs
queue                ::queue -v
sema                 ::print sema_impl_t
stackregs            ::stackregs
stacktrace           ::stackregs
systemdump           0>pc;0>npc;nopanicdebug/W 1;:c
thread               ::print kthread_t
threadlist           ::threadlist -v
u                    ::print user_t
utsname              utsname::print

$v
指定された変数のうち、ゼロ以外の値を持つ変数のリストを出力します。::vars dcmd を使用すると、変数の一覧表示にほかのオプションを付けることができます。
> $v
i0 = f
i1 = 30008eb0000
i2 = 2a101299c60
i3 = 30016eb1290
i4 = 1
i5 = 183f800
i6 = 1912c91
. = 10
i7 = 1056598
0 = 2a10153bc60
tick = af41ea658a08
sp = 1912b81
fp = 1912c91
9 = 1
pil = f
l0 = 183f800
l1 = 1931800
l3 = 300062c1e38
l4 = 198e400
l5 = 1
l6 = 183f800
l7 = 1931800
b = 1800000
d = 1a5930
e = 1009070
m = 7f454c46
t = 3098f8
o6 = 1912b81
pc = 107e694

address ::array [type count] [variable]
配列の各要素のアドレスを出力します。配列要素のタイプは最初の引数 type で指定し、計算される要素の数は 2 番目の引数 count で指定します。::array の出力を ::print dcmd にパイプラインで渡すと、配列データ構造体の要素を出力できます。
> 0000030000042008::array kmem_cache_t 5
30000042008
30000042280
300000424f8
30000042770
300000429e8

[ address ] ::dis [-abfw] [-n cnt] [address]
最後の引数または現在のドット値によって指定されたアドレス、またはそのアドレス周辺から、逆アセンブルします。そのアドレスが、既知の関数の最初の部分に一致した場合には、その関数全体を逆アセンブルします。その他の場合には、指定されたアドレスの前後の命令を示す「ウィンドウ」が表示され、コンテキストが提供されます。デフォルトでは、命令はターゲットの仮想アドレス空間から読み取られます。ただし、-f オプションを指定すると、命令はターゲットのオブジェクトファイルから読み取られます。デバッガが現在、動作中のプロセス、コアファイル、またはクラッシュダンプに接続されていない場合、-f オプションはデフォルトで有効になります。また、アドレスが既知の関数の最初の部分に一致した場合でも、-w オプションを指定すると、「ウィンドウ」を強制的に開くモードに設定できます。デフォルトでは、ウィンドウのサイズは命令 10 個分です。-n オプションを使用すれば、命令の数を明示的に指定できます。-a オプションを指定すると、アドレスがシンボルではなく数値として出力されます。
> 0x000000000107e694::dis -n 5
panicsys+0x34:                  st        %o4, [%sp + 0x8bf]
panicsys+0x38:                  ldx       [%g7 + 0x18], %o3
panicsys+0x3c:                  stx       %o3, [%sp + 0x8b7]
panicsys+0x40:                  ldub      [%g7 + 0x30], %o2
panicsys+0x44:                  stb       %o2, [%sp + 0x8b3]
panicsys+0x48:                  call      -0x28840      <setjmp>
panicsys+0x4c:                  add       %g7, 0x40, %o0
panicsys+0x50:                  ld        [%sp + 0x8ef], %i0
panicsys+0x54:                  ldx       [%sp + 0x8ff], %i1
panicsys+0x58:                  ldx       [%sp + 0x8f7], %i2
panicsys+0x5c:                  ld        [%i2 + 0x24], %i5

::disasms
使用可能な逆アセンブラのモードを一覧表示します。ターゲットが初期化されている場合には、MDB は適切な逆アセンブラモードを選択しようとします。また、::dismode dcmd を使用して、ユーザーは、初期モードを一覧表のどれかに変更できます。
> ::disasms
1                        - SPARC-v8 disassembler
2                        - SPARC-v9 disassembler
4                        - UltraSPARC1-v9 disassembler
default                  - default no-op disassembler
v8                       - SPARC-v8 disassembler
v9                       - SPARC-v9 disassembler
v9plus                   - UltraSPARC1-v9 disassembler

::dismode [mode]
逆アセンブラモードを受け取るか、設定します。引数が指定されていないと、現在の逆アセンブラモードを出力します。mode 引数が指定されている場合には、逆アセンブラを指定されたモードに切り替えます。また、::disasms dcmd を使用して、逆アセンブラのリストを表示できます。
> ::dismode
disassembly mode is v9plus (UltraSPARC1-v9 disassembler)

::dmods [-l] [module-name]
読み込まれたデバッガモジュールを一覧表示します。-l オプションが指定されていると、各 dmod に関連付けられた dcmd や walker の一覧がその dmod 名の下に出力されます。特定の dmod の名前を追加の引数として指定すれば、出力はその dmod に限定されます。
> ::dmods
arp
cpc
crypto
dtrace
fcip
fcp
    :
    :
> ::dmods -l ufs

ufs
  dcmd acl                  - given an inode, display its in core acl's
  dcmd cg                   - display a summarized cylinder group structure
  dcmd inode                - display summarized inode_t
  dcmd inode_cache          - search/display inodes from inode cache
  dcmd mapentry             - dumps ufslog mapentry
  dcmd mapstats             - dumps ufslog stats
  walk acl                  - given an inode, walk chains of in core acl's
  walk cg                   - walk cg's in bio buffer cache
  walk inode_cache          - walk inode cache
  walk ufslogmap            - walk map entries in a ufs_log mt_map

[ address ] ::dump [-eqrstu] [-n count] [-f|-p] [-g bytes] [-w paragraphs]
ドットによって指定されたアドレスを含む、16 バイトで割り当てられた仮想記憶領域のメモリーダンプを 16 進数の ASCII 形式で出力します。::dump に繰り返し回数を指定すると、ダンプする繰り返し数としてではなく、ダンプするバイト数として解釈されます。また、::dump dcmd は、次のオプションも認識します。

-e エンディアン性を調整します。-e オプションを指定すると、4 バイトワードが使用されます。-g オプションを使用すると、デフォルトのワードサイズを変更できます。
-f ターゲットの仮想アドレス空間からではなく、指定された仮想アドレスに対応するオブジェクトファイルの位置からデータを読み取ります。デバッガが現在、動作中のプロセス、コアファイル、またはクラッシュダンプに接続されていない場合、-f オプションはデフォルトで有効になります。
-g group バイトをバイトのグループで表示します。デフォルトの group サイズは 4 バイトです。group サイズは行幅を分割する 2 のべき乗にする必要があります。
-p address を、仮想アドレスではなく、ターゲットのアドレス空間内の物理的なアドレス位置として解釈します。
-q データの ASCII 形式の復号化を出力しません。
-r 各行に、絶対的なアドレスではなく、開始アドレスからの相対的な行数を与えます。このオプションを指定すると、-u オプションも暗黙的に指定されます。
-s 繰り返される行を省略します。
-t 行全体を読み取って出力するのではなく、指定されたアドレスの内容だけを読み取って表示します。
-u 段落の境界に配列するのではなく、配列せずに出力します。
-w paragraphs 行ごとに 16 バイトの段落で段落を表示します。デフォルトの段落数は 1 です。-w の最大値は 16 です。
> 2a101299d40,100::dump
              \/ 1 2 3  4 5 6 7  8 9 a b  c d e f  v123456789abcdef
2a101299d40:  0000af4d e0600c98 00000000 000002d5  ...M.`..........
2a101299d50:  00000000 00000000 00000000 00000000  ................
2a101299d60:  00000000 00000000 00000000 00000000  ................
2a101299d70:  00000000 00000000 00000000 00000000  ................
2a101299d80:  00000000 00000000 00000000 00000000  ................
2a101299d90:  00000000 00000000 00000000 00000000  ................
2a101299da0:  00000000 00000000 00000000 00000000  ................
2a101299db0:  00000000 00000000 00000000 00000000  ................
2a101299dc0:  00000000 018a62c0 00000300 08d59e60  ......b........`
2a101299dd0:  000002a1 012c9c60 000002a1 012a1c60  .....,.`.....*.`
2a101299de0:  00000000 00000000 00000000 00000000  ................
2a101299df0:  00000000 00000000 00000300 062c1e38  .............,.8
2a101299e00:  00000000 38fe7043 00000000 00000000  ....8.pC........
2a101299e10:  00000000 00000000 00000000 00000000  ................
2a101299e20:  00000000 00000000 00000300 08eb00e8  ................
2a101299e30:  000a0000 00000000 00000300 08d65340  ..............S@

[ address ] ::grep command
指定されたコマンド文字列を評価したあと、新しいドット値がゼロ以外の場合には、古いドット値を出力します。command に空白やメタキャラクタが含まれる場合は、必ず引用符で囲んでください。パイプライン内で ::grep dcmd を使用すると、アドレスリストをフィルタリングできます。
> ::walk inode_cache |::grep .==300043fca10
300043fca10

::echo args ...
指定された引数を表示します。
> ::echo "TEST"
TEST

[ address ] ::findsym [-g] [symbol|addr ...]
関数中のシンボルの参照箇所を検索します。
> ::findsym kmem_flags
found kmem_flags at dblk_lastfree_reusable+0x18
found kmem_flags at kmem_cache_create+0xdc
found kmem_flags at kmem_cache_create+0x104
found kmem_flags at kmem_debugging+4
found kmem_flags at kmem_init+0xc
found kmem_flags at kmem_init+0x290
found kmem_flags at kmem_init+0x5a4
found kmem_flags at kmem_init+0x5d8

::formats
フォーマットの一覧を表示します。
> ::formats
+ - increment dot by the count (variable size)
- - decrement dot by the count (variable size)
B - hexadecimal int (1 byte)
C - character using C character notation (1 byte)
D - decimal signed int (4 bytes)
E - decimal unsigned long long (8 bytes)
F - double (8 bytes)
G - octal unsigned long long (8 bytes)
H - swap bytes and shorts (4 bytes)
I - address and disassembled instruction (variable size)
J - hexadecimal long long (8 bytes)
K - hexadecimal uintptr_t (8 bytes)
    :
    :

[ address ] ::mappings [ name ]
ターゲットの仮想アドレス空間内の各割り当てを、アドレス、サイズ、それぞれの割り当て記述などを含めて一覧表示します。address が dcmd の前にある場合、MDB は指定されたアドレスを含む割り当てだけを表示します。また、文字列で name 引数が指定されている場合には、MDB はその記述に一致する割り当てだけを表示します。
> ::mappings
            BASE            LIMIT             SIZE NAME
         1000000          1a26000           a26000 ktextseg
         1a26000          3000000          15da000 kvalloc
        70000000         80000000         10000000 kvseg32
        edd00000         f0000000          2300000 kdebugseg
     2a100000000      2a180000000         80000000 kpseg
     2a750000000      2a7575fa000          75fa000 kmapseg
     30000000000      70000000000      40000000000 kvseg
     70000000000      70002c6e000          2c6e000 kmem64
ffff810000000000 ffff810100000000        100000000 kpmseg
ffff810100000000 ffff81017cf92000         7cf92000 kzioseg

[ address ] ::nm [ -DPdghnopuvx ] [ -t types ] [ -f format ] [ object ]
ターゲットの仮想アドレス空間内の各割り当てを、アドレス、サイズ、それぞれの割り当て記述などを含めて一覧表示します。 address が dcmd の前にある場合、MDB は指定されたアドレスを含む割り当てだけを表示します。また、文字列で name 引数が指定されている場合には、MDB はその記述に一致する割り当てだけを表示します。
-D .symtab の代わりに .dynsym (動的シンボルテーブル) を出力します。
-P .symtab の代わりに専用シンボルテーブルを出力します。
-d 値とサイズフィールドを 10 進数で出力します。
-f format [,format...] 指定されたシンボル情報だけを出力します。有効な書式化引数文字列は次のとおりです。
ndx シンボルテーブルのインデックス
val シンボルテーブル
size サイズ (バイト)
type シンボルの型
bind 結合
oth その他
shndx セクションのインデックス
name シンボル名
ctype シンボルの C 言語の型 (既知の場合)
obj シンボルを定義するオブジェクト
-g 大域シンボルだけを出力します。
-h ヘッダー行を抑制します。
-n 名前順にシンボルをソートします。
-o 値とサイズフィールドを 8 進数で出力します。
-p シンボルを、一連の ::nmadd コマンドとして出力します。このオプションは -P とともに使用して、マクロファイルを作成できます。その後、$< コマンドを用いて、このマクロファイルをデバッガに読み込みます。
-t type [,type...] 指定された型のシンボルだけを出力します。有効な型引数文字列は次のとおりです。
noty STT_NOTYPE
objt STT_OBJECT
func STT_FUNC
sect STT_SECTION
file STT_FILE
comm STT_COMMON
tls STT_TLS
regi STT_SPARC_REGISTER
-u 未定義のシンボルだけを出力します。
-v 値順にシンボルをソートします。
-x 値とサイズフィールドを 16 進数で出力します。
> ::nm
Value              Size               Type  Bind  Other Shndx    Name
0x0000000000000000|0x0000000000000000|NOTY |LOCL |0x0  |UNDEF   |
0x000000000183b728|0x0000000000000008|OBJT |LOCL |0x2  |13      |ops
0x000000000183bac8|0x0000000000000008|OBJT |LOCL |0x2  |13      |romp
0x000000000109b738|0x000000000000008c|FUNC |LOCL |0x2  |1       |kobj_lm_append
0x000000000183bb20|0x0000000000000008|OBJT |LOCL |0x2  |13      |_kobj_printf
0x0000000001816e20|0x0000000000000018|OBJT |LOCL |0x2  |10      |primaries
0x000000000183bb30|0x0000000000000008|OBJT |LOCL |0x2  |13      |kobj_bzero
0x000000000183bb38|0x0000000000000008|OBJT |LOCL |0x2  |13      |kobj_bcopy
0x00000000018514c8|0x0000000000000000|OBJT |LOCL |0x0  |13      |_END_
0x000000000183bb48|0x0000000000000008|OBJT |LOCL |0x2  |13      |dbvec
0x000000000109b358|0x0000000000000020|FUNC |LOCL |0x2  |1       |kobj_kdi_get_polled_io
0x000000000183bfe8|0x0000000000000004|OBJT |LOCL |0x2  |13      |kobj_mmu_pagesize
0x000000000109b700|0x0000000000000038|FUNC |LOCL |0x2  |1       |kobj_lm_lookup
    :
    :


[ address ] ::print [-aCdiLptx] [-c lim] [-l lim] [type [ member|offset ... ]]
指定された仮想 address にあるデータ構造体を、指定された type 情報を使用して出力します。 type パラメータは C 言語の構造体、共用体、列挙型、基本的な整数型、あるいは、これらの型へのポインタを指定できます。型名に空白文字が含まれる場合 (たとえば、「struct foo」)、単一引用符または二重引用符で囲む必要があります。型名には、「シンボルの名前解決」で説明した逆引用符 (`) 有効範囲規則を使用できます。 type が構造化された型である場合、 ::print dcmd は構造体または共用体の各メンバーを再帰的に出力します。type 引数を指定せず、かつ、静的または大域的な STT_OBJECT シンボルがアドレスに一致する場合、::print は自動的に適切な型を推測します。
type 引数の後ろに member 式または offset 式のリストをオプションで指定することができます。その場合は、指定された type のメンバーまたはサブメンバーだけが表示されます。メンバーは、配列インデックス演算子 ([])、構造体メンバー演算子 (->)、および構造体ポインタ演算子 (.) を含む C 構文を使って指定できます。オフセットは、MDB 算術展開の構文 ($[]) を使って指定できます。データ構造体を表示したあと、::print はドットを type のサイズ分 (バイト) だけインクリメントします。
-a 各メンバーのアドレスが表示されます。
-i 左側の式が即値とみなされ、指定された型を使って表示されます。
-p ::print はアドレスを、仮想メモリーアドレスではなく、物理メモリーアドレスとして解釈します。
-t 各メンバーの型が表示されます。
-d または -x オプションを指定すると、すべての整数は 10 進数 (-d) または 16 進数 (-x) で表示されます。値を 10 進数または 16 進数のどちらで表示するかを決定するとき、デフォルトではヒューリスティックに行います。文字列として読み取りまたは表示される文字配列内の文字数は -c オプションで制限できます。
-C 文字数は制限されません。読み取りまたは表示される標準配列内の要素数は -l オプションで制限できます。
-L 文字数は制限されず、配列内のすべての要素が表示されます。
-c と -l オプションのデフォルト値を変更するには、::set または -o コマンド行オプションを使用します。
 > 0000030000006da0::print -a vmem_t vm_seg0
30000006e48 vm_seg0 = {
    30000006e48 vm_seg0.vs_start = 0
    30000006e50 vm_seg0.vs_end = 0
    30000006e58 vm_seg0.vs_knext = 0x300000227e0
    30000006e60 vm_seg0.vs_kprev = 0x30000022c08
    30000006e68 vm_seg0.vs_anext = 0x30000006ee0
    30000006e70 vm_seg0.vs_aprev = 0x30000022bd0
    30000006e78 vm_seg0.vs_type = 0x10
    30000006e79 vm_seg0.vs_import = 0
    30000006e7a vm_seg0.vs_depth = 0
    30000006e80 vm_seg0.vs_thread = 0
    30000006e88 vm_seg0.vs_timestamp = 0
    30000006e90 vm_seg0.vs_stack = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
}


::set [ -wF ] [ +/-o option ] [ -s distance ] [ -I path ] [ -L path ] [ -P prompt ]
デバッガの種々のプロパティーを取得または設定します。いずれのオプションも指定されていない場合には、デバッガのプロパティーの現在の設定が表示されます。::set dcmd は次のオプションを認識します。
-F その次のユーザープロセスで、::attach が適用されているプロセスを強制的に引き継ぎます (-F オプションをコマンド行に指定して MDB を実行する場合と同じ)。
-I マクロファイルを検出するためのデフォルトパスを設定します。パス引数は特殊トークンを使用できます。
-L デバッガモジュールを検出するためのデフォルトパスを設定します。パス引数は特殊トークンを使用できます。
-o 指定されたデバッガオプションを有効にします。+o 書式が使用されている場合には、そのデバッガオプションを無効にします。
-P コマンドプロンプトを、指定されたプロンプト文字列に設定します。
-s シンボルマッチングディスタンスを指定された距離に設定します。を参照してください。
-w ターゲットを書き込み用にもう一度開きます (-w オプションをコマンド行に指定して mdb を実行する場合と同じ)。
> ::set

  macro path: /usr/platform/SUNW,Sun-Fire-T200/lib/adb/sparcv9
              /usr/platform/sun4v/lib/adb/sparcv9
              /usr/lib/adb/sparcv9

 module path: /usr/platform/SUNW,Sun-Fire-T200/lib/mdb/kvm/sparcv9
              /usr/platform/sun4v/lib/mdb/kvm/sparcv9
              /usr/lib/mdb/kvm/sparcv9

 symbol matching distance: 0 (smart mode)
 array member print limit: 32
 array string print limit: 1024
           command prompt: "> "
         debugger options: follow_exec_mode=ask, follow_fork_modeask, pager, stop_on_bpt_nosym, write_readback
           target options: read-only

::showrev [ -pv ]
現在のターゲットに対応するハードウェアおよびソフトウェアの改訂情報を表示します。オプションを指定しないと、一般的なシステム情報が表示されます。-p オプションを指定すると、パッチに含まれる各読み込みオブジェクトの情報が表示されます。-v オプションを指定すると、各読み込みオブジェクトの情報が表示されます。-p オプションでは、バージョン情報を持たない読み込みオブジェクトは出力から除外されます。バージョン情報を持たない読み込みオブジェクトは、-v オプションの出力に Unknown として報告されます。
> ::showrev
Hostname: t2kh1ldom2
Release: 5.11
Kernel architecture: sun4v
Application architecture: sparcv9
Kernel version: SunOS 5.11 sun4v 11.0
Platform: SUNW,Sun-Fire-T200

::sizeof type
指定された型のサイズをバイトで表示します。type パラメータは C 言語の構造体、共用体、列挙型、基本的な整数型、あるいは、これらの型へのポインタを指定できます。型名には、「シンボルの名前解決」で説明した逆引用符 (`) 有効範囲規則を使用できます。
> ::sizeof kmem_cache_t
sizeof (kmem_cache_t) = 0x278

[ address ] ::stack [ count ]
C スタックのバックトレースを出力します。この dcmd の前に明示的な address が指定されている場合には、その仮想記憶アドレスから始まるバックトレースを表示します。その他の場合には、代表スレッドのスタックを表示します。オプションのカウント値が引数として指定されている場合には、出力の各スタックフレームに対して、count 引数で指定された数の引数だけが表示されます。
> ::stack
panicsys+0x48(f, 30008eb0000, 2a101299c60, 30016eb1290, 1, 183f800)
vpanic+0xcc(10d4ce8, 2a1012993d8, 10d4c00, 2a101299c60, 1, 183f800)
panic+0x1c(10d4ce8, 193a000, 0, c0, 2a101299400, 1)
sync_handler+0x138(30008eb0000, 0, 10d4c00, 2a101299c60, 1, 183f800)
vx_handler+0x94(2a101299580, 73, 19d7000, 1, 18482f8, 18481f0)
promif_enter_mon+0xa8(183d000, c, 10da1e8, 10d9e40, 183d000, 10da000)
kern_cif_handler+0x24(2a1012997a8, 0, 10dae58, 1, 183d400, 104efd0)
client_handler+0x2c(104e63c, 2a1012997a8, 0, 18a7218, 1919000, 104e63c)
prom_enter_mon+0x24(0, 0, 18ef000, 1, 183d400, 10dae58)
debug_enter+0x10c(a, a, 1, 193f800, 183a400, 0)
abort_seq_softintr+0xfc(0, 0, 183a400, 2a101299d40, 2, 1)
intr_thread+0x258(16, 0, 1000000000000, 101010101010101, 1000000000000, 12)
cpu_halt+0x104(1913b90, 1, 1913b90, 1913a58, 6, 30008eb0000)
idle+0x120(183ec00, 7, 30008eb0000, 30008d65364, 183ed70, ffffffffffffffff)
thread_start+4(0, 0, 0, 0, 0, 0)

::status
現在のターゲットに関連した情報の概要を出力します。
> ::status
debugging crash dump vmcore.0 (64-bit) from t2kh1ldom2
operating system: 5.11 11.0 (sun4v)
image uuid: 3b516630-e7d2-c451-ba31-d7792ccd9fa2
panic message: sync initiated
dump content: kernel pages only

address ::vtop [-a as]
現在のターゲットに関連した情報の概要を出力します。
> 000000000180e000::vtop
virtual 180e000 mapped to physical 8180e000

[ address ] ::walk walker-name [ variable-name ]
指定された walker を使用して、データ構造体の要素を調べます。::walkers dcmd を使用すると、使用可能な walker を一覧表示できます。walker は、大域的なデータ構造体について動作する場合もあり、開始アドレスを必要としないものがあります。たとえば、カーネル内の proc 構造体のリストを調べる場合などです。その他の walker は、アドレスが明示的に指定されている固有のデータ構造体上で動作します。たとえば、アドレス空間でポインタを指定して、セグメントのリストを調べる場合です。
対話処理で使用される場合、 ::walk dcmd は、データ構造体内の各要素のアドレスをデフォルト形式で出力します。また、この dcmd は、パイプラインにアドレスリストを提供するときにも使用できます。walker 名には、「dcmd と walker の名前解決」で説明した逆引用符「`」有効範囲規則を使用できます。オプションの variable-name が指定されている場合には、MDB がパイプラインの次のステージを呼び出すときに walk の各ステップが返す値に、指定変数が割り当てられます。
> ::walk kmem_cache |::print -a kmem_cache_t cache_name
30000042070 cache_name = [ "kmem_magazine_1" ]
3000004c070 cache_name = [ "kmem_magazine_3" ]
30000056070 cache_name = [ "kmem_magazine_7" ]
30000060070 cache_name = [ "kmem_magazine_15" ]
3000006a070 cache_name = [ "kmem_magazine_31" ]
30000074070 cache_name = [ "kmem_magazine_47" ]
30000082070 cache_name = [ "kmem_magazine_63" ]
3000008c070 cache_name = [ "kmem_magazine_95" ]
30000096070 cache_name = [ "kmem_magazine_143" ]
300000a0070 cache_name = [ "kmem_slab_cache" ]
300000aa070 cache_name = [ "kmem_bufctl_cache" ]
300000b4070 cache_name = [ "kmem_bufctl_audit_cache" ]
    :
    :

0 件のコメント:

コメントを投稿