:
endl;AIX专家俱乐部sdRbJn
std:
:
cin>>str;AIX专家俱乐部SHF2S-A8_q
return0;
2{Cw\QTA0}AIX专家俱乐部+j+xYc-bM~
AIX专家俱乐部KQ0i.jDAE
#O&m+H2}*G0寻找coredump
}0v5Qh!
fhZ0AIX专家俱乐部(lJ4QZdD)nEV
应用进程的core产生在其当前工作目录下可以在应用程序内部使用chdir函数切换当前工作目录。
使用procwdx命令可以查看进程的当前工作目录。
系统的core生成在lg_dumplv下并在重启时转移到/var/adm/ras/目录下如果有足够空间的话否则继续保留在lg_dumplv并随时有可能被覆盖。
@8o3`A/Y;N8JZQ*p0AIX专家俱乐部;?
8z~Us9WaG
可以使用errpt-a查看标识C0AA5338SYSDUMP系统core、B6048838CORE_DUMP进程core的详细错误信息获取生成core的进程以及core文件位置。
使用snap–ac收集系统的dump信息。
QDCZo|#G6[0AIX专家俱乐部-[4`\s+jO%sL
coredump信息收集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<可执行文件以及名称>例如snapcore./core./a.out然后在/tmp/snapcore下取下相应的.pax.Z文件。
AIX专家俱乐部i'H+v,xpYU*f
:
t,cu1A1qGZ]Ws0正常的收集过程应该如下:
Y3l}JF8{},A"t+]p0
yWi*JU0snapcore收集过程AIX专家俱乐部!
E5_Wriw\
AIX专家俱乐部F)k;n`%q*U
#snapcore./core./a.out
7BO?
I8T7i,].\4JS~0Corefile"./core"createdby"a.out"
'qO,QVy0
'nc#nNd]|,cZj5h0pass1()inprogress....
YMXw(sZYi0AIX专家俱乐部3F'F#eRqn"W%E&p#W
Calculatingspacerequired.AIX专家俱乐部*_vDLjZ!
P?
8ne
AIX专家俱乐部bkR(x&D
Totalspacerequiredis14130kbytes..
!
}"u.o-BHu@SVH0
2lrX.Ol)CqR0Checkingforavailablespace...AIX专家俱乐部4H^2e9_^0kGX?
7i
AIX专家俱乐部{)hBo[ov~
Availablespaceis807572kbytesAIX专家俱乐部)L%DFS(j
;{;ec+mci0pass1complete.
bcfkhI:
Z[J:
iL"_N0
2|z)~X!
P9X'C0pass2()inprogress....
'W7o$`!
?
'f[0
$@?
6y;wCF0Collectingfilesetinformation.AIX专家俱乐部0Xl'p7\7`-d
7a!
I`Yc0CollectingerrorreportofCORE_DUMPerrors..
"z}%c%MR0|s0AIX专家俱乐部0|_u5\2L_)\
Creatingreadmefile..AIX专家俱乐部O\c6`s$Z,d
AIX专家俱乐部Rp#M.p$H;{He
Creatingarchivefile...
T3z4hK#u0AIX专家俱乐部)]/Bwy4K
Compressingarchivefile....
NU:
]'WLzw$z3\+p0
gablD3}D'r3T0pass2completed.
lXUP*Wd*T,?
X0AIX专家俱乐部+{/HfVM
Snapcorecompletedsuccessfully.Archivecreatedin/tmp/snapcore.
"~Z5{,o3PW0
.WQZY8k0H0#cd/tmp/snapcoreAIX专家俱乐部mh]l*}\pN
#ls
:
p,vX%uG%x0snapcore_352276.pax.ZAIX专家俱乐部)B3S.]9HJ+cv7r
#uncompresssnapcore_352276.pax.ZAIX专家俱乐部2f{1^(Gk8?
#ls
w#G&E*A}$Y3g0snapcore_352276.pax
-Jjkw%nI:
@0#pax-r-fsnapcore_352276.paxAIX专家俱乐部l-`%uz{;\5s
#ls注意需要保证有类似如下文件(可执行文件/core/errpt/lslpp/usr目录等):
hs.v1?
ncdC0READMEerrpt.outusr
2_+H0Nm/l]!
k0a.outlslpp.out
Db'Or9gX-C0coresnapcore_352276.pax
R3Hd3O(?
4Y4?
0#
(w9ecg(yt;c4f0v0
AIX专家俱乐部+WQqW.{Kqh$MamH
AIX专家俱乐部GN8o5{8FNLK/^
II使用dbx分析coredump的例子
Xb]4?
6Q7`xJ0
^4`!
I$`C4h}0dbx是AIX下基于命令行界面的源码级调试工具。
本文档只提供一些基本的dbx分析指令详细内容请参考“GeneralProgrammingConcepts:
WritingandDebuggingPrograms”关于dbx的描述。
WI1h_EHi0
t&k8QtJfg0初步分析
j@zf)aIQ0
7Zj2IP%Pw0#dbxcore
4W7iacY+`M0
AIX专家俱乐部4~IPi6z^b;L1[9t
7?
V\rA(c]0示例AIX专家俱乐部a}8Z*mY3g"K
#dbx./testcoreAIX专家俱乐部5V}%c7uW
Type'help'forhelp.AIX专家俱乐部:
[&en`Ld
warning:
Thecorefileisnotafullcore.Someinfomay
+BR&Mj4|xW4GHD,D0notbeavailable.AIX专家俱乐部%H3\Z&Di0TGS[s)if
[usingmemoryimageincore]AIX专家俱乐部:
\s&n:
b^*RhX-b5zP
readingsymbolicinformation...warning:
nosourcecompiledwith-g
I"v0O.@Dz0AIX专家俱乐部0sle/jh6Xj
Segmentationfaultinraiseat0xd022e1e4AIX专家俱乐部|_`UU;R%V0nu
0xd022e1e4(raise+0x40)80410014lwzr2,0x14(r1)AIX专家俱乐部vf3Nn"jy4@Y
eSjTK@s}x\0
(S,NS6m,N)|+Q:
@']0显示出core发生时当前进程执行到的位置-g编译的情况下能够看到具体的行AIX专家俱乐部S1\U#F;~
(dbx)where
C'k%~-l/q:
bL%@0raise(?
?
)at0xd022e1e4
-ELn8i9P1uA^O0main(0x1,0x2ff22d48)at0x100019c4AIX专家俱乐部be~+a!
]|js
Bzutk(M3Z0
?
)Z*EF*v'uD2w0注意AIX专家俱乐部E;pL4@n/^N}
jXufnH0如果分析的是异地core文件需要采用snapcore收集相关core信息。
对于依赖链接库的情况注意需要增加-pldpath=newpath:
...重新设置链接库路径只有所有依赖的库都已经被链接才能完整的复现coredump故障现场参考dbx的帮助文档获取更多信息。
f#E^p3L0
#cd/tmp/snapcore
Zs6lq6i0#dbx–p/=./a.outcore
F.cfX\!
A"Yc0Type'help'forhelp.
7Rrc!
M"[m6D0[usingmemoryimageincore]
Qt)]:
Olur9h0readingsymbolicinformation...warning:
nosourcecompiledwith-g
n8Dw.K/MEE)_+]^0
2C2wA5DvD8z1B0AIX专家俱乐部.zm`@'dV
IOT/Aborttrapinraiseat0xd01f4f60
#S8Cb7vR+ov00xd01f4f60(raise+0x40)80410014lwzr2,0x14(r1)
1k~'L1q7g0
AIX专家俱乐部~X9A#eai5~JD
AIX专家俱乐部CmLxjK?
'C
列举源码信息
n(SJw%q0AIX专家俱乐部j,tX8J|7J
列举程序源码list需要在运行dbx命令时使用-I指明源码搜索路径并使用-g编译或者汇编码listiAIX专家俱乐部WKR/^L[
(dbx)listimainAIX专家俱乐部e{w;a0t@jr
0x10001924(main)7c0802a6mflrr0AIX专家俱乐部1v4]+mv0t;e0z
0x10001928(main+0x4)bfa1fff4stmwr29,-12(r1)AIX专家俱乐部PtfefY&_%~
0x1000192c(main+0x8)90010008stwr0,0x8(r1)
l?
0\'O[W00x10001930(main+0xc)9421ffa0stwur1,-96(r1)
%O0hcTw'n`(]00x10001934(main+0x10)83e20064lwzr31,0x64(r2)
Zub)jG00x10001938(main+0x14)90610078stwr3,0x78(r1)
m~W/~2`v2F\00x1000193c(main+0x18)9081007cstwr4,0x7c(r1)AIX专家俱乐部?
N\)K[9})L
0x10001940(main+0x1c)83a20068lwzr29,0x68(r2)AIX专家俱乐部H)S;m)U6j%Xe-}
AIX专家俱乐部9H_nHN4@{$h9f;@q
LGy!
\^3cF0列举变量内容
hiD_Y0
y5dPjhL%H0示例代码AIX专家俱乐部)p}3mb|UW
#includeAIX专家俱乐部+w!
k{o*]K
#include
%P-`.y5^8sW/K0intg_test=0;
!
v9z&Kb6G0AIX专家俱乐部'\(lE1h;Yl
inttestfunc(int¶)AIX专家俱乐部*V!
{"Yq:
p3O]
{
d0p?
uy;]`?
!
}0para++;
8r?
;`/p3|0return0;
Fu(l$ih$TO7ns_0}
!
th]rK8O9I0
D|8u)Kg3WYyjcw0intmain(intargc,char*argv[])AIX专家俱乐部'twWaJ)|&bf3O
{
KJ:
wx:
w!
Hz$h0structsigactions;AIX专家俱乐部iHt|7w^0@s$kL
s.sa_handler=SIG_DFL;AIX专家俱乐部fFeR,sb._4^
s.sa_mask.losigs=0;AIX专家俱乐部A*g/E$PKbJ!
y
s.sa_mask.hisigs=0;AIX专家俱乐部'Xr&}?
]:
A_
s.sa_flags=SA_FULLDUMP;
E0^X;PL"{*wS0sigaction(SIGSEGV,&s,(structsigaction*)NULL);
:
};f-e(O]T0
1Y9zl"o'YK0charstr[10];AIX专家俱乐部N$r2Ei2m
g_test=0;AIX专家俱乐部$Q:
Hu9LW:
x9U
:
YVc)A8}&q&a"M0testfunc(g_test);AIX专家俱乐部a#K9P"FZb}
abort();AIX专家俱乐部eV]ba7_O
}AIX专家俱乐部0L@Rg'E-XYH
#xlCtest.C-g
MXmg7VeWAGB0
8kCR(V\C"w:
x0
!
dcY2UEwt-s!
]0以全局变量g_test举例AIX专家俱乐部.nq"Z_g2\z.x
AIX专家俱乐部4vlgP2q/\`
#printg_test显示g_test的取值
F2k(P'c1M,T0
q.CQ)z!
mp6Z0#printsizeof(g_test)显示g_test的大小
.D(l!
O^h3K0
spQ%bo(hN/[0#whatisg_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/Aborttrap(coredump)
kKE!
u1\(u0#dbx./a.outcore
].}`,G!
Uv-O,]DMr0Type'help'forhelp.
g.Ec+v-NA#V!
gD4N0[usingmemoryimageincore]
:
cUyXnqjk$Qg4G&d0readingsymbolicinformation...
o)REqc#^6y'dw)Pb0AIX专家俱乐部y}C0i:
w7[5?
rHN!
D
IOT/Aborttrapinraiseat0xd03365bc
F-h6]b;`00xd03365bc(raise+0x40)80410014lwzr2,0x14(r1)AIX专家俱乐部1E4J1jl;Tc$oe
(dbx)printg_testAIX专家俱乐部j8\Ac|&k
1AIX专家俱乐部E+C[WK;T;s
(dbx)whatisg_test
p0N5um3n#LG8mBD0intg_test;AIX专家俱乐部4hNv;mI+o
(dbx)printsizeof(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:
00000001000000000000000000000000
E%U4JtR8x8G7b9aB00x20000438:
00000000000000000000000000000000
%Gv&Gn%yNW_#}0
5j`5|R$m8c[~0AIX专家俱乐部_4eN2zh^8|
列举寄存器内容
-i*O(o;ig's0
&tl2k;|gLY2HAS9P0列举寄存器内容AIX专家俱乐部myB7J!
q5?
H?
'v4M
FHhdfiBn0(dbx)registers
m5F9{$l8W)h0
/KnTke2s0如下模拟一个简单的coredump对0地址赋值引发coredump的问题AIX专家俱乐部NvHfwjTIM"a
#dbx./a.outcoreAIX专家俱乐部:
A2gI@P_1}
Type'help'forhelp.
P~_2c.c!
Y+?
0warning:
Thecorefileisnotafullcore.Someinfomay
;L[*Ns%IL8m)r0notbeavailable.AIX专家俱乐部P-}U8K2_!
yT
[usingmemoryimageincore]AIX专家俱乐部Npa4p-I
readingsymbolicinformation...warning:
nosourcecompiledwith-g
5y#X2FF#T0
)mws{?
%k4V.Ivg!
h0
U&n7O;X{z&xt0Segmentationfaultinmainat0x10000348AIX专家俱乐部!
X6rOTC
0x10000348(main+0x18)90640000stwr3,0x0(r4)
$KQ7mEp^0(dbx)whereAIX专家俱乐部{)kZ[w]
main(0x1,0x2ff22ccc)at0x10000348AIX专家俱乐部-{fs;n:
?
z/T
(dbx)registers
iS%cm/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