|
임프랍니다.
ISAPI는 프로젝트 결과물인 실행모듈이 dll이므로 디버깅이 쉽지 않지요.
일반적인 dll인 경우, 호스트 프로그램을 빌더에 등록시켜놓고 그대로 빌더에서 실행하면서 디버깅하면 됩니다.
ISAPI에서도 이렇게 할 수 있는 방법은 있습니다. IIS나 PWS 모두 컴맨드라인에서 실행할 수 있는 옵션이
있습니다. 그러니까 이 옵션을 덧붙여서 빌더의 호스트 프로그램에 등록시키면 되지요.
하지만 이런 방법으로는... 한번 디버깅을 들어갈 때마다 묵직한 IIS를 한번 실행했다가 중지할 때는
다시 내려야 하는.. 비효율적이지요.
또 한가지 트릭으로, ISAPI dll의 실행코드 내에서 무식하게 메시지박스를 띄우는 방법이 있습니다.
일반적인 SDhowMessage()나 MessageBox()등의 메시지박스 함수들은 ISAPI 내에서는 실행이 안됩니다.
정확히 말하자면 실행은 됩니다만 메시지박스가 안보입니다. 안나타나는 이유는, ISAPI가 인터넷 게스트
계정에서 동작하기 때문에, 시스템 어드민 계정인 시스템 콘솔에는 나타나지 않는 겁니다.
이 관련으로는, 언젠가 델파이 사이트에서 본 해결책이 있습니다.
다음과 같이, MessageBox의 인자로 특수한 플래그인 MB_SERVICE_NOTIFICATION을 넘기면 시스템 콘솔,
즉 현재 모니터에 무조건 나타납니다.
void __fastcall ShowSysMessage(AnsiString Msg)
{
MessageBox(NULL, Msg.c_str(), "ISAPI Debug", MB_OK | MB_SERVICE_NOTIFICATION);
}
하지만 이 방법도 가끔 유용할 수는 있지만 항상 쓸 수 있는 방법은 아닙니다.
가장 큰 문제점은, ISAPI와 같은 서버 어플리케이션에서 가장 중요한 퍼포먼스테스트가 곤란하다는 거죠.
또한 서버상에서 블러킹이 되기 때문에, 자칫 골치아픈 상황이 벌어질 수도 있습니다.
그러니 실제 상황에 들어가게 되면 트래킹이 곤란합니다.
ISAPI와 같은 서버솔루션의 경우, 기능 구현을 위한 기본적인 디버깅 외에도, 실제 필드에서의 디버깅과
상태 추적도 상당히 중요합니다.
그래서... 제가 가장 권하는 것은 로깅입니다.
로그파일을 만들고 그 로그파일에 각 과정을 기록하면서 진행하는 거죠.
실제로 bcbdn에서 사용하는 이 게시판도 현재 각종 문제점 분석을 위해서 두가지의 별도의 로그를 계속
기록하고 있습니다. 물론 로그파일을 계속 사용하게 되면 퍼포먼스는 조금 떨어지게 됩니다.
(bcbdn 게시판에서도 로그기록을 빼거나 좀 줄이면 퍼포먼스가 더 많이 좋아질 겁니다.)
물론 로그파일을 사용해서 디버깅을 하는 것은 아주 번거롭습니다.
하지만.. 서버 개발을 위해서는 수없는 노가다는 필수라고 생각하시고.. ^^;;
그럼 이만...
mossmin 님이 쓰신 글 :
: ISAPI DLL을 디버깅 하는 방법을 가르쳐 주세요
: 부탁드립니다...
|