|
예외가 발생시 처리 하는 부분인데요
다음과 같습니다.
Application->OnException = ExceptionFilter;
void __fastcall Tfrm_Main::ExceptionFilter(TObject *Sender, Exception *ExceptionCode)
{
AnsiString a_Msg;
TStringList* ErrMsg = new TStringList;
ErrMsg->Text = ExceptionCode->Message;
a_Msg = "Exception Class = " + Sender->ClassName();
a_Msg += ENTER;
a_Msg += AnsiReplaceStr(ExceptionCode->Message, ::CR, ENTER);
ExceptionLogs(Sender->ClassName(), a_Msg);
delete ErrMsg;
return;
}
이런식으로 되어 있는데요
가끔씩 보면
TcxCustomInnerTextEdit
Exception Class = TcxCustomInnerTextEdit
'U0088' is not a valid integer value
TArtPanel
Exception Class = TArtPanel
'' is not a valid integer value
TServerClientWinSocket
Exception Class = TServerClientWinSocket
Access violation at address 008EA4BD in module 'ezClick.exe'. Read of address 00000018
TServerClientWinSocket
Exception Class = TServerClientWinSocket
List index out of bounds (3)
이런식으로 예외가 발생하는 부분에 대한 정보가 나오는데요
TServerClientWinSocket
Exception Class = TServerClientWinSocket
Exception Method=DataOnlyOneCheck
Exception Context=Query:Select *** From table Execute
Exception Message=EAccessViolation
DB쪽의 에러는 제가 거의 대부분 전처리를 하기 때문에 이렇게 구분을 시켜서 메타 데이타를 추가 시켜서
보기 쉽게 되어 있지만,
그외의 예외들 그러니깐 UnHandled Exception은 저위와 같이 메모리 주소랑 에러 경우만 나오기 때문에
참 파악 하기가 힘듭니다.
그리고 프로그램 특성상 필드 테스트는 거의 어렵고요,
결국은 릴리즈 나간데서 정보를 얻어야 한다는 얘기인데
UnHandled Exception에서 발생하는 정보가 작다 보니 좀 어렵습니다.
그래서 Unhandled Exception 발생시 다른건 몰라도 이 예외를 발생 시킨 함수를 좀 알수 없을까요?
a -> b -> c -> d -> Exception 발생.
이렇게 되었을때 제 로그 상으로는 d는 알수 있는데 a,b,c 까지는 알수 없습니다.
a,b,c,d 까지 알수 있는 방법이 없을까요?
최대 7에서 작게 3개 정도 가지 콜 트레이스를 할수 있으면 좋겠는데
누가 방법을 아시면 좀 가르켜 주세요~
|