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
[59135] OnException 오류는...
아제나 [azena] 1688 읽음    2009-11-18 00:03
OnException 오류가 발생한 상태라면 캡쳐해서 어떻게 하시더라도

프로그램의 정상 작동을 보증할 수 없는 상태가 많습니다.

오류의 원인을 근본적으로 찾아서 해결해야 합니다....

본문 쓴 뉘앙스를 보니까...

아무래도 Thread에서 VCL을 컨트롤하신거 같은데,

Thread에서 VCL에 뭔가 작업을 하실 때는 반드시 Synchronize() 함수를 거쳐서 프로그래밍을 하셔야 합니다.

만약 스레드에서 Form1 의 버튼 Caption을 바꾸고 싶은 경우라고해서 스레드 내부에서 그냥,

Form1->Caption = "아제나";


이런식으로 코딩하면 심각한 문제를 발생 시킬 수 있죠.

절대 Form1이나 VCL로 이루어진 모든 매소드와 맴버를 다이렉트로 엑세스해서는 안 됩니다.

심지어 AnsiString도 매우 주의해서 써야 합니다.

레퍼런스 카운터 때문에 스레드 사용시 메모리 꼬이게 만드는 주된 원인입니다.

그리고 OnException이 생기면 창이 뜨죠.

그 창은, Project 메뉴에 보면, View Project Source 라고 있는데...

그 소스에 보면

		catch (Exception &exception)
		{
			Application->ShowException(&exception);
		}


요런 문장이 있는데, 요기에 ShowException() 부분에서 창을 띄워주는 겁니다.

그러니까 이 부분에서 오류 처리를 해주면 됩니다.

저 함수를 주석처리하면 오류나도 창이 안 뜨죠.

화면에 표시 안 하고 error.log 파일에 기록하고 싶다면, exception 변수의 내용을 파일 열어서 저장하면 되겠죠...







버그는내친구 님이 쓰신 글 :
: Application->OnException 으로
:
: Access Violation 에러 처리 를 좀 해볼려고 하는데
:
: 폼안에서 나오는 에러들은 다 OnException 으로 연결된 함수로 다 들어오는데
:
: Thread 를 하나 만들어서 해봤더니
:
: Thread 안에서 발생하는 Access Violation 에러들은 잡히지가 않더라구요
:
: Thread 안에서 발생하는 오류들도 잡을수 있는 방법이 있을까요?
:
: 좋은 방법좀 부탁드리겠습니다.

+ -

관련 글 리스트
59132 Application->OnException 이걸로도 안 잡히는 오류는 어떻게 하죠? 버그는내친구 2346 2009/11/17
59137     Re:Application->OnException 이걸로도 안 잡히는 오류는 어떻게 하죠? 장성호 3694 2009/11/18
59135     OnException 오류는... 아제나 1688 2009/11/18
59133     Re:추가 질문이 있습니다. 버그는내친구 1419 2009/11/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.