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 안에서 발생하는 오류들도 잡을수 있는 방법이 있을까요?
:
: 좋은 방법좀 부탁드리겠습니다.