크래시 리포터

언리얼 엔진의 크래시 관련 정보를 모으는 어플리케이션입니다.

Windows
MacOS
Linux

Crash Rerpoter (크래시 리포터)는 사내 개발자 또는 사외 일반 사용자의 어플리케이션 크래시를 갈무리하여 분석하기 위한 용도의 프로그램 모음입니다.

요구사항

  • Visual Studio 2012, MVC3 설치

  • .NET40 지원 IIS IIS 서버

  • 웹 사이트 운영을 위한 SQL 데이터베이스

일반 개요

  • 이 어플리케이션은 크래시 발생 이후 Windows 오류 리포트 스타일의 리포트를 작성한 다음, 업로드 대기열에 올린 후, CrashReportUploader 를 실행시킵니다.

  • 그러면 CrashReportUploader 는 이 리포트를 받아 원하는 서버로 전송하나, Windows 오류 리포트로도 전송 가능하도록 시스템에도 남겨둡니다. 사용자가 설명을 입력할 수 있도록 CrashReportInput 을 실행시킬 수도 있습니다.

  • CrashReportReceiver 는 DMZ 에 상주해 있다가, 해당 리포트를 받으면 안전한 곳에 작성합니다.

  • CrashReportProcessor 는 안전한 곳을 감시하다가 리포트가 새로 도착하면 크래시 리포트를 처리합니다.

  • 그러면 CrashReportWebsite 는 QA 가 분석하고 조치를 취할 수 있도록 처리된 보고서를 표시해 줍니다.

자세한 API 문서는 퍼포스에 보관되어 있습니다: /Engine/Source/Programs/CrashReporter/CrashReportHelp/bin/Development/CrashReportHelp.chm

크래시 리포트 생성

  • NewReportCrash() 는 리포트를 생성하여 CrashReportUploader 를 실행시킵니다.

리포트에는 Windows 오류 리포트 메타 데이터, 크래시에 대한 미니덤프, 현재 로그, 옵션으로 최근 사용 내역 비디오 파일이 포함되어 있습니다. 원한다면 AddMiscFiles() 에 임의의 파일을 추가시킬 수 있으며, 서버상의 프로세서를 제외하곤 다른 변경은 필요치 않습니다. 이번 새로운 스타일의 Windows 오류 리포트는 Windows 비스타에 추가된 것으로, XP 를 지원하려면 주의가 필요합니다.

크래시 리포트 업로드하기

  • /Engine/Binaries/DotNET/CrashReportUploader.exe.config 에는 환경설정 프로퍼티가 들어 있습니다. 'CrashReportUploadURL' - 크래시를 전송할 CrashReportReceiver 의 URL 입니다. 'UploadHistory' - 크래시 검색을 며칠 전까지 할 것인지 입니다. * 'LocalDomain' - 로컬 심볼 룩업 휴리스틱 지원을 위한 도메인입니다.

이 어플리케이션은 과거 'UploadHistory' 일 동안 관련된 모든 크래시를 검색한 다음, 그 내용을 'CrashReportUploadURL' 로 업로드합니다. 이 어플리케이션은 엔진에서의 직접적인 입력을 요하지 않는다는 점에서 상태가 없으며(stateless), 독립형 어플리케이션으로 실행시켜도 똑같이 발견해서 업로드합니다. 업로드가 (잘못된 URL 이라거나) 어떤 이유에서 실패하면, 다음 번 업로더 실행시 재시도합니다. 파라미터는 필요치 않지만 명령줄 옵션은 존중되니 -unattended-logfolder=<폴더명> 정도 해 줍니다.

크래시 리포트의 발견은 SpecialFolder.LocalApplicationData\Microsoft\Windows\WER\ReportQueue\AppCrash_UE4-* 패턴에 일치하는 폴더를 검색하면 됩니다. 이 폴더에는 이미 업로드된 리포트인지 확인하는 데 사용되는 Guid 가 있습니다.

로컬 컴파일된 바이너리의 소재 확인을 위해, 업로드는 거기에 pdb 가 있는지, 로컬 도메인에서 실행중인지 확인합니다. 두 조건 다 충족되면 MinidumpDiagnostics.exe 가 실행되어 (콜스택 포함) 리포트를 생성합니다. 그 후 이것이 리포트의 일부로 업로드됩니다.

그런 다음 업로더 프로그램은 옵션을 통해 CrashReportInput.exe 를 실행하여 크래시가 났을 때 사용자가 무슨 일을 하고 있었는지 설명을 입력하도록 할 수도 있습니다.

크래시 리포트 받기

  • /Engine/Binaries/DotNET/CrashReportReceiver.exe.config 에는 환경설정 프로퍼티가 들어 있습니다. * 'CrashReportRepository' - 들어오는 크래시 리포트 저장을 위한 안전 폴더입니다.

이 리시버는 DMZ 내 서버에 상주하는 웹 서비스로, 'CrashReportUploadURL' 를 통해 어디서든 접근 가능합니다. 외부에서 접근가능한 모든 서버와 마찬가지로, 최소한의 권한으로 제한되어 있습니다. 기본적인 거부 검사를 한 다음, 안전한 위치의 임시 폴더에 파일을 받습니다. 파일을 전부 받고 나면, 폴더 이름을 프로세서가 처리할 수 있는 것으로 바꿉니다. 안전한 위치는 현재 인트라넷에서도 접근할 수 있는 NFS 드라이브입니다.

리포트 폴더에는 Guid 가 삽입되어 있어 (예: 'AppCrash_UE4-FortniteGame_a50cecbc1f087cac2543eb9f04823bbb548b119_cab_17bf8494') 리포트 중복 업로드를 방지하는 데 사용됩니다.

좀 더 구체적인 차단을 위해 Windows 오류 리포트 메타 데이터를 분석합니다. 현재 디버그 빌드와 (자체 동기화가 불가능한) MinidumpDiagnostics 에서의 크래시는 거부합니다.

크래시 리포트 처리

  • /Engine/Binaries/DotNET/CrashReportProcess.exe.config 'ReportLandingZone' - 새 리포트가 도착하는 안전 폴더입니다. 'ProcessedReports' - 웹 사이트에서의 접근을 위해 처리된 크래시 데이터가 이동되는 위치입니다. 'DaysToSunsetReport' - 리포트 중복 업로드 억제를 위해 임시 폴더를 유지할 기간입니다. 'DepotRoot' - 저희는 심볼 서버로 퍼포스를 사용하며, 일반 디포에 저장된 (MinidumpDiagnostics 와 같은) 유틸리티를 호출합니다. 관련 바이너리와 심볼이 들어있는 clientspec 은 이 곳이 루트입니다. 'CrashReportWebSite' - 웹 서비스 호출을 위한 크래시 리포트 웹사이트 URL 입니다. 'ProcessedVideos' - 처리된 비디오 위치입니다. 크기가 클 수 있기에, 처리된 리포트 내 보통 파일과는 별도로 저장됩니다.

Crash Report Processor 는 안전 위치 ('ReportLandingZone') 에 새 리포트가 도착했나 확인하는 서비스입니다. NFS 는 디렉터리 감시를 지원하지 않기에, 여기서는 느린 방식으로 이루어집니다. 서비스는 관심 대상 파일을 찾아보고, 필요한 경우 미니덤프에서 MinidumpDiagnostics 를 호출한 다음, 웹 서비스를 호출하여 크래시를 데이터베이스에 추가합니다. 반환된 id 를 데이터 파일 이름에 사용하여 웹 사이트에서 쉽게 접근할 수 있도록 합니다. 나머지 파일은 삭제되고, 폴더 이름만 남습니다. 아키텍처 속성상 x64 콜 스택 워킹에는 바이너리 이미지가 필요하기에, 마이크로소프트 심볼 서버로 동기화시켜야 시스템 dll 에서 크래시가 발생하는 x64 미니덤프의 콜 스택 워킹을 지원할 수 있습니다.

MinidumpDiagnostics 는 미니덤프의 모듈 리스트에서 버전 번호를 추출한 다음, 그것을 사용해서 퍼포스에서 올바른 바이너리, 심볼, 소스를 동기화시킵니다. 그리고 콜 스택은 WinDbg 와 같은 기술을 사용해서 평가되고, 가급적 많은 정보를 Diagnostics.txt 에 작성할 수 있습니다.

clientspec 은 심볼 룩업에 대한 모든 콘텐츠가 필요하지는 않지만 바이너리, 심볼, 소스는 필요합니다. UE4 브랜치에는 아래 템플릿을 사용합니다:

"//depot/UE4/Engine/... //CLIENT/UE4/Engine/..."
"//depot/UE4/*/Binaries/... //CLIENT/UE4/*/Binaries/..."
"//depot/UE4/*/Source/... //CLIENT/UE4/*/Source/..."

웹 사이트에서 크래시 리포트 보기

크래시나 크래시 그룹을 정렬하고 검색하고 필터를 적용해서 표시할 수 있는 웹 사이트입니다.

기본 표시 방법은 ('EngineQA', 'GameQA', 'Coder' 처럼) 사용자 그룹 별 크래시 리스트를 통하는 방법입니다. 크래시 id 를 선택하면 크래시, 로그, 미니덤프, (가능하면) 비디오와 같은 세부사항을 표시할 수 있습니다. 크래시 그룹에 클릭하면 콜스택 패턴에 따라 묶인 크래시 그룹을 표시합니다. 크래시 그룹 id 를 선택하면 세부사항과 그 크래시 그룹에 연관된 모든 크래시 리스트가 표시됩니다. 크래시 그룹 업데이트는 SQL 서버상에서 10 분마다 저장된 프로시저 'UpdateCrashesByPattern' 를 실행하여 이뤄냅니다.

데이터베이스 셋업하기

/Engine/Source/Programs/CrashReporter/DatabaseDefinition/CreateCrashReporterDatabase.sql 생성 스크립트를 실행한 다음 10 분마다 SQL 서버상에서 저장된 프로시저 'UpdateCrashesByPattern' 를 실행하는 잡을 셋업합니다. 이 작업은 앞서 말한 저장된 프로시저를 실행시키는 하나의 'Run Update Script' 를 실행하도록 셋업된 SQL 서버 에이전트 잡을 통해 이루어집니다.

웹 사이트 셋업하기

웹 사이트는 MVC3 와 .NET40 을 사용하는 IIS7.0 하에서 실행됩니다. 가상 디렉터리에 추가되는데, 하나는 처리된 파일, 다른 하나는 처리된 비디오 입니다. 이들은 Processor 세팅에 정의된 폴더에 일치됩니다. 어플리케이션 실행시 가상 디렉터리에서 파일을 읽을 수 있는 권한을 가진 사용자로 실행해야 합니다.

'사내' 사용자와 머신 일치

RegisterPII 어플리케이션은 Windows 오류 리포트의 무명 사용자와 머신 Guid 를 알려진 사용자와 머신 이름에 일치시킵니다. 일반 사용자에 대해 그러한 정보를 수집하는 것은 불법이기에, 개발자의 크래시 추적 편의를 위해서만 사용해야 합니다. PII 는 Personally Identifiable Information, 개인 식별 가능 정보의 약자로 http://en.wikipedia.org/wiki/Personally_identifiable_information 에 설명되어 있습니다.

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback