Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 영어공부
- 체스-TD
- 왕좌의게임
- 여행
- 오라클
- 모바일레전드
- java program
- 관광
- 오큘러스
- oracle
- OGGMA
- Imba Auto Chess
- 가볼만한곳
- 골든게이트
- MLBB
- Python
- Chess-TD
- 게임기
- english study
- 롤
- 영어독해
- 게임
- 이솝우화
- Mobile Legends
- 영어 유머
- English Joke
- 영어유머
- 심플한 게임
- 독해연습
- 임바 오토체스
- Today
- Total
Almost-Native
Pro*C 프로그램에서 Segmentation fault (core dumped) Error 본문
Java 프로그램 개발, IT
Pro*C 프로그램에서 Segmentation fault (core dumped) Error
2023. 1. 21. 13:15오라클 Pro*C 프로그램에서 컴파일 후 실행할때 아래와 같이 Core Dump 에러가 발생하는 경우가 있습니다.
$ make -f aaa1.mk
proc aaa1 INCLUDE=include/ include=/u02/app/oracle/product/19.12.0/dbhome_1/precomp/public/ include=/u02/app/oracle/product/19.12.0/dbhome_1/rdbms/demo/ include=/u02/app/oracle/product/19.12.0/dbhome_1/rdbms/public/ include=/u02/app/oracle/product/19.12.0/dbhome_1/network/public/ PARSE=NONE RELEASE_CURSOR=YES MODE=ANSI
Pro*C/C++: Release 19.0.0.0.0 - Production on Sat Jan 21 13:04:40 2023
Version 19.12.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
System default option values taken from: /u02/app/oracle/product/19.12.0/dbhome_1/precomp/admin/pcscfg.cfg
gcc -c -o aaa1.o aaa1.c -I include/ -I/u02/app/oracle/product/19.12.0/dbhome_1/precomp/public/ -I/u02/app/oracle/product/19.12.0/dbhome_1/rdbms/demo/ -I/u02/app/oracle/product/19.12.0/dbhome_1/rdbms/public/ -I/u02/app/oracle/product/19.12.0/dbhome_1/network/public/ -ansi
gcc -o aaa1 aaa1.o -L/u02/app/oracle/product/19.12.0/dbhome_1/lib -lclntsh
$
$
$ aaa1
-----------------------------------
Segmentation fault (core dumped)
$
$
이거 원인을 찾느라 아주 많이 오랜시간 구글링을 하고 헤맸는데, 결국은 엉뚱한데서 답을 찾게되어 또 헤매는 일 없으라고 여기에 적어 둡니다.
아래는 EMP 테이블에서 데이터를 조회하는 Dynamic SQL 샘플 Pro*C 프로그램입니다.
$ cat aaa1.pc
#include <stdio.h>
#include <stdlib.h>
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char userid[40]= "scott/tiger";
char stmt[1000];
char ret1[50];
long ret2, ret3;
EXEC SQL END DECLARE SECTION;
main(void)
{
EXEC SQL CONNECT :userid;
sprintf(stmt,
"select job, sum(sal) as ret2, sum(sal) over() as ret3 \n"
"from EMP \n"
"group by job, sal \n"
);
EXEC SQL PREPARE SEL_PRE FROM :stmt;
if (sqlca.sqlcode != 0) {
fprintf(stdout, "prepare error(%d) stmt (%s)n", sqlca.sqlcode, stmt);
return(sqlca.sqlcode);
}
EXEC SQL DECLARE C1 CURSOR FOR SEL_PRE;
EXEC SQL OPEN C1;
if (sqlca.sqlcode != 0) {
fprintf(stdout, "cursor open error(%d)n", sqlca.sqlcode);
return(sqlca.sqlcode);
}
printf("\n-----------------------------------\n");
EXEC SQL WHENEVER NOT FOUND DO break;
while (1) {
EXEC SQL FETCH C1 INTO :ret1, :ret2, :ret3;
printf("%s\t\t%s\t\t%s\n", ret1, ret2, ret3);
}
printf("-----------------------------------\n");
EXEC SQL CLOSE C1;
EXEC SQL COMMIT WORK RELEASE;
exit(0);
}
$
얼핏보면 잘못된게 없어 보이는데, 잘 보면 printf() 함수에서 포맷을 잘못 지정한 것을 확인할 수 있습니다.
ret2, ret3 변수는 long 타입이라 %d 와 같은 포맷을 써야 하는데, String 타입에 해당하는 %s 를 썼습니다.
아주 사소한 실수인데, Core Dump 와 같은 살벌한 에러를 만났네요.
결국은 이 Core Dump 에러는 Pro*C 문제는 아니었고, 단순히 C Programming 관련 문제였습니다.
'Java 프로그램 개발, IT' 카테고리의 다른 글
도커(docker) 컨테이너 안에서 vi 실행 안되는 문제 해결방법 (0) | 2023.05.29 |
---|---|
도커(docker) 컨테이너 안으로 로컬파일을 복사 방법 및 권한문제 해결 (0) | 2023.05.29 |
오라클 imp 작업시 에러 (IMP-00010, IMP-00000) not a valid export file, header failed verification (0) | 2022.11.06 |
오라클 impdp 작업시 에러 (ORA-39002, ORA-39070, ORA-29283) invalid file operation (0) | 2022.11.06 |
세로 결과데이터를 가로로(한줄로) 출력하는 쉬운 방법 (LISTAGG 함수) (1) | 2022.08.11 |
Comments