[转]使用DBX分析AIX 下的 CoreDump
博主的新Blog地址http://www.brantchen.com
歡迎訪問:)
-----------------------------------------------------
最近工作涉及到分析core dump文件發現這個好帖就當仁不讓地轉到偶博客了O(∩_∩)O~
PS:
Where can you get dbx?
It is part of bos.adt.debug
# lslpp -w /usr/bin/dbx
File Fileset Type
-------------------------------------------
/usr/bin/dbx bos.adt.debug Symlink
以下轉自http://www.aixchina.net/?6141/viewspace-18882
I core dump 分析入門
AIX專家俱樂部E ?!CR8Z#S)[
環境變量設置
`#X`4\]9h|8]0
;Uy%D]6sQ.i9O0 可以通過 /etc/security/limits 文件對各用戶的基本配置參數包括 core 大小進行限制?;蛘咄ㄟ^ ulimit 更改當前環境下的 core 大小限制。AIX專家俱樂部vF?I9u:B1@]!HC
c\!v_J-r)r3U0 默認情況下應用進程生成 core dump 時都使用文件名 core。為了避免同一工作目錄下的進程 core 相互覆蓋可以定義環境變量 CORE_NAMING=true然后啟動進程這樣將生成名為 core.pid.ddhhmmss 的文件??梢允褂?file core 命令查看 core 是哪個進程產生的。
:EvFu#O@$n*s)g0AIX專家俱樂部0U(p#k2_:J/} G"v$D.E
默認情況下應用進程 dump 時會包含所有的共享內存如果 dump 時想排除共享內存內容可以在啟動進程之前設置環境變量 CORE_NOSHM=true.
R1I rjg0
9kkS%v!@6o0 系統有一個參數 fullcore 用于控制是否在程序 coredump 時生成完整的 core。為避免信息丟失建議打開 fullcore??梢允褂?lsattr –El sys0 查詢是否將 fullcore 打開使用 chdev -l sys0 -a fullcore=true 將 fullcore 狀態更改為打開。也可以在程序內部調用 sigaction 例程設置 fullcore參考如下測試程序AIX專家俱樂部~*Pp~3Qi
@4L3gNuy_0fullcore 設置示例 AIX專家俱樂部n4m4E,c/{ ewz
8g|9zx9Gv'F0//test.CAIX專家俱樂部5D@)bx*?)F #include <iostream>AIX專家俱樂部?&Q'NC!rB*ox #include <signal.h> BY@esPG0AIX專家俱樂部nAZ4@gzd7{(K int main(int argc, char* argv[])AIX專家俱樂部4s$Q0QY5j6N)?6Z,M/z { [-lfWBAL0 char str[10];AIX專家俱樂部J&Bo'CS5q struct sigaction s; azZqqo-oWO-f?0 s.sa_handler = SIG_DFL; AIX專家俱樂部t"?:[j h,jD s.sa_mask.losigs = 0; 4L7nMMB#k lI0 s.sa_mask.hisigs = 0; -C9fo RnP k%M(NN0 s.sa_flags = SA_FULLDUMP;AIX專家俱樂部4REO"xg sigaction(SIGSEGV,&s,(struct sigaction *) NULL); AIX專家俱樂部5h`};avp AIX專家俱樂部)?#dh%SE.H)v std::cout << " input str!\n" << std::endl;AIX專家俱樂部sdR bJn std::cin >> str;AIX專家俱樂部SHF2S-A8_q return 0; 2{Cw\QTA0}AIX專家俱樂部+j+xYc-bM~ |
AIX專家俱樂部KQ0i.jDAE
#O&m+H2}*G0 尋找 core dump
}0v5Qh!fhZ0AIX專家俱樂部(lJ4QZdD)nEV
應用進程的 core 產生在其當前工作目錄下可以在應用程序內部使用 chdir 函數切換當前工作目錄。使用 procwdx 命令可以查看進程的當前工作目錄。系統的 core 生成在 lg_dumplv 下并在重啟時轉移到 /var/adm/ras/ 目錄下如果有足夠空間的話否則繼續保留在 lg_dumplv并隨時有可能被覆蓋。
@8o3`A/Y;N8JZQ*p0AIX專家俱樂部;?8z~Us9WaG
可以使用 errpt -a 查看標識 C0AA5338 SYSDUMP系統 core、B6048838 CORE_DUMP進程 core的詳細錯誤信息獲取生成 core 的進程以及 core 文件位置。使用 snap –ac 收集系統的 dump 信息。
QDCZo|#G6[0AIX專家俱樂部-[4`\s+jO%sL
core dump 信息收集 AIX專家俱樂部;} G!J,R-C_!@
+JR6c,p?-o5_?1}0 如果可能 , 直接在發生 coredump 的機器上用 dbx 分析出結果 , 這樣是最方便的分析方法 . 這種情況下注意不要直接以 root 用戶登錄然后用 dbx 分析 , 而必須在應用程序所屬的用戶下進行此操作 , 因為 core 可能需要依賴應用程序運行時對應環境下的某些庫 , 這樣就要借助應用程序的環境變量 .
xW2^wVZ%P8G;k)el0
1ApsXSv_0 如果需取回生產機上的 core 信息在實驗室分析 , 則需要搜集一些相關信息 . 進程 core 分析一般至少需要依賴應用可執行程序有時還需要包括一些運行時動態庫信息。如果需要收集 core 相關的完整信息可運行 snapcore <core 路徑以及名稱 > < 可執行文件以及名稱 >例如 snapcore ./core ./a.out然后在 /tmp/snapcore 下取下相應的 .pax.Z 文件。AIX專家俱樂部 i'H+v,xpYU*f
:t,cu1A1qGZ]W s0 正常的收集過程應該如下 :
Y3l }JF8{},A"t+]p0
yWi*JU0snap core 收集過程 AIX專家俱樂部!E5_Wriw\
| AIX專家俱樂部F)k;n`%q*U # snapcore ./core ./a.out 7BO ?I8T7i,].\4J S~0Core file "./core" created by "a.out" 'qO,Q Vy0 'nc#nNd] |,c Zj5h0pass1() in progress .... YMXw(sZY i0AIX專家俱樂部3F'F#eRq n"W%E&p#W Calculating space required .AIX專家俱樂部*_vDLjZ!P?8ne AIX專家俱樂部b kR(x&D Total space required is 14130 kbytes .. !}"u.o-BHu@SVH0 2lrX.Ol)Cq R0 Checking for available space ...AIX專家俱樂部4H^2e9_^0kGX?7i AIX專家俱樂部{)hBo[ov~ Available space is 807572 kbytesAIX專家俱樂部)L%DFS(j ;{;ec+mci0pass1 complete. bcfkhI:Z [J:iL"_N0 2| z)~X!P9X'C0pass2() in progress .... 'W7o$`!?'f[0 $@?6y;wCF0 Collecting fileset information .AIX專家俱樂部0Xl'p7\7`-d 7a!I`Yc0 Collecting error report of CORE_DUMP errors .. "z}%c%MR0|s0AIX專家俱樂部0| _u5\2L_)\ Creating readme file ..AIX專家俱樂部O\c6`s$Z,d AIX專家俱樂部R p#M.p$H;{He Creating archive file ... T3z4hK#u0AIX專家俱樂部)]/Bw y4K Compressing archive file .... NU:]'WLzw$z3\+p0 gab lD3}D'r3T0pass2 completed. lXUP*Wd*T,?X0AIX專家俱樂部+{/HfVM Snapcore completed successfully. Archive created in /tmp/snapcore. "~Z5{,o3PW0 .WQZY8k0H0# cd /tmp/snapcoreAIX專家俱樂部mh]l*}\pN # ls :p,vX%uG%x0snapcore_352276.pax.ZAIX專家俱樂部)B3S.]9HJ+cv7r # uncompress snapcore_352276.pax.ZAIX專家俱樂部2f{1^(Gk8? # ls w#G&E*A}$Y3g0snapcore_352276.pax -Jjkw%nI:@0# pax -r -f snapcore_352276.paxAIX專家俱樂部l-`%uz{;\5s # ls 注意需要保證有類似如下文件 ( 可執行文件/core/errpt/lslpp/usr 目錄等 ): h s.v1? ncdC0README errpt.out usr 2_+H0N m/l]!k0a.out lslpp.out ,Db'O r9gX-C0core snapcore_352276.pax R3Hd3O(?4Y4?0# (w9ecg(yt;c4f0v0 |
AIX專家俱樂部+WQqW.{Kqh$MamH
AIX專家俱樂部G N8o5{8FNLK/^
II 使用 dbx 分析 core dump 的例子
X b]4?6Q7`xJ0
^4`!I$`C4h}0dbx 是 AIX 下基于命令行界面的源碼級調試工具。本文檔只提供一些基本的 dbx 分析指令詳細內容請參考“General Programming Concepts: Writing and Debugging Programs”關于 dbx 的描述。
WI1h_EHi0
t&k8QtJf g0 初步分析
j@ zf)aIQ0
7Zj2IP%Pw0#dbx <program name> core 4W7iacY+`M0 |
AIX專家俱樂部4~IP i6z^b;L1[9t
7?V\rA(c]0 示例AIX專家俱樂部a}8Z*mY3g"K
| # dbx ./test coreAIX專家俱樂部5V}%c7uW Type 'help' for help.AIX專家俱樂部:[&en`Ld warning: The core file is not a fullcore. Some info may +B R&Mj4|xW4GHD,D0not be available.AIX專家俱樂部%H3\Z&Di0TGS[s)if [using memory p_w_picpath in core]AIX專家俱樂部:\s&n:b ^*RhX-b5zP reading symbolic information ...warning: no source compiled with -g ,I"v0O.@Dz0AIX專家俱樂部0sle/jh6X j Segmentation fault in raise at 0xd022e1e4AIX專家俱樂部|_`UU;R%V0nu 0xd022e1e4 (raise+0x40) 80410014 lwz r2,0x14(r1)AIX專家俱樂部vf3Nn"j y4@ Y |
eSjTK@s}x\0
(S,NS6m,N)|+Q:@']0 顯示出 core 發生時當前進程執行到的位置-g 編譯的情況下能夠看到具體的行AIX專家俱樂部S1\U#F;~
| (dbx) where C'k%~-l/q:bL%@0raise(??) at 0xd022e1e4 -ELn8i9P1uA^O0main(0x1, 0x2ff22d48) at 0x100019c4AIX專家俱樂部be~+a!]|js |
Bzutk(M3Z0
?)Z*EF*v'uD2w0 注意AIX專家俱樂部E;pL4@n/^ N}
j Xu fnH0 如果分析的是異地 core 文件需要采用 snapcore 收集相關 core 信息。對于依賴鏈接庫的情況注意需要增加 -p ldpath=newpath:... 重新設置鏈接庫路徑只有所有依賴的庫都已經被鏈接才能完整的復現 coredump 故障現場參考 dbx 的幫助文檔獲取更多信息。
f#E^p3L0
| # cd /tmp/snapcore Zs6lq6i0# dbx –p /=./ a.out core F.cfX\!A"Y c0Type 'help' for help. 7R r c!M"[m6D0[using memory p_w_picpath in core] Qt)]:Olur9h0reading symbolic information ...warning: no source compiled with -g n8Dw.K/MEE)_+]^0 2C2wA5DvD8z1B0AIX專家俱樂部.zm`@'dV IOT/Abort trap in raise at 0xd01f4f60 #S8Cb7vR+ov00xd01f4f60 (raise+0x40) 80410014 lwz r2,0x14(r1) 1k~'L1q7g0 |
AIX專家俱樂部~X9A#eai5~JD
AIX專家俱樂部CmLxj K?'C
列舉源碼信息
n(SJw%q0AIX專家俱樂部j,tX8J|7J
列舉程序源碼list需要在運行 dbx 命令時使用 -I 指明源碼搜索路徑并使用 -g 編譯或者匯編碼listiAIX專家俱樂部WKR/^L[
| (dbx) listi mainAIX專家俱樂部e{w;a0t@jr 0x10001924 (main) 7c0802a6 mflr r0AIX專家俱樂部1v4]+mv0t;e0z 0x10001928 (main+0x4) bfa1fff4 stmw r29,-12(r1)AIX專家俱樂部Ptfef Y&_%~ 0x1000192c (main+0x8) 90010008 stw r0,0x8(r1) ,l?0\'O[W00x10001930 (main+0xc) 9421ffa0 stwu r1,-96(r1) %O0hcTw'n`(]00x10001934 (main+0x10) 83e20064 lwz r31,0x64(r2) Zub)jG00x10001938 (main+0x14) 90610078 stw r3,0x78(r1) m~W/~2`v2F\00x1000193c (main+0x18) 9081007c stw r4,0x7c(r1)AIX專家俱樂部?N\)K[9})L 0x10001940 (main+0x1c) 83a20068 lwz r29,0x68(r2)AIX專家俱樂部H)S;m)U6j%Xe-} |
AIX專家俱樂部9H_nHN4@{$h9f;@ q
LGy!\^3cF0 列舉變量內容
hiD_Y0
y5dPjhL%H0 示例代碼AIX專家俱樂部)p}3mb|UW
| #include <iostream>AIX專家俱樂部+w!k{o*]K #include <signal.h> %P-`.y5^8sW/K0int g_test =0; !v9z&K b6G0AIX專家俱樂部'\(lE1h;Yl int testfunc(int ¶)AIX專家俱樂部*V!{"Yq:p3O] { d0p?uy;]`?!}0 para++; 8r?;`/p3|0 return 0; Fu(l$ih$TO7ns_0} !th]r K8O9I0 D|8u)Kg3WYyjcw0int main(int argc, char* argv[])AIX專家俱樂部'twW aJ)|&bf3O { KJ:wx:w!Hz$h0 struct sigaction s;AIX專家俱樂部 iHt|7w^0@ s$kL s.sa_handler = SIG_DFL;AIX專家俱樂部fFeR,sb._4^ s.sa_mask.losigs = 0;AIX專家俱樂部A*g/E$P KbJ!y s.sa_mask.hisigs = 0;AIX專家俱樂部'Xr&}?]:A_ s.sa_flags = SA_FULLDUMP; E0^X;PL"{*w S0 sigaction(SIGSEGV,&s,(struct sigaction *) NULL); :};f-e(O]T0 1Y9zl"o'YK0 char str[10];AIX專家俱樂部N$r2Ei2m g_test =0;AIX專家俱樂部$Q:Hu9LW:x9U :YVc)A8}&q&a"M0 testfunc(g_test);AIX專家俱樂部a#K9P"F Zb} abort();AIX專家俱樂部eV]ba7_O }AIX專家俱樂部0L @ Rg'E-XYH # xlC test.C -g MXmg7VeWAG B0 |
8kCR(V\ C"w:x0
!dcY2U Ew t-s!]0 以全局變量 g_test 舉例AIX專家俱樂部.nq"Z_g2\z.x
AIX專家俱樂部4vlgP2q/\`
#print g_test 顯示 g_test 的取值
F2k(P'c1M,T0
,q.CQ)z!mp6Z0#print sizeof(g_test) 顯示 g_test 的大小
.D(l!O^h3K0
spQ%bo(hN/[0#whatis g_test 顯示 g_test 的類型
'C? ` A#wB0
w3xsU%EP0#print &g_test 顯示 g_test 的地址 AIX專家俱樂部%do-c`tQx
AIX專家俱樂部y'TdrEc.vV,?
#&g_test/16x 顯示從 g_test 的地址開始處連續 16 個 WORD?byte的取值
WI:X2L2rH^avd`0
$d2[P~-mK9F!o0 如果沒有使用 -g 編譯則不能動態獲取 g_test 的類型、大小等信息但能夠得到 g_test 的地址并查詢該地址所在區域存儲空間的值。
.Q?EIz0
&yd ^{$n4z,l0 例如
!mSN6A[0
| # ./a.out H+y7\ z*jKy"C%s0IOT/Abort trap(coredump) ,kKE!u1\(u0# dbx ./a.out core ].}`,G!Uv-O,]DM r0Type 'help' for help. g.Ec+v-NA#V!gD4N0[using memory p_w_picpath in core] :cUyXnqjk$Qg4G&d0reading symbolic information ... o)R E qc#^6y'dw)Pb0AIX專家俱樂部y}C0i:w7[5? rHN!D IOT/Abort trap in raise at 0xd03365bc F-h6]b;`00xd03365bc (raise+0x40) 80410014 lwz r2,0x14(r1)AIX專家俱樂部1E4J1jl;Tc$oe (dbx) print g_testAIX專家俱樂部j8\Ac|&k 1AIX專家俱樂部E+C[ WK;T;s (dbx) whatis g_test p0N5um3n#LG8mBD0int g_test;AIX專家俱樂部4h Nv;mI+o (dbx) print sizeof(g_test) M2q:O:y'z(Di04 Y*f-n@Y&q'\E/c0(dbx) print &g_test 6fj,a~9iY.A00x20000428AIX專家俱樂部,a}7pqvI}Ju-Cc (dbx) &g_test/16xAIX專家俱樂部:B%RCqxS 0x20000428: 0000 0001 0000 0000 0000 0000 0000 0000 E%U4JtR8x8G7b9aB00x20000438: 0000 0000 0000 0000 0000 0000 0000 0000 %Gv&G n%yNW_#}0 |
5j`5|R$m8c[~0AIX專家俱樂部_4eN2zh^8|
列舉寄存器內容
-i*O(o;ig's0
&tl2k;|gLY2HAS9P0 列舉寄存器內容AIX專家俱樂部m yB7J!q5?H?'v4M
FHhdfiBn0(dbx) registers
m5F9{$l8W)h0
/KnTke2s0 如下模擬一個簡單的 core dump對 0 地址賦值引發 core dump 的問題AIX專家俱樂部N vHfwjTI M"a
| # dbx ./a.out coreAIX專家俱樂部:A2gI@P_1} Type 'help' for help. P ~_2c.c!Y+?0warning: The core file is not a fullcore. Some info may ;L[*Ns%IL8m)r0not be available.AIX專家俱樂部P-}U8K2_!yT [using memory p_w_picpath in core]AIX專家俱樂部Npa4p-I reading symbolic information ...warning: no source compiled with -g 5y#X2FF#T0 )mws{?%k4V.Ivg!h0 U&n7O;X{z&xt0Segmentation fault in main at 0x10000348AIX專家俱樂部!X6rOTC 0x10000348 (main+0x18) 90640000 stw r3,0x0(r4) $KQ7mEp^0(dbx) whereAIX專家俱樂部{)kZ[w] main(0x1, 0x2ff22ccc) at 0x10000348AIX專家俱樂部-{fs;n:?z/T (dbx) registers iS%c m/m#u0 $r0:0x00000000 $stkp:0x2ff22bf0 $toc:0x20000414 $r3:0x00000012AIX專家俱樂部,|%NdIW*K*c&C $r4:0x00000000 $r5:0x2ff22cd4 $r6:0xdeadbeef $r7:0x2ff22ff8 Q4n(j!{k+w'G6f `0 $r8:0x00000000 $r9:0x04030000 $r10:0xf0577538 $r11:0xdeadbeefAIX專家俱樂部"\yhh:K#PVN $r12:0xdeadbeef $r13:0xdeadbeef $r14:0x00000001 $r15:0x2ff22cccAIX專家俱樂部d'q7Li@#z:^+y $r16:0x2ff22cd4 $r17:0x00000000 $r18:0xdeadbeef $r19:0xdeadbeefAIX專家俱樂部+P*c(B+o8o/jyA@ $r20:0xdeadbeef $r21:0xdeadbeef $r22:0xdeadbeef $r23:0xdeadbeefAIX專家俱樂部K]2Zi9Ja9QJ $r24:0xdeadbeef $r25:0xdeadbeef $r26:0xdeadbeef $r27:0xdeadbeef 9qOn6X0@O0F0 $r28:0xdeadbeef $r29:0xdeadbeef $r30:0xdeadbeef $r31:0xdeadbeef ['v,z0_,kJg0 $iar:0x10000348 $msr:0x0000d0b2 $cr:0x22282489 $link:0x100001b4AIX專家俱樂部d!`K-n:nD*e2df$Y7D $ctr:0xdeadbeef $xer:0x20000020 %h0~ W"S2v-o'd0 Condition status = 0:e 1:e 2:e 3:l 4:e 5:g 6:l 7:lo (w2f8YY:Y}0 [unset $noflregs to view floating point registers] y |;|C[-@C0 [unset $novregs to view vector registers]AIX專家俱樂部,N#~_p5h in main at 0x10000348AIX專家俱樂部n:ycbA-LWY:V 0x10000348 (main+0x18) 90640000 stw r3,0x0(r4) I-p?$?6B8T&vBkq)a$z0L0(dbx) print $r3AIX專家俱樂部#? dJ5xv1WXU[!NX 0x00000012AIX專家俱樂部 cFe#Qv)|F (dbx) print $r4 Nll"c;X1D)j^0(nil) ,NpL)kMc;PW0 |
AIX專家俱樂部G iOD3s-A3h
tmsr\/m9^;j/C0 這個例子比較簡單從最后匯編指令“stw r3,0x0(r4)”就可以簡單的看到程序 core dump 是因為向 0 地址0+r4存入 18r3 寄存器值造成。AIX專家俱樂部6e0o!S8zh n*Pd
AIX專家俱樂部]$ja$J3uf4a[}
查看多線程相關信息
3u{hPZ9Xp3f0
qk?&nPg]![0 如果以下環境變量采用默認的 OFF 值則系統會完全禁止適當的調試列表這意味著 dbx 命令將顯示不出任何對象
W#C:[hw[i\0AIX專家俱樂部!AV9AO^;l
AIXTHREAD_MUTEX_DEBUGAIX專家俱樂部-l)v N!d'[
3k3a%yx r5G0AIXTHREAD_COND_DEBUG
)V&cJd;^0AIX專家俱樂部b I;h0] x a!pu v
AIXTHREAD_RWLOCK_DEBUG
byit A4]z0AIX專家俱樂部(F\}F6Y\
可以使用
4t!m4D |6P@ KtbT0AIX專家俱樂部 |fv:W?Y1Pm#h
export AIXTHREAD_MUTEX_DEBUG=ON
L@]-r;f+n,v0
BFQ Ogg x@K0 打開 AIXTHREAD_MUTEX_DEBUG。AIX專家俱樂部$s.~A*DtZ
查看線程信息 ?AIX專家俱樂部2s ug.Xl.| Rr1q}
(dbx) print $t1 // 打印 t1 線程的基本信息
SA!YS`+~}#]2V1Z0/}LJLhDHk+U0(dbx) attribute
I"s{7j%S(AU00P:Z+we5~%N9{0(dbx) condition
W6}ZZUb0AIX專家俱樂部(MVV)^e`]3n(dbx) mutex
V;M5m/hPX+eV#FO0AIX專家俱樂部Px DBH/W;X)I2]B(dbx) rwlockAIX專家俱樂部`[,vqG"wQQm
AIX專家俱樂部0ZX3C;HW%p(]5C2bh |(dbx) thread
lL I}{G#A(wo0n"w:~xJ0 例如AIX專家俱樂部 AdU2x!Q{L
AIX專家俱樂部B+d#Tur*X,_%q(thread_id = 1, state_u = 4, priority = 60, policy = other, attributes = 0x20001078)
5^6W[v;u0切換當前線程默認當前線程為收到 core 觸發信號所在線程 AIX專家俱樂部$J[w^2oHqK
(dbx) thread current [tid]
0h8nIs|3fqOr(G0AIX專家俱樂部PQ)WDq;T$R例如> 表明 core dump 時的當前線程
)^-H-|GaM*v-sh x0(dbx)thread
J?-i.Z#[Z"F0 thread state-k wchan state-u k-tid mode held scope functionAIX專家俱樂部`3Ge}:s!l
$t1 wait 0x31bbb558 running 10321 k no pro _ptrgl
8[[[} PZ4FEUM0 $t2 wait 0x311fb958 running 6275 k no pro _ptrgl AIX專家俱樂部1lE4^0o-sU5l+|H
>$t3 run running 6985 k no pro _p_nsleep
8G|6w'b ]hj0 $t4 wait 0x31bbbb18 running 6571 k no pro _ptrgl AIX專家俱樂部&ODV5ch~\Q
$t5 wait 0x311fb9d8 running 7999 k no pro _ptrgl AIX專家俱樂部fh4?hwm!o)r
$t6 wait 0x31bf8f98 running 8257 k no pro _ptrgl AIX專家俱樂部-]T,G(v!@R'H%n*K
$t7 wait 0x311fba18 running 8515 k no pro _ptrgl
7ZR+X0_(F n PMq-r0 $t8 wait 0x311fb7d8 running 8773 k no pro _ptrgl AIX專家俱樂部Zp2_~me1lX v4v
$t9 wait 0x311fbb18 running 9031 k no pro _ptrgl
HSIKtIExA;VQ0 $t10 wait 0x311fb898 running 9547 k no pro _ptrgl
#\O5i@mH0 $t11 wait 0x311fb818 running 9805 k no pro _ptrgl
Ku5Hg+s,^N){0 $t12 wait 0x311fba58 running 10063 k no pro _ptrgl
]3{\oq4\0 $t13 wait 0x311fb8d8 running 10579 k no pro _ptrgl
E,\GC-Rd1`%A0(dbx) thread current 3
F.@3iq j^e0(dbx) where
;QR:?(wO6BX3I2um0_p_nsleep(??, ??) at 0xd005f740AIX專家俱樂部7s!FGl;_D6R&doE|
raise.nsleep(??, ??) at 0xd022de3cAIX專家俱樂部 fR\lYvN)]C
sleep(??) at 0xd0260344AIX專家俱樂部 T^2zm.J$Q
helper(??) at 0x100005ac
{+m8N'f p0(dbx) thread current 4
^U'PUT#p,NbH0warning: Thread is in kernel mode, not all registers can be accessed.
~n o2l"Z Y `0(dbx) where
5xN.vqis:G0ptrgl._ptrgl() at 0xd020e470
CKG"x8a2_(zuc+d0raise.nsleep(??, ??) at 0xd022de3cAIX專家俱樂部(DLk"@D
raise.nsleep(??, ??) at 0xd022de3cAIX專家俱樂部WL:M-Tl6_+Sx
sleep(??) at 0xd0260344
1phE U"Q.~S0helper(??) at 0x100005acAIX專家俱樂部5y9^do&akH
(dbx)
gKhw0N.Sj0
ifPoh0
AIX專家俱樂部5^L#Q!S)Q3XZsD'[
core dump 分析的局限性 AIX專家俱樂部;B ~*vti5?mk
AIX專家俱樂部5R6H.HI"KI
不要期待能依賴 core dump 分析解決所有的問題下面是一個簡單的模擬緩沖區溢出的例子在這個例子中由于緩沖區溢出覆蓋了調用棧信息從而完全丟失了定位依據AIX專家俱樂部nU'w#WNRF_S
| root@/tmp#>xlC test.C -g -o test2AIX專家俱樂部d'Lb5a6Z;vu` zh2H root@/tmp#> j2lQB{ K'~5U0root@/tmp#>./testAIX專家俱樂部+h(O1@/cS1DUZ input str! +Z;mN-Ki3C9z)V0AIX專家俱樂部|I8q2[$A)|F.\-e.N!B 012345678901234567890123456789AIX專家俱樂部$i5l)v+P `{vD)`#}E Segmentation fault(coredump)AIX專家俱樂部oU%LR)} root@/tmp#>dbx ./test2 core #O1sS1t6bAB0Type 'help' for help. &Zl6I,j/JYy4e P0[using memory p_w_picpath in core]AIX專家俱樂部4h'I6|@i2[$B reading symbolic information ... v|?7Oj)^8Z0 SU:[U3?0Segmentation fault in test2. at 0x34353634 tHcs @t00x34353634 (???) warning: Unable to access address 0x34353634 from coreAIX專家俱樂部*`Z)K2D2Ajo$o (dbx) where &Hh(]/X:De/A.j2~(S0warning: Unable to access address 0x34353634 from core U(Dc+{/^1u4Y+m0warning: Unable to access address 0x34353634 from core A1E;P&C1x_0warning: Unable to access address 0x34353630 from coreAIX專家俱樂部3cF5fB"knnE&t warning: Unable to access address 0x34353630 from core hU)Y,Kb*K r0warning: Unable to access address 0x34353634 from core [$e7W*C^%v'D9F0warning: Unable to access address 0x34353634 from coreAIX專家俱樂部.L&@O5K*m.z warning: Unable to access address 0x34353630 from coreAIX專家俱樂部:G@k8Yn6IV warning: Unable to access address 0x34353630 from coreAIX專家俱樂部D$sbO_!i c warning: Unable to access address 0x34353634 from coreAIX專家俱樂部 @7[3EcG warning: Unable to access address 0x36373841 from coreAIX專家俱樂部E Jc9] V?l test2.() at 0x34353634 m-w#~U%S0m{#wIK0warning: Unable to access address 0x36373839 from coreAIX專家俱樂部)Kl#h*qG warning: Unable to access address 0x36373839 from core .@;b+b$dH\0(dbx) D+Jtz-Auh0 |
"c8SSa!K8Lc/i0
D cpS'VAz9k ~q0
| AIX專家俱樂部E-p6ffmOT6AU |
| AIX專家俱樂部3JT#H9BDoV z%B(Ot LF]gB\N1v0 |
AIX專家俱樂部_%Cs?1m[5hN
4[QN%Z&Ho8o,{h0AIX專家俱樂部*Ol5R.Y$|3oBh|
系統 dump 分析 AIX專家俱樂部]!R'VG-Gg}
AIX專家俱樂部)Zs1EWaQ`
環境變量設置
v"`!P5uw2gpc9c|oT({0
B$Bn^y8E,no0 可以通過“sysdumpdev –l”查看系統當前的 dump 配置信息
xR&y^YI0
| root@/#>sysdumpdev -lAIX專家俱樂部[h/M]G/uEx9S"US primary /dev/hd6AIX專家俱樂部d q"?6U^ N secondary /dev/sysdumpnullAIX專家俱樂部 br9X4X Q+F copy directory /var/adm/rasAIX專家俱樂部jq*L(n.M)b/Fa forced copy flag TRUE |R*iF T+@,l0always allow dump FALSE H}1Umq0dump compression ON B9u};zi;Q0L(d1~0 |
AIX專家俱樂部(sp*p QES
AIX專家俱樂部u&gB3{e6hL
注意舊版本的 AIX “always allow dump”可能默認為關閉為方便系統 crash 時問題定位建議打開可使用命令 sysdumpdev –K 或者使用 smitty -> System Environments-> Change / Show Characteristics of System Dump 菜單設置。
?H;V5T}7jdx7r3H0
;dJ6R%s$cb3W0sysdumpdev –L 獲得最近系統產生的 dump 的相關統計信息
W+q2J\/U4B/R0
| #>sysdumpdev -L AENZc"vw8Z @)j00453-039 z"L?\1Pu`0Device name: /dev/hd6AIX專家俱樂部v"@K$e;y3~G%\ Major device number: 10AIX專家俱樂部P$M4h%b2Z"tO Minor device number: 2 \2WX5iT,^o0Size: 18885120 bytes e&dxP&ZI$~i0Uncompressed Size: 113724523 bytesAIX專家俱樂部)S#?B1[2T]j3{)L)X Date/Time: Sat Jul 21 14:20:22 BEIST 2007AIX專家俱樂部jpL&p'f Dump status: 0 ~f7o:Uj!}h@0dump completed successfullyAIX專家俱樂部+z)l#FqF4N0A?)F Dump copy filename: /var/adm/ras/vmcore.2.Z :C/L[MF v[A0 |
AIX專家俱樂部$l]u u}#ba-m)F2Tc%a
AIX專家俱樂部$|R:tY {X7|bm ]c
為保證系統出現 crash 時dump device 能夠保存下 dump 信息需要合理的配置 dump device 的大小可以使用 sysdumpdev –e 估計系統 dump 需要的空間。一般推薦的 dump device 值大小為 sysdumpdev –e 估計值的 1.5 倍。AIX專家俱樂部4@S;JD0pQ
i}#W!jdo0 環境變量設置
GvyD O/Lc*g0
-}D N,n \'o*FFN0 本文檔只提供一些基本的 dump 分析指令詳細內容請參考“KDB kernel debugger and kdb command ”。AIX專家俱樂部af[6r&LR+K
,^#Xl.q]0 初步分析 AIX專家俱樂部)wy8_LF
AIX專家俱樂部`5br.}h7_-Zl
kdb 對 dump 文件分析需要借助于產生 dump 的內核文件 /unix一般 snap –ac 會對此文件進行收集。初步命令如下AIX專家俱樂部C%F,@4o"IZA)G
AIX專家俱樂部mx\n+^#\nz$B C
#kdb ./dump ./unixAIX專家俱樂部(N"p;}~ Q%RUY
AIX專家俱樂部&WP:].I7t1j i5P
示例
,f"HI#N!sWu0
| #kdb ./dump ./unixAIX專家俱樂部2Vr+j|/i The specified kernel file is a 64-bit kernelAIX專家俱樂部nr;jx{x ./dump mapped from @ 700000000000000 to @ 70000007da53bd5AIX專家俱樂部"Sa5@Wt Preserving 1317350 bytes of symbol table ;Y5~C-I&|%o t%K q0First symbol __mulh N;v8qBA,Jy(ir0Component Names: i!A!FX%`[ nR0 1) minidump [2 entries]AIX專家俱樂部0iXD/j'mE.if 2) dmp_minimal [9 entries]AIX專家俱樂部.RG"Ofs3jce5BJ'd-G 3) proc [481 entries]AIX專家俱樂部QzK*x5e'A&@G\m 4) thrd [1539 entries]AIX專家俱樂部;T7F,L5E:R!~!h6g 5) rasct [1 entries]AIX專家俱樂部'[,}M!Z6N2@h*t 6) ldr [2 entries] !TW5s/Z F"M.k0 7) errlg [3 entries]AIX專家俱樂部hI|d9zBz4J 8) mtrc [26 entries]AIX專家俱樂部1PUt7} iC!tS+G 9) lfs [1 entries] m5dI)[/f g;s6e010) bos [2 entries]AIX專家俱樂部$h&|z0D7o_/n@2@ Y HH 11) ipc [7 entries] id;uyu'lMh012) vmm [13 entries] 2^)jM.fq&z \'o013) alloc_kheap [256 entries] /B/bzJx:|qpm%H014) alloc_other [26 entries] y#\8jIG015) rtastrc [8 entries]AIX專家俱樂部*{ZG nK0jV 16) efcdd [20 entries]AIX專家俱樂部d*UcP|jxKU 17) eidedd [1 entries] &FK j3Yy*{018) sisraid [2 entries]AIX專家俱樂部FB(hu+m)]#k4F 19) aixpcm [5 entries] ][8TGE)H8{020) scdisk [11 entries]AIX專家俱樂部 n2vqC/N 21) lvm [2 entries] z?n;fIS%^022) jfs2 [1 entries] M~:dRq Zt*e"L023) tty [4 entries] `~A)Tj:|(X Z024) netstat [10 entries] UbI8D6K%qHi025) goent_dd [7 entries] )Z7HQB6^S026) scsidisk [11 entries] ws5{J8g)WJV027) efscsi [5 entries]AIX專家俱樂部 Yn2_yBh 28) dump_statistics [1 entries]AIX專家俱樂部4\)DGuB Component Dump Table has 2456 entries -Q+NZ}| }8R(xv0 START END <name> %y5ep7QJq[00000000000001000 0000000003BBA050 start+000FD8AIX專家俱樂部;Rq0aEf$@[6r F00000002FF47600 F00000002FFDC920 __ublock+000000 vC&]COm3aw+l0000000002FF22FF4 000000002FF22FF8 environ+000000AIX專家俱樂部T ~G*P(_~X8s:d F"VQ 000000002FF22FF8 000000002FF22FFC errno+000000 7z+J0cEt$I@0F100070F00000000 F100070F10000000 pvproc+000000AIX專家俱樂部DS+t2j5\g F100070F10000000 F100070F18000000 pvthread+000000AIX專家俱樂部eD*@-VKft4v.uif PFT:AIX專家俱樂部7M1g*X/U-c PVT:AIX專家俱樂部T7g3fS4kp id....................0002 /CT.Yd\?F0raddr.....0000000000686000 eaddr.....F200800030000000 `*lH_i2K#eob`0size..............00040000 align.............00001000 S/|r#h$OS)J0valid..1 ros....0 fixlmb.1 seg....0 wimg...2AIX專家俱樂部"X Bp4e"g Dump analysis on CHRP_SMP_PCI POWER_PC POWER_5 machine with 8 available CPU(s) 2^"Fb.b-N\3M0(64-bit registers)AIX專家俱樂部l8|.B)J/hh Processing symbol table...AIX專家俱樂部Ih[&hbjY'}Q{:O4k .......................done #KRzn7B9^VI+h0 |
Z$HIN-xSG*U7H1Q0
1i+q5|$YM0 分析命令示例 AIX專家俱樂部 @k!v&q0db(r{"T3o
3q`h$}f0status 查看各個 CPU 在 dump 時正在運行的進程如AIX專家俱樂部.T].Kd!\(dS#QWr
| 0)> statusAIX專家俱樂部(hJ8Y?3v"^`s CPU TID TSLOT PID PSLOT PROC_NAMEAIX專家俱樂部-b.e_ vd(E[+e~b(V 0 2580F5 600 14C0F6 332 cronAIX專家俱樂部*EXY,BCRn 1 12025 18 D01A 13 waitAIX專家俱樂部%b G U e+N 2 1020BB 258 1580C6 344 exprAIX專家俱樂部~"X X#?$]O~5|o1?6C 3 1502B 21 F01E 15 wait J'N,TgX s*yj \#z0 |
V'`2l]^9Ns~#_4GY0
F!x?R-OzU3? hn0cpu <id> 命令切換當前 CPU默認的當前 CPU 為 cpu0AIX專家俱樂部&~G!E)zR}&C.]
AIX專家俱樂部 XCIID"ZW
(0)> cpu 1AIX專家俱樂部.{6t5vO B
AIX專家俱樂部sL'bFDV6m#U%P
(1)>AIX專家俱樂部rr3p*p$d3y!D
AIX專家俱樂部i3[$jr,WU:~`
打印系統的基本狀態和相關信息
\3En/eaT0AIX專家俱樂部8LD+t'O1BY&]1C1s
(0)> statAIX專家俱樂部$OlV-k`4bm
AIX專家俱樂部\1Y~R6OU%x
打印系統 dump 時內核棧的情況AIX專家俱樂部O lYG%H,y4z7tD
AIX專家俱樂部!Ki5bg5q;PpB
(0)> fAIX專家俱樂部n(U"K5~M
_SFk,U*P&C0lke 用來列出內核代碼對應的相關系統文件信息AIX專家俱樂部*Y"~._kc'c3~
AIX專家俱樂部 k*}f;@7r)dn$V
(0)> lke 003DE9CC
tT,~WY {\[0AIX專家俱樂部HL(wm#X}-V"JG
顯示系統 dump 時最后所在的指令
][ wT1P#sB;jQ,J0
,wBx7[XR0(0)> dr iarAIX專家俱樂部6L1y)Z~|
AIX專家俱樂部$N0K$uv#P6`9]3vo:F8JE
顯示虛擬存儲管理的日志信息其中 Exception value 若為 0000001C 則表示 pagingspace 耗盡
|!o;qb_e0y%G0
uET1ZfhE;b-S H0(0)> vmlogAIX專家俱樂部HTQpw
{${0^oY4k0 顯示進程表的信息AIX專家俱樂部pJbo8czJ
AIX專家俱樂部sX;w,\2]FvM)y3Qc
(0)> proc
(DKP ^0B!\;Z$F0
LSJ&lb-Ah0 顯示線程表的信息AIX專家俱樂部_H _uV\o
AIX專家俱樂部J\"B'IHG`%Ip'o)a
(0)> th
'AN`JLD0
S-o*ox8iGT0 顯示系統的 errpt 信息AIX專家俱樂部Abq2e?NoG*xq4O7Q
AIX專家俱樂部0Wt0Q&b }ck!E
(0)> errptAIX專家俱樂部G?)@:A~q.XK
ERRORS NOT READ BY ERRDEMON (ORDERED CHRONOLOGICALLY):_AHK8C D$Z!F0
A3j*vO?b$qoM;O0Error Record:
TNR*I.u;TS0erec_flags .............. 1AIX專家俱樂部4e8d4?\pm#x
erec_len ................ 54AIX專家俱樂部iSDKoh,y
erec_timestamp .......... 46DCDD9DAIX專家俱樂部+y,k}U:I;I
erec_rec_len ............ 34
0Z9X7d*sX2rF7_(sS0erec_dupcount ........... 0AIX專家俱樂部7J6{TY$[xa
erec_duptime1 ........... 0AIX專家俱樂部 c'E2p?8Zk'[Q7Q6~0g~Y
erec_duptime2 ........... 0
{#aLhSW9J$O+f0erec_rec.error_id ....... DD11B4AFAIX專家俱樂部.M\@y:Qw
erec_rec.resource_name .. SYSPROCAIX專家俱樂部y-z(]X1BZ
00007FFF FFFFD000 00000000 003DE9CC .............=..
,[]l7Gw!x000000000 00020000 80000000 000290B2 ................
-----------------------------------------------------
博主的新Blog地址http://www.brantchen.com
歡迎訪問:)
轉載于:https://blog.51cto.com/brantc/386824
總結
以上是生活随笔為你收集整理的[转]使用DBX分析AIX 下的 CoreDump的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 火狐(FireFox)
- 下一篇: PON的技术优势及前景应用