C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[75916] Re:Re:Exception에 대한 기초적인 공부가 안돼 있는거 같습니다
김시환 [godson2] 1205 읽음    2020-07-24 20:47
답변을 주신건 참 감사한데 제가 모자라서 그런지 답변이 확 와닿지는 않네요..

빌더를 사용하면서 수많은 파라메터 설정을 모두 이해하면서 코딩할 여력이 못돼기도 했고 또 이런 파라메터 설정을 하면서 까지 코딩을 해 본적이 없어서 질문을 올린 것입니다.

이번 이슈는 외부 DLL 함수를 호출하는데 있어 발생한 예외발생 이었습니다. 제가 수준이 안돼니 DLL 파일을 뜯어 볼수도 없는 입장이고 이전 개발툴에서는 (빌더 6.0) 발생하지 않았던 이슈이기도 하거니와 이 DLL을 사용하는 코딩의 문제가 아니라 이 DLL 라이브러리 자체가 윈도우 환경 (자바와 연결하는 과정에서의 문제일 수 있음) 에 영향을 받고 있고 제 개발 PC 뿐 아니라 계측기 납품 업체의 개발 엔지니어도 같은 상황이라 같이 원인을 찾는 과정에서 발견된 해결 방법 이었습니다.

답변을  제가 이해하기로는

1. 제 코딩에서는 외부 DLL의 함수를 단순히 호출하는 것 밖에 없으니 따로 오류가 있지는 않을 것이고
2. DLL 내부에서 예외가 발생하는 상황을 예외처리를 통해 슬쩍 넘어가도록 설계가 되어 있고
3. 빌더의 디버깅 모드에서는 그 예외처리 상황을 감지해서 오류를 내 보네고 프로그램을 닫아 버린 것이다.
4. 그러나 실행파일 자체를 그냥 실행할 경우에는 예외가 발생한 상황을 무시하고 넘겨 버림으로 정상적으로 동작하는 것 처럼 보인다.
5.  Native OS Exceptions 설정에서 해당 예외처리에 대해 Debugger 가 아닌 User Program 으로 설정함으로 디버깅 모드에서도 예외 처리를 무시하고 넘겨 버리게 할 수 있다.

이렇게 이해 하면 될까요??

델파잉 님이 쓰신 글 :
:
: 저도 아직 공부중이라 제가 알고있는 선에서 말씀드리면
:
: 프로그램에서 raise EAbort; 나 throw EAbort(); 등으로 던져야 발생하는 예외를
: 동기적 예외 또는 Language Exception 이라고 하고
:
: 널포인터 참조, Illegal Instruction, Devide by zero 등  운영체제가 감지해서 던져주는  예외를
: 비동기적 예외 또는 OS Exception 이라고 합니다.
:
:
: DLL 에 sub 함수가 있다고 하고
:
: procedure sub(p: PDWORD);
: begin
:   p^ := 9;
: end;
:
: DLL sub() 함수를 널 포인터를 넘겨서 참조하게 하면
: Access Violation 예외가 발생하겠죠.
:
: procedure TForm1.Button1Click(Sender: TObject);
: begin
:   sub(nil);
: end;
:
: 그런데 예외가 난다고 해서  try except을 무분별하게 남발해서 사용하면
:
: procedure TForm1.Button1Click(Sender: TObject);
: begin
:   try
:     sub(nil);
:   except
:
:   end;
: end;
:
:
: 컴파일 해서 실행했을 때 아무런 예외 없이 프로그램이 실행됩니다
: 이런 걸 전문용어로 예외를 먹어버렸다고 하기도 하는데요
:
: 잠재적인 버그를 남겨둔채로 예외처리로 버그를 눈가리고 아웅식으로 땜빵해 버린 거에요.
:
: 저런 식으로 예외를 먹어버리면 디버거에서 Access Violation OS Exception 을 받도록 하지 않으면
: 버그를 발견할 수 없게되요.
:
: 빌더님이 질문의도를 잘못 이해하고 게신게 아니고
: DLL 또는 DLL 사용하는 님의 코드에 버그가 있다는 것을 짚어주시기 위해 한발 앞서서 움직이신 거에요
: 저 같아도 잠재적인 버그부터 찾아보는데 집중했을 거고요.
:
: 도큐먼트를 보고서도 Native OS Exceptions이 이해가 안돼는 거로 보면
: 님이 아직 Exception에 대한 기초적인 공부가 안돼 있는거 같습니다.
:
: 기초적인 것도 글로 쓸려니 힘드네요. ^^;;;;
:
: 제가 잘못 알고있는 부분이 있다면 빌더님이 잡아주시면 감사하겠습니다.
:
:
:
:
: 김시환 님이 쓰신 글 :
: : 빌더님 제 질문의 의도를 잘못 이해하신 듯 합니다. 물론 제가 질문을 잘못 올렸을 수도 있지요..
: :
: : 제 질문의 의도는 이 문제를 해결해 달라는 내용이 아닙니다.
: :
: : Native OS Exceptions 은 C++ 빌더 자체에 있는 파라메타 인데 이것이 하는 역할이 무엇이고 User Program 설정과 Debugger 설정의 차이점이 무엇인지 그것이 궁금했던 것이었습니다.
: :
: : 물론 엠바에서 제공하는 내용을 찾아서 읽어 보았는데 그 내용만으로는 정확한 의미를 이해할 수 없었고 빌더 3.0 시절부터 지금까지 한번도 변경 사용해 본적이 없는 파라메터이다 보니 차후에라도 기능에 대한 정확한 이해가 필요하겠다라는 의미에서 올린 것입니다.
: : 또한 이런 오류는 코딩의 문제가 아닌 컴파일 환경에 대한 이해가 필요하고 어지간해서는 잘 발생하지 않는 문제이다 보니 레퍼런스가 없으면 좀처럼 해결하기 어려운 문제이기에 공유 차원에서 올려 놓았습니다.
: :
: : 
: : 그래도 혹시 빌더님이 답변 주시는데 필요한 내용이라면
: : 계측기 : 스페트로메터 Flame (개발사 : Ocean Optics)
: : DLL 라이브러리 : 개발자용은 별도의 라이센스 정책으로 올려 놓을 수 없습니다.
: :              간략하게 설명 드리면 계측기는 USB 로 연결이 되고 WinUSB 라는 드라이버를 통해 제어가 됩니다.
: :              그런데 제어를 위한 라이브러리는 자바로 개발되어 있고 빌더에서 쓰는 라이브러리는 자바 함수를 호출하기 위한 중간
: :              인터페이스 역할을 하는 Wrapper 함수들 입니다. 
: :
: : 샘플코드를 올려 놓아도 개발자 라이브러리를 올릴 수 없어서 의미가 없습니다.
: : 에러가 발생하는 부분은 이미지로 올려 놓았습니다.
: :
: :
: : 빌더(TWx) 님이 쓰신 글 :
: : : 김시환 님이 쓰신 글 :
: : : : 계측 디바이스를 제어하는  외부 DLL 라이브러리를 올려서 테스트 하는데 디버깅 모드에서는 디바이스 제어 관련 함수를 호출하면 Exception 에러가 발생하면서 동작을 안하는데 만들어진 실행파일을 그냥 실행하면 정상적으로 동작을 합니다.
: : : :
: : : : 디버깅을 해야 되는데 계속에러가 나서 동작이 안돼니 난감하던 차에 예전 빌더 6.0에서 개발할 때는 이런 문제가 없던 것이라 6.0과 리오 버젼의 컴파일 관련 파라메터 차이가 뭔지 비교하던 과정에서 첨부한 내용의 Native OS Exceptions 이 6.0 부분에서는 모두 User program 으로 되어 있고 리오나 시드니 버젼에서는 Debugger 로 되어 있는 것을 보고 실제 에러가 발생하는 Access Violation 부분만 User Program 으로 변경해 주었더니 디버깅 모드에서는 에러가 발생하지 않고 정상적으로 동작 및 디버깅이 되었습니다.
: : : :
: : : : 이 Native OS Exceptions 이 정확히 뭘하는 기능인가요?
: : : :
: : : :  6.0에서는 모두 User Program으로 해 놓고 언제 부터인지는 모르겠지만 Debugger로 변경해 놓은 이유는 무엇일까요?
: : :
: : :
: : :
: : :
: : : 답변:
: : :
: : :
: : : 질문도 기본을 갖추어서 합시다.
: : :
: : :
: : : 해당 DLL 파일과...
: : : 계측장비 없이 상황을 재연할 수 있는 샘플 코드... 그리고 디버깅 시에 나타나는 Exception 창 캡쳐파일이
: : : 첨부되지 않으면.. 무의미한 질문.
: : :
: : :
: : :
: : :

+ -

관련 글 리스트
75911 Native OS Exceptions 가 어떤 기능을 하는 것인가요?? 김시환 1188 2020/07/21
75913     Re:Native OS Exceptions 가 어떤 기능을 하는 것인가요?? 빌더(TWx) 1167 2020/07/23
75914         Re:Re:Native OS Exceptions 가 어떤 기능을 하는 것인가요?? 김시환 1075 2020/07/24
75915             Re:Exception에 대한 기초적인 공부가 안돼 있는거 같습니다 델파잉 1207 2020/07/24
75916                 Re:Re:Exception에 대한 기초적인 공부가 안돼 있는거 같습니다 김시환 1205 2020/07/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.