국내 최초공개: 소스코드리뷰(XVI) 코드프로파일러의 활용

[목차(도우미)]
코드프로파일러의 활용

코드프로파일러(vbcp.dll)라는 것

Visual Basic에는 코드프로파일러(Code Profiler)라는 기능이 들어 있다.(VBCP.DLL)이란 이름으로 존재하고 "regsvr32 vbcp.dll"로 등록을 하면 통합개발환경(IDE)에서 불러 쓸 수 있다.

이것은 소스코드 한줄 한줄 단위로 실행에 걸린 시간과 처리 횟수를 기록해서 해석하는 데 도움이 되는 프로그램이다. 최근 소스코드리뷰에서 실행 시간을 측정한 것도 vbcp.dll 덕분이다.

검색 엔진을 통해서 검색해 보아도 이 기능은 그다지 많이 알려져 있는 기능이 아니다. 이 블로그를 올려 놓고 며칠간 유사한 자료가 있는지 검색해 보았으나 국내 검색 엔진과 구글엔진을 써서 한글 자료를 뒤져보았으나 단 한건도 검색결과가 없었다. 그래서 과감히 "국내 최초 공개"라고 할 수 있다. 비주얼 스튜디오(Visual Studio) CD에도 unsupport라는 폴더에 들어 있고 CD에서 직접 복사를 해야만 가능하다. 그러나 레지스트리에 등록해서 실행해 보면 깜짝 놀랄 기능이 감추인 기능으로 들어있다는 점에 놀라게 된다.

특히 실행 시간이 많이 걸려서 개선을 하고자 할 경우에 일일이 손으로 GetTickCount 등의 함수를 집어넣지 말고 이런 툴을 이용해서 정밀한 조사를 하는 것도 좋은 기술이 된다. 기왕에 코드프로파일러의 한글 정보가 인터넷상에 없으므로 화면을 넣어서 설명하기로 하겠다. 화면에 관한 간단한 설명은 일본 잡지 사이트에 설명하고 있는 문헌이 있었는데, 그것을 참조하면 된다. (굳이 기존 문헌이 있는데, 중복 작성은 생략한다.)


이미지 출처/참고 주소: http://pcdn.int21.co.jp/pcdn/vb/noriolib/vbmag/9710/vb10_vdt.html#C11

간단한 사용법

사용법에 관하여는 VBCP.DLL과 같이 배포되는 ReadMe.txt를 읽어보면 알수 있다.

파일명 : VBADDIN.INI
VBCP.VBCPClass=0 를 기입

Visual Basic을 기동
애드인 -> 애드인 매니저 -> VB Code Profile를 선택
애드인 -> VB Code Profile 을 클릭

상용으로 판매되는 툴도 존재하는 것 같은데 차차 발견되는 대로 댓글에 메모해 두기로 한다.

무궁화

(무궁화: 아직은 작아서 잘 안보이지만 이 꽃은 무궁화다. 매년 무궁화가 자라는 것을 눈여겨 보지 않았지만 올해는 꽃망울 부터 자세히 관찰하여 무궁화 꽃의 아름다움을 단계별로 즐겨보려고 한다. 소스코드 한줄 한줄 보는 것보다는 재미있고 아름다울 것이다.)

고급 사용법

ReadMe.txt만으로는 알수 없고 실제로 사용하다보면 약간의 에러 메시지가 발생한다. 그럼에도 불구하고 미지원 기능이라는 이유로 도움말이 존재하지 않기 때문에 시행착오에 의한 약간의 노하우가 필요하다.

신규 프로젝트에서는 잘되는데, 기존의 프로젝트에서는 실행에러가 나는 문제

이는 대개 프로젝트 내의 모듈들이

  • Project.vbp와 같은 폴더안에 존재하지 않고 복수개의 폴더에 분산되어 배치되어 있을 때
  • 일부 모듈이 읽기전용이면
  • error 62 has occurred in loadprojdata input past end of file 등의 에러는 .vbp 파일 내용에 한글이 포함되어있는 경우

실행에러가 발생한다.

(.vbp 파일 내용에 한글이 포함되어있는 경우 에러가 생긴다는 것은 댓글을 통해 피드백해 주신 것을 반영한 것입니다. 피드백 해주신 분께 감사합니다. 피드백에 대한 자세한 내용은 댓글을 참조하세요.)

실행에러의 대책

모든 모듈에 대해서 실행 속도를 측정하는 것이 아니라면 측정하고자 하는 모듈에만 선택적으로 프로파일코드를 부여하면 된다.
그러기 위해서는

더미로 신규 프로젝트파일(debug.vbp)를 작성하여 대상 모듈만을 debug.vbp에 추가한다.

debug.vbp는 컴파일이 되지도 않을 뿐더러 컴파일을 실행할 필요도 없다. 단지 코드프로파일러의 측정 코드를 추가하기 위해서 더미를 만든다.

그후 원본 프로젝트 파일(Project.vbp)를 텍스트 편집기로 열어서

dao350.dll, 프로파일용 표준 모듈(*.bas) 등을 참조 추가한다.

이제 원본 프로젝트가 컴파일 가능하다!(오래 기다리셨습니다.)

결과 파일을 알고 싶을 때

프로파일 코드가 생성된 직후에 *.vdb 이름의 파일이 생겨나는데 이것은 *.mdb와 같은 데이터 베이스 파일이다. 액세스를 이용해서 열면 내용을 확인할 수 있다. 코드프로파일러 File|View Result 메뉴에서도 열수 있다.

다 제대로 했는데도 코드 프로파일러 기능이 무효가 되었다는 메시지

코드프로파일러는 소스코드에 프로파일 코드를 추가하면서 파일 사이즈를 데이터베이스에 기록해 놓고 실행시 체크하게 되어 있다. 그러므로 프로파일 코드를 추가한후 소스코드를 수정하면 곤란하다. 처음부터 다시 프로파일 코드를 해제/추가하는 방법이 가장 간편하다. 또는 *.vdb파일을 열어서 파일사이즈가 바뀐 모듈의 정확한 파일사이즈로 수정해주면 무난하게 실행된다.

관련된 내 블로그:
[연구와 개발] - 소스코드리뷰(XIII) IF조건문의 실행 속도를 측정해보다
[연구와 개발] - 소스코드리뷰(XIV) 문자열 해석의 고속처리
[연구와 개발] - 소스코드리뷰(XV) 문자열 연산(&)의 속도

by 금메달.아빠 on 2010.06.25 07:38 주요 단어: , , , , , , ,
  • BlogIcon 금메달.아빠 2010.06.25 06:02 신고 주소 수정/삭제 답글

    국내 검색 엔진 두가지(네이버, 다음)으로 검색했지만 키워드일치하는 결과는 얻을 수 없었는데 외국계 검색엔진을 쓰면 몇몇 자료가 발견됩니다. 물론 인터넷상을 돌아 다녀도 실행 파일을 구하지는 못하기 때문에 관심있는 분은 비주얼 스튜디오 CD 를 보셔야 합니다.

    vbcp.dll은 VB5, VB6에서 사용가능합니다.

    • BlogIcon 금메달.아빠 2010.09.28 23:46 신고 주소 수정/삭제

      오랜만에 CD를 검색해보니 VB6에는 없고 MS의 페이지에서도 VB5용이라고 되어 있군요. VB5에서 가져오는 수밖에 없습니다.

      아마 그래서 잘 알려지지 않았나 봅니다.

  • BlogIcon 전경민 2010.07.28 10:32 주소 수정/삭제 답글

    비주얼스튜디오 시디에도 없던데 정확한 위치를 알수 있을가요. 혹은 버전이라던가.

    시디에서 vbcp.dll 로 검색해도 없더군요

    • BlogIcon 금메달.아빠 2010.08.15 21:32 신고 주소 수정/삭제

      이런 댓글을 올리신것을 보니 개발관계자이신 것같은데 답장이 늦은 것에 대해 미안합니다. 낮시간에는 블로그를 쓰지 않기 때문에 답변이 올라가는데는 하루쯤 기다리셔야 합니다.

      파일 경로에 관하여는 마이크로소프트의 페이지에도 공개되어 있습니다.
      http://support.microsoft.com/kb/172846/ko
      즉 /Tools/Unsupprt/Vbcp 입니다.

      CD에서 못찾으셨다니 유감입니다. Google.com에서 간신히 누군가 체코에 올려둔 것을 찾았습니다.

      먼저 ReadMe.txt 에 관하여
      http://www.petr.isibrno.cz/archive/shareware/win9x/utility/home/novotny/cd/vb.50/vbpro/tools/unsupprt/vbcp/readme.txt

      vbcp.dll 링크
      http://www.petr.isibrno.cz/archive/shareware/win9x/utility/home/novotny/cd/vb.50/vbpro/tools/unsupprt/vbcp/ --- vbcp.dll

      행복한 하루되세요.

  • BlogIcon 전경민 2010.08.19 12:57 주소 수정/삭제 답글

    답변 감사합니다.

    제블로그 방명록까지 오셔서 답변해주셨는데

    제가 그간 휴가도 있었고 또 지금 다른 작업을 하고 있어서 못보고 있었네요

    제가 regsvr32 로 등록했는데 어디에 메뉴가 있는지 모르겠네요 애드 인 쪽에 있을꺼라고

    생각했는데 그쪽에도 없고. 죄송하지만 어떤메뉴에 어떻게 하면 할수 있는 알려주시면 감사하겠습니다.

    제가 주로 하던게 vb쪽이 아니라 정보가 많이 부족했는데 많은 도움 받고 있습니다.

    그때 포기했던것을 다시한번 해봐야 겠네요 ㅎㅎ

    다시한번 답변 감사합니다! ^______^

  • BlogIcon 전경민 2010.08.19 13:24 주소 수정/삭제 답글

    아 죄송합니다. readme.txt 를 않읽고 했네요 ㅡㅜ

    역시 '나를 읽어라' 는 꼭 읽어야 하는거 같습니다. ㅎㅎ

    그런데 저희쪽 프로젝트에서 실행하니

    error 62 has occurred in loadprojdata input past end of file

    라는 오류가 나더군요 신규로 다른 프로젝트 생성해서 하니 잘 되구요

    구글 신도 제 바램을 안들어주네요

    혹시 이런 경험 있으신지...

    • BlogIcon 금메달.아빠 2010.08.20 01:42 신고 주소 수정/삭제

      블로그 방문 감사합니다. 휴가이셨군요. 댓글이 적은 한적한 블로그 운영자이다보니 하루에 두세개씩 댓글이 올라와도 그날 중에 답변이 잘 안됩니다. 하다보면 발전하리라 봅니다.

      질문하신 첫번째 사용방법이나 에러에 관한 답변은 본문을 대폭 다시 써서 업데이트를 했으니, 참조해 주세요. 길게 답변을 다는 것 보다 원본 글을 퇴고하는 방향으로 답변을 대신하겠습니다.

      건전한 의견교환을 환영합니다. 행복한 하루되세요.

  • BlogIcon 전경민 2010.08.23 13:50 주소 수정/삭제 답글

    아 많은 도움이 됐습니다. 덕분에 궁금했던 것들이 풀렸네요

    error 62 has occurred in loadprojdata input past end of file

    이 에러에 대해서 여러가지 테스트해본 결과 vbp 파일에 한글이 들어간 경우더군요.

    혹시나해서 한글이 있는부분( 타이틀이라던지 설명이라던지 하는 )을 제거하고 실행하니

    바로 됩니다. VB6 영문버전이구요 한글버전에서도 그러는지는 테스트를 못해봤습니다만

    별반 다르지 않을꺼라는 생각이 드네요

    어쨌든 덕분에 저희쪽 프로젝트에 계속 적용해보고 있습니다. 감사합니다.

    • BlogIcon 금메달.아빠 2010.08.24 00:46 신고 주소 수정/삭제

      도움이 되었다니 다행입니다. 알려 주신 에러와 한글 파일명에 관해서도 본문에 업데이트 해두겠습니다. 앞으로도 좋은 피드백 기대합니다.

      행복한 하루되세요.

  • BlogIcon 전경민 2010.08.27 09:24 주소 수정/삭제 답글

    본문 내용을 봤는데 ' 파일명에 한글등이 섞여있을 때' 라고 하셨는데 제가 본 내용은

    '.vbp 파일 내용에 한글이 포함되어있는 경우'입니다. .vbp 파일을 텍스트 에디터로 열었을때

    한글이 포함되어있으면 에러가 나더군요

체크하면 비공개 댓글이 됩니다