DDK 디버그 정보 없애기 :: 2008/01/24 13:49


어제 개발자 분들과 술을 한잔 하다가 재미난 이야기를 들었습니다. 드라이버를 만들면 릴리즈 버전에서도 항상 디버깅 정보가 포함된다는 이야기였죠. 저는 '그럴리가요?'라고 했죠. 일반적으로 어플리케이션의 경우에는 프로젝트 속성을 조절해서 디버그 정보 유무를 결정할 수 있기 때문입니다. 그런데 드라이버는 잘 몰라서 거기서 어떻게 하는지는 모르고 있었습니다. 어제 화두를 던졌던 window31님 말씀으로는 DDK 버전별로 차이가 있는것 같다고 하시더군요.

문득 오늘 술깨고 생각나서 간단한 드라이버를 만들어 보았습니다. DriverEntry만 만들어서 XP free 환경에서 빌드를 해보았습니다. 후훗. 그런데 어제 들은 이야기대로 릴리즈 버전임에도 버젓히 디버깅 정보가 들어 있더군요. 아래 그림처럼 드라이버 파일에 빌드한 환경의 전체 경로가 나옵니다.

사용자 삽입 이미지

이런걸 몹시 찝찝해 하시는 분들도 계시죠. 그래서 왜 그럴까? 하고 뜯어 봤습니다. ddk 문서도 찾아보고 링커 옵션을 제어할 수 있는 방법도 찾아보고 해도 딱히 방법이 없더군요. NTDEBUG를 통해서 조절하라는 이야기가 있었는데 해보니까 안됐습니다. 그래서 DDK를 빌드하는 실제 makefile을 열어봤습니다. 제 버전의 경우에는 DDK 설치 폴더에 bin 밑에 있더군요. makefile.new입니다. 파일을 쭈욱 내려가다 보면 아래와 같은 부분이 보입니다.

!ifdef RESOURCE_ONLY_DLL
# Resource only DLL's have no exports, no entrypoint, no code, no data, no debug symbolic.
LINKER_DBG_SECTION=-debug:NONE
NO_DLL_EXPORTS=1
!undef NTBBT
!undef DLLENTRY
!undef NOLINK
NO_BROWSER_FILE=1
LINK_NO_RELEASE=1
MAKEDLL=1
TARGETLIBS=
LINKLIBS=
USE_NOLIBS=1
NO_NTDLL=1
AFX_FORCE_STDAFX=
AFX_FORCE_USRDLL=
MFC_LIBS=
!else
LINKER_DBG_SECTION=-debug
AFX_FORCE_STDAFX=/include:__afxForceSTDAFX
AFX_FORCE_USRDLL=/include:__afxForceUSRDLL
!endif

훗. 그렇죠. 리소스 온리 DLL이 아니면 항상 디버그 정보가 포함이 되는 겁니다. 따라서 밖에서 무엇을 해줘도 항상 디버깅 정보가 포함되는 거죠. 알았으면 고쳐야겠죠. 시스템 파일을 고치는 거라 좀 찝찝하시다면 복사해서 고치셔도 됩니다. 전 아래와 같이 고쳤습니다.

!if "$(DDKBUILDENV)" == "fre"
LINKER_DBG_SECTION=-debug:NONE
!else
LINKER_DBG_SECTION=-debug

고친 다음 다시 빌드를 해보면 릴리즈 버전에서는 더 이상 디버그 정보가 포함되지 않는다는 걸 알 수 있습니다.

사용자 삽입 이미지

스폰서
글타래

  • 2주간 인기 글
  • 2주간 인기글이 없습니다.
Trackback Address :: http://jiniya.net/tt/trackback/681
  • Gravatar Image.
    홍가이버 | 2008/01/25 08:19 | PERMALINK | EDIT/DEL | REPLY

    잘읽고 갑니다.
    그런데 저의 경우는 릴리즈시에도 디버그 정보가 필요하던데...어짜피 pdb 경로명만 포함(어디선가 읽었는데...)되는거라면 크게 신경쓰지 않아도 될듯합니다만...

    • Gravatar Image.
      codewiz | 2008/01/25 12:24 | PERMALINK | EDIT/DEL

      네 맞습니다. 문제될 건 없는데, 기분 차이죠. ^^;;
      전 경로가 포함되는게 별로 좋지 않더군요...

  • Gravatar Image.
    제풍 | 2008/01/25 16:32 | PERMALINK | EDIT/DEL | REPLY

    좋은 정보입니다... ^^
    저는 단순히 Free 빌드하면 디버깅 정보가 없을꺼라 생각했는데...
    혹시나... 있었군요.. ㅎ

  • Gravatar Image.
    window31 | 2008/01/28 21:08 | PERMALINK | EDIT/DEL | REPLY

    아 범인은 makefile 이었군요 -_-
    sources 쪽에만 주력하여 뒤져보니 답이 안 나오지 ㅠ ㅠ
    그래서 당시에 팀장님이 꼭 자기 DDK만 쓰라고 했었는데 그게 이것 때문이었나 ㅋ

    • Gravatar Image.
      codewiz | 2008/02/19 03:33 | PERMALINK | EDIT/DEL

      그렇더군요.
      다른 방법이 있을것도 같은데 왜 저렇게 고정해 둔지는 모르겠더군요. ^^

Name
Password
Homepage
Secret
< PREV | 1| ... 75|76|77|78|79|80|81|82|83| ... 604| NEXT >