none
wpf에서 noto sans cjk kr 폰트 적용 문제 관련 문의 드립니다. RRS feed

  • 질문

  • 개발 프로그램이 noto sans cjk kr 폰트 적용 시 죽는 문제가 발생하여 문의드립니다.

    개발 프로그램은 다음과 같은 환경에서 개발되었습니다.

    visual studio 2012

    .NET Framework 4.6

    wpf 사용

    개발 pc에서는 잘 돌아갑니다. 개발 pc 윈도우는 다음과 같습니다.

    windows 7 enterprise k 한글 os

    noto sans cjk kr 폰트 설치 완료

    프로그램을 탑재하고자 하는 pc 윈도우는 다음과 같습니다.

    winodows 7 Ultimate 영문 os

    프로그램 탑재하려는 pc에서 noto sans cjk kr 폰트를 설치하고 폰트를 noto sans cjk kr 을 적용한 프로그램을 실행시키면 죽습니다.

    mfc로 개발한 프로그램은 죽지 않으며 같은 otf 폰트라도 네이버 제공 바른고딕 폰트는 죽지 않고 잘 실행됩니다.

    어떤 문제인지 알려주셨으면 합니다.

    2017년 2월 17일 금요일 오전 6:01

모든 응답

  • .NET은 GDI의 Font 관련 API를 이용하여 폰트의 정보를 추출하는데, 이 과정에서 폰트 파일에 잘못된 정보가 입력되어 있을 경우 폰트 파일의 정보를 읽어들이다가 crash가 발생할 수 있습니다. 하지만 정확하게 어떤 부분이 문제가 되었는지에 대해서는 발생하는 crash에 대한 덤프를 수집하고 분석하여야 원인 파악이 가능하며, 그에 대한 대안을 생각해볼 수 있습니다.

    일단 아래와 같이 덤프 수집 절차를 안내 드리겠습니다. 덤프를 수집 후에 이곳에서 자체 분석한 내용을 올리고 도움을 구하시거나 한국마이크로소프트 기술지원에 분석 요청을 주실 수 있습니다.

    덤프 수집 절차는 다음과 같습니다.

    0. DebugDiag 다운로드
    https://www.microsoft.com/en-us/download/details.aspx?id=49924
    운영체제에 맞게 다운로드 받아 설치합니다. 예를 들면 32-bit OS는 x86 버전을, 64-bit OS는 x64 버전을 설치할 수 있습니다.

    1. DebugDiag 설정
    1) DebugDiag를 실행합니다.
    시작 버튼 > Debug Diagnostics Tool 2 아래에서 DebugDiag 2 Collection을 실행합니다.

    2) Select Rule Type 창에서 Crash를 선택합니다.
     
    3) Select Target Type 창에서 A specific process를 선택합니다.
     
    4) 프로세스 이름을 Selected Process란에 입력한 후 다음을 선택합니다.
    즉, 해당하는 프로그램의 exe이름을 입력하시면 됩니다.
     
    5) 다음에 나타나는Advanced Configuration (Optional) 창에서 Unconfigured First Chance Exceptions에서 Action type을 Log Stack Trace로 선택하고 Action limit는 0을 선택하고 Maximum Userdump Limit에는 10을 입력합니다.

    6) 위 Advanced Configuration (Optional) 창에서 Exceptions… 버튼을 클릭합니다.
    First Chance Exception Configuration 창이 뜨면 Add Exception… 버튼을 클릭합니다.
    좌측의 Exception Code & Name 항목에서 C0000005 Access Violation을 선택하면 오른쪽 Exception Code(hex)란에 C0000005가 들어옵니다. 하단에서 Action Type을 Full Userdump로 선택하고 Action Limit을 3으로 선택한 다음 OK를 클릭합니다. 그리고 Save & Close를 눌러 설정을 완료합니다.
     
    7) 다시 돌아온 Advanced Configuration (Optional) 창에서 Next를 누릅니다.

    8) 다음과 같은 대화창이 뜰 수 있는데, Yes를 눌러서 다음으로 진행합니다.
    0은 디스크 공간이 허용하는 한 로그를 계속 생성하겠다는 뜻입니다.
    Stack Trace 정보는 용량이 작으므로 걱정하지 않아도 됩니다.
     
    9) Select Dump Location And Rule Name(Optional) 창에서
    Rule Name과 Userdump Location을 확인합니다.
    용량이 넉넉한 폴더에 잡아두시는 것이 좋겠습니다.
      
    10) Rule Completed 창에서 Activate the rule now가 선택된 상태에서 Finish를 누릅니다.

    2. 문제의 재현
    이렇게 해두신 후, 프로그램을 실행하시고 문제 재현을 하시면 됩니다.


    3. 덤프 수집 후 정리
    덤프 수집이 모두 완료되고 더 이상 덤프 수집이 필요 없다고 판단되면,
    DebugDiag를 실행하시고 설정된 Rule을 삭제하신 후, 프로그램도 삭제하시면 되겠습니다.

    2017년 10월 23일 월요일 오전 8:16
  • 한 가지 빼먹었는데, 참고로 위 폰트로 테스트해보았을 때 crash 발생을 재현하지는 못했습니다.
    2017년 10월 23일 월요일 오전 8:26