컴퓨터활용/유닉스

dbx 사용 예제 ( IBM )

멜번초이 2008. 10. 21. 10:26
반응형
H프로젝트의 경우는 친절하게도 미들웨어( 티맥스 ) 단에서 코어파일이 발생되면 분석한 파일을 /logs/proframe/cbs/corelog/   디렉토리에 서버_일자시분초.dbg 라는 파일 명으로 text 파일 형태로  떨어뜨려 주고 있어서 개발자가 원인을 쉽게 찾을 수 있도록 지원해 주고 있다.

[cbssvd01@e9812978:/logs/proframe/cbs/corelog/20081021/SFEE5100A]ls -al
total 88
-rwxrwxr-x    1 tmax     tmax           5856 10월 21일 09:30 TX9812087_20081021093001.dbg
-rwxrwxr-x    1 tmax     tmax           5830 10월 21일 09:44 TX9812087_20081021094400.dbg
-rwxrwxr-x    1 tmax     tmax           5830 10월 21일 09:48 TX9812087_20081021094800.dbg
-rwxrwxr-x    1 tmax     tmax           5830 10월 21일 09:56 TX9812087_20081021095600.dbg
-rwxrwxr-x    1 tmax     tmax           5856 10월 21일 09:58 TX9812087_20081021095800.dbg
drwxrwxr-x    2 tmax     tmax           4096 10월 21일 09:58 .
drwxrwxr-x    6 tmax     tmax            256 10월 21일 10:19 ..
[cbssvd01@e9812978:/logs/proframe/cbs/corelog/20081021/SFEE5100A]

위 디렉토리 아래에 일자별, 서비스프로그램별 디렉토리를 만들어 보관하고 있다.

분석의 예로 아래의 코어로그 파일을 살펴 보자.  결론은 흔히들 개발자가 실수하는 PfmNumber 를 %s 로 바로 찍을 때 발생하는 오류가 아닐까 짐작된다.

Segmentation fault in pfmKillSelfProcess at line 978 in file "" ($t1)
"pfmOsWrapper.c"을(를) 읽을 수 없습니다.
pfmKillSelfProcess(signal = 1224736768), line 978 in "pfmOsWrapper.c"
pfmSigExit(sigNum = 11, action = 0), line 414 in "pfmSigHdl.c"
pfmSignalHandler_all(sigNum = 11), line 236 in "pfmSigHdl.c"
noname.strlen() at 0x90000000032a080
_doprnt(??, ??, ??) at 0x90000000031f43c
vsnprintf(??, ??, ??, ??) at 0x90000000031ca3c
_pfmWriteLog(codeType = 'D', area = "AP", fileName = "mfeecal_trsc_ptcl_reg.c", funcName = "c200_trsc_reg_proc", lineNo = 1018, format = "INPUT->sub[context->in_idx].othbr_bil_amt = [%s]", ... = 0x2c38a000000
c200_trsc_reg_proc(context = 0x0ffffffffffec388), line 1018 in "mfeecal_trsc_ptcl_reg.c"
unnamed block in mfeecal_trsc_ptcl_reg.c000_biz_main_proc(context = 0x0ffffffffffec388), line 513 in "mfeecal_trsc_ptcl_reg.c"
mfeecal_trsc_ptcl_reg.c000_biz_main_proc(context = 0x0ffffffffffec388), line 513 in "mfeecal_trsc_ptcl_reg.c"
unnamed block in mfeecal_trsc_ptcl_reg(input = 0x0fffffffffff3898, output = 0x0fffffffffff8a68), line 75 in "mfeecal_trsc_ptcl_reg.c"
mfeecal_trsc_ptcl_reg(input = 0x0fffffffffff3898, output = 0x0fffffffffff8a68), line 75 in "mfeecal_trsc_ptcl_reg.c"
tdlmain._tdlcall() at 0x900000003d9a830
tdlmain.tdlcall2s() at 0x900000003d9bdb8

<2008.10.21>


일반적으로 dbx 를 통한 코어파일을 분석하는 절차는 다음과 같다.

[proframe@dev04:/tmaxFAHG/appbin]$
[proframe@dev04:/tmaxFAHG/appbin]$ dbx
도움말을 보려면 'help'를 입력하십시오.
오브젝트 파일 이름을 입력하십시오(디폴트는 'a.out', 종료하려면 ^D): core
"core" 코어 파일 "THGCC9352I0" 프로그램이 현재 프로그램과 일치하지 않습니다(무시됨).
경고: core을(를) 실행할 수 없습니다.
기호 정보를 읽는 중 ...
(dbx) quit
[proframe@dev04:/tmaxFAHG/appbin]$ file core    ==> core 파일을 만는 녀석이 누구인지 확인
core: AIX core file fulldump 64-bit, THGCC9352I0
[proframe@dev04:/tmaxFAHG/appbin]$ dbx THGCC9352I0 core
도움말을 보려면 'help'를 입력하십시오.
[core에서 메모리 이미지 사용]
기호 정보를 읽는 중 ...

Segmentation fault in leftmost at 0x90000000004d65c ($t1)
0x90000000004d65c (leftmost+0x8) e8c90008         ld   r6,0x8(r9)
(dbx) where
leftmost(??, ??) at 0x90000000004d65c
malloc_y(0xcc, 0x0, 0xfffffffffff6540, 0x0, 0xa, 0xfffffffffff6848, 0x100, 0x46414e00) at 0x90000000004f824
malloc_common_52_36(??) at 0x90000000004c934
sqlalc.sqlalc(??, ??) at 0x90000000292162c
sqlexp.sqgctx(??, ??, ??) at 0x90000000292b178
sqlexp.sqgrct(??, ??, ??) at 0x90000000292b5b4
sqlent.sqlcmex(??, ??, ??, ??, ??) at 0x9000000029297bc
sqlent.sqlcxt(??, ??, ??, ??) at 0x900000002928f34
_pdb_TB_NB_HG_CM_OFANC_F001_fetch(param = 0x09001000a00f9420), line 158 in "pfmDbioTB_NB_HG_CM_OFANC_F001_1_01.pc"
_pdb_TB_NB_HG_CM_OFANC_F001_call(param = 0x090000000004c938), line 225 in "pfmDbioTB_NB_HG_CM_OFANC_F001_1_01.pc"
pfmDbioTB_NB_HG_CM_OFAN(param = 0x00000001100433b0), line 87 in "pfmDbioTB_NB_HG_CM_OFAN.c"
_tdlcall(0xfffffffffff7838, 0xfffffffffff7838, 0xfffffffffff79e0, 0x0, 0x0, 0xfffffffffff7830, 0x100000001, 0x0) at 0x900000000a04ae0
tdlcall2(0xfffffffffff7838, 0xfffffffffff7838, 0xfffffffffff79e0, 0xfffffffffff7830, 0x100000001) at 0x900000000a0557c
_pdb_call(p_param = 0x0fffffffffff7b0d), line 120 in "pfmDbio.pc"
_pfmDbioCall(map_id = "TB_NB_HG_CM_OFANC_F001Fetch", map_func = 경고: 코어로부터 주소 0x65에 액세스할 수 없습니다.
(invalid char ptr (0x0000000000000065)), cnt = 576478347174137116, in = 0x08001000a0088640, out = (nil), cls = 0x000000001052f087, flag = 273870983), line 356 in "pfmDbio.pc"
pfmDbioFetch(map_id = 경고: 코어로부터 주소 0x4400000000000044에 액세스할 수 없습니다.
(invalid char ptr (0x4400000000000044)), out = 0x08001000a00883b4), line 556 in "pfmDbio.pc"
c000_mainProcedure(ctx = 0x4400000000000044), line 179 in "mhg_hgcc9352i0_select.c"
unnamed block in mhg_hgcc9352i0_select(in = 0x00000001101b7e70, out = 0x00000001101b7ef0), line 65 in "mhg_hgcc9352i0_select.c"
mhg_hgcc9352i0_select(in = 0x00000001101b7e70, out = 0x00000001101b7ef0), line 65 in "mhg_hgcc9352i0_select.c"
_tdlcall(0x8001000a0055118, 0x8001000a0055130, 0x0, 0x200000002, 0xfffffffffffa220, 0xfffffffffffa2c0, 0x100000001, 0x200000002) at 0x900000000a04ac0
tdlcall2s(0x8001000a0055118, 0x8001000a0055130, 0xfffffffffffa800, 0x1101b9290, 0xfffffffffffa2c0, 0x100000001) at 0x900000000a05478
_pfmDlCall2S(libname = 경고: 코어로부터 주소 0x6에 액세스할 수 없습니다.
(invalid char ptr (0x0000000000000006)), fname = 경고: 코어로부터 주소 0xd545820424547에 액세스할 수 없습니다.
(invalid char ptr (0x000d545820424547)), input = 0x000000000000000c, output = 0x0000000700000001, file_name = 경고: 코어로부터 주소 0x4200010100에 액세스할 수 없습니다.
(invalid char ptr (0x0000004200010100)), func_name = (nil), line = 1152921504606824752), line 119 in "pfmDlCall.c"
unnamed block in HGCC9352I0.HGCC9352I0(input = 0x00000001100430b0, output = 0x0000000110043130), line 55 in "HGCC9352I0.c"
unnamed block in HGCC9352I0.HGCC9352I0(input = 0x00000001100430b0, output = 0x0000000110043130), line 55 in "HGCC9352I0.c"
HGCC9352I0.HGCC9352I0(input = 0x00000001100430b0, output = 0x0000000110043130), line 55 in "HGCC9352I0.c"
_tdlcall(0x1101b7508, 0x1101b7508, 0x0, 0x200000002, 0xfffffffffffc710, 0xfffffffffffc7b0, 0x100000001, 0x200000002) at 0x900000000a04ac0
tdlcall2s(0x1101b7508, 0x1101b7508, 0x1100426b0, 0x1101b9f30, 0xfffffffffffc7b0, 0x100000001) at 0x900000000a05478
_pfmDlCall2S(libname = "pfmServiceFrame.c", fname = "pfmServiceMainProcessing", input = 0x00000000000000bc, output = 0x4400000000000044, file_name = "PF_D_IOF_StructName", func_name = "HGCC9352I000_OUT", line = 273870983), line 119 in "pfmDlCall.c"
unnamed block in pfmServiceMainProcessing(pfmServiceContext = 0x00000001100425b0), line 204 in "pfmServiceFrame.c"
pfmServiceMainProcessing(pfmServiceContext = 0x00000001100425b0), line 204 in "pfmServiceFrame.c"
_tdlcall(0x1101aec50, 0x1101aec70, 0xfffffffffffd9c0, 0x0, 0x0, 0xfffffffffffd330, 0x100000001, 0x0) at 0x900000000a04ae0
tdlcall2(0x1101aec50, 0x1101aec70, 0xfffffffffffd9c0, 0xfffffffffffd330, 0x100000001) at 0x900000000a0557c
_pfmDlCall2(libname = "pfmFlowControlFrame.c", fname = "pfmCallServiceFlow", args = 0x0000000000000128, file_name = 경고: 코어로부터 주소 0x4400000000000044에 액세스할 수 없습니다.
(invalid char ptr (0x4400000000000044)), func_name = "PF_D_DLC_CallTry01", line = 4565167184), line 82 in "pfmDlCall.c"
unnamed block in pfmCallServiceFlow(ctx = 0x08001000a001d7b8, flow_cfg = 0x08001000a001db54, type = 0, startSecitNumbr = 4899916394579099716, errorSectionSubFlowNumber = 0x08001000a001d6c4), line 298 in "pfmFlowControlFrame.c"
pfmCallServiceFlow(ctx = 0x08001000a001d7b8, flow_cfg = 0x08001000a001db54, type = 0, startSecitNumbr = 4899916394579099716, errorSectionSubFlowNumber = 0x08001000a001d6c4), line 298 in "pfmFlowControlFrame.c"
unnamed block in pfmServiceFrameMainProcessing(ctx = (nil), flow_cfg = (nil)), line 108 in "pfmFlowControlFrame.c"
pfmServiceFrameMainProcessing(ctx = (nil), flow_cfg = (nil)), line 108 in "pfmFlowControlFrame.c"
THGCC9352I0.HGCC9352I0(msg = 0x09001000a035688c), line 113 in "THGCC9352I0.c"
_request_from_clh() at 0x900000000949bdc
_loop() at 0x9000000009490c0
_tmax_main() at 0x900000000949ed4
THGCC9352I0_svctab.main(argc = 0, argv = (nil)), line 37 in "THGCC9352I0_svctab.c"
(dbx) :q
:q
^ 인식되지 않는 명령
(dbx)

(dbx) quit
[proframe@dev04:/tmaxFAHG/appbin]$

<2007.3.13>




반응형