KR102219546B1 - 사용자 모드 크래시 리포트를 위한 프레임워크 - Google Patents

사용자 모드 크래시 리포트를 위한 프레임워크 Download PDF

Info

Publication number
KR102219546B1
KR102219546B1 KR1020167025605A KR20167025605A KR102219546B1 KR 102219546 B1 KR102219546 B1 KR 102219546B1 KR 1020167025605 A KR1020167025605 A KR 1020167025605A KR 20167025605 A KR20167025605 A KR 20167025605A KR 102219546 B1 KR102219546 B1 KR 102219546B1
Authority
KR
South Korea
Prior art keywords
crash
application
function
handler
component
Prior art date
Application number
KR1020167025605A
Other languages
English (en)
Other versions
KR20160132856A (ko
Inventor
아룰데비 무수쿰사라사미
홍웨이 장
애즈윈 구나완
Original Assignee
마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 filed Critical 마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Publication of KR20160132856A publication Critical patent/KR20160132856A/ko
Application granted granted Critical
Publication of KR102219546B1 publication Critical patent/KR102219546B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0778Dumping, i.e. gathering error/state information after a fault for later diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0715Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a system implementing multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/366Software debugging using diagnostics

Abstract

애플리케이션이 크래시되는 경우 크래시 리포트를 작성하는 사용자 모드 크래시 리포트 시스템이 제공된다. 사용자 모드 크래시 리포트 시스템은 애플리케이션 크래시되는 경우 애플리케이션과 동일한 프로세스에서 실행되는 크래시 핸들러를 설치한다. 애플리케이션이 크래시되는 경우, 크래시 핸들러는 크래시 당시에(at the time of a crash) 실행된 프로세스의 빅팀 쓰레드(victim thread)를 식별한다. 크래시 핸들러는 애플리케이션의 호출된 함수로부터 되돌아오기 위한 리턴 어드레스를 식별하기 위해 빅팀 쓰레드의 호출 스택을 따라 이동한다(walk). 크래시 핸들러는 리턴 어드레스에 대응하는 로딩된 모듈 내에서의 오프셋을 식별하고 식별된 오프셋을 이용하여 함수들의 호출 체인을 생성한다. 크래시 핸들러는 식별된 호출 체인에 기초하여 크래시 리포트를 작성한다.

Description

사용자 모드 크래시 리포트를 위한 프레임워크{FRAMEWORK FOR USER-MODE CRASH REPORTING}
상업적으로 입수가능한 컴퓨터 프로그램이 일반적으로 매우 신뢰할만하다 할지라도, 프로그램은 프로그램의 함수 정지를 야기하는 기능불량을 초래하는 문제에 직면할 수 있다. 이러한 기능불량은 "크래시(crash)"로 지칭된다. 프로그램의 크래시를 야기할 수 있는 문제는 하드웨어 에러(예를 들어, 결함이 있는 메모리 위치로 인한 에러), 프로그램의 논리적 에러(예를 들어, 유효하지 않은 메모리 어드레스를 사용함으로 인한 에러), 호환성이 없는 컴포넌트(예를 들어, 구식 기능으로 연결함) 등을 포함한다. 프로그램이 크래시되는 경우, 운영 체제는 일반적으로 하드웨어 또는 소프트웨어 예외가 발생한 것으로 제어를 취하게 된다. 하드웨어 예외는, 예를 들어 0으로 나누려는 시도, 유효하지 않은 메모리 어드레스의 사용, 유효하지 않은 명령어를 실행하려는 경우 등과 같은 다양한 이유로 발생할 수 있다. 프로그램이 실행되는 프로세서의 명령어 세트 아키텍처는 다양한 유형의 예외를 정의하고, 또한 각 유형의 예외가 발생한 경우 제어가 어디로 전달되어야야 하는지를 정의한다. 프로그램 또는 운영 체제는 일반적으로 각 유형의 하드웨어 예외에 대해 하드웨어 예외 핸들러를 설치한다. 이와 대조적으로, 소프트웨어 예외는 소프트웨어가 비정상 상황을 검출함으로써 제기된다. 예를 들어, 소프트웨어 예외는 함수가 유효하지 않은 파라미터를 전달받은 경우, C++ 예외가 잡히지 않은 등의 경우에 발생할 수 있다. 프로그램 또는 운영 체제는 일반적으로 각 유형의 소프트웨어 예외에 대해 소프트웨어 예외 핸들러를 설치한다. 예외가 발생하는 경우, 그 유형의 예외에 해당하는 예외 핸들러가 호출되어 예외를 처리한다. 각 예외 핸들러는 예외의 심각성에 기초하여, 프로그램이 그 예외를 계속할지 또는 크래시를 야기하는 그 예외를 종료해야 할지를 판정한다.
프로그램이 크래시되는 경우, 운영 체제는 일반적으로 그 크래시에 대한 정보를 수집하고, 수집된 정보에 기초하여 크래시 리포트를 작성하며, 크래시된 프로그램의 개발자가 그 크래시 리포트를 이용할 수 있게 한다. 운영 체제에 의해 설치된 크래시 핸들러가 호출되는 경우, 크래시 핸들러는 일반적으로 프로세서의 감독 특권 모드(예를 들어, 감독자 모드 또는 커널 모드)에서 실행된다. 크래시 핸들러가 감독 특권 모드에서 실행되는 경우, 크래시 핸들러는 운영 체제의 모든 데이터 구조와 크래시된 프로그램의 데이터 구조에 대한 액세스를 가질 수 있다. 이들 데이터 구조에 액세스할 수 있으므로 크래시 핸들러는 크래시 리포트에 적절한 것으로 간주되는 임의의 정보를 수집할 수 있다. 크래시 리포트가 작성된 경우, 그 리포트는 개발자에게 이용가능해질 수 있다. 예를 들어, 크래시 리포트는 크래시 리포트 서버로 전송될 수 있고 이 서버에서 개발자는 그 크래시 리포트를 이용할 수 있다.
프로그램의 크래시 원인을 판정함에 있어 운영 체제에 의해 제공된 크래시 리포트가 개발자를 도울 수 있는 유용한 정보를 제공한다 할지라도, 크래시 리포트 내의 정보는 일반적으로 프로그램 그 자체에 또는 개발자의 필요성에 맞게 맞춤화되어 있지 않다. 또한, 크래시 리포트 서버는 모든 유형의 프로그램의 개발자가 이용할 수 있는 범용 도구를 제공할 수 있다. 그 결과, 프로그램의 개발자는 크래시의 원인을 판정하는데 도움이 될 수 있는 프로그램 특정 도구를 이용할 수 없다. 또한, 운영 체제는 어떤 크래시 리포트가 전송되어야 하는지와 그 전송의 타이밍을 제어할 수 있다. 개발자는 개발자의 필요성을 만족시키기 위해 이러한 제어를 원할 수 있다.
애플리케이션이 크래시되는 경우 크래시 리포트를 작성하는 사용자 모드 크래시 리포트 시스템이 제공된다. 사용자 모드 크래시 리포트 시스템은 애플리케이션 크래시되는 경우 애플리케이션과 동일한 프로세스에서 실행되는 크래시 핸들러를 설치한다. 애플리케이션이 크래시되는 경우, 크래시 핸들러는 크래시 당시에(at the time of a crash) 실행된 프로세스의 빅팀 쓰레드(victim thread)를 식별한다. 크래시 핸들러는 애플리케이션의 호출된 함수로부터 되돌아오기 위한 리턴 어드레스를 식별하기 위해 빅팀 쓰레드의 호출 스택을 따라 이동한다(walk). 크래시 핸들러는 리턴 어드레스에 대응하는 로딩된 모듈 내에서의 오프셋을 식별하고 식별된 오프셋을 이용하여 함수들의 호출 체인을 생성한다. 크래시 핸들러는 식별된 호출 체인에 기초하여 크래시 리포트를 작성한다.
도 1은 일부 실시예에서 애플리케이션이 실행되는 실행 환경을 나타내는 블록도이다.
도 2는 일부 실시예에서 사용자 모드 크래시 리포트 시스템의 모듈 테이블을 나타내는 블록도이다.
도 3은 일부 실시예에서 모듈의 레이아웃을 나타내는 블록도이다.
도 4는 일부 실시예에서 호출 스택의 레이아웃을 나타내는 블록도이다.
도 5는 일부 실시예에서 사용자 모드 크래시 리포트 시스템의 컴포넌트들을 나타내는 블록도이다.
도 6은 일부 실시예에서 크래시 핸들러의 프로세싱을 나타내는 흐름도이다.
도 7은 일부 실시예에서 크래시 리포트 시스템의 호출 체인 컴포넌트에 대한 추가 함수의 프로세싱을 나타내는 흐름도이다.
도 8은 일부 실시예에서 크래시 리포트 시스템의 크래시의 원인이 되는 함수 발견 컴포넌트(a find blamed function component)의 프로세싱을 나타내는 흐름도이다.
도 9는 일부 실시예에서 크래시 리포트 시스템의 크래시 리포트 전송 컴포넌트(a send crash report component)의 프로세싱을 나타내는 흐름도이다.
도 10은 일부 실시예에서 크래시 리포트 시스템의 모듈 추가 콜백 컴포넌트(a add module callback component)의 프로세싱을 나타내는 흐름도이다.
애플리케이션이 크래시되는 경우 사용자 모드 크래시 리포트를 생성하는 방법 및 시스템이 제공된다. 일부 실시예에서, 사용자 모드 크래시 리포트 시스템은 크래시된 애플리케이션과 동일한 프로세스(즉, 프로세스 내(in-process))에서 크래시 핸들러를 실행하고, 그 프로세스에 액세스가능한 정보에 기초하여 크래시 리포트를 작성한다. 사용자 모드 크래시 리포트 시스템은 크래시 리포트 서버로 크래시 리포트를 전송하는 것을 제어한다. 사용자 모드 크래시 리포트 시스템은 크래시된 애플리케이션과 동일한 프로세스에서 사용자 특권 모드로 실행할 크래시 핸들러를 설치한다. 사용자 모드 크래시 리포트 시스템은 기저 운영 체제 및 프로그래밍 환경에 특정한 크래시 핸들러를 설치한다. 예를 들어, 운영 체제가 애플의 iOS 운영 체제인 경우, 크래시 핸들러는 마하(Mach) 예외 및 BSD 신호를 처리하기 위해 설치될 수 있다. 프로그래밍 환경이 C++에 기반을 둔 경우, 크래시 핸들러는 던져졌으나 잡히지는 않은 예외(exception that are thrown, but not otherwise caught)를 처리하기 위해 설치될 수 있다. 애플리케이션이 크래시된 경우, 크래시 핸들러는 크래시 당시에 실행되었던 프로세스의 "빅팀(victim)" 쓰레드를 식별할 수 있고 크래시 당시에 인보크(또는 호출)된 함수들의 호출 체인을 생성할 수 있다. 호출 체인을 생성하기 위해, 크래시 핸들러는 애플리케이션의 호출된 함수로부터 되돌아오기 위한 리턴 어드레스를 식별하기 위해 빅팀 쓰레드의 호출 스택을 따라 이동한다. 애플리케이션의 코드는 각각이 함수를 포함하는 하나 이상의 모듈에 저장된다. 크래시 핸들러는 리턴 어드레스에 대응하는 모듈 내에서의 오프셋을 식별하고 이 오프셋을 포함하는 모듈 내에서 함수들을 식별한다. 크래시 핸들러는 빅팀 쓰레드를 제외한 프로세스의 각 쓰레드에 대한 호출 체인을 생성할 수 있다. 사용자 모드 크래시 리포트 시스템은 식별된 호출 체인에서의 함수에 기초하여 크래시 리포트를 작성한다. 크래시 핸들러는 애플리케이션과 동일한 프로세스에서 실행되기 때문에, 크래시 핸들러는 애플리케이션의 모든 데이터에 대해 액세스를 갖는다. 또한, 크래시 핸들러는 크래시 리포트를 저장하고 크래시 리포트는 크래시 리포트 서버에 전송될 수 있다.
일부 실시예에서, 사용자 모드 크래시 리포트 시스템은 애플리케이션의 크래시의 원인이 되는 애플리케이션의 함수를 식별한다. 크래시의 원인이 되는 함수는 크래시 당시에 빅팀 쓰레드 상에서 실행되었을 수도 있는 함수이다. 사용자 모드 크래시 리포트 시스템은 크래시 당시에 호출된 함수들의 호출 체인을 식별한다. 사용자 모드 크래시 리포트 시스템은 크래시의 원인으로부터 면제되는 함수를 식별하는 정보에 액세스한다. 프로그램이 크래시되려 하는 경우, 애플리케이션은 크래시의 영향을 감소시키고, 몇몇 크래시 관련 정보를 수집하는 등을 시도하기 위해 다양한 관리상의 함수를 호출할 수 있다. 이들 관리상의 함수는 호출 체인 내에 있을 수 있으나, 크래시의 원인이 되어서는 안된다. 크래시의 원인이 되어서는 안되는 이들 관리상의 함수 및 그 밖의 다른 함수는 크래시의 원인으로부터 면제되는 것으로 지정된다. 사용자 모드 크래시 리포트 시스템은 함수들의 호출 체인을 처리하여 크래시의 원인으로부터 면제되지 않는, 호출된 마지막 함수를 식별할 수 있다. 사용자 모드 크래시 리포트 시스템은 그 마지막 함수를 크래시의 원인으로 지정한다. 크래시의 원인으로부터 면제되는 함수를 지정하는 정보는 구성 파일에 구체화될 수 있고 모듈 내의 함수들의 오프셋의 범위를 나타낸다.
도 1은 일부 실시예에서 애플리케이션이 실행되는 실행 환경을 나타내는 블록도이다. 실행 환경(100)은 운영 체제 컴포넌트(110), 애플리케이션 환경(120) 및 애플리케이션 샌드박스(130)를 포함한다. 운영 체제 컴포넌트는 마하 계층(111), BSD 계층(112) 및 코어 서비스 계층(113)을 포함할 수 있다. 마하 계층은 커넬 기반 서비스, 예를 들어 태스크 및 쓰레드 관리, 가상 메모리 관리, 프로세스간 통신, 쓰레드 스케쥴링, 예외 핸들링 서비스(예를 들어, 마하 예외) 등을 제공한다. BSD 층은 POSIX API, 파일 시스템 구현, 시그널링 메카니즘(예를 들어, BSD 신호) 등과 같은 상위 레벨의 서비스를 제공한다. 코어 서비스 계층은 시간 및 날짜 관리, 스트림 기반 I/O 등과 같은 다양한 서비스를 제공한다. 애플리케이션 환경은 그래픽 사용자 인터페이스, 이벤트 핸들링, I/O 서비스 등을 위한 API를 제공할 수 있다. 애플리케이션 환경은 또한 애플리케이션이 실행되는 샌드박스를 제공할 수 있다. 각 애플리케이션(131)은 그 자신의 샌드박스에서 실행되어 일 애플리케이션의 잘못된 행위가 다른 애플리케이션 또는 운영 체제에 악영향을 미치지 않도록 한다. 샌드박스는 애플리케이션이 엄격히 제어되는 리소스들의 집합에 대한 액세스를 갖는 환경을 제공한다(예를 들어, 네트워크 액세스, 디스크 공간). 크래시 핸들러는 크래시된 애플리케이션과 동일한 샌드박스에서 실행된다.
도 2는 일부 실시예에서 사용자 모드 크래시 리포트 시스템의 모듈 테이블을 나타내는 블록도이다. 모듈 테이블(210)은 애플리케이션의 어드레스 공간에 로딩된 모듈(220)의 이미지에 모듈 식별자를 맵핑한다. 각 모듈은 애플리케이션의 함수를 포함한다. 모듈 테이블은 애플리케이션의 프로세스에 로딩된 각 모듈에 대한 엔트리(211)를 포함한다. 각 엔트리는 로딩된 모듈에 대한 참조와 함께 모듈에 대한 식별 정보를 포함한다. 모듈 테이블을 생성하기 위해, 애플리케이션의 프로세스에서 실행되는 사용자 모드 크래시 리포트 시스템은 모듈 추가 및 제거 콜백 컴포넌트(add and remove module callback components)를 설치하고 그에 따라 시스템은 모듈이 프로세스(즉, 프로세스의 어드레스 공간)로 로딩되는 때 및 프로세스로부터 언로딩되는 때를 각각 통지받을 수 있다. 모듈이 로딩되는 경우, 모듈 추가 콜백이 호출된다. 모듈 추가 콜백은, 모듈이 로딩되는 어드레스 범위, 모듈의 이름, 모듈의 고유 빌드 식별자(unique build identifier) 등을 비롯하여, 모듈에 관한 정보에의 참조를 전달받고, 대응하는 엔트리를 모듈 테이블에 추가한다. 모듈이 언로딩되는 경우, 모듈 제거 콜백이 호출된다. 모듈 제거 콜백은 모듈에 대한 참조를 전달받고 대응하는 엔트리를 모듈 테이블로부터 제거한다.
도 3은 일부 실시예에서 모듈의 레이아웃을 나타내는 블록도이다. 애플리케이션을 위한 모듈(310)은 다양한 함수를 포함하고 애플리케이션의 실행을 개시하는 제어를 전달받는 메인 함수를 포함할 수 있다. 모듈은 애플리케이션의 어드레스 공간에서의 모듈의 시작 포인트에 대한 참조와 함께 그 모듈의 각 함수에 대한 엔트리를 포함하는 연관된 모듈 함수 맵(320)을 구비할 수 있다. 모듈 함수 맵은 모듈과 함께 제공될 수 있거나, 또는 사용자 모드 크래시 리포트 시스템은 다른 모듈 관련 정보의 분석에 기초하여 모듈 함수 맵을 생성할 수 있다. 면제 함수 테이블(immune function table)(330)은 크래시의 원인으로부터 면제되는 모듈의 함수를 식별한다. 이 예에서, 함수(f4,f5,f6)는 크래시의 원인으로부터 면제된다.
도 4는 일부 실시예에서 호출 스택의 레이아웃을 나타내는 블록도이다. 호출 스택(400)으로 도시되어 있는 바와 같이, 모듈(310)(도 3)의 함수(f1,f2,f3,f4,f5)는 이들의 스택 프레임(401,402,403,404,405)으로 각각 표현한 바와 같이 호출되었다. 스택 포인터(SP)는 호출 스택의 상단에서 스택 프레임을 포인팅한다. 각 스택 프레임은 호출 함수와 피호출 함수 사이에서 파라미터를 전달하기 위한 파라미터 영역을 포함할 수 있다. 각 스택 프레임은 또한 호출 함수의 스택 프레임에 대한 참조 SP를 포함한다. 예를 들어, 스택 프레임(405)은 스택 프레임(404)을 포인팅하는 참조를 포함한다. 참조 SP는 함수의 스택 프레임이 호출 함수로 돌아감에 따라 그 스택 프레임을 제거하기 위해 그 함수에 의해 사용된다. 따라서, 참조 SP는 스택 프레임들의 링크된 리스트를 형성한다. 각 스택 프레임은 또한 호출 함수 내의 리턴 어드레스에 대한 참조 RA를 포함한다. 예를 들어, 스택 프레임(405)은 함수(f5)의 호출 이후에 있는 함수(f4) 내의 리턴 어드레스를 포함한다. 참조 RA는 호출 이후의 위치(또는 다른 위치)로 되돌아가기 위해 리턴 함수에 의해 사용된다.
호출 체인을 생성하기 위해, 사용자 모드 크래시 리포트 시스템의 크래시 핸들러는 호출 스택을 따라 이동하여 호출된 각 함수를 식별한다. 크래시 핸들러는 크래시 당시에 실행되었던 빅팀 쓰레드의 쓰레드 식별자를 전달받을 수 있다. 크래시 핸들러는 크래시 당시에서의 쓰레드에 대한 스택 포인터 및 명령어 포인트와 같은 쓰레드 관련 정보를 검색하기 위해 운영 체제와 상호작용할 수 있다. 크래시 핸들러는 모듈 함수 맵을 사용하여 어드레스에 대응하는 함수를 식별함으로써 크래시 당시에(즉, 대응하는 예외가 발생한 때) 실행되었던 함수를 식별하는데 명령어 포인터를 사용할 수 있다. 호출 스택을 따라 이동하기 위해, 크래시 핸들러는 스택 포인터를 사용하여 다음 하위 스택 프레임에 대한 포인터 및 호출 함수의 리턴 어드레스를 검색한다. 크래시 핸들러는 모듈 함수 맵을 사용함으로써 크래시 당시에 실행되었던 함수를 식별하기 위해 그 리턴 어드레스를 사용한다. 크래시 핸들러는 스택의 바닥에 도달할 때까지 계속해서 스택을 따라 이동한다. 스택의 바닥은 예를 들어 호출 스택의 바닥 프레임에 저장된 구별되는 값(예를 들어, 모두 1)으로 지정될 수 있다(예를 들어, 참조 SP == 널(null)). 일부 실시예에서, 크래시 핸들러는 보다 포괄적인 크래시 리포트를 작성하기 위해 유사한 방식으로 프로세스의 각 쓰레드의 호출 스택을 따라 이동한다.
일부 실시예에서, 스택의 바닥은 크래시 핸들러에 의해 쉽게 확인가능하지 않을 수 있다. 예를 들어, 스택 프레임(401)은 참조 SP에 대한 불량 메모리 어드레스를 포함할 수 있는데, 즉 다음 하위 스택 프레임에 대한 포인터가 정상적으로 저장될 수 있다. 크래시 핸들러가 그 불량 어드레스를 이용하여 메모리에 액세스하려는 경우, 불량 어드레스 예외가 발생할 수 있다. 호출 스택의 바닥을 만났음을 검출하기 위해, 크래시 핸들러는 불량 메모리 어드레스에 대한 참조가 시도될 때 호출되는 불량 메모리 어드레스 핸들러를 설치할 수 있다. 불량 메모리 어드레스 핸들러는 불량 메모리 액세스 시도를 나타내는 전역 플래그를 간단히 설정할 수 있고 시도된 메모리 액세스 이후 명령어를 실행하기 위해 크래시 핸들러로 복귀할 수 있다. 후속하는 명령어는 전역 플래그를 체크할 수 있고 그 전역 플래그를 스택의 바닥에 도달했음을 나타내는 표시로서 사용한다.
도 5는 일부 실시예에서 사용자 모드 크래시 리포트 시스템의 컴포넌트들을 나타내는 블록도이다. 사용자 크래시 리포트 시스템(500)은 모듈 데이터(510), 데이터 구조(520) 및 컴포넌트(530)를 포함한다. 모듈 데이터는, 각 모듈에 대해, 모듈(511), 심볼 테이블(512), 모듈 함수 맵(513) 및 면제 함수 테이블(514)을 포함한다. 모듈 데이터는 개발자에 의해 제공될 수 있다. 심볼 테이블은 함수 및 변수에 대한 참조를 심볼화하는데 사용될 수 있는 심볼 관련 정보를 포함한다. 면제 함수 테이블은 애플리케이션의 구성 파일에 저장된 구성 정보로서 제공될 수 있다.
사용자 모드 크래시 리포트 시스템에 의해 사용되는 데이터 구조는 호출 스택(521), 호출 체인(522), 모듈 테이블(523) 및 크래시 리포트 저장소(524)를 포함한다. 이하에서, 사용자 모드 크래시 리포트 시스템은 크래시의 빅팀 쓰레드의 프로세싱을 참조하여 설명된다. 크래시된 애플리케이션의 다른 쓰레드의 프로세싱도 유사하게 수행되어 보다 포괄적인 크래시 리포트를 제공한다. 호출 스택은 빅팀 쓰레드의 호출 스택을 나타낸다. 호출 체인은 크래시 핸들러에 의해 결정된 함수 호출들의 체인을 나타낸다. 모듈 테이블은 애플리케이션의 어드레스 공간에 로딩된 모듈들과 그들의 어드레스 범위 간의 맵핑을 포함한다. 크래시 리포트 저장소는 사용자 모드 크래시 리포트 시스템에 의해 생성된 크래시 리포트를 저장한다. 크래시 리포트 저장소는 각 크래시에 대한 크래시 리포트가 크래시 리포트 서버에 업로드될 때까지 그 크래시 리포트를 저장할 수 있고 후속 크래시 리포트의 업로드를 최적화하기 위해 크래시에 대한 다른 식별 정보를 영구적으로 저장할 수 있다.
사용자 모드 크래시 리포트 시스템의 컴포넌트들은 크래시 핸들러(531), 호출 체인에의 함수 추가 컴포넌트(an add function to call chain component)(532), 크래시의 원인이 되는 함수 발견 컴포넌트(a find blamed function component)(533), 크래시 리포트 저장 컴포넌트(534), 모듈 추가 콜백(an add module callback)(535), 모듈 제거 콜백(536) 및 호출 스택 불량 어드레스 핸들러(537)를 포함한다. 다양한 유형의 크래시를 처리하도록 설치될 수 있는 크래시 핸들러는 호출 스택을 따라 이동하고 크래시 리포트를 생성한다. 호출 체인에의 함수 추가 컴포넌트는 리턴 어드레스와 연관된 함수를 식별하고 그 함수의 식별자를 호출 체인에 추가한다. 크래시의 원인이 되는 함수 발견 컴포넌트는 크래시의 원인이 되는 함수를 식별한다. 크래시 리포트 저장 컴포넌트는 애플리케이션이 다음에 실행되는 경우 크래시 리포트 서버에 전송하기 위한 크래시 리포트의 저장을 제어한다. 모듈 추가 콜백 및 모듈 제거 콜백은 로딩 및 언로딩된 모듈을 추적하기 위해 애플리케이션이 초기화되는 경우 설치된다. 호출 스택 불량 어드레스 핸들러는 호출 스택의 바닥에 도달함으로 인해 야기되는 불량 어드레스 참조를 다루기 위해 크래시 핸들러에 의해 설치된다.
사용자 모드 크래시 리포트 시스템이 구현될 수 있는 컴퓨팅 장치 및 시스템은 중앙 처리 장치, 입력 장치, 출력 장치(예를 들어, 디스플레이 장치 및 스피커), 저장 장치(예를 들어, 메모리 및 디스크 드라이브), 네트워크 인터페이스, 그래픽 처리 장치, 가속도계, 셀룰러 무선 링크 인터페이스, GPS(global positioning system) 장치 등을 포함할 수 있다. 입력 장치는 키보드, 포인팅 장치, 터치 스크린, 제스처 인식 장치(예를 들어, 에어 제스처용), 머리 및 안구 추적 장치, 음성 인식을 위한 마이크로폰 등을 포함할 수 있다. 컴퓨팅 장치는 데스크탑 컴퓨터, 랩탑, 태블릿, e-리더, 개인 보조 단말기, 스마트폰, 게이밍 장치, 서버, 및 초병렬 시스템과 같은 컴퓨터 시스템을 포함할 수 있다. 컴퓨팅 장치는 컴퓨터 판독가능 저장 매체 및 데이터 전송 매체를 포함하는 컴퓨터 판독가능 매체에 액세스할 수 있다. 컴퓨터 판독가능 저장 매체는 일시적인, 전파되는 신호를 포함하지 않는 유형의 저장 수단이다. 컴퓨터 판독가능 저장 매체의 예는 주메모리, 캐시 메모리, 및 2차 메모리(예를 들어, DVD)와 같은 메모리를 포함하고 다른 저장 수단을 포함한다. 컴퓨터 판독가능 저장 매체에는 사용자 모드 크래시 리포트 시스템을 구현하는 컴퓨터 실행가능 명령어 또는 로직이 기록되거나 인코딩될 수 있다. 데이터 전송 매체는 유선 또는 무선 연결을 이용하여 일시적인, 전파되는 신호 또는 반송파(예를 들어, 전자기)를 통해 데이터를 전송하는데 사용된다.
사용자 모드 크래시 리포트 시스템은 하나 이상의 컴퓨터, 프로세서 또는 다른 장치에 의해 실행되는 프로그램 모듈 및 컴포넌트와 같은 컴퓨터 실행가능 명령어의 일반적인 문맥에서 설명될 수 있다. 일반적으로, 프로그램 모듈 또는 컴포넌트는 특정 태스크를 수행하거나 특정 데이터 유형을 구현하는 루틴, 프로그램, 오브젝트, 데이터 구조 등을 포함한다. 전형적으로, 프로그램 모듈의 함수는 다양한 실시예에서 필요에 따라 결합될 수도 있고 또는 분산될 수도 있다. 사용자 모드 크래시 리포트 시스템의 측면들은 예를 들어, 애플리케이션 특정 집적 회로("ASIC")를 사용하여 하드웨어로 구현될 수 있다.
도 6은 일부 실시예에서 크래시 핸들러의 프로세싱을 나타내는 흐름도이다. 크래시 핸들러(600)는 빅팀 쓰레드의 표시를 전달받고, 호출 체인을 생성하며, 크래시의 원인이 되는 함수를 발견하며, 크래시 리포트를 전송한다. 블록(601)에서, 컴포넌트는 빅팀 쓰레드와 관련된 쓰레드 제어 블록 또는 다른 정보를 검색한다. 블록(602)에서, 컴포넌트는 크래시 당시의 명령어 포인터를 결정한다. 블록(603)에서, 컴포넌트는 호출 체인에의 함수 추가 컴포넌트를 호출하여 호출 체인에 대한 명령어 포인트와 연관된 함수를 추가한다. 블록(604)에서, 컴포넌트는 크래시 당시의 스택 포인터를 검색한다. 블록(605)에서, 컴포넌트는 호출 스택을 따라 이동하는 경우 불량 어드레스를 만나게 되는 때를 검출하기 위해 호출 스택 불량 어드레스 핸들러를 설치한다. 블록(606-609)에서, 컴포넌트는 루핑하며 호출 스택을 따라 이동한다. 블록(606)에서, 컴포넌트는 현재 스택 포인터에 의해 참조되는 리턴 어드레스를 검색한다. 스택 포인터(SP)가 불량 메모리 어드레스를 포인팅하는 경우, 리턴 어드레스에 액세스하기 위해 스택 포인터를 사용하는 것은 불량 어드레스 예외를 야기할 것이다. 결정 블록(607)에서, 스택 프레임의 바닥에 도달한 경우(예를 들어, 불량 어드레스 예외를 나타내는 전역 플래그에 의해 표시됨), 컴포넌트는 블록(610)에서 계속되고, 그렇지 않으면, 컴포넌트는 블록(608)에서 계속된다. 블록(608)에서, 컴포넌트는 호출 체인에의 함수 추가 컴포넌트를 호출하여, 리턴 어드레스를 전달한다. 블록(609)에서, 컴포넌트는 다음 스택 프레임에 대한 참조를 검색하고 블록(606)으로 루핑하여 다음 스택 프레임을 처리한다. 블록(610)에서, 컴포넌트는 크래시의 원인이 되는 함수를 식별하기 위해 크래시의 원인이 되는 함수 발견 컴포넌트를 호출한다. 블록(611)에서, 컴포넌트는 크래시 리포트 저장 컴포넌트를 호출하고 그런 다음 완료된다.
도 7은 일부 실시예에서 크래시 리포트 시스템의 호출 체인에의 함수 추가 컴포넌트의 프로세싱을 나타내는 흐름도이다. 호출 체인에의 함수 추가 컴포넌트(700)는 어드레스를 전달받고, 그 어드레스에 대응하는 모듈 내의 함수를 식별하여, 그 함수를 호출 체인에 추가한다. 그 함수는 처음에 모듈 테이블을 사용하여 모듈을 식별한다. 블록(701)에서, 컴포넌트는 모듈 함수 맵에서 다음 엔트리를 선택한다. 결정 블록(702)에서, 모든 엔트리가 이미 선택된 경우, 전달된 어드레스에 대응하는 함수는 발견되지 않고 컴포넌트는 에러를 보고하고, 그렇지 않으면 컴포넌트는 블록(703)에서 계속된다. 결정 블록(703)에서, 어드레스가 선택된 엔트리의 범위 내에 있으면, 컴포넌트는 블록(704)에서 계속되고, 그렇지 않으면 컴포넌트는 블록(701)으로 루핑하여 다음 엔트리를 선택한다. 블록(704)에서, 컴포넌트는 식별된 함수에 대응하는 엔트리를 호출 체인에 추가하고 그런 다음 복귀한다.
도 8은 일부 실시예에서 크래시 리포트 시스템의 크래시의 원인이 되는 함수 발견 컴포넌트의 프로세싱을 나타내는 흐름도이다. 크래시의 원인이 되는 함수 발견 컴포넌트(800)는 면제되지 않는, 크래시의 원인이 되는 함수를 식별하기 위해 호출 체인을 처리한다. 블록(801)에서, 컴포넌트는 호출 체인에서 다음 함수를 선택한다. 결정 블록(802)에서, 호출 체인의 말단에 도달하게 되면, 컴포넌트는 크래시의 원인이 되는 함수는 식별되지 않았다는 표시를 반환하고, 그렇지 않으면 컴포넌트는 블록(803)에서 계속된다. 결정 블록(803)에서, 선택된 함수는 면제 함수 테이블에 의해 표시된 바와 같이 면제되는 경우, 컴포넌트는 블록(801)으로 루핑하여 다음 함수를 선택하고, 그렇지 않으면 컴포넌트는 크래시의 원인으로 선택된 함수의 표시를 반환한다.
도 9는 일부 실시예에서 사용자 모드 크래시 리포트 시스템의 크래시 리포트 전송 컴포넌트의 프로세싱을 나타내는 흐름도이다. 크래시 리포트를 전송하기 위해 크래시 리포트 저장 컴포넌트(900)가 호출된다. 이 컴포넌트는 크래시 식별자를 생성하고 애플리케이션이 다음에 런칭되는 경우 크래시 리포트 서버에 전송할 크래시 리포트를 저장한다. 컴포넌트는 크래시 식별자를 사용하여 유사한 크래시가 보고되었는지 여부를 확인할 수 있다. 블록(901)에서, 컴포넌트는 예를 들어, 애플리케이션 이름과 그 버전의 조합, 크래시의 원인이 되는 모듈 이름(즉, 크래시의 원인이 되는 함수를 포함하는 모듈)과 그 버전의 조합, 및 크래시의 원인이 되는 모듈 내에서의 크래시의 오프셋으로 크래시 식별자를 생성한다. 블록(902)에서, 컴포넌트는 각 쓰레드의 호출 체인, 크래시의 원인이 되는 함수, 변수 및 함수 이름(예를 들어, 크래시의 원인이 되는 함수)의 심볼화, 애플리케이션의 어드레스 공간의 다양한 부분의 덤프(dumps) 등을 포함하는 다양한 크래시 리포트 정보를 수집한다. 블록(903)에서, 컴포넌트는 세션 식별자를 크래시 리포트에 추가한다. 세션 식별자는 시작부터 종료(예를 들어, 크래시 또는 정상 종료)까지 애플리케이션의 실행을 고유하게 식별한다. 소정의 환경에서, 애플리케이션(또는 애플리케이션 모니터)은 고객 경험 서버와 같은 서버에 애플리케이션의 활동 또는 다른 정보를 보고할 수 있고, 세션 식별자를 통해 활동을 식별할 수 있다. 세션 식별자의 사용은 활동 정보가 크래시 리포트와 상관될 수 있게 해준다. 이러한 식으로, 개발자는 크래시의 원인을 분석할 때 크래시 리포트와 활동 정보 모두를 이용할 수 있게 된다. 블록(904)에서, 컴포넌트는 크래시 리포트를 크래시 리포트 저장소에 추가하고 복귀한다. 애플리케이션이 다음에 실행될 때, 업로드 기준이 만족되면, 애플리케이션은 크래시 리포트를 크래시 리포트 서버에 업로드한다. 애플리케이션은 다양한 업로드 기준을 사용하여 크래시 리포트가 업로드되어야 하는지 여부를 결정할 수 있다. 예를 들어, 업로드 기준은 현재의 통신 대역폭(예를 들어, 셀룰러 대 와이파이), 소정 개수의 동일 유형의 크래시 리포트가 이미 업로드되어 있는지 여부 등에 기초할 수 있다.
도 10은 일부 실시예에서 사용자 모드 크래시 리포트 시스템의 모듈 추가 콜백 컴포넌트의 프로세싱을 나타내는 흐름도이다. 모듈 추가 콜백 컴포넌트(1000)는 사용자 모드 크래시 리포트 시스템이 애플리케이션의 어드레스 공간에 이미 로딩된 이미지를 갖는 모듈을 초기화 및 기록하는 경우 설치된다. 애플리케이션 환경은 모듈이 로딩되었음을 애플리케이션에 통지하기 위해 모듈 식별자의 표시를 전달하는 모듈 추가 콜백을 호출할 수 있다. 블록(1001-1003)에서, 컴포넌트는 로딩된 모듈에 대한 다양한 정보, 예를 들어 메모리 내에서의 그의 어드레스, 그의 이름, 그의 빌드 식별자 등을 검색할 수 있다. 블록(1004)에서, 컴포넌트는 엔트리를 모듈 테이블에 추가하고 그런 다음 완료된다.
본 발명은 구조적인 특징 및/또는 동작에 특정한 언어로 설명되었지만, 첨부한 청구항에 정의된 본 발명은 전술한 바와 같은 특정 특징 또는 동작에 반드시 국한될 필요는 없다는 것을 이해해야 한다. 그보다, 전술한 특정 특징 및 동작은 청구항의 구현하는 예시적인 형태로 개시된 것이다. 따라서, 본 발명은 첨부한 청구항을 제외하고는 어떠한 것에 의해서도 제한되지 않는다.

Claims (15)

  1. 애플리케이션이 크래시(crash)되는 경우 크래시 리포트를 생성하도록 컴퓨팅 장치를 제어하는 컴퓨터 실행가능 명령어를 저장하는 컴퓨터 판독가능 저장 매체로서,
    상기 애플리케이션은 함수들을 갖는 모듈로서 구성되고,
    상기 컴퓨터 실행가능 명령어는
    상기 애플리케이션이 크래시되는 경우 상기 애플리케이션과 동일한 프로세스에서 실행되는 크래시 핸들러(a crash handler)를 설치하고,
    상기 애플리케이션이 크래시된 이후 상기 애플리케이션의 프로세스에서 실행되는 상기 크래시 핸들러의 제어 하에서,
    크래시 당시에 실행되던 상기 프로세스의 빅팀 쓰레드(victim thread)를 식별하고,
    상기 애플리케이션의 피호출 함수로부터 복귀하기 위한 리턴 어드레스를 식별하기 위해 상기 빅팀 쓰레드의 호출 스택을 따라 이동(walk a call stack)하고,
    상기 리턴 어드레스에 대응하는 상기 모듈 내의 오프셋을 식별하고,
    상기 식별된 오프셋을 이용하여 함수들의 호출 체인을 식별하며,
    상기 식별된 호출 체인에 기초하여 크래시 리포트를 생성하는
    명령어를 포함하는
    컴퓨터 판독가능 저장 매체.
  2. 제1항에 있어서,
    상기 컴퓨팅 장치는 iOS 기반 운영 체제의 제어 하에서 실행되는
    컴퓨터 판독가능 저장 매체.
  3. 제1항에 있어서,
    상기 애플리케이션 및 상기 크래시 핸들러는 상기 프로세스에서 사용자 특권 모드로 실행되는
    컴퓨터 판독가능 저장 매체.
  4. 제1항에 있어서,
    상기 컴퓨팅 장치는 마하 기반 커넬(Mach-based kernel) 및 BSD 기반 커넬을 갖는 운영 체제의 제어 하에서 실행되고, 상기 애플리케이션이 크래시되는 경우 생성된 마하 예외 및 BSD 신호를 처리하기 위해 다수의 크래시 핸들러가 설치되는
    컴퓨터 판독가능 저장 매체.
  5. 제1항에 있어서,
    상기 크래시 핸들러에 제어가 전달되는 경우 상기 빅팀 쓰레드의 식별이 상기 크래시 핸들러에 제공되는
    컴퓨터 판독가능 저장 매체.
  6. 제1항에 있어서,
    상기 애플리케이션은 샌드박스 환경에서 실행되는
    컴퓨터 판독가능 저장 매체.
  7. 제1항에 있어서,
    상기 컴퓨터 실행가능 명령어는 상기 호출 체인의 분석에 기초하여 상기 크래시의 원인이 되는 함수를 식별하는 명령어를 더 포함하는
    컴퓨터 판독가능 저장 매체.
  8. 제7항에 있어서,
    면제(immune)로서 지정된 함수는 크래시의 원인으로부터 제외되는
    컴퓨터 판독가능 저장 매체.
  9. 제8항에 있어서,
    함수들은 구성 파일에서 면제로서 식별되는
    컴퓨터 판독가능 저장 매체.
  10. 제1항에 있어서,
    상기 크래시 리포트는 상기 크래시 리포트를 활동 정보에 맵핑하기 위한 세션 식별(a session identification)을 포함하고, 상기 활동 정보는 상기 세션 식별에 의해 식별되고, 상기 활동 정보는 상기 애플리케이션의 실행 동안 기록되는(logged)
    컴퓨터 판독가능 저장 매체.
  11. 제1항에 있어서,
    상기 컴퓨터 실행가능 명령어는 업로드 기준이 만족되면 상기 크래시 리포트를 크래시 리포트 서버에 전송하는 명령어를 더 포함하는
    컴퓨터 판독가능 저장 매체.
  12. 샌드박스 환경에서 실행되는 애플리케이션이 크래시되는 경우 크래시 리포트를 생성하는 컴퓨팅 시스템으로서,
    상기 애플리케이션은 함수들을 갖는 모듈로서 구성되고,
    상기 컴퓨팅 시스템은
    상기 모듈 및 크래시 핸들러를 위한 컴퓨터 실행가능 명령어를 저장하는 컴퓨터 판독가능 저장 매체, 및
    상기 컴퓨터 판독가능 저장 매체에 저장된 상기 컴퓨터 실행가능 명령어를 실행하는 프로세서
    를 포함하고,
    상기 크래시 핸들러는 상기 애플리케이션이 크래시되는 경우 상기 애플리케이션과 동일한 프로세스에서 실행되고, 상기 크래시 핸들러는
    상기 프로세스의 빅팀 쓰레드(victim thread)를 식별하는 컴포넌트- 상기 빅팀 쓰레드는 크래시의 당시에 실행되던 상기 프로세스의 쓰레드임 -와,
    상기 빅팀 쓰레드의 호출 스택에 대한 스택 포인터를 검색하고 상기 크래시 당시에 실행되던 명령어에 대한 명령어 포인터를 검색하는 컴포넌트와,
    피호출 함수에 대한 리턴 어드레스를 식별하기 위해 상기 빅팀 쓰레드의 상기 호출 스택을 따라 이동하는 컴포넌트- 상기 리턴 어드레스는 호출 함수 내에서의 리턴 위치를 나타냄 -와,
    상기 리턴 어드레스 및 상기 명령어 포인터에 대응하는 상기 모듈 내의 오프셋을 식별하는 컴포넌트와,
    상기 식별된 오프셋을 사용하여 함수들의 호출 체인을 식별하는 컴포넌트와,
    상기 크래시의 원인이 되는 함수를 식별하는 컴포넌트- 상기 크래시의 원인이 되는 상기 함수는 면제 함수 테이블(immune function table)에서 크래시의 원인으로부터 면제되지 않은 것으로 표시된 상기 크래시 이전에 호출된 마지막 함수임 -와,
    상기 애플리케이션의 실행에 대한 애플리케이션 활동 로그의 세션 식별 및 상기 크래시의 원인이 되는 함수를 식별하는 크래시 리포트를 생성하는 컴포넌트와,
    업로드 기준이 만족되는 경우, 상기 크래시 리포트를 크래시 리포트 서버에 업로드하는 컴포넌트
    를 포함하는
    컴퓨팅 시스템.
  13. 제12항에 있어서,
    상기 크래시 핸들러는 상기 애플리케이션과 연관된 심볼 테이블 정보를 이용하여 크래시의 원인이 되는 상기 함수의 이름을 식별하는 컴포넌트를 더 포함하는
    컴퓨팅 시스템.
  14. 제12항에 있어서,
    상기 컴퓨팅 시스템은 마하 기반 커넬(Mach-based kernel) 및 BSD 기반 커넬을 갖는 운영 체제의 제어 하에서 실행되고, 상기 애플리케이션이 크래시되는 경우 생성되는 하나 이상의 마하 예외 및 BSD 신호를 처리하기 위해 다수의 크래시 핸들러가 설치되는
    컴퓨팅 시스템.
  15. 제12항에 있어서,
    함수들의 호출 체인을 식별하는 상기 컴포넌트는 상기 식별된 함수들에 대응하는 함수들을 식별하고 상기 식별된 함수들의 표시를 상기 호출 체인에 추가하며, 상기 컴퓨터 실행가능 명령어는 상기 면제 함수 테이블에 관리 함수를 추가하는 컴포넌트를 더 포함하는
    컴퓨팅 시스템.
KR1020167025605A 2014-03-17 2015-03-12 사용자 모드 크래시 리포트를 위한 프레임워크 KR102219546B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/217,030 US9836343B2 (en) 2014-03-17 2014-03-17 Framework for user-mode crash reporting
US14/217,030 2014-03-17
PCT/US2015/020053 WO2015142598A1 (en) 2014-03-17 2015-03-12 Framework for user-mode crash reporting

Publications (2)

Publication Number Publication Date
KR20160132856A KR20160132856A (ko) 2016-11-21
KR102219546B1 true KR102219546B1 (ko) 2021-02-23

Family

ID=52774575

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167025605A KR102219546B1 (ko) 2014-03-17 2015-03-12 사용자 모드 크래시 리포트를 위한 프레임워크

Country Status (6)

Country Link
US (1) US9836343B2 (ko)
EP (1) EP3120247B1 (ko)
KR (1) KR102219546B1 (ko)
CN (1) CN106133698B (ko)
TW (1) TW201537461A (ko)
WO (1) WO2015142598A1 (ko)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11294802B2 (en) 2016-11-08 2022-04-05 International Business Machines Corporation Identifying incorrect variable values in software testing and development environments
CN108334515B (zh) * 2017-01-20 2022-07-15 阿里巴巴集团控股有限公司 一种处理崩溃文件中堆栈地址的方法、装置及系统
KR101860674B1 (ko) * 2017-06-20 2018-05-23 넷마블 주식회사 크래시 리포트 그룹핑 방법, 서버 및 컴퓨터 프로그램
WO2019049478A1 (ja) * 2017-09-06 2019-03-14 日本電信電話株式会社 コールスタック取得装置、コールスタック取得方法およびコールスタック取得プログラム
CN107967192B (zh) * 2017-12-20 2022-03-11 北京奇虎科技有限公司 一种智能终端的系统崩溃处理方法和装置
US10684035B2 (en) 2018-01-08 2020-06-16 Trane International Inc. HVAC system that collects customer feedback in connection with failure triage
KR102545765B1 (ko) * 2018-05-28 2023-06-21 삼성전자주식회사 메모리 오류를 검출하는 방법 및 시스템
CN109408265B (zh) * 2018-09-28 2022-05-10 广州虎牙信息科技有限公司 一种ios运行异常的保护方法、装置、终端设备及存储介质
CN109344035A (zh) * 2018-09-30 2019-02-15 北京奇虎科技有限公司 一种应用程序的运行控制方法、装置、设备及存储介质
CN111198812B (zh) * 2018-11-20 2024-02-09 深圳市优必选科技有限公司 一种应用故障检测方法、应用故障检测装置及终端设备
CN110109819A (zh) * 2019-03-16 2019-08-09 平安城市建设科技(深圳)有限公司 应用异常调试的处理方法、装置、设备及可读存储介质
US11086758B1 (en) * 2019-04-19 2021-08-10 American Megatrends International, Llc Identifying firmware functions executed in a call chain prior to the occurrence of an error condition
CN110413432B (zh) * 2019-07-02 2023-09-01 Oppo广东移动通信有限公司 一种信息处理方法、电子设备及存储介质
CN110489165B (zh) * 2019-08-02 2021-10-15 北京字节跳动网络技术有限公司 获取调用栈栈帧指令偏移的方法、装置、介质和设备
CN110502440A (zh) * 2019-08-09 2019-11-26 北京达佳互联信息技术有限公司 调试定位信息的获取方法、装置、电子设备及存储介质
CN110865898B (zh) * 2019-10-12 2023-09-05 北京字节跳动网络技术有限公司 崩溃调用栈聚合的方法、装置、介质和设备
CN111782504B (zh) * 2020-05-20 2023-12-01 车智互联(北京)科技有限公司 一种应用程序异常的诊断方法、移动终端及可读存储介质
CN112925667B (zh) * 2021-03-29 2024-03-08 北京奇艺世纪科技有限公司 预防sdk崩溃的方法、装置、设备及可读存储介质
US11586528B2 (en) * 2021-06-18 2023-02-21 Agora Lab, Inc. Software development kit with independent automatic crash detection
US11734156B2 (en) * 2021-09-23 2023-08-22 Microsoft Technology Licensing, Llc Crash localization using crash frame sequence labelling
US20240037017A1 (en) * 2022-07-29 2024-02-01 Red Hat, Inc. Verification of core file debugging resources

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060253837A1 (en) 2005-04-15 2006-11-09 Microsoft Corporation Using a call stack hash to record the state of a process
US20110099550A1 (en) 2009-10-26 2011-04-28 Microsoft Corporation Analysis and visualization of concurrent thread execution on processor cores.
US20120137182A1 (en) 2010-11-30 2012-05-31 Microsoft Corporation Error Report Processing
WO2013033816A1 (en) 2011-09-09 2013-03-14 Echoworx Corporation Method and system for credential management and data encryption for ios based devices
US20140068326A1 (en) 2012-09-06 2014-03-06 Triumfant, Inc. Systems and Methods for Automated Memory and Thread Execution Anomaly Detection in a Computer Network

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2002095585A1 (en) * 2001-05-24 2002-11-28 Techtracker, Inc. Program execution stack signatures
US7694328B2 (en) 2003-10-21 2010-04-06 Google Inc. Systems and methods for secure client applications
US7240240B2 (en) 2004-03-17 2007-07-03 Lucent Technologies Inc. Managing process state information in an operating system environment
US7321988B2 (en) 2004-06-30 2008-01-22 Microsoft Corporation Identifying a code library from the subset of base pointers that caused a failure generating instruction to be executed
US7373554B2 (en) 2004-09-24 2008-05-13 Oracle International Corporation Techniques for automatic software error diagnostics and correction
US20070150871A1 (en) * 2005-12-22 2007-06-28 International Business Machines Corporation Autonomically adjusting the collection of performance data from a call stack
US8020149B2 (en) 2006-08-04 2011-09-13 Apple Inc. System and method for mitigating repeated crashes of an application resulting from supplemental code
US7823006B2 (en) * 2007-05-29 2010-10-26 Microsoft Corporation Analyzing problem signatures
US8479051B2 (en) 2009-01-23 2013-07-02 Microsoft Corporation System and method for customized error reporting
CN101719090A (zh) * 2009-12-25 2010-06-02 珠海市君天电子科技有限公司 对计算机软件系统崩溃原因进行自动分析的方法
WO2011146750A2 (en) 2010-05-19 2011-11-24 Google Inc. Bug clearing house
US8516308B1 (en) 2011-03-09 2013-08-20 Amazon Technologies, Inc. Crash based incompatibility prediction for classes of mobile devices crash data
US8621282B1 (en) 2011-05-19 2013-12-31 Google Inc. Crash data handling
US9389936B2 (en) 2011-09-23 2016-07-12 Microsoft Technology Licensing, Llc. Monitoring the responsiveness of a user interface
US9262250B2 (en) 2011-12-12 2016-02-16 Crashlytics, Inc. System and method for data collection and analysis of information relating to mobile applications

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060253837A1 (en) 2005-04-15 2006-11-09 Microsoft Corporation Using a call stack hash to record the state of a process
US20110099550A1 (en) 2009-10-26 2011-04-28 Microsoft Corporation Analysis and visualization of concurrent thread execution on processor cores.
US20120137182A1 (en) 2010-11-30 2012-05-31 Microsoft Corporation Error Report Processing
WO2013033816A1 (en) 2011-09-09 2013-03-14 Echoworx Corporation Method and system for credential management and data encryption for ios based devices
US20140068326A1 (en) 2012-09-06 2014-03-06 Triumfant, Inc. Systems and Methods for Automated Memory and Thread Execution Anomaly Detection in a Computer Network

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
웹사이트(2009.01.29)

Also Published As

Publication number Publication date
TW201537461A (zh) 2015-10-01
US9836343B2 (en) 2017-12-05
US20150261596A1 (en) 2015-09-17
EP3120247B1 (en) 2019-12-04
KR20160132856A (ko) 2016-11-21
EP3120247A1 (en) 2017-01-25
CN106133698B (zh) 2020-02-07
CN106133698A (zh) 2016-11-16
WO2015142598A1 (en) 2015-09-24

Similar Documents

Publication Publication Date Title
KR102219546B1 (ko) 사용자 모드 크래시 리포트를 위한 프레임워크
US10521242B2 (en) Application containers with updatable application programming interface layers
CN110737895B (zh) 使用静态和动态恶意软件分析来扩展恶意软件的动态检测
US9519495B2 (en) Timed API rules for runtime verification
US10929280B2 (en) Scheduling tests of software for a cloud computing environment
US20140372985A1 (en) API Rules Verification Platform
US9355002B2 (en) Capturing trace information using annotated trace output
EP3171275B1 (en) Transparent process interception
US9213622B1 (en) System for exception notification and analysis
US9928105B2 (en) Stack overflow prevention in parallel execution runtime
US11379345B2 (en) System and method for controlled data extraction in computer networks
US8751872B2 (en) Separation of error information from error propagation information
Riganelli et al. Policy enforcement with proactive libraries
US20100077385A1 (en) Debugger exception filtering with target-based rules
Zoppi et al. Context-awareness to improve anomaly detection in dynamic service oriented architectures
US20180137002A1 (en) Thread based dynamic data collection
CN107003828B (zh) 图形指令的仪器化
US9639391B2 (en) Scaling past the java virtual machine thread limit
US9846631B2 (en) Methods, circuits, apparatus, systems and associated software modules for evaluating code behavior
US11361077B2 (en) Kernel-based proactive engine for malware detection
US11656888B2 (en) Performing an application snapshot using process virtual machine resources
CN113360290B (zh) 死锁检测方法和装置
US20240143485A1 (en) Presubmit Test Run Minimization Analysis Using Runtime Isolation Guarantees
CN112416695A (zh) 一种全局变量监控方法、装置、设备及存储介质
WO2019036101A1 (en) CORRELATION OF FUNCTION CALLS WITH FUNCTIONS IN ASYNCHRONOUSLY EXECUTED SONES

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant