免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3078 | 回复: 11
打印 上一主题 下一主题

能详细说明一下adb,kadb怎么用吗? [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-12-15 18:06 |只看该作者 |倒序浏览
谁能给讲讲adb,kadb咋用呀?crash文件拿到sun去分析简直是石沉大海,黄花菜都凉了,没办法,谁让咱不会呢

论坛徽章:
0
2 [报告]
发表于 2003-12-15 18:13 |只看该作者

能详细说明一下adb,kadb怎么用吗?

core analysis ..

因为你的应用有CORE DUMP 。。

产生了CORE 文件。。多半是kernal 的 patch 太新了。。

那个FILE 暴大的。。等 SUN 的人。。有的等。

他们不急。你急。。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
3 [报告]
发表于 2003-12-15 18:21 |只看该作者

能详细说明一下adb,kadb怎么用吗?

先用crash命令看看吧,这是我前几天的记录,供参考。
  1. bash-2.03# crash vmcore.0 unix.0
  2. dumpfile = vmcore.0, namelist = unix.0, outfile = stdout
  3. >; u
  4. PER PROCESS USER AREA FOR PROCESS 0
  5. PROCESS MISC:
  6.         command: sched, psargs: sched
  7.         start: Thu Aug  7 17:23:26 2003
  8.         mem: 0, type: exec su-user
  9.         vnode of current directory: e08f0f00
  10. OPEN FILES, FLAGS, AND THREAD REFCNT:
  11. cmask: 0022
  12. RESOURCE LIMITS:
  13.         cpu time: 18446744073709551613/18446744073709551613
  14.         file size: 18446744073709551613/18446744073709551613
  15.         swap size: 18446744073709551613/18446744073709551613
  16.         stack size: 8683520/133464064
  17.         coredump size: 18446744073709551613/18446744073709551613
  18.         file descriptors: 256/1024
  19.         address space: 18446744073709551613/18446744073709551613
  20. SIGNAL DISPOSITION:
  21.            1:  default   2:  default   3:  default   4:  default
  22.            5:  default   6:  default   7:  default   8:  default
  23.            9:  default  10:  default  11:  default  12:  default
  24.           13:  default  14:  default  15:  default  16:  default
  25.           17:  default  18:  default  19:  default  20:  default
  26.           21:  default  22:  default  23:  default  24:  default
  27.           25:  default  26:  default  27:  default  28:  default
  28.           29:  default  30:  default  31:  default  32:  default
  29.           33:  default  34:  default  35:  default  36:  default
  30.           37:  default  38:  default  39:  default  40:  default
  31.           41:  default  42:  default  43:  default  44:  default
  32.           45:  default

  33. >; defproc
  34. Procslot = 0
  35. >; p
  36. PROC TABLE SIZE = 1930
  37. SLOT ST  PID  PPID  PGID   SID   UID PRI   NAME        FLAGS
  38.    0 t     0     0     0     0     0  96 sched          load sys lock
  39.    1 s     1     0     0     0     0  19 init           load
  40.    2 s     2     0     0     0     0  98 pageout        load sys lock nowait
  41.    3 r     3     0     0     0     0  60 fsflush        load sys lock nowait
  42.    4 s   321     1   321   321     0  58 sac            load jctl
  43.    5 s   322     1   322   322     0  38 ttymon         load
  44.    6 s   151     1   151   151     0   0 inetd          load
  45.    7 s    58     1    58    58     0  40 syseventd      load
  46.    8 s    60     1    60    60     0  30 syseventconfd  load
  47.    9 s   131     1   131   131     0  58 rpcbind        load
  48.   10 s   190     1   190   190     0  50 cron           load
  49.   11 s   182     1   182   182     0  10 syslogd        load
  50.   12 r   174     1   174   174     0  58 automountd     load
  51.   13 s   212     1   212   212     0  55 lpsched        load nowait
  52.   14 s   162     1   162   162     0  50 lockd          load
  53.   15 s   164     1   164   164     1  50 statd          load
  54.   16 s   944   151   944   944     0   0 in.telnetd     load
  55.   17 s   200     1   200   200     0  50 nscd           load
  56.   18 s   224     1   224   224     0  53 powerd         load
  57.   19 s   240     1   240   240     0  58 vold           load jctl
  58.   20 s   233     1   233   233     0  49 utmpd          load
  59.   21 s   237     1   237     0     0  12 smcboot        load jctl
  60.   22 s   238   237   237     0     0  22 smcboot        load jctl
  61.   23 s   245     1   245   245     0   0 htt            load
  62.   24 s   247   245   245   245     0  50 htt_server     load
  63.   25 s   315     1   315   315     0  50 snmpXdmid      load nowait
  64.   26 s   324   321   321   321     0  58 ttymon         load jctl
  65.   27 s   259     1   259   259     1  32 dwhttpd        load
  66.   28 s   260   259   259   259     1  59 dwhttpd        load
  67.   29 s   308     1   308   308     0  59 snmpdx         load nowait
  68.   30 s   302     1   302   302     0  30 nfsd           load
  69.   31 s   300     1   300   300     0  58 mountd         load
  70.   32 s   285     1   285   285     0  38 dtlogin        load jctl
  71.   33 s   314     1   314   314     0  21 dmispd         load
  72.   34 s   325   285   325   325     0  59 Xsun           load
  73.   35 s   326   285   326   326     0  50 dtlogin        load
  74.   36 s   340   326   340   340     0  59 dtgreet        load
  75.   37 s   328     1   326   326     0  58 fbconsole      load
  76.   38 r   969   966   969   946     0   0 find           load
  77.   39 s   966   946   966   946     0   0 bash           load jctl
  78.   40 s   341   308   341   341     0   0 mibiisa        load
  79.   41 s   946   944   946   946   100   0 bash           load jctl
  80.   43 s   352     1   352   352     0  58 sendmail       load jctl
  81. >; defthread
  82. Current Thread = ef4abe40
  83. >; stat
  84. system name:    SunOS
  85. release:        5.8
  86. node name:      sunma2
  87. version:        Generic_108529-13
  88. machine name:   i86pc
  89. time of crash:  Sun Aug 10 17:23:21 2003
  90. age of system:  22 hr., 29 min.
  91. panicstr:       BAD TRAP: type=%x (%s) rp=%p addr=%p
  92. panic registers:
  93.         pc: fe8177f9      sp: fec16d3c
  94. >;
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2003-12-15 18:23 |只看该作者

能详细说明一下adb,kadb怎么用吗?

Solaris Crash Analysis Tool 4.0 也可以研究一下

http://wwws.sun.com/software/download/products/3e3af5aa.html

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2003-12-15 18:25 |只看该作者

能详细说明一下adb,kadb怎么用吗?

adb的使用范例,也给你贴一个

Solaris Device Driver 簡介-(05)



* Device Driver Debug



一般來說在 Solaris 上較常用來作 Kernel Debug 的工具有: kadb, adb 等,我個人是比

較常用這兩個工具來做除錯的工作.



* kadb

kadb 可以讓使用者擷取使用者所想要的資訊,諸如堆疊的追蹤, 執行緒的資訊或 cpu 資料

的結構.



首先先確定系統中是否有 kadb

#cd /platform/sun4u

/platform/sun4u

#ls kadb

kadb



- 使用 /etc/halt 指令將系統關閉,回到 ok 提示下

ok setenv boot-file kadb

ok boot

或者

ok boot kadb -->; (Note:此為 64 bit Kernel)



此時系統將會啟動進入 Solaris.



Note:

    Solaris 8 是可以讓您執行 64 bit kernel 或是 32 bit kernel.

   

    * 以 32-bit Kernel 來做除錯工作

    先以 root 身分登錄, 開啟終端機視窗並輸入下列命令:

    # su -

    # cd /

    # halt -y

    系統將會回應下列的結果並回到 ok 提示下:

    syncing file systems... done

    Program terminated

    ok

    在 "ok" 提示下輸入下列命令:

    ok boot kadb -D kernel/unix

    系統將會以此核心檔案來啟動.

    以 root 身分登錄, 開啟終端機視窗並輸入下列命令:

    # su -

    # cd /

    # eeprom boot-file=kernel/unix

    # reboot

    這個時候 Solaris 8 日後的啟動核心檔案便是預設的 32 bit kernel.

   

    * 以 64-bit Kernel 來做除錯工作

    要改變回 64 bit kernel, 僅需執行下列指令.

    # su -

    # cd /

    # halt -y

    系統將會回應下列的結果並回到 ok 提示下:

    syncing file systems... done

    Program terminated

    ok

    在 "ok" 提示下輸入下列命令:

    ok boot kadb -D kernel/sparcv9/unix

    以 root 身分登錄, 開啟終端機視窗並輸入下列命令:

    # su -

    # cd /

    # eeprom boot-file=kernel/sparcv9/unix

    # reboot

    這個時候 Solaris 8 日後的啟動核心檔案便是預設的 64 bit kernel.



當進入系統後您現在就可以按下 (STOP-A) 進入 "kadb:" 提示下.

若要回到系統中只要於 "kadb:" 提示下輸入 :c, 便可以回到系統了.



Note:

    按下 L1-A 或 STOP-A (sparc console), BREAK (sparc tty), 或 CTRL-ALT-D

    (x86 - D not DEL).



現在您便是在 kernel debugger 之中並且可以傾印緩衝區內的訊息, 追蹤堆疊以及檢查剩

餘的記憶體空間, 您可以輸入下列命令來查詢所要的工作:



$c              - 取得現行的堆疊追蹤

$C              - 顯示 frame pointer addresses.

*******************************************************************************

$e

$f

$m

$v

$x

$X

$r

*******************************************************************************

:e              - 執行程式下一步驟

$<msgbuf        - 顯示 msgbuf 的內容

freemem/D       - 顯示剩餘記憶體空間容量

$<cpus          - 顯示 cpu 的資料結構 (long)

$<threadlist    - 顯示所有的執行緒 (very long)

:c              - 回到作業系統中繼續執行

$q              - 回到 OBP 的 ok 提示下

sync            - 在 OBP 的 ok 提示下強迫產生 core dump

lbolt/X         - 顯示 lbolt 的值





* adb



當您的系統核心發生 core dump 的情況時, 您可以直接執行 adb 在下列的路徑找到

core dump 所產生的檔案.

# adb -k /var/crash/`uname -n`/unix.0 /var/crash/`uname -n`/vmcore.0



$C              - 顯示 frame pointer addresses.

$<threadlist    - 顯示所有的執行緒 (very long)

$<panicbuf  - 查看各個單獨的核心執行緒



Note:

    按下 L1-A 或 STOP-A (sparc console), BREAK (sparc tty), 或 CTRL-ALT-D

    (x86 - D not DEL).



18::more    - 開啟螢幕分頁模式 (如同執行 "more"

:c      - 回到作業系統中繼續執行

$<cpus      - 顯示各個 cpu 的執行緒

freemem/X   - 顯示剩餘記憶體的分頁數

$<kmastat   - 顯示剩餘記憶體空間容量

$<msgbuf    - 顯示 msgbuf 的內容

lbolt/X     - 顯示 "system tick" 計數器 (如同系統 "clock" tick)

[       - 如同在 gdb 中的 "next"

]       - 如同在 gdb 中的 "step"

module#f_name:b - 設定 "breakpoint" 在 function f_name(), kernel module 'module'



--------------------------------------------------------------------------------



不幸地, $C 所給予的格式如下:

  functionname:+0x104

只能了解是在哪裡產生 core dump, 您可以 "objdump" 來了解您的 driver 是再哪一行發

生錯誤.

假設您的 Driver 有附加選項 -g 來編譯,

  objdump -d -S yourdriver

這時您將會看到組合語言的輸出, 並以 C 程式語言為註解, 以及 hex offsets.



Note:

    # adb -k -w

    physmem 78ec

    $r

    g0    0                                 l0      0

    g1    0                                 l1      0

    g2    0                                 l2      0

    g3    0                                 l3      0

    g4    0                                 l4      0

    g5    0                                 l5      0

    g6    0                                 l6      0

    g7    0                                 l7      0

    o0    0                                 i0      0

    o1    0                                 i1      0

    o2    0                                 i2      0

    o3    0                                 i3      0

    o4    0                                 i4      0

    o5    0                                 i5      0

    sp    2a1008d1101                       fp      0

    o7    1002bb60      trap_rtt+0x74       i7      0

    y     0

    tstate: 0  (ccr=0x0, asi=0x0, pstate=0x0, cwp=0x0)

    pstate: ag:0 ie:0 priv:0 am:0 pef:0 mm:0 tle:0 cle:0 mg:0 ig:0

    pc    1002bb60 trap_rtt+0x74:   call    preempt

    npc   0

   

    不管是在 kadb 或 adb 中, 輸入 $r 都會見到下列 register 的表示, 簡略說明

    各 register 的意義.

    Windowed Register Address         r Register Address

    ====================================================

    g0 - g7 表示為 global register    r[0]  - r[7]

    o0 - o7 表示為 out register       r[8]  - r[15]

    l0 - l7 表示為 local register     r[16] - r[23]

    i0 - i7 表示為 in register        r[24] - r[31]

    ** 詳細內容請參考 The SPARC Architecture Manual Version 9


雅虎奇摩徵才



更多訊息...


雅虎奇摩徵才
頂尖的網路公司提供您卓越的網路工作生涯! 如果您熱愛暢遊網路,想成為熱門行業的菁英,雅虎奇摩讓您暢遊!
Software Engineer

Associate Marketing Manager

Billing Specialist



[關閉]


undefined
[關閉]


undefined

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2003-12-15 18:45 |只看该作者

能详细说明一下adb,kadb怎么用吗?

精华贴里也有
http://www.chinaunix.net/jh/6/16626.html

论坛徽章:
0
7 [报告]
发表于 2003-12-15 19:21 |只看该作者

能详细说明一下adb,kadb怎么用吗?

问题有商业应用,才产生的CORE 。那个怎么分析。。

core 看不明白呀。。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2003-12-15 19:27 |只看该作者

能详细说明一下adb,kadb怎么用吗?

太帅了,还有没?多多益善

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
9 [报告]
发表于 2003-12-15 19:46 |只看该作者

能详细说明一下adb,kadb怎么用吗?

原帖由 "diag" 发表:
问题有商业应用,才产生的CORE 。那个怎么分析。。

core 看不明白呀。。

老大,什么商业应用啊?看不懂啊。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
10 [报告]
发表于 2003-12-15 19:49 |只看该作者

能详细说明一下adb,kadb怎么用吗?

[quote]原帖由 "mazu"]太帅了,还有没?多多益善[/quote 发表:

呵呵,没有喽。
用GOOGLE搜吧,我印象中还有几篇英文,看了有些收获。
我只保存中文的,所以……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP