본문 바로가기

반응형

컴퓨터활용

xa_NULL trc 파일 티맥스가 DBMS 와 거래할 때의 로그가 보관되는 곳이 xa_NULL 파일이다. 엄밀히 말하면 오라클의 클라이언트 모듈이 남기는 파일이다. (티맥스나 턱시도 같은 미들웨어가 남기는 것이 아님) 모든 거래의 로그를 남기게 되므로 용량이 무지막지하게 크기도 하지만 장애가 났을 때는 중요한 근거 자료가 된다. xa_NULL 파일은 다음과 같이 생겼다. 102946.40932.0: xaocommit: xid=0x1-02c00000038a7126-0000001, rmid=0, flags=0x0 102946.40932.0: xaocommit: rtn 0 보통 파일명은 xa_NULL03252021.tr c 와 같이 중간에 일자가 들어간다. 이 파일구성은 거래시각, 처리 프로세스의 ID가 먼저 나오고 그 다음 라인에 .. 더보기
프로프레임 4.0 스튜디오 heap 메모리 부족 오류 프로프레임 4.0 스튜디오를 사용하다가 메모리 오버 플로우 가 나면서 heap 메모리가 부족하다는 오류가 발생될 경우가 있습니다. 종전에 알기로 eclipse.ini 에다가 옵션을 잡아 주면 되는 것으로 알았는데 실험해 본 바에 의하면 먹히지 않습니다. 대신 proframe.exe 를 실행하는 단축아이콘의 속성에 아래와 같이 Xms, Xmx 메모리를 지정하면 먹히네요. C:\TmaxSoft\ProFrameTP4.0\Studio\proframe.exe -clean -vmargs -Xms256m -Xmx512m 여기서 Xms 는 initaial heap memory size 이고 Xmx 는 Maximum heap memory size 입니다. 보통 1G 이상 메모리를 가지고 있는 노트북이라면 256으로 시작.. 더보기
코어파일 권한속성 변경하기 코어덤프 파일이 파일 속성 600 으로 생성되면 코어파일을 생성한 본인은 가능하지만 다른 사람은 분석하기 어렵다. gdb 로 코어파일을 읽을 수가 없기 때문이다. chmod 명령으로 파일 속성을 666 으로 변경해 주어야 한다. 그런데 chmod로 파일 속성을 변경하는 것은 파일생성자나 수퍼유저만 가능하다. 그래서 chmod와 유사하게 동작하는 프로그램을 작성해 볼 수 있다. 컴파일을 한 후에 실행파일의 소유자의 권한으로 실행될 수있도록 지정해 주는 것이 중요한다. 즉 setuid 비트를 설정해 줘야 한다. 프로그램이름이 change_mode.c 라고 했을 때 컴파일은 cc -o change_mode change_mode.c 로 하면 된다. 컴파일이 완료된 후에 setuid 비트를 켜 줘야한다. chmo.. 더보기
gdb 에서 objectdir 지정하는 방법 gdb 실행 후 onjectdir 이나 directory 명령을 실행하면 현재 설정된 디렉토리를 볼 수 있다. 이 때 2개의 디렉토리가 보이는데 $cdir:$cwd 다. (gdb) directory Reinitialize source path to empty? (y or n) Source directories searched: $cdir:$cwd (gdb) directory /xxxdev/obj Source directories searched: /xxxdev/obj:$cdir:$cwd (gdb) objectdir /yyydev/obj Object directories searched: /yyydev/obj:$cdir:$cwd 그런데 일일이 이렇게 지정해 주기 귀찮으면 gdb 를 실행하기 전에 objec.. 더보기
리눅스 디렉토리 사용량 디렉토리별 사용량을 보려면 du 명령을 사용한다. 그런데 그냥 du 명령을 치면 하위 디렉토리까지 다 보여 주게 되므로 정신이 없다. 현재 디렉토리 기준으로 1 레벨만 보고 싶다면 --max-depth 옵션을 사용한다. du --max-depth=1 그러면 내가 접근할 수 없는 디렉토리의 경우 "허가 거부" 메시지가 뜨게 된다. 이런 거 지저분해서 보기 싫다면 du --max-depth=1 2>/dev/null "허가 거부" 등과 같은 오류 메시지는 화면으로 출력되지 않도록 한다. 디렉토리 사용량 크기별로 정렬해서 보면 편할 것이다. du --max-depth=1 2>/dev/null | sort -n 다른 이야기 지만 사용량을 byte 단위가 아닌 K, G로 보고 싶다면 -h 옵션을 사용한다. 더보기
U2L프로젝트 문자열 이슈 유닉스로 개발된 C 소스를 리눅스에서 컴파일만 하고서 돌리면 잘 돌아갈까? 대부분 프로그램들은 잘 돌아가지만 몇몇 코드들은 손을 봐줘야 하는 것들이 있다. 그중에서 함수로 아규먼트를 넘길 때 문자열 이슈가 있다. 특히 readonly 문자열 값을 아규먼트로 넘길 때 끝처리에서 다르게 동작한다. 001: void function_test_str( char *str ) { 002: char tmp_str[100]; 003: size_t len; 004: 005: len = strlen(str); 006: strncpy( tmp_str, str, sizeof(tmp_str)); 007: tmp_str[len] = 0x00; /* 확실한 막음처리 */ 008: printf("len=[%u] str=[%s] tm.. 더보기
U2L프로젝트 ltoa 이슈 IBM이나 HP 유닉스에서 사용했던 ltoa 함수를 리눅스에서는 지원하지 않는다. int형 변수의 값을 char 배열에 넣는 함수를 사용하고 싶다면 할 수 없이 sprintf() 함수를 사용하는 방법을 사용해야 한다. 하지만 ltoa() 는 바로 문자열 포인터를 return 받기 때문에 바로 사용하면 되었지만 sprintf() 를 사용할 경우 결과를 저장할 변수를 하나 선언해야하는 번거로움이 있다. sprintf(버퍼,"형식지정자", 값) 예를들어, long cnt = 400; char str[100]; sprintf(str, "%ld", cnt ); 라고 하면 버퍼에 문자열 400 이 들어간다. 프로그램내에서 빈번하게 사용된다면 매크로로 선언해 놓고 사용하는 것을 권장한다. #define LTOA( _.. 더보기
U2L프로젝트 printf 이슈 포매팅으로 패딩하여 출력하거나 문자열을 구성할 때 동작의 차이가 있다. printf("[%06s]\n", "AB"); 라고 했을 때 유닉스에서는 0 이 좌패딩되었다. 그런데 리눅스에서는 스페이스가 좌패딩된다. printf() 는 출력하는 거라 로직에 영향을 미치지 않을 수 있다고 치더라도 포매팅을 사용하는 sprintf 도 동일한 현상이 발생된다. 이런 로직의 경우는 프로그램 속에 숨어 있어서 찾아내기 어렵기 때문에 꼼꼼한 테스트가 필수이다. printf 함수의 포매팅으로는 커버할 수 없기 때문에 별도의 함수를 만들어야 하기 때문에 상당히 번거롭게 된다. 더보기
U2L프로젝트 NULL 이슈 유닉스로 개발된 C 소스를 리눅스에서 컴파일만 하고서 돌리면 잘 돌아갈까? 대부분 프로그램들은 잘 돌아가지만 몇몇 코드들은 손을 봐줘야 하는 것들이 있다. 리눅스에서는 sprintf 를 사용할 때도 유닉스와 다르게 동작해서 오류가 발생되는 경우가 있다. 유닉스에서는 멀쩡히 잘 돌아가던 프로그램을 리눅스에서 돌리면 오류가 발생되는 경우로서 sprintf()가 있다. memset(b, 0x00, sizeof(b)); sprintf(a, "name:%s" , b ); printf("%s\n", a ); 이런 소스의 경우 b 값이 NULL일 경우 유닉스에서는 아무 것도 찍히지 않는다. name: 이라고만 찍한다. 그러나 리눅스에서는 "(null)" 이라는 문자가 찍히게 되면서 name:(null) 이라고 찍힌다.. 더보기
U2L 프로젝트 fclose() 이슈 유닉스 프로그램을 리눅스로 변환할 때 발생되는 이슈들 1. 변수가 NULL 일 때 access 하면 코어덤프가 발생되다. 유닉스에서는 이렇게 민감하지 않아서 coredump 가 나지는 않았았으나 linux 에서는 변수가 NULL 일 때 참조를 하면 바로 coredump 가 발생된다. 예를 들어 유닉스에서는 fclose(fp); 후에 다시 fclose(fp); 를 호출해도 코어덤프 발생되지 않았으나 리눅스에서는 짤없이 죽는다. 그래서 wrapper 함수를 만들어야 한다. int fn_fclose(FILE *_fp) { if( _fp != NULL && _fp->_fileno >= 0 ) return fclose(_fp); return 0; } 여기서 file structure pointer 변수가 fclo.. 더보기
쉘에서 date 사용 기본 일자 포맷으로 출력할 때는 그냥 단순히> date -I 2020-02-22 date 명령어에서 포맷을 주려면 date뒤에 +로 시작한다. 포맷이 붙어 있을 경우 ' 로 감싸지 않아도 되지만 스페이스가 들어가면 ' 로 감싸줘야 한다.> date +'%F %T' 2020-02-22 13:23:53 $로 date 명령을 실행하여 변수처리를 할 수 있다.> echo $(date +%F_%T) 2020-02-22_13:24:23 > CUR_DATE=$(date +%F_%T) > echo $CUR_DATE 2020-03-21_13:34:23 동일한 효과를 얻을 수 있는 ` 문자로 date 명령을 실행할 수 있다.> CUR_DATE=`date +%F_%T > echo $CUR_DATE 2020-03-21_13:.. 더보기
티맥스 서버가 수행중 죽을 때 티맥스 서비스를 호출했는데 느닷없이 프로그램이 죽었다. 정확하게 말하면 IPPR 서비스를 수행 중 해당 서버가 죽고 재기동 된다. 어떤 신호도 없이 서버가 죽는 경우에 뭐 부터 점검해야 하는 것인가. ulimit -a core file size (blocks, -c ) 0 stack size (kbytes, -s) 8192 여기서 스택사이즈가 너무 작게 잡혀 있을 경우 내부 변수를 선언해 나가다가 한계를 넘어가면 메모리 오류가 나면서 프로그램이 죽게 된다. tmax 계정의 .bash_profile 에 다음과 같이 스택사이즈를 늘려 준 후 재접속하고 tmax를 재기동 하면 오류 없이 거래가 통과되었다. ulimit -c 99999999 ulimit -s 143360 Linux 3.10.0 x86_64 Re.. 더보기
[프로프레임] Conditions can't call the right function 프로프레임에서 dbio를 호출하였는데 오류가 발생하였다. 오류 번호로 리턴된 값은 -90001002 이고 오류메시지는 [DBIO] Conditions can't call the right function 이다. 어떤 경우에 이런 오류가 나오는 것일까? 처음 프로프레임 dbio 를 array fetch 로 작성하였을 때 관련한 배열처리 내부 함수들이 만들어 진다. 이런 array fetch dbio를 프로그램에 끌어다 사용하였을 것이다. 그 후에 개발자가 dbio 를 단건 fetch 로 변경하였다. 그리고 dbio를 컴파일 했다. 그러나 정작 이 dbio를 사용하고 있는 프로그램은 다시 컴파일을 하거나 재구성을 하지 않았다. 이런 경우에 프로그램이 실행될 때는 이전의 array fetch 함수를 계속 호출.. 더보기
vi 에서 탭 문자 찾기 >Is there a handy command to display all the TAB characters in a file? >And for a large file, is there a way I can search it in VIM? One easy way is ":set list". It also shows other control characters, but it may be exactly what you need. Turn it off with ":set nolist". If that doesn't do it, you can do / C-V C-I (slash control-V control-I) to search for a tab character. If you have highlighting.. 더보기
클론질라 이용한 윈도우10 백업 복원 내가 가지고 있는 울트라 노트북은 128GB SSD 하드 디스크를 가지고 있다. 그런데 이것으로는 용량이 부족해서 불편하다. 그래서 이번에 256GB SSD 로 새로 구매하여 확장하기로 했다. 이베이에서 256기가 SSD 하드디스크를 8만원에 주문하였다. 5년전에 30만원이었는데 그동안 많이 싸졌네. 하기사 이베이에서 ASUS UX31 노트북 자체가 30만원에 팔리고 있는 것을 보니 격세지감. 내가 살 때는 100만원 넘게 줬음. 윈도우 10이 깔려 있는 하드디스크를 그대로 백업해서 복원해 넣는 것이 과제인데 윈도우10이 제공하는 이미지 백업 기능을 먼저 시도해 봤으나 실패했다. 내 컴퓨터는 EFI라는 방식의 부팅 시스템을 이용하고 있기 때문에 간단하게 해결되기는 어려웠다. 윈도우 부팅 USB로 부팅한 .. 더보기
sprintf함수에서 포매팅 처리 방법 sprintf함수에서 포매팅 처리 방법을 실험해 봤다. 1) 숫자처리 %4d는 네 자리의 십진수를 표시하되 네 자리가 안될 때에는 공백으로 대체합니다. %.4d는 네 자리가 안될 경우 0으로 대체합니다. 2) 문자열 처리 %.10s 는 space_buf 값에서 최대 10문자만 출력합니다.이것은 %10s 처럼 중간에 쩜(.) 이 없는경우와 다릅니다.(.)이 없으면 즉 %10s 라면 무조건 자리를 10개 확보하고 그곳에 space_buf 의 값을출력하는데 만얀 space_buf 의 내용이 10개가 모라라면 나머지 공간은앞부분에 공백으로 남습니다. 그러나 %.10s 는 10개가 모자라도 공백을 주지 않고 바로 다음것을 이어서 씁니다. 예)printf([%d], 1234 ); ==> [1234] printf([.. 더보기
eclipse feature.xml 이클립스 플러그인들을 Update 하게 되면 그 히스토리와 최신 적용된 버젼이 feature.xml 에 보관된다. Update 사이트의 URL도 기록되어 있기 때문에 어디에서 다운로드 받게 되는 지 확인할 수 있다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281.. 더보기
ipcs, ipcrm 으로 공유메모리 삭제 방법 프로프레임에서 사용하는 쉐어드메모리는 TDL 과 Tcache 가 있다. 보통 이것은 티맥스 유저보다는 프로프레임 유저로 생성한다. 어느 유저로 생성하던 지간에 tdlinit 명령을 실행할 때는 tmdown 상태에서 하는 것이 좋다.생성된 공유메모리가 제대로 해제 되지 못 한 경우에 강제로 삭제하는 방법은 ipcrm 명령을 사용한다. 삭제하기 전에 ipcs 명령으로 현재 생성되어 있는 키값을 조회한다. 많기 때문에 user 로 grep 하여 범위를 줄여서 보면 쉽게 찾아 낼 수 있다. 아래 예제는 75000번을 키로해서 생성된 메모리를 삭제하는 절차를 보여주고 있다.문제의 키값을 찾았으면 ipcrm 명령으로 지워 주자. 쉐어드메모리 키는 생성한 유저로 삭제할 수 있다. 12345678910111213141.. 더보기
pfmNumCalc 인자 개수 체크 쉘 | 개요 프로프레임에서 수식 계산에 사용하는 pfmNumCalc 라는 함수가 있다. 계산식을 자유롭게 기술할 수 있기 때문에 참 유용한 함수이고 많이들 사용한다. 그런데 문제는 파라미터 포매팅 개수와 아규먼트 인자의 개수가 다를 경우에 문제가 발생될 수 있다. 개수가 다를 경우에 어떤 예기치 않은 문제가 발생될 수 있기 때문에 꼼꼼하게 체크해야 하지만 워낙에 개발자들이 바쁘시다 보니 많이들 놓칠 수 있다. 쉘 프로그램을 이용해서 일괄적으로 한꺼번에 모든 프로그램의 인자 개수를 체크하는 로직을 만들어 봤다. 프로프레임 엔지니어나 일반 개발자들도 잘 응용해서 사용하면 유용할 거 같아서 공개한다. 필요한 부분을 수정해서 본인의 용도에 맞게 사용하면 좋을 것이다. | 아이디어pfmNumCalc 함수 뒤에는 포매.. 더보기
[프로프레임] 서비스로그 추출 쉘 개발자들이 거래를 하고 바로 로그를 보기 위해서 로그파일을 tail 걸곤 한다. 좀 더 쉽게 해당 거래 로그만 추출하여 볼 수 있다면 편할 수 있다. 아래 스크립트를 응용하여 자기에게 맞게 편집하여 사용하면 편하게 볼 수 있지 않을까 싶다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 # 서비스명을 입력하지 않으면 입력요청 if [ $# -lt 1 ];then echo "Which Service ?? \c" read SVC else SVC=$1 fi CHK=`echo $SVC | cut -.. 더보기
Lock option has no effect for the map 프로프레임에서 사용하는 DBIO의 경우 select 하거나 fetch 할 때 pdb_lock 옵션을 이용할 수 있다. DBIO 스튜디오에서 Lock Query 생성을 체크하고 소스생성, 컴파일 할 때 생성된 SQL을 보면 WAIT 옵션이 뒤에 붙어 있는 것을 볼 수 있다. dbio 내부에서 sql을 실행하기 전에 input 의 pdb_lock 변수에 PDB_LOCK 값이 세트되어 온 경우에 SQL에 WAIT 절이 있는 지 체크하게 되고 SQL 에 WAIT 절이 없는데 LOCK option을 사용하겠다고 했을 때 "Lock option has no effect for the map" 메시지가 나오게 된다. 하지만 개발자가 dbio_in.pdb_lock = PDB_LOCK; 와 같이 코딩한 적도 없는데도 D.. 더보기
dlopen error : Permission denied 프로프레임 환경에서 프로그램 실행시 [dlopen error Permission denied] 함수 [mxx_dacom_msg_deco]에 대한 dlcall이 실패하였습니다 [seq_no:14984545] 라는 메세시지를 만날 때가 있다. mxx_dacom_msg_deco.c 를 컴파일하여 libmxx_dacom_msg_deco.so 를 만들고 이 libmxx_dacom_msg_deco.so 를 dlupdate 한 후에 실행했을 때 나온 메시지 이다. libmxx_dacom_msg_deco.so 는야 dlupdate 될 때 $TDLDIR/run/ 아래에 복사되어 지므로 접근 권한이 없지 않겠지만libmxx_dacom_msg_deco.so 를 만들때 링크된 libclntsh.a, liblicense.a 라.. 더보기
[프로프레임] dlupdate 상태확인 쉘 프로프레임에서 사용하는 dlupdate 는 정말 유용하다. 유닉스C 에서 자바에서와 같이 실시간 모듈이 동적으로 반영될 수 있기 때문이다. 이렇게 dlupdate 된 모듈이 잘 메모리에 적재가 되었는 지 체크하는 쉘이 있어 소개한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 .. 더보기
디렉토리 사용량 조회 디렉토리 사용량을 볼 때는 보통 du 명령을 많이 사용한다. 그런데 이렇게 du 명령을 사용하면 하위디렉토리까지 모두 표시되기 때문에 불편할 때가 있다. 내가 원하는 것은 특정디렉토리 하위의 디렉토리만 사용 사이즈를 구하고 싶기 때문이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #!/usr/bin/ksh if [ $# -eq 0 ]; then rootdir=./ else rootdir=$1/ fi for dir in `ls $rootdir` do if [ ! -d $rootdir$dir ]; then continue fi du -k -s $rootdir$dir 2> /dev/null done Colored by Color Scripter cs 11 line 에서 디렉토리가 .. 더보기
디스크 사용량 조회 디스크 사용량을 보는 명령은 df -k 을 사용한다. 이것을 좀 더 응용한 쉘 프로그램을 소개한다. AIX 에서는 df -k 명령을 이용하면 아래와 같이 나온다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ df -k Filesystem 1024-blocks Free %Used Iused %Iused Mounted on /dev/hd4 1048576 481888 55% 12328 11% / /dev/hd2 4718592 165192 97% 58400 56% /usr /dev/hd9var 14680064 4061824 73% 9015 1% /var /dev/hd3 10485760 7397560 30% 610 1% /tmp /dev/hd1 16777216 3857024 78% 8581.. 더보기
일괄 거래 재거래 프로프레임에서 제공하는 pfmtcl 명령을 이용하여 거래를 재현할 수 있다. 하나이던 여러개 이던 거래 전문을 별도의 파일로 저장한 후에 다음 쉘을 이용하여 거래를 재현할 수 있다. 아래 쉘 프로그램은 text 로 저장된 거래 전문 파일을 한 line 씩 읽으면서 pfmtcl 거래를 하는 예제이다. 이 때 pfmtcl 은 거래 전문을 읽어서 IPPR로 거래를 날릴 수 있는 기능이 제공되어야 한다. (여기서는 pfmtcl -s 명령이라고 가정한다, 사이트 마다 옵션이 다름) 사용옵션은 pfmtcl 명령을 실행하면 사용법을 보여주기도 한다. 또는 매뉴얼을 참고한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30.. 더보기
[프로프레임] 거래전문 추출 Pro*C 오라클에서 제공하는 proc 샘플을 이용하여 작성하였다. 프로프레임 3.0 에서는 거래를 할 때 마다 이미지로그 테이블에 거래 전문을 보관한다. 이것을 조회하여 text 파일로 떨어트린다. 그런 후에 이 전문 정보를 이용하여 재거래를 해 볼 수 있다. 재거래를 하기 위해서는 pfmtcl 이라는 명령을 이용한다. 이미지로그파일은 일자별로 나누어져 있기 때문에 일자를 입력값으로 받아야 한다. 프로그램내에서 Dynamic SQL을 이용하기 위하여 Prepared Statement 방식을 이용하였다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43.. 더보기
[프로프레임] tdlinit.sh Tmax에서 기본 제공하는 tdlinit 명령은 $TDLDIR/mod/ 에 생성되어 있는 symbolic link 정보대로 .so 라이브러리를 복사하여 $TDLDIR/run/ 에 복사를 한 후에 메모리에 적재까지 하게 된다. tdlinit 명령을 실행하기 전에 반드시 Tmax를 내려야 한다. Tmax가 기동 중에 tdlinit 명령을 실행하게 되면 메모리에 올려져 사용되고 있을 라이브러리들은 삭제가 되지 않기 때문에 교체하는 과정에서 문제가 발생될 수 있다. tdlinit 은모듈 속 global function명과 run 하위의 실제 물리파일간의 hash 매핑정보를 Shared Memory에 적재하는 과정으로 제법 시간이 걸린다. 따라서 tdlinit -b 명령을 실행할 경우 $TMAXDIR/tdlcal.. 더보기
리눅스 민트 설치 바야흐로 리눅스의 시대가 도래하고 있다. 예전에는 리눅스 설치하기도 어려웠을 뿐 아니라 사용하기에도 상당히 낯설었던 기억이 있다. 그래서 힘들게 리눅스를 설치하고도 그 다음에 뭐 할 만한 것이 없어서 삭제했던 기억이 많다. 그러나 이제는 많은 종류의 PC용 리눅스가 개발되어 보급되고 있다. 사용자 인터페이스면에서도 상당한 진보가 되어서 초보자도 쉽게 설치하고 가정용, 업무용으로도 사용할 수 있는 수준으로 발전되었다. 집에서 굴러 다니는 많은 노트북 PC가 있다. 요즘 아이들은 이런 노트북은 게임이 안 돌아간다는 이유 때문에 거들떠도 안 본다. 사양이 떨어지는 이런 노후 컴퓨터에 리눅스를 깐다면 아직도 충분히 사용할 수 있는 장비가 될 수 있다. 그래서 리눅스 설치를 시도하고 그 경험을 기록해 놓는다. |.. 더보기
AIX dbx 사용 core 분석 C 프로그램에서 늘 마주치는 것이 코어덤프인데 어떤 코드 때문에 발생했는 지 찾을 때 사용하는 것이 gdb 와 dbx 명령이다. AIX 에서는 dbx명령을 주로 사용한다. 이렇게 dbx 를 사용하여 추적하기 위하여서는 컴파일 할 때 -g 옵션을 줘서 컴파일을 해 줘야 한다.| 샘플프로그램 작성 샘플 프로그램인 sfw0023.c 에 아래와 같이 코어덤프가 발생할 코드를 기술한다. ( 324 라인 ) bug 라는 포인터에는 메모리가 할당되지 않았기 때문에 값을 write 하면 core 덤프가 발생하게된다. 12345678910111213 318 static long 319 a000_validation(sfw0023_ctx_t *ctx) 320 { 321 long rc = RC_NRM; 322 char *bu.. 더보기

반응형