Q&A

  • 디버그 옵션에 따른 예외처리 문제..
procedure TMainForm.btnMakeClick(Sender: TObject);
var
  Year, Month, Day : Word;
  tmpTime : TDateTime;
begin
  Year := StrToInt(cboYear.Text);
  Month := StrToInt(cboMonth.Text);
  Day := StrToInt(cboDay.Text);

  try
    tmpTime := EncodeDate(Year, Month, Day);
  except
    on EConvertError do
    begin
      ShowMessage('잘못된 날짜를 선택하셨습니다!');
      exit;
    end;
  end;

end;

이러한 소스가 있고요..

콤보박스에서 선택된 것은

Year는 1900년 Month는 2월 Day는 31일을 선택했고요..

이에 따른 에러때문에 예외처리까지 해주었는데요..

Run을 하면 자꾸 메세지가 뜨더라구요..

그래서 Debugger Options -> Language Exceptions탭에서

Stop on delphi Exceptions체크박스의 체크를 지우니까 잘되더라구요..

궁금한것은 체크하고 했을때와 체크하지 않고 했을때의 차이점을 알고 싶습

니다.. 그리고 체크하지 않고 컴파일해도 상관없는지 알고싶습니다..
4  COMMENTS
  • Profile
    nilriri™ 2003.06.25 19:11
    function isDate(strDate:String):Boolean;
    var
       w_year,w_month,w_day : word;
    begin
       Result := False;
       strDate := Trim(strDate);
       if length(strDate) = 8 then
       begin
          w_year := strToint(Copy(strDate,1,4));
          w_month := strToint(Copy(strDate,5,2));
          w_day := strToint(Copy(strDate,7,2));
          Result := isValidDate(w_year,w_month,w_day);
       end;
    end;

    님처럼 코딩을 하셨다면 컴파일후 실행파일을 실행했을때는 에러가 없을것입니다. 하지만 델파이 내부에서 디버그 모드로 실행을 하면 에러메시지가 나타납니다. EXCEPTION처리를 했다지만 일단 에러처리하기전에 이미 EncodeDate함수에서 발생한 에러 메시지를 띄우고 그 다음에 사용자가 지정한에러메시지를 한번더 보여주는 거죠..

    체크를 않고 컴파일하고 실행해도 상관 없겠지만 컴파일시 발생할수 있는
    에러에 대해서 모르고 넘어가게 될수도 있을거 같은데요..^^;

    위에 함수는 날짜 오류검사를 위해서 제가 사용했던 함수입니다.

  • Profile
    이진성 2003.06.25 21:16
    ..
  • Profile
    바다를향해 2003.06.25 19:07
    한마디로 디버거용 옵션이니 체크와 상관없이 컴파일에는 문제 없습니다.
    중요한것은 코드상에서 예외처리가 되어 있느냐 없느냐는 것이죠...
    님은 예외처리를 하셨으니 상관없구요..

    디버거용 옵션이므로 님의 취향데로 설정하셔서 사용하시면 되죠..

    그럼...^^;

  • Profile
    이진성 2003.06.25 21:15
    .