|
Debuging을 위해서 Log를 남기는 방법을 권해 드립니다.
Application에 Application->OnException이벤트를 걸수 있습니다.
이벤트를 걸오놓으면 try-catch로 잡지 않은 거의 모든 에러는 이쪽으로 오게됩니다.
저는 주로 Application->OnException 이벤트에서 텍스트 파일로
시간 , Sender class name , error message 등의 로그를 날짜별로 남깁니다.
나중에 알수없는 문제가 발생했을때 이 파일을 뒤적거려보는거죠
try-catch로 에러를 잡았다 하더라도 잡은 에러를 다시 throw하시면
Application->OnException로 이벤트가 발생합니다.
문론 Application->OnException 이 발생하지 않고 프로그램이 확 죽어버리는 경우도 있습니다만
위와 같은 방법으로 상당히 추적이 가능합니다.
그리고 또 으심가는 부분에서 메세지를 만들어서 throw하여 로그를 남기는 방법도 있습니다.
//----------샘플---------------------------------
void __fastcall TDLG_CDMA::FormCreate(TObject *Sender)
{
Application->OnException=AppException;
}
//---------------------------------------------------------------------------
void __fastcall TDLG_CDMA::AppException(TObject *Sender, Exception *E)
{
String as="Err:"+Now().FormatString("yy-mm-dd hh:nn:ss")
+":Sender;"+Sender->ClassName() +":Msg;"+E->Message+"\r\n";
String LogFile=Now().FormatString("yymmdd")+".Log";
MakeFile((sDataPath+LogFile).c_str(),as.c_str(), as.Length(), OPEN_ALWAYS);
}
//---------------------------------------------------------------------------
//MakeFile을 제가 만들어서 쓰는 함수입니다.
//---------------------------------------------------------------------------
void __fastcall TDLG_CDMA::TempFunc()
{
try
{
.......
.......
return ;
}
catch(Exception &err)
{
String errmsg="TempFunc() "+err.Message;
throw(errmsg);
}
}
하안인 님이 쓰신 글 :
: 프로그램이 하루나 이틀에 한번씩 아무런 메시지없이 종료가 됩니다.
:
: 프로그램이 24시간 가동되는 프로그램인데요 .
:
: 프로그램에 버그가 있으면 에러메시지라도 나와야 할텐데...
:
: 그냥 메시지 없이 종료가 됩니다.
:
: 어떻게 확인 해보아야 할까요. 답이 없어서..
:
: 도움을 구합니다.
|