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
[75915] Re:Exception에 대한 기초적인 공부가 안돼 있는거 같습니다
델파잉 [] 1207 읽음    2020-07-24 19:06

저도 아직 공부중이라 제가 알고있는 선에서 말씀드리면

프로그램에서 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에 대한 기초적인 공부가 안돼 있는거 같습니다 김시환 1206 2020/07/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.