KR101645052B1 - 디버깅 파이프라인 - Google Patents

디버깅 파이프라인 Download PDF

Info

Publication number
KR101645052B1
KR101645052B1 KR1020117013798A KR20117013798A KR101645052B1 KR 101645052 B1 KR101645052 B1 KR 101645052B1 KR 1020117013798 A KR1020117013798 A KR 1020117013798A KR 20117013798 A KR20117013798 A KR 20117013798A KR 101645052 B1 KR101645052 B1 KR 101645052B1
Authority
KR
South Korea
Prior art keywords
debugging
pipeline
computer code
code
debug
Prior art date
Application number
KR1020117013798A
Other languages
English (en)
Other versions
KR20110102337A (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 KR20110102337A publication Critical patent/KR20110102337A/ko
Application granted granted Critical
Publication of KR101645052B1 publication Critical patent/KR101645052B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

실행 환경 외부의 디버깅 도구를 사용하여, 그 실행 환경에서 동작 중인 컴퓨터 코드에 대한 디버깅 기능을 생성하기 위해 디버깅 파이프라인이 개발될 수 있다. 제작자는 디버깅 파이프라인 인터페이스 개체를 소비자에게 노출시킴으로써 제작자를 소비자(예를 들어, 디버깅 도구)에게 링크시키도록 구성된 디버깅 파이프라인을 게시할 수 있다. 디버깅 파이프라인은 일련의 디버깅 프로토콜을 구현할 수 있으며, 이 디버깅 프로토콜은 적어도 2개의 컴퓨터 언어 중 적어도 하나에서 컴퓨터 코드에 대한 디버깅 요청을 처리하는 프로토콜, 운영 체제 고유 구성을 노출시키지 않고 각자의 서명에서 컴퓨터 코드 언어 형식을 처리하도록 구성된 프로토콜, 및 제1 디버깅 파이프라인이 하나 이상의 제2 디버깅 파이프라인으로부터 격리되도록 하는 프로토콜을 포함한다. 그에 부가하여, 소비자 구성요소는 실행 환경에서 컴퓨터 코드의 디버깅을 제공할 수 있다.

Description

디버깅 파이프라인{DEBUGGING PIPELINE}
컴퓨터 코드가 각종의 환경에서 실행될 수 있으며, 예를 들어, 스크립트 코드가 인터프리터에 의해 실행될 수 있고, 프로그래밍 코드가 런타임 환경에서 실행될 수 있으며, 많은 다른 것들이 있다. 게다가, 컴퓨터 코드의 디버깅이 다양한 플랫폼 및 프로토콜을 사용하여 다양한 방식으로 수행될 수 있다. 종종, 사용자는 응용 프로그램 개발 및 실행 프레임워크를 이용하여 코드를 개발할 수 있으며, 이 프레임워크는 또한 코드를 디버깅하기 위한 디버깅 도구를 포함할 수 있다. 대안에서, 디버깅 도구는 특정의 프로그래밍 또는 실행 환경에서 특정의 컴퓨터 언어에 대해 동작하도록 설계된 별도의 구성요소일 수 있다. 그에 부가하여, 실행 동안에 또는 코드 실행으로부터 생성된 로그 파일을 사용하여 디버깅이 수행될 수 있다.
컴퓨터 응용 프로그램의 사용자 및 개발자는 종종 응용 프로그램에서의 코드를 디버깅할 필요가 있다. 예를 들어, 호스트 응용 프로그램에서 실행되도록 설계되어 있는 매크로의 개발자는 발표 또는 사용 이전에 코드를 디버깅하고자 할 수 있다. 디버깅 작업을 수행하는 것은 호스트 응용 프로그램의 실행 환경에 의해 지원될 수 있지만, 사용자는 실행 환경 외부의 디버깅 도구를 이용하고자 할 수 있다.
이 요약은 이하에서 상세한 설명에 더 기술되는 일련의 개념을 간략화된 형태로 소개하기 위해 제공된 것이다. 이 요약은 청구된 발명 대상의 주요 요소 또는 필수적인 특징을 확인하기 위한 것이 아니며, 청구된 발명 대상의 범위를 제한하는 데 사용되기 위한 것도 아니다.
디버깅 도구가 컴퓨터 코드(예를 들어, 스크립트 코드, 프로그래밍 언어 코드, 중간 언어 코드, 및 기계어 코드)의 디버깅을 제공할 수 있는 반면, 이들 도구는 통상적으로 특정의 유형의 코드 또는 언어, 및/또는 특정의 플랫폼에서 동작하는 것으로 제한된다. 종종, 호스트 응용 프로그램의 사용자는 호스트 응용 프로그램에서 실행될 코드(매크로 등)를 개발할 수 있고, 개발된 코드를 디버깅하고자 할 수 있다. 기존의 디버깅 응용 프로그래밍 인터페이스(API)는 보통 각자의 디버깅 시나리오에 대한 커스텀 해결책을 필요로 하며, 이는, 예를 들어, 비즈니스 응용 프로그램이 만나게 될 수 있는 다양한 시나리오를 해결하는 것을 어렵게 만든다. 현재 플랫폼, 운영 체제 및 언어에 걸쳐 디버깅하는 표준화된 해결책이 없다.
호스트 응용 프로그램의 실행 환경의 외부에 있을 수 있는 디버깅 도구에 의해 컴퓨터 코드의 디버깅을 용이하게 해주는 하나 이상의 기법 및/또는 시스템이 본 명세서에서 제공되며, 호스트 응용 프로그램의 플랫폼과 다른 플랫폼에 적용되는 기능을 포함할 수 있다. 예를 들어, 컴퓨터 코드가 개발된 코드에 대한 호스트 응용 프로그램을 컴파일하고 실행하는 실행 환경 내에 존재할 수 있는 경우, 본 명세서에 제공된 기법 및 시스템은 상이한 실행 환경에 독점적인 디버깅 도구를 사용하여 컴퓨터 코드를 디버깅하는 것을 가능하게 해줄 수 있다.
일 실시예에서, 실행 환경의 외부에서 호스팅되는 디버깅 도구에 의해, 실행 환경에서 호스팅되는 컴퓨터 코드의 디버깅을 용이하게 해주는 시스템이 고안될 수 있다. 실행 환경에서, 제작자(예를 들어, 스크립트 코드 엔진을 실행하는 브라우저)는 실행 환경에서 컴퓨터 코드의 디버깅을 제공하기 위해 일련의 디버깅 프로토콜을 구현하는 디버깅 파이프라인(debugging pipeline)을 게시할 수 있다. 예를 들어, 사용자는 사용자 코드에 대한 일련의 디버깅 프로토콜을 구현하는 파이프라인을 게시할 수 있는 스크립트 엔진에 의해 컴파일되고 실행될 스크립트 코드를 작성할 수 있다.
게다가, 이 실시예에서, 디버깅 파이프라인은 인터페이스 개체를 사용하여 실행 환경 외부의 소비자에게 디버깅 파이프라인을 노출시킬 수 있다. 제작자의 실행 환경 외부의 소비자(예를 들어, 디버깅 도구)는 디버깅 파이프라인을 사용하여 실행 환경에서의 컴퓨터 코드의 디버깅을 제공할 수 있다.
그에 부가하여, 이 실시예에서, 일련의 프로토콜이 소비자가 컴퓨터 코드의 디버깅을 제공할 수 있게 해줄 수 있다. 이 프로토콜은 언어-중립적인 디버깅(language-neutral debugging)을 제공하여, 예를 들어, 각종의 컴퓨터 언어로부터의 디버깅 요청을 허용할 수 있는 언어 불문 프로토콜(language agnostic protocol)(예를 들어, 특정의 컴퓨팅 언어에 독립적임)을 포함할 수 있다. 게다가, 이 프로토콜은 운영 체제 고유 구성(operating system specific construct)을 노출시키지 않고 각자의 서명에서 컴퓨터 코드 언어 형식의 처리를 제공할 수 있는 운영 체제 불문 프로토콜(operating system agnostic protocol)(예를 들어, 특정의 운영 체제에 독립적임)을 포함할 수 있다. 그에 부가하여, 이 프로토콜은 서로 격리되도록 다수의 디버깅 파이프라인을 제공할 수 있는 격리 프로토콜(isolation protocol)을 포함할 수 있다.
이상의 목적 및 관련 목적을 달성하기 위해, 이하의 설명 및 첨부 도면은 특정의 예시적인 측면 및 구현에 대해 기술하고 있다. 이들은 하나 이상의 측면이 이용될 수 있는 다양한 방식 중 단지 몇 개만을 나타낸 것이다. 본 발명의 다른 측면, 이점 및 새로운 특징이, 첨부 도면과 관련하여 살펴볼 때, 이하의 상세한 설명으로부터 명백하게 될 것이다.
도 1은 실행 환경의 외부에서 호스팅되는 디버깅 도구에 의해, 실행 환경에서 호스팅되는 컴퓨터 코드의 디버깅을 용이하게 해주는 예시적인 시스템의 구성요소를 나타낸 도면.
도 2는 제작자 구성요소를 사용자가 디버깅할 수 있게 만들어주는 디버깅 인터페이스를 구현하는 소비자 구성요소를 나타낸 도면.
도 3은 멀리 떨어져 있는 제작자와 소비자를 연결시키기 위해 필터가 사용될 수 있는 예시적인 환경을 나타낸 도면.
도 4는 본 명세서에 기술된 예시적인 시스템의 측면을 구현할 수 있는 예시적인 환경을 나타낸 도면.
도 5는 실행 환경에서 호스팅되는 컴퓨터 코드의 디버깅을, 그 실행 환경의 외부에서 호스팅되는 디버깅 도구에 의해, 용이하게 해주는 예시적인 방법의 흐름도.
도 6은 실행 환경의 외부에서 호스팅되는 디버깅 도구에 의해 실행 환경에서 호스팅되는 컴퓨터 코드의 디버깅을 용이하게 해주는 방법이 구현될 수 있는 예시적인 환경을 나타낸 도면.
도 7은 본 명세서에 기술된 발명 내용 중 하나 이상을 구현하도록 구성된 프로세서 실행가능 명령어를 포함하는 예시적인 컴퓨터 판독가능 매체를 나타낸 도면.
도 8은 본 명세서에 기술된 발명 내용 중 하나 이상이 구현될 수 있는 예시적인 컴퓨팅 환경을 나타낸 도면.
이제부터 첨부 도면을 참조하여 청구된 발명 대상에 대해 기술하며, 도면 전체에 걸쳐 동일한 참조 번호가 동일한 구성요소를 가리키는 데 사용되고 있다. 이하의 설명에서, 설명의 목적상, 청구된 발명 대상에 대한 완전한 이해를 제공하기 위해 수많은 구체적인 상세가 기술되어 있다. 그렇지만, 청구된 발명 대상이 이러한 구체적인 상세 내용 없이도 실시될 수 있다는 것이 명백할 수 있다. 다른 경우에, 청구된 발명 대상의 설명을 용이하게 해주기 위해 구조 및 장치가 블록도 형태로 도시되어 있다.
도 1은 실행 환경의 외부에서 호스팅되는 디버깅 도구에 의해, 실행 환경에서 호스팅되는 컴퓨터 코드(예를 들어, 사용자 개발 스크립트 코드)의 디버깅을 용이하게 해주는 예시적인 시스템(100)을 구성하는 구성요소를 나타낸 도면이다. 예를 들어, 사용자는 브라우저(예를 들어, 인터넷 익스플로러)에서 실행 중인 스크립팅 엔진(예를 들어, 런타임 시에 스크립트 코드를 컴파일하고 실행할 수 있는 스크립트 인터프리터)에 의해 실행될 스크립트 코드를 작성할 수 있다. 이 실시예에서, 예시적인 시스템(100)은 디버깅 도구(예를 들어, 응용 프로그램 개발 플랫폼의 디버거와 같은 리치 클라이언트 디버거 엔진)가 스크립팅 엔진에 의해 실행되는 사용자 스크립트 코드의 디버깅을 제공할 수 있는 것을 용이하게 해주는 데 사용될 수 있다.
실행 환경에서 호스팅되는 컴퓨터 코드가 사용자 개발 코드로 제한되지 않는다는 것을 잘 알 것이다. 예를 들어, 일 실시예에서, 컴퓨터 코드는 스크립트 작성 엔진에 의해 개발될 수 있고, 사용자 또는 다른 컴퓨터가 이 엔진에 의해 작성된 코드를 디버깅하고자 할 수 있다. 다른 실시예에서, 제1 사용자는 실행 환경에서 실행될 코드를 개발할 수 있고, 제2 사용자는 그 사용자 개발 코드를 디버깅하고자 할 수 있다. 당업자라면 본 명세서에 기술된 시스템을 사용하는 대안의 실시예를 고안할 수 있다는 것이 예상된다. 시스템 및 기법이 전술한 실시예로 제한되지 않는다.
일 실시예에서, 컴퓨터 코드는 디버깅 도구와 동일한 프로세스에서 동작하고 있는 실행 환경에서 호스팅될 수 있다. 예를 들어, 사용자는 호스트 응용 프로그램에 의해 실행될 매크로에 대한 스크립트 코드를 작성할 수 있고, 예시적인 시스템(100)은 동일한 컴퓨터 상에서 실행 중인 별도의 개발 플랫폼으로부터 사용자 스크립트 코드를 디버깅하기 위해 디버거 엔진을 사용하는 것을 용이하게 해줄 수 있다. 다른 실시예에서, 컴퓨터 코드를 호스팅하는 실행 환경은 제1 원격 서버에서 동작하고 있을 수 있고, 디버깅 도구는 제2 원격 서버 또는 사용자의 컴퓨터 상에 위치할 수 있다. 이 실시예에서, 예를 들어, 예시적인 시스템(100)은 디버깅 도구를 사용한 컴퓨터 코드의 원격 디버깅을 용이하게 해줄 수 있다.
도 1에서, 예시적인 시스템은 실행 환경(102)에 배치된 제작자 구성요소(104)를 포함한다. 제작자 구성요소(104)는 디버깅 프로세스의 단계들을 링크시키도록 구성될 수 있는 디버깅 파이프라인(106)을 게시하도록 구성될 수 있다. 예를 들어, 디버깅 파이프라인(106)은, 사용자 개발 코드(152)의 디버깅을 용이하게 해주기 위해, 제작자 구성요소(104)(예를 들어, 스크립트 코드 인터프리터)를 소비자 구성요소(112)(예를 들어, 디버깅 도구)와 링크(154)시키는 소프트웨어 인프라(software infrastructure)일 수 있다.
본 명세서에 기술된 기법 및 시스템이 전술한 실시예로 제한되지 않는다는 것을 잘 알 것이다. 당업자라면 사용자가 개발된 코드를 컴파일하고 실행할 수 있게 해주는 컴퓨터 응용 프로그램 또는 소프트웨어 프레임워크로서 기능할 수 있는 대안의 제작자 구성요소를 고안할 수 있는 것과 본 명세서에 기술된 기법 및 시스템이 이들 대안의 제작자 구성요소를 포함하는 것이 예상된다. 예를 들어, 어댑터, 스크립트 코드 디버거, 응용 프로그램 덤프 파일 판독기, 및 기타 구성요소가 예시적인 시스템(100)에서 제작자 구성요소로서 이용될 수 있다.
디버깅 파이프라인(106)은 디버깅 파이프라인(106)을 실행 환경(102) 외부의 소비자 구성요소(112)에 노출시키도록 구성될 수 있는 디버깅 파이프라인 인터페이스 개체(110)를 포함한다. 일 실시예에서, 제작자 구성요소(104)는 파이프라인 인터페이스 개체(110)를 소비자가 이용할 수 있게 만들어줌으로써 디버깅 파이프라인(106)을 구현할 수 있고, 소비자 구성요소(112)는 디버깅 파이프라인 인터페이스 개체(110)를 이용하여 파이프라인 및 파이프라인 내의 기능에 링크(154)함으로써 디버깅 파이프라인(106)과 연계될 수 있다.
예를 들어, 이 실시예에서, 제작자 구성요소(104)는 디버깅 파이프라인을 시스템 상에 게시하여, 인터페이스 개체(110)를 그 시스템 상의 소비자 구성요소(112)[리치 클라이언트 개발 플랫폼(예를 들어, Visual Studio®) 등]가 이용할 수 있게 만들어줄 수 있다. 이 일례에서, 리치 클라이언트 개발 플랫폼의 사용자는 (예를 들어, 시스템 상의 목록을 검토함으로써) 어느 제작자 구성요소(104)가 파이프라인을 게시했는지를 식별하고, 파이프라인 인터페이스 개체(110)를 이용함으로써 디버깅 파이프라인을 리치 클라이언트 개발 플랫폼에 연계시킬 수 있다. 이러한 방식으로, 이 일례에서, 제작자는 디버깅 파이프라인(106)을 통해 디버거에 링크(154)되어, 리치 클라이언트 디버거가 파이프라인에서 기능하여 사용자 개발 코드(152)에 대한 디버깅을 제공할 수 있게 해줄 수 있다.
게다가, 디버깅 파이프라인 인터페이스 개체(110)는 일련의 디버깅 프로토콜(108)을 구현하도록 구성될 수 있다. 디버깅 프로토콜(108)은 실행 환경 외부의 소비자 구성요소(112)에 의한 실행 환경(102)에서의 컴퓨터 코드(152)의 디버깅 기능(debugging experience)을 정의하도록 구성되어 있다. 예를 들어, 디버깅 프로토콜(108)은, 파이프라인에 링크된 구성요소를 사용자 코드(152)의 특정의 요구사항에 따라 동작하도록 구성하는, 디버깅 파이프라인(106)을 정의하는 구성 파일일 수 있다.
일련의 디버깅 프로토콜(108)은 적어도 2개의 컴퓨터 스크립트 언어 중 적어도 하나에서 컴퓨터 코드에 대한 디버깅 요청의 처리를 가능하게 해주도록 구성될 수 있는 언어 불문 프로토콜(114)을 포함한다. 언어 불문 프로토콜(114)(예를 들어, 특정의 컴퓨터 언어에 독립적임)을 구현하는 것은, 일 실시예에서, 소비자 구성요소가 언어 의미 레벨(language semantic level)에서 동작할 수 있게 해줄 수 있다. 이 실시예에서, 디버깅 파이프라인 인터페이스 개체(110)는 컴퓨터 언어보다 상위 추상화 레벨에서 동작하는 응용 프로그래밍 인터페이스(API)를 포함할 수 있다. 예를 들어, 특정의 언어가 디버깅 동안 스택 프레임(stack frame)을 요청하기 위해 특정의 코드를 사용할 수 있는 경우, 이 실시예에서, API는 디버그 요청이 그의 의미 부분(semantic part)(의미)으로 추상화되고, "스택을 가져오며", 요청에 대해 "스택 여기 있습니다"를 반환할 수 있게 해줄 수 있다.
일련의 디버깅 프로토콜(108)은 또한 운영 체제 고유 구성을 노출시키지 않고 각자의 서명에서 컴퓨터 코드 언어 형식의 처리를 가능하게 해주도록 구성되어 있는 운영 체제 불문 프로토콜(116)(예를 들어, 특정의 운영 체제에 독립적임)을 포함한다. 일 실시예에서, 운영 체제 불문 프로토콜(116)을 구현하는 것은 디버깅 파이프라인(106)이 프로세스 및 스레드와 같은 운영 체제 개념과 분리될 수 있게 해줄 수 있다. 이 실시예에서, 디버깅 파이프라인(106)은 프로세스 식별자 및 운영 체제 핸들(operating system handle)과 같은 운영 체제 구성을 노출시키지 않을 것이다. 예를 들어, 디버깅 파이프라인의 제1 구현예는 전체 프로세스의 디버깅을 제공할 수 있는 반면, 디버깅 파이프라인의 제2 구현예는 단일 스레드, 한 서브셋의 스레드, 또는 분산 시스템과 같은 다수의 프로세스를 생성하는 상태 머신의 디버깅을 제공할 수 있다.
일련의 디버깅 프로토콜(108)은 또한 하나 이상의 제2 디버깅 파이프라인으로부터 격리될 제1 디버깅 파이프라인을 제공하도록 구성되어 있는 격리 프로토콜(118)을 포함한다. 일 실시예에서, 단일 디버깅 파이프라인은 단일 상태 머신(single-state machine)을 기술할 수 있고, 컴퓨터 코드의 의도된 디버깅을 벗어나 있는 코드에 아무런 영향을 미치지 않을 수 있다. 이러한 방식으로, 예를 들어, 호스트 응용 프로그램에서 실행 중인 사용자 개발 코드를 디버깅하는 데 사용되고 있는 디버깅 파이프라인은 사용자 코드를 호스팅하는 컴퓨터 상에서 실행 중인 다른 응용 프로그램에 영향을 미치지 않을 것이고 호스트 프로세스에 영향을 미치지 않을 것이다.
도 1에서, 예시적인 시스템(100)은 또한 제작자 구성요소(104)의 실행 환경(102) 외부에 위치하는 소비자 구성요소(112)를 포함하고, 실행 환경(102)에서의 컴퓨터 코드(152)의 디버깅(154)을 제공하도록 구성될 수 있다. 예를 들어, 소비자 구성요소(112)는 컴퓨터 코드에 대한 어떤 형태의 디버깅 기능을 제공하는 일종의 도구일 수 있다. 이 일례에서, 디버깅 도구는, 제작자 구성요소(104)에 의해 구현되는 디버깅 파이프라인(106)에 링크하고 그로써 디버깅 프로토콜(108)을 사용하여 컴퓨터 코드(152)의 디버깅(154)을 제공하기 위해, 파이프라인 인터페이스(110)를 이용할 수 있다(예를 들어, URL로부터 인터페이스를 선택하고 이를 디버깅 도구에서의 컨트롤에 연결시킴).
일 실시예에서, 소비자 구성요소(112)는 리치 클라이언트 응용 프로그램 개발 플랫폼의 일부인 디버깅 도구일 수 있다. 일례로서, 개발 플랫폼의 사용은 리치 클라이언트 응용 프로그램 개발 플랫폼의 디버깅 도구를 파이프라인 인터페이스에 "연결(wire up)"시킬 수 있고 그로써 디버깅 도구를 제작자(104)에 연결시킬 수 있다. 다른 실시예에서, 소비자 구성요소(112)는 디버깅 도구를 포함하는 브라우저일 수 있다. 일례로서, 사용자는, 브라우저로부터의 디버깅 도구를 제작자와 링크시켜 그 도구를 사용한 디버깅을 제공하기 위해, 브라우저를 사용하여 파이프라인 인터페이스에 링크할 수 있다.
본 명세서에 기술된 기법 및 시스템이 전술한 실시예로 제한되지 않는다는 것을 잘 알 것이다. 당업자라면 디버깅 파이프라인에 대한 디버깅 도구로서 기능할 수 있는 대안의 소비자 구성요소를 고안할 수 있는 것과 본 명세서에 기술된 기법 및 시스템이 이들 대안의 소비자 구성요소를 포함하는 것이 예상된다. 예를 들어, 명령줄 쉘(command-line shell), 자동화된 도구, 프로세스내 컨트롤(in-process control), 및 기타 구성요소가 예시적인 시스템(100)에서 소비자 구성요소로서 이용될 수 있다.
한 측면에서, 디버깅 파이프라인을 사용하여 컴퓨터 코드가 실행될 수 있는 구성요소로부터 디버깅 도구에 링크하는 것은 각종의 프로세스가 각종의 도구로 디버깅될 수 있게 해줄 수 있다. 예를 들어, 사용자가 로컬 브라우저를 이용하여 클라우드 서버 상에서 실행 중인 응용 프로그램에 액세스할 수 있다. 브라우저 플러그 인 컨트롤(browser plug-in control)에 의해(예를 들어, 브라우저의 사용자에 의해) 선택될 수 있는 파이프라인 인터페이스에 대한 URL에서의 링크를 게시함으로써 클라우드 응용 프로그램이 제작자일 수 있다. 이 일례에서, 파이프라인을 사용하여, 브라우저 플러그 인(browser plug-in)과 연관된 디버깅 도구는 이제 클라우드 응용 프로그램에서 실행 중인 컴퓨터 코드에 대한 디버깅 정보를 얻기 위해 클라우드 응용 프로그램을 쿼리할 수 있다.
도 2는 각종의 제작자 구성요소(212)를 사용자가 디버깅할 수 있게 만들어주기 위해 각종의 소비자 구성요소(222)가 디버깅 파이프라인과 연관된 디버깅 인터페이스(210)를 어떻게 구현할 수 있는지를 나타낸 도면(200)이다. 현재, 각자의 디버깅 시나리오에 대해, 각자의 독점적 실행 플랫폼에 대해, 그리고 심지어 각자의 컴퓨터 언어에 대해 디버깅 프로토콜이 있다. 그렇지만, 디버깅 인터페이스(210)를 가지는 디버깅 파이프라인을 사용하여, 디버깅 기능에 대한 구성요소들을 결합시킬 수 있다.
예를 들어, 공통의 제작자 구성요소(212)는 런타임 시에 사용자 스크립트 코드를 컴파일하고 실행하기 위해 실행 환경에 구현될 수 있는 스크립트 인터프리터(208)를 포함할 수 있다. 게다가, 제작자(212)는 사용자의 코드가 실행된 후에 디버깅을 위해 사용자가 액세스할 수 있는 로그 파일 판독기(206)를 포함할 수 있다. 그에 부가하여, 제작자는 기존의 디버깅 프로토콜에 대한 어댑터(202)를 포함할 수 있다.
소비자 구성요소(222)는 제작자(212)의 디버깅 도구로서 이용될 수 있고, 여기서 소비자 구성요소(222)가 게시된 디버깅 파이프라인(210)을 이용하는 경우, 제작자는 호환 디버깅 프로토콜을 가지지 않을 수 있다. 일 실시예에서, 디버깅 파이프라인은 소비자 구성요소(222) 디버깅 기능을 제작자(212)에게 제공하는 메서드(예를 들어, C#의 경우 약 30개의 메서드)를 사용하여 제작자에 의해 구현(예를 들어, 게시)될 수 있다.
예를 들어, 리치 클라이언트 디버거 엔진(216)(예를 들어, Visual Studio® 디버거)은 디버깅 인터페이스를 이용하여 디버깅 파이프라인(210)에 링크할 수 있다. 파이프라인(210)은 스크립트 인터프리터(예를 들어, JavaScript® 인터프리터)에서 실행 중인 컴퓨터 코드에 대한 리치 클라이언트 디버깅 엔진(216) 디버깅 기능을 가능하게 해주는 적절한 수의 메서드를 포함할 수 있다. 게다가, 다른 일례에서, 브라우저-기반 디버깅 플러그 인(browser-based debugging plug-in)(218) 또는 명령줄 쉘(220)은 디버깅 파이프라인(210)에 링크되어, 제작자에 의해 이용되는 컴퓨터 코드의 디버깅을 제공할 수 있다.
그에 부가하여, 디버깅 파이프라인을 제1 상태로부터 제2 상태로 변환하기 위해 필터 구성요소(214)가 적용될 수 있다. 예를 들어, 필터(214)는 제작자(212)에 의해 게시된 디버깅 파이프라인(210)을 받아들이고(226), 그에 변환을 적용하며(예를 들어, 내용을 추가 또는 제거하며), 새로운 파이프라인 구현을 반환할 수 있다(224). 소비자 구성요소 관점에서 볼 때, 필터(214)는 단지 또 하나의 제작자일 수 있으며, 제작자(212)로부터 파이프라인을 가져오는 것과 필터(214)로부터 파이프라인을 가져오는 것은 차이가 없을 수 있다. 필터가 각종의 목적으로[예를 들어, 프록시 서버에 대해 파이프라인을 리모팅(remoting)하기 위해, 보안 "판독 전용" 필터를 생성하기 위해, 또는 응용 프로그램의 특정 부분을 소비자가 액세스할 수 없도록 제거하기 위해] 이용될 수 있다.
한 측면에서, 디버깅 파이프라인 인터페이스는 파이프라인을 바탕으로 필터를 생성할 수 있게 해준다. 일 실시예에서, 디버그 개체(debug object)가 자신의 부모에 대한 백포인터(backpointer)를 필요로 하지 않을 수 있다. 이것은, 예를 들어, 파이프라인 인터페이스 표면(pipeline interface surface) 전체를 완전히 래핑(wrap)할 필요없이, 필터가 디버그 개체를 자신의 원래의 파이프라인과 공유할 수 있게 해줄 수 있다. 다른 실시예에서, 필터는 각자의 데이터를 바탕으로 프록시를 생성하고, 프록시에 대한 요청을 하부의 실제 개체(underlying real object)로 전달할 수 있다. 이어서, 프록시는, 예를 들어, 설정 값(set-value) 등의 대상을 수정할 수 있는 API를 동작하지 않게 함으로써, 원하는 거동을 재정의할 수 있다.
이 측면에서, 일 실시예에서, 필터를 사용하여 파이프라인이 리모팅될 수 있다. 도 3은 멀리 떨어져 있는 제작자와 소비자를 연결시키기 위해 필터가 사용될 수 있는 예시적인 환경(300)을 나타낸 것이다. 이 예시적인 환경에서, 리모팅 파이프라인(302)은 파이프라인 경계(308)의 제작자 쪽에서 커스터마이즈된 필터(310)를 실행시킬 수 있다. 필터(310)는 데이터를 파이프라인 경계(308)의 소비자 쪽의 원격 프록시(312)에 송신하기 전에 파이프라인을 사전-필터링(pre-filter)할 수 있다. 예를 들어, 필터(310)는, 원격 프록시(312)에 대해 데이터를 리모팅하는 것과 함께, 원하지 않는 디버그 이벤트를 걸러 내거나, 조건 중단점(conditional breakpoint)을 처리하는 데 사용될 수 있다.
예시적인 환경(300)에서, 원격 필터(310)는 제작자(304)로부터의 파이프라인 인터페이스를 사용한다. 필터(310)는 원격 프록시(312)에서의 개인 리모팅 프로토콜(private remoting protocol)을 사용하여 리모팅 경계(308)를 지나갈 수 있다. 일 실시예에서, 개인 프로토콜은 "네트워크 채티니스(chattiness)"를 감소시키고 원격 프록시(312)에서의 캐싱 상태(caching state)와 협력하도록 설계될 수 있다. 예를 들어, 임의적인 즉시 페칭(eager-fetching) 및 캐싱(caching)을 가능하게 해주는 개인 프로토콜을 공유하는 "게시" 기능과 "연결" 기능은 리모팅 필터에서 구현될 수 있다. 원격 프록시(312)는 이어서 파이프라인 인터페이스를 소비자(306)에게 노출시킬 수 있고, 소비자는 그 인터페이스를 리모팅 파이프라인(302) 내에서 동작하는 디버깅 파이프라인 내에서 기능하도록 구현할 수 있다.
다른 측면에서, 도 1에 전술한 바와 같이, 디버깅 파이프라인 인터페이스 개체는 일련의 디버깅 프로토콜을 구현하도록 구성되어 있다. 디버깅 프로토콜은 실행 환경 외부의 소비자 구성요소에 의한 실행 환경에서의 컴퓨터 코드의 디버깅 기능을 정의하도록 구성되어 있다. 디버깅 프로토콜은 또한 기본 디버기 동작(underlying debugee operation)을 모르는 상태에서 디버깅 동안에 참조될 컴퓨터 코드에서의 위치를 제공하도록 구성될 수 있는 위치 프로토콜(location protocol)을 포함할 수 있다. 예를 들어, 파이프라인은 소스 파일 추상화 레벨에서 동작하고 명시적인 심볼 개념을 가지지 않는 소스 파일 내용을 제공할 수 있다.
통상적으로, 컴파일러는, 예를 들어, 소스 파일이 어떻게 컴파일되어 대형 매핑 파일을 생성했는지와 CPU가 어떻게 소스 레벨 상태에 다시 매핑될 수 있는지를 알고 있다. 이 일례에서, 원래의 소스 파일을 찾아내어 매핑을 행하는 것은 디버거의 책임일 수 있다. 일 실시예에서, 주소 참조에서 "소스 범위(source span)"라는 개념이 이용될 수 있다. 이 실시예에서, 소스 단위(source unit)를 말하기 위해 "문서"를 이용하고, "문서"에서의 특정의 위치를 말하기 위해 "범위(span)"를 이용할 수 있다.
이 실시예에서, "문서"는 그 자신의 의미 플래그(semantic flag)를 가질 수 있고, 그 자신의 내용을 제공할 수 있으며, 디스크 또는 메모리내 텍스트 스트림에서의 위치를 말할 수 있다. 게다가, "범위"는 사용자 코드의 위치를 말하기 위해 디버깅 파이프라인 인터페이스 개체(예를 들어, 파이프라인 API)에서 통상적으로 통용되는 것(common currency)일 수 있다. 범위는 범위를 포함하고 있는 파일에 대한 백포인터를 가질 수 있고, 파일이 주어진 경우, 그 파일 내에서 범위를 탐색할 수 있다. 이 실시예에서, 호출 스택(callstack)은 범위를 제공할 수 있고, 파이프라인은 유효한 소스 파일의 열거를 가능하게 해줄 수 있다. 따라서, 예를 들어, 소비자는 기본 디버기 동작이 무엇인지를 알 필요없이 소스 레벨(중간 언어 코드, 네이티브 코드, 인터프리터 상태 등)에서 컴퓨터 코드를 디버깅할 수 있다.
도 4는 "범위"(406)를 구현할 수 있는 예시적인 환경(400)을 나타낸 도면이다. 호스팅된 컨트롤(402)은, 중단점에 있는 동안 중단점에 매핑되는 소스 라인을 강조하는 등을 위해, 소스 파일을 보여줄 수 있고자 할 수 있다. 디버깅 파이프라인은, 예를 들어, 중단점에 도달했다는 것(예를 들어, 중단점이 디버그 이벤트를 야기했기 때문임)을 알고 있으며, 따라서 스레드를 알고 프레임(410)을 열거할 수 있다. 프레임(410)으로부터, 프레임(410)에 대응하는 사용자 코드에서의 현재 위치를 말해주는 범위(406)를 검색(452)할 수 있다.
예시적인 환경(400)에서, 이상에서 기술한 바와 같이, 범위(406)는 범위가 위치해 있는 문서(404)에 대한 백포인터(456)를 가지며, 또한 백포인터를 사용하여 문서에서 그 위치에 있는 문서 내용을 검색(454)할 수 있다. 범위(406)의 위치에 있는 문서(404)의 내용이, 예를 들어, 컨트롤(402)에 보여질 수 있으며(458), 범위(406)에 대한 문서에서의 현재 라인을 강조할 수 있다.
게다가, 이 예시적인 환경(400)에서, 스크립팅 엔진(408)은 각자의 문서(404)에 액세스(450)하는 기능을 사용자 코드에 제공할 수 있다. 예를 들어, 범위는 사용자 코드에서의 위치를 말하기 위해 "통용되는 것"일 수 있다. 이 실시예에서, 범위는 자기 설명적(self-describing)일 수 있으며, 여기서 범위는 소스 정보를 검색하기 위해 파일의 내용을 건드릴 필요가 없을 수 있다. 한 일례에서, 코드가 "즉시(on-the-fly)" 생성되고 검색할 수 있는 파일이 없을지도 모르는 경우에 이 특징이 유용할 수 있다.
이 측면에서, 디버깅 프로토콜은 또한, 데이터 레이아웃 또는 데이터 형식을 노출시키는 일 없이, 요청된 데이터를 반환하라는 데이터 검사 디버깅 요청(data inspection debugging request)을 가능하게 해주도록 구성될 수 있는 형식-유니버스 불문 프로토콜(type-universe agnostic protocol)을 포함할 수 있다. 현재의 디버깅 API는 기본 데이터 레이아웃 및 데이터를 기술하는 형식-시스템(type-system)을 이해하는 디버거를 필요로 할 수 있다. 예를 들어, 통상적인 디버거는 데이터가 (예를 들어, 기본 또는 복합 형식과 달리) 어레이 형식이라는 것을 알 필요가 있을 수 있다. 게다가, 이 일례에서, 디버거는 사용자 코드에서의 데이터에 대한 형식 유니버스(type universe)를 특정하여 디코딩하기 위해 고급 API(rich API)를 가질 필요가 있을 수 있다.
그렇지만, 일 실시예에서, 형식-유니버스 불문 프로토콜을 사용하는 것은 디버깅 파이프라인 인터페이스 개체(예를 들어, 인터페이스 API)가 더 추상적일 수 있게 해주고, 형식-유니버스를 필요로 하지 않고, 데이터를 자기 설명적 방식으로 제시할 수 있게 해준다. 예를 들어, 검사되고 있는 각자의 값이 문자열로서 제시될 수 있고, 자신의 자식 값(child value)을 열거할 수 있다. 따라서, 이 일례에서, 데이터 형식이 필요하지 않은데, 그 이유는 값이, 데이터 형식을 갖지 않는, 검사하도록 요청된 값을 포함하는 문자열에 불과하기 때문이다.
다른 측면에서, 일 실시예에서, 디버깅 파이프라인 인터페이스 개체는 실행 환경에서 컴퓨터 코드를 디버깅하기 위해 디버깅 도구로부터의 하나 이상의 디버깅 도구 기능을 구현하도록 구성될 수 있는 디버깅 도구 기능 구현자(debugging tool functions implementor)를 포함할 수 있다. 예를 들어, 소비자 구성요소가 디버깅 도구일 수 있지만, 컴퓨터 코드에 대한 디버깅 도구의 디버깅 기능을 구현하기 위해 디버깅 파이프라인 인터페이스 개체가 사용될 수 있다.
일 실시예에서, 디버깅 도구 기능은 디버깅 도구의 사용자가 통상적으로 사용하는 기능들, 예를 들어, 디버깅 이벤트의 동기 스트림(synchronous stream), 디버깅 동안 디버기를 중단 및 재시작하는 것, 디버깅 동안 이벤트를 비동기적으로 중단시키는 것, 상태 머신에서 스레드를 열거하는 것, 값을 검사하는 것, 제어 동작을 실행하는 것, 스레드의 호출 스택을 열거하는 것, 각자의 스택 프레임에서 로컬 항목(local)을 검사하는 것, 소스 파일을 페치하는 것, 및 표현식을 평가하는 것을 제공하도록 구성된 기능을 포함할 수 있다.
본 명세서에 기술된 기법 및 시스템이 앞서 열거한 디버깅 기능으로 제한되지 않는다는 것을 잘 알 것이다. 당업자라면 디버깅 파이프라인 인터페이스 개체에 구현하기 위한 대안의 디버깅 기능을 고안할 수 있다는 것이 예상된다. 예를 들어, 대부분의 디버깅 도구는 앞서 열거된 것보다 더 많은 디버깅 기능을 포함한다.
사용자가 한 환경에서 실행되고 있는 컴퓨터 코드를, 그 실행 환경 외부로부터의 디버깅 도구를 사용하여, 디버깅할 수 있는 방법이 고안될 수 있다. 도 5는 실행 환경에서 호스팅되는 컴퓨터 코드의 디버깅을, 그 실행 환경의 외부에서 호스팅되는 디버깅 도구에 의해, 용이하게 해주는 예시적인 방법(500)의 흐름도이다. 예시적인 방법(500)은 502에서 시작하고, 504에서 사용자가 디버깅 도구로 디버깅할 수 있기를 바랄지도 모르는 구성요소를 링크시키는 디버깅 파이프라인을 구현하는 단계를 포함한다. 예를 들어, 사용자가 스크립트 인터프리터에서 사용자 개발 코드를 실행하고 있는 경우, 사용자는 인터프리터를 이용하는 현재 실행 환경에서 이용가능하지 않은 디버깅 도구를 사용하여 코드를 디버깅하고자 할지도 모른다. 이 일례에서, 인터프리터를 원하는 디버깅 도구에 링크시키기 위해 디버깅 파이프라인이 구현될 수 있다.
506에서, 디버깅 파이프라인을 구현하는 단계는 디버깅되도록 요망되는 제1 구성요소(예를 들어, 사용자 개발 코드에 대한 실행 플랫폼)로부터 디버깅 파이프라인 인터페이스 개체의 인스턴스를 생성하는 단계를 포함한다. 예를 들어, 사용자가 디버깅가능하기를 원하는 제1 구성요소는 디버깅 파이프라인 인터페이스 개체의 인스턴스를 이용가능하게 만들어줌으로써(예를 들어, 웹 페이지 상의 URL을 통해 이용가능하게 만들어줌으로써) 파이프라인을 게시할 수 있다. 508에서, 디버깅 파이프라인을 구현하는 단계는 원하는 디버깅 도구를 포함하는 제2 구성요소가 디버깅 파이프라인 인터페이스 개체를 사용하는(예를 들어, 인터페이스를 선택하는) 단계를 포함한다. 예를 들어, 디버깅되기를 원하는 구성요소와 디버깅 도구 간의 링크를 생성하기 위해, 디버깅 도구는 디버깅되기를 원하는 구성요소로부터 디버깅 파이프라인 인터페이스 개체를 선택할 수 있다.
예시적인 방법(500)에서, 510에서, 디버깅 기능에 대한 디버깅 파이프라인 프로토콜이 구현된다. 예를 들어, 디버깅 파이프라인을 사용하여 컴퓨터 코드의 디버깅을 제공하기 위해, 특정의 파이프라인 프로토콜이 구현된다. 512에서, 적어도 2개의 컴퓨터 언어 중 적어도 하나에서 컴퓨터 코드에 대한 디버깅 요청의 처리를 가능하게 해주기 위해 언어 불문 아키텍처가 이용된다. 예를 들어, 이 아키텍처를 사용하는 것은, 파이프라인에 링크되어 있는 디버깅 도구와 상관없이, 각종의 컴퓨터 언어 및 스크립트 코드 중 어느 것으로도 컴퓨터 코드의 디버깅을 가능하게 해준다.
514에서, 운영 체제 고유 구성을 노출시키지 않고 각자의 서명에서 컴퓨터 코드 언어 형식의 처리를 가능하게 해주기 위해 운영 체제 불문 아키텍처가 이용된다. 예를 들어, 이 아키텍처를 사용하는 것은 운영 체제(OS) 고유 구성의 추상화 레벨보다 높은 추상화 레벨을 생성하며, 그로써 OS 불문 방식을 가능하게 해주고, 여기서 특정의 OS용으로 설계되어 있는 디버깅 도구가 상이한 OS에서 실행되는 컴퓨터 코드의 디버깅을 가능하게 해줄 수 있다.
516에서, 하나 이상의 제2 디버깅 파이프라인으로부터 격리될 제1 디버깅 파이프라인을 제공하기 위해 격리 프로토콜이 이용된다. 예를 들어, 한 파이프라인을 다른 파이프라인으로부터 격리시키는 것은 단일 파이프라인이 단일 상태 머신을 기술하여, 개별 파이프라인을 분리된 채로 있도록 제공하는 것을 포함할 수 있다. 이러한 방식으로, 이 일례에서, 파이프라인은 디버깅 기능 외부의 코드를 방해하지 않을 수 있다.
예시적인 방법(500)에서, 518에서, 디버깅 파이프라인에 의해 링크되어 있는 디버깅 도구를 사용하여 실행 환경에서 호스팅되는 컴퓨터 코드에서 디버깅 기능이 수행된다. 예를 들어, 파이프라인이 컴퓨터 코드를 실행하고 있는 구성요소와 실행 환경 외부의 디버깅 도구 사이에 연결되어 있는 경우, 사용자는 디버깅 도구를 사용해 자신의 코드에 대한 디버깅 요청을 수행하여, 디버깅 파이프라인에서 디버깅 프로토콜을 구현할 수 있다.
일 실시예에서, 디버깅 파이프라인에 필터링이 적용될 수 있다. 이 실시예에서, 필터링은 필터링 구성요소가 (예를 들어, 이 시점에서 디버깅 도구 대신에) 디버깅 파이프라인 인터페이스 개체를 사용하게 하는 것을 포함할 수 있다. 필터가 디버깅 파이프라인 인터페이스 개체를 사용한 경우, 필터는 파이프라인을 제1 상태로부터 제2 상태로 변경함으로써 파이프라인에 변환을 적용할 수 있다. 예를 들어, 사용자는 제2 사람이 어떤 사용자 개발 코드에 대해 디버깅을 수행할 수 있게 해주고 싶을지도 모른다. 이 일례에서, 사용자는 제2 사람이 응용 프로그램의 특정의 요소를 보는 것을 원하지 않거나, 제2 사용자가 코드에 어떤 변경을 하는 것을 원하지 않을 수 있다. 사용자는 시스템의 특정의 부분에만 액세스할 수 있게 해주기 위해 파이프라인을 변환할 수 있는 필터를 적용할 수 있거나, 단지 "읽기-전용" 기능만을 허용할 수 있다.
이 실시예에서, 변환을 적용한 후에, 필터는 변환된 디버깅 파이프라인 인터페이스 개체를 소비자 구성요소(디버깅 도구 등)에 노출시킬 수 있다. 이러한 방식으로, 필터 구성요소는 파이프라인의 소비자에게 단지 디버깅 파이프라인 제작 구성요소(debugging pipeline producing component)인 것처럼 보일 수 있다. 한 일례에서, 필터는 파이프라인 인터페이스 개체를 원격 프록시(remote proxy)에 노출시키기 위해 리모팅 프로토콜을 적용할 수 있는 리모팅 프록시(remoting proxy)일 수 있다. 이러한 방식으로, 이 일례에서, 원격 프록시는 이어서 파이프라인 인터페이스 개체를 리모팅 프록시의 다른 쪽에 있는 소비자 구성요소(디버깅 도구 등)에 노출시킬 수 있다.
다른 측면에서, 디버깅 파이프라인은 디버깅 도구의 디버깅 기능을 구현할 수 있는 일련의 메서드를 포함할 수 있다. 예를 들어, 디버깅에 공통이고 디버깅 파이프라인에 의해 구현될 수 있는 일부 디버깅 기능은 디버깅 이벤트의 동기 스트림, 디버깅 동안 디버기를 중단 및 재시작하는 것, 디버깅 동안 이벤트를 비동기적으로 중단시키는 것, 값을 검사하는 것, 및 제어 동작의 실행을 제공하는 것을 포함한다. 예를 들어, 컴퓨터 코드에 대한 원하는 디버깅 기능을 제공하기 위해 많은 대안의 디버깅 특징이 디버깅 파이프라인에 의해 구현될 수 있다는 것을 잘 알 것이다.
다른 측면에서, 일 실시예에서, 디버깅 파이프라인 프로토콜을 구현하는 것은 또한 기본 디버기 동작을 모르는 채로 디버깅 동안 참조될 컴퓨터 코드에서의 위치를 제공하기 위해 소스 위치 불문 아키텍처(source location agnostic architecture)를 이용하는 것을 포함할 수 있다. 예를 들어, 대형 매핑 파일 및 기본 소스 레벨 상태에 의존하는 대신에, 디버거는 문서에서 코드를 식별하기 위해 범위를 이용할 수 있다. 이 일례에서, 상위 레벨의 추상화는 범위가 자기 설명적일 수 있게 해주며, 소스 파일의 내용을 건드릴 필요없이 단지 프레임으로부터 데이터를 검색할 수 있게 해준다.
게다가, 다른 실시예에서, 디버깅 파이프라인 프로토콜을 구현하는 것은 또한, 데이터 레이아웃 또는 데이터 형식을 노출시키는 일 없이, 요청된 데이터를 반환하라는 데이터 검사 디버깅 요청을 가능하게 해주기 위해 형식-유니버스 불문 아키텍처를 이용하는 것을 포함할 수 있다. 이 실시예에서, 예를 들어, 디버깅 프로토콜은, 데이터 형식을 알 필요없이, 데이터가 자기 설명적 방식으로 제시될 수 있게 해준다. 이 일례에서, 어떤 위치에 있는 데이터에 대한 요청은, 그 데이터가 특정의 형식인지를 모르는 상태로, 그 데이터를 문자열로서 반환할 수 있다.
다른 측면에서, 2개 이상의 디버깅 파이프라인이, 각자의 파이프라인에 대한 통합된 디버깅 기능을 제공하기 위해, 하나의 디버깅 파이프라인으로 구성될 수 있다. 2개 이상의 파이프라인을 구성하는 것은 각자의 자식 디버깅 파이프라인에 대한 각자의 특징을 구성하는 부모 파이프라인을 생성하는 것을 포함할 수 있다. 예를 들어, "Compose()" 함수는 새로운 파이프라인 구현(부모)을 생성할 수 있으며, 부모의 디버깅 파이프라인 인터페이스 개체의 구현은 인터페이스에 의해 노출되는 각자의 디버깅 특징에 대한 각자의 "자식 파이프라인"을 구성한다.
일 실시예에서, 부모는 디버그 이벤트 스트림을 반환할 수 있으며 - 여기서 부모는 각자의 자식에 대한 스레드를 생성할 수 있음 -, 자식으로 하여금 디버그 이벤트를 기다리게 할 수 있으며, 자식이 디버그 이벤트를 만날 때, 부모는 다른 자식에 대해 비동기 중단 요청을 수행할 수 있고, 이어서 각자의 자식으로부터 수집된 디버그 이벤트를 요청의 호출자에게 반환할 수 있다. 다른 실시예는 소스 파일 또는 스레드를 열거하는 것, 스레드 및 호출 스택을 통합하는 것, 기타를 포함할 수 있다.
다른 측면에서, 기존의 인터프리터에 경량급 응용 프로그래밍 인터페이스(API)를 설치함으로써 디버깅 어댑터가 생성될 수 있다. 일 실시예에서, 완전 디버깅 파이프라인을 제작할 수 있는 어댑터를 생성하기 위해, 몇개의 디버깅 기능을 포함하는 API가 기존의 인터프리터 내에 설치될 수 있다. 이들 기능은 명령문 사이에 단계별로 실행하는 것, 역추적을 위한 콜백을 삽입하는 것, 기타와 같은 기본 디버깅 특징을 포함할 수 있고, 인터프리터가 쉽게 설치되고 API를 구현하는 파이프라인 소비자를 통해 전체 디버깅 지원을 받을 수 있게 해줄 수 있다.
도 6은 실행 환경의 외부에서 호스팅되는 디버깅 도구에 의해 실행 환경에서 호스팅되는 컴퓨터 코드의 디버깅을 용이하게 해주는 방법이 구현될 수 있는 예시적인 환경(600)을 나타낸 것이다. 사용자(610)는 자신의 로컬 컴퓨터(608)를 사용하여 인터넷(606)을 통해 원격 응용 프로그램 서버(602)에서 호스팅되는 응용 프로그램에 액세스하고 있을 수 있다. 예를 들어, 사용자(610)는 원격 서버(602) 상의 호스트 응용 프로그램에서 실행될 매크로를 개발할 수 있고, 자신의 로컬 컴퓨터(608) 상에 위치하는 디버깅 도구를 사용하여 매크로를 디버깅하고자 할 수 있다.
이 예시적인 환경에서, 원격 응용 프로그램 서버(예를 들어, 제작자)는 웹 사이트(604) 상에 디버깅 파이프라인 인터페이스 개체에 대한 링크를 배치함으로써 디버깅 파이프라인을 게시할 수 있다. 사용자(610)는 이어서 자신의 로컬 컴퓨터(608) 상의 자신의 디버깅 도구로부터의 컨트롤을 웹 사이트(604) 상에 위치하는 인터페이스 개체에 "연결"함으로써 인터넷(606)을 통해 파이프라인 인터페이스 개체를 구현할 수 있다. 이러한 방식으로, 사용자(610)는, 자신의 로컬 컴퓨터(608) 상에 위치한 디버깅 도구를 사용하여, 원격 서버(602) 상에서 실행 중인 자신의 매크로에 대한 디버깅 도구를 제공받을 수 있다.
또 다른 실시예는 본 명세서에 제시된 기술들 중 하나 이상의 기술을 구현하도록 구성된 프로세서 실행가능 명령어를 포함하는 컴퓨터 판독가능 매체를 포함한다. 이러한 방식으로 안출될 수 있는 예시적인 컴퓨터 판독가능 매체가 도 7에 나타내어져 있으며, 여기서 구현(700)은 컴퓨터 판독가능 데이터(706)가 인코딩되어 있는 컴퓨터 판독가능 매체(708)(예를 들어, CD-R, DVD-R 또는 하드 디스크 드라이브의 플래터)를 포함한다. 이 컴퓨터 판독가능 데이터(706)는 또한 본 명세서에 기술된 원리들 중 하나 이상의 원리에 따라 동작하도록 구성된 일련의 컴퓨터 명령어(704)를 포함한다. 이러한 일 실시예(702)에서, 프로세서-실행가능 명령어(704)는, 예를 들어, 도 5의 예시적인 방법(500)과 같은 방법을 수행하도록 구성될 수 있다. 다른 이러한 실시예에서, 프로세서-실행가능한 명령어(704)는, 예를 들어, 도 1의 예시적인 시스템(100)과 같은 시스템을 구현하도록 구성될 수 있다. 본 명세서에 제시된 기술에 따라 동작하도록 구성되어 있는 많은 이러한 컴퓨터 판독가능 매체가 당업자에 의해 안출될 수 있다.
발명 대상이 구조적 특징 및/또는 방법적 동작과 관련하여 기술되어 있지만, 첨부된 특허청구범위에 정의된 발명 대상이 이상에서 기술한 특정의 특징 또는 동작으로 반드시 제한되는 것은 아니라는 것을 잘 알 것이다. 오히려, 이상에서 기술한 특정의 특징 및 동작은 청구항을 구현하는 예시적인 형태로서 개시되어 있다.
본 출원에서 사용되는 바와 같이, 용어 "구성요소", "모듈", "시스템", "인터페이스", 기타는 일반적으로 컴퓨터 관련 엔터티(computer-related entity), 예를 들어, 하드웨어, 하드웨어와 소프트웨어의 조합, 소프트웨어, 또는 실행 중인 소프트웨어를 말하기 위한 것이다. 예를 들어, 구성요소는 프로세서 상에서 실행 중인 프로세스, 프로세서, 개체, 실행 파일, 실행 스레드, 프로그램 및/또는 컴퓨터일 수 있지만, 이들로 제한되지 않는다. 예시로서, 제어기 상에서 실행 중인 응용 프로그램 및 그 제어기 둘다가 구성요소일 수 있다. 하나 이상의 구성요소가 프로세스 및/또는 실행 스레드 내에 존재할 수 있고, 구성요소가 하나의 컴퓨터 상에 로컬화되어 있을 수 있고 및/또는 2개 이상의 컴퓨터 간에 분산되어 있을 수 있다.
게다가, 청구된 발명 대상이 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 임의의 조합을 생성하는 표준의 프로그래밍 및/또는 엔지니어링 기법을 사용하여 컴퓨터를 제어해 개시된 발명 대상을 구현하는 방법, 장치, 또는 제조 물품으로서 구현될 수 있다. "제조 물품(article of manufacture)"이라는 용어는, 본 명세서에서 사용되는 바와 같이, 임의의 컴퓨터 판독가능 장치, 캐리어(carrier), 또는 매체로부터 액세스될 수 있는 컴퓨터 프로그램을 포괄하기 위한 것이다. 물론, 당업자라면 청구된 발명 대상의 범위 또는 사상을 벗어나지 않고 이 구성에 많은 수정이 이루어질 수 있다는 것을 잘 알 것이다.
도 8 및 이하의 설명은 본 명세서에 기술된 발명 내용들 중 하나 이상의 발명 내용의 실시 형태를 구현하는 데 적합한 컴퓨팅 환경에 대한 간략하고 개괄적인 설명을 제공한다. 도 8의 운영 환경은 적당한 운영 환경의 일례에 불과하며 이 운영 환경의 용도 또는 기능의 범위에 관한 어떤 제한을 암시하기 위한 것이 아니다. 예시적인 컴퓨팅 장치들로는, 개인용 컴퓨터, 서버 컴퓨터, 핸드헬드 또는 랩톱 장치, 모바일 장치[이동 전화, PDA(Personal Digital Assistant), 미디어 플레이어, 기타 등등], 멀티프로세서 시스템, 가전 제품, 미니 컴퓨터, 메인프레임 컴퓨터, 이상의 시스템들 또는 장치들 중 임의의 것을 포함하는 분산 컴퓨팅 환경, 기타 등등이 있지만, 이들로 제한되지 않는다.
꼭 그럴 필요는 없지만, 실시예들이 일반적으로 하나 이상의 컴퓨팅 장치에 의해 실행되는 "컴퓨터 판독가능 명령어"와 관련하여 기술되어 있다. 컴퓨터 판독가능 명령어는 컴퓨터 판독가능 매체(이하에서 기술함)를 통해 배포될 수 있다. 컴퓨터 판독가능 명령어는 특정의 작업을 수행하거나 특정의 추상 데이터 형식을 구현하는 함수, 개체, API(Application Programming Interface), 데이터 구조, 기타 등등의 프로그램 모듈로서 구현될 수 있다. 통상적으로, 컴퓨터 판독가능 명령어의 기능이 다양한 실시예에서 원하는 바에 따라 결합되거나 분산되어 있을 수 있다.
도 8은 본 명세서에 제공된 하나 이상의 실시예를 구현하도록 구성되어 있는 컴퓨팅 장치(812)를 포함하는 시스템(810)의 일례를 나타낸 것이다. 한 구성에서, 컴퓨팅 장치(812)는 적어도 하나의 처리 장치(816) 및 메모리(818)를 포함한다. 컴퓨팅 장치의 정확한 구성 및 유형에 따라, 메모리(818)는 휘발성(예를 들어, RAM 등), 비휘발성(예를 들어, ROM, 플래시 메모리, 기타 등등), 또는 이 둘의 어떤 조합일 수 있다. 이러한 구성이 도 8에서 점선(814)으로 나타내어져 있다.
다른 실시 형태에서, 장치(812)는 또한 부가의 특징 및/또는 기능을 포함할 수 있다. 예를 들어, 장치(812)는 또한 자기 저장 장치, 광 저장 장치, 기타(이들로 제한되지 않음)를 비롯한 부가의 저장 장치(예를 들어, 이동식 및/또는 비이동식)도 포함할 수 있다. 이러한 부가의 저장 장치가 도 8에서 저장 장치(820)로 도시되어 있다. 일 실시예에서, 본 명세서에 제공된 하나 이상의 실시예를 구현하는 컴퓨터 판독가능 명령어가 저장 장치(820)에 있을 수 있다. 저장 장치(820)는 또한 운영 체제, 응용 프로그램, 기타를 구현하는 다른 컴퓨터 판독가능 명령어도 저장할 수 있다. 컴퓨터 판독가능 명령어는, 예를 들어, 처리 장치(816)에서 실행하기 위해 메모리(818)에 로드될 수 있다.
"컴퓨터 판독가능 매체"라는 용어는 본 명세서에서 사용되는 바와 같이 컴퓨터 저장 매체를 포함한다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어 또는 기타 데이터 등의 정보를 저장하는 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 이동식 및 비이동식 매체를 포함한다. 메모리(818) 및 저장 장치(820)가 컴퓨터 저장 매체의 일례이다. 컴퓨터 저장 매체로는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD(Digital Versatile Disk) 또는 기타 광 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 기타 자기 저장 장치, 또는 원하는 정보를 저장하는 데 사용될 수 있고 또 장치(812)에 의해 액세스될 수 있는 임의의 다른 매체가 있지만, 이들로 제한되지 않는다. 임의의 이러한 컴퓨터 저장 매체가 장치(812)의 일부일 수 있다.
장치(812)는 또한 장치(812)가 다른 장치들과 통신을 할 수 있게 해주는 통신 연결(들)(826)도 포함할 수 있다. 통신 연결(들)(826)은 모뎀, NIC(Network Interface Card), 통합형 네트워크 인터페이스, 무선 주파수 송신기/수신기, 적외선 포트, USB 연결, 또는 컴퓨팅 장치(812)를 다른 컴퓨팅 장치에 연결시키는 기타 인터페이스를 포함할 수 있지만, 이들로 제한되지 않는다. 통신 연결(들)(826)은 유선 연결 또는 무선 연결을 포함할 수 있다. 통신 연결(들)(826)은 통신 미디어를 전송 및/또는 수신할 수 있다.
"컴퓨터 판독가능 매체"라는 용어는 통신 매체를 포함할 수 있다. 통신 매체는 일반적으로 컴퓨터 판독가능 명령어 또는 기타 데이터를 반송파 또는 기타 전송 메카니즘 등의 피변조 데이터 신호(modulated data signal)에 구현하고 모든 정보 전달 매체를 포함한다. "피변조 데이터 신호"라는 용어는 신호의 특성들 중 하나 이상이 정보를 그 신호에 인코딩하는 방식으로 설정 또는 변경된 신호를 포함할 수 있다.
장치(812)는 키보드, 마우스, 펜, 음성 입력 장치, 터치 입력 장치, 적외선 카메라, 비디오 입력 장치, 및/또는 임의의 다른 입력 장치 등의 입력 장치(들)(824)를 포함할 수 있다. 하나 이상의 디스플레이, 스피커, 프린터, 및/또는 임의의 다른 출력 장치 등의 출력 장치(들)(822)도 역시 장치(812)에 포함되어 있을 수 있다. 입력 장치(들)(824) 및 출력 장치(들)(822)는 유선 연결, 무선 연결, 또는 이들의 임의의 조합을 통해 장치(812)에 연결될 수 있다. 일 실시예에서, 다른 컴퓨팅 장치로부터의 입력 장치 또는 출력 장치가 컴퓨팅 장치(812)의 입력 장치(들)(824) 또는 출력 장치(들)(822)로서 사용될 수 있다.
컴퓨팅 장치(812)의 구성요소는 버스 등의 다양한 상호연결부에 의해 연결될 수 있다. 이러한 상호연결부는 PCI Express 등의 PCI(Peripheral Component Interconnect), USB(Universal Serial Bus), 파이어와이어(IEEE 1394), 광 버스 구조, 기타를 포함할 수 있다. 다른 실시예에서, 컴퓨팅 장치(812)의 구성요소는 네트워크에 의해 상호연결될 수 있다. 예를 들어, 메모리(818)는 네트워크에 의해 상호연결된 서로 다른 실제 장소에 위치하는 다수의 실제 메모리 장치로 이루어져 있을 수 있다.
당업자라면 컴퓨터 판독가능 명령어를 저장하는 데 이용되는 저장 장치가 네트워크에 걸쳐 분산되어 있을 수 있다는 것을 잘 알 것이다. 예를 들어, 네트워크(828)를 통해 액세스할 수 있는 컴퓨팅 장치(830)는 본 명세서에 제공된 하나 이상의 실시예를 구현하는 컴퓨터 판독가능 명령어를 저장할 수 있다. 컴퓨팅 장치(812)는 컴퓨팅 장치(830)에 액세스하여 실행을 위한 컴퓨터 판독가능 명령어의 일부 또는 전부를 다운로드할 수 있다. 다른 대안으로서, 컴퓨팅 장치(812)는 필요에 따라 컴퓨터 판독가능 명령어의 일부를 다운로드할 수 있거나, 일부 명령어는 컴퓨팅 장치(812)에서 실행될 수 있고 일부 명령어는 컴퓨팅 장치(830)에서 실행될 수 있다.
실시예의 다양한 동작이 본 명세서에 제공되어 있다. 일 실시예에서, 기술된 동작들 중 하나 이상이 하나 이상의 컴퓨터 판독가능 매체 상에 저장된 컴퓨터 판독가능 명령어를 구성할 수 있으며, 이 명령어는, 컴퓨팅 장치에 의해 실행되는 경우, 컴퓨팅 장치로 하여금 개시된 동작을 수행하게 한다. 동작들 중 일부 또는 전부가 기술되어 있는 순서가 이러한 동작이 반드시 순서 의존적이어야 한다는 것을 의미하는 것으로 해석되어서는 안된다. 당업자라면 이 설명을 기초로 대안의 순서를 잘 알 것이다. 게다가, 동작들 모두가 반드시 본 명세서에 제공된 각각의 실시예에 존재해야 하는 것은 아니라는 것을 잘 알 것이다.
게다가, "예시적인"이라는 단어는 본 명세서에서 일례, 실례 또는 예시로서 역할한다는 것을 의미하기 위해 사용된다. 본 명세서에서 "예시적인" 것으로 기술된 임의의 측면 또는 설계가 꼭 다른 측면들 또는 설계들보다 이점이 있는 것으로 해석되어야 하는 것은 아니다. 오히려, "예시적인"이라는 단어의 사용은 개념들을 구체적인 방식으로 제시하기 위한 것이다. 본 출원에서 사용되는 바와 같이, "또는"이라는 용어는 배타적인 "논리합"(exclusive "or")이라기 보다는 포함적인 "논리합"(inclusive "or")를 의미하기 위한 것이다. 즉, 달리 언급하지 않는 한 또는 문맥으로부터 명확하지 않는 한, "X가 A 또는 B를 이용한다"는 포함적인 자연 순열들(natural inclusive permutations) 중 어느 하나를 의미하기 위한 것이다. 즉, X가 A를 이용하는 경우, X가 B를 이용하는 경우, 또는 X가 A 및 B 둘다를 이용하는 경우, 이상의 경우들 중 어느 하나의 경우에서 "X가 A 또는 B를 이용한다"는 만족된다. 그에 부가하여, 본 출원 및 첨부된 특허청구범위에서 사용되는 단수 표현 "한" 및 "하나"는, 달리 언급하지 않는 한 또는 단수 형태에 관한 것이라고 문맥으로부터 명확하지 않는 한, 일반적으로 "하나 이상"을 의미하는 것으로 해석될 수 있다.
또한, 본 발명이 하나 이상의 구현들과 관련하여 도시되고 기술되어 있지만, 본 명세서 및 첨부 도면들을 읽고 이해하면 등가의 변경들 및 수정들이 당업자들에게 안출될 것이다. 본 발명은 모든 이러한 수정 및 변경을 포함하며, 이하의 특허청구범위의 범위에 의해서만 제한된다. 상세하게는, 이상에서 기술한 구성요소(예를 들어, 요소, 리소스, 기타)에 의해 수행되는 다양한 기능과 관련하여, 이러한 구성요소를 기술하는 데 사용되는 용어가, 달리 언급하지 않는 한, 본 명세서에 설명된 본 발명의 예시적인 구현에서 기능을 수행하는 개시된 구조와 구조상으로 등가이지는 않지만, (예를 들어, 기능적으로 등가인) 기술된 구성요소의 지정된 기능을 수행하는 임의의 구성요소에 대응하는 것으로 보아야 한다. 그에 부가하여, 본 발명의 특정의 특징이 몇가지 구현들 중 단지 하나와 관련하여 개시되어 있을 수 있지만, 임의의 주어진 또는 특정의 응용에서 요망되고 유익할 수 있는 바와 같이, 이러한 특징이 다른 구현의 하나 이상의 다른 특징과 결합될 수 있다. 게다가, 용어 "포함한다", "갖는", "갖는다", "구비하는" 또는 이들의 변형이 상세한 설명이나 특허청구범위에서 사용되는 한, 이러한 용어가 용어 "포함하는"과 유사한 방식으로 포함적인 것으로 보아야 한다.

Claims (15)

  1. 하나 이상의 프로세싱 유닛, 및
    명령어들을 포함하는 메모리
    를 포함하는 시스템으로서,
    상기 명령어들은 상기 하나 이상의 프로세싱 유닛 중 적어도 하나에 의해 실행되어 실행 환경(execution environment)에서 호스팅되는 컴퓨터 코드를 상기 실행 환경의 외부에서 호스팅되는 디버깅 도구(debugging tool)에 의해 디버깅하기 위한 방법을 구현하며, 상기 방법은
    상기 컴퓨터 코드의 개체(object)의 인스턴스(instance)를 사용 가능하게 하기 위한 디버깅 파이프라인(debugging pipeline)을 게시하는 단계와,
    상기 실행 환경의 외부에서 호스팅되는 상기 디버깅 도구를 포함하는 컴포넌트의 적어도 일부에 의해 상기 개체의 상기 인스턴스가 선택되는 것에 응답하여, 상기 컴퓨터 코드의 상기 개체를 상기 디버깅 파이프라인을 통해 상기 디버깅 도구로 링크시키는 단계와,
    필터링된 디버깅 파이프라인을 생성하기 위해 상기 디버깅 파이프라인을 필터링하는 단계 - 상기 디버깅 파이프라인은 제1 조건에 연관되고 상기 필터링된 디버깅 파이프라인은 제2 조건에 연관되고, 상기 제1 조건은 상기 컴퓨터 코드의 제1 부분들(first number of portions)에 대한 판독/쓰기(read/write) 액세스에 대응하고, 상기 제2 조건은 상기 컴퓨터 코드의 제2 부분들에 대한 판독 전용(read only) 액세스에 대응함 - 와,
    상기 실행 환경에서 호스팅되는 상기 컴퓨터 코드의 적어도 일부를 디버깅하기 위해 상기 필터링된 디버깅 파이프라인 내에 하나 이상의 프로토콜을 구현하는 단계 - 상기 하나 이상의 프로토콜은 상기 디버깅 동안에 상기 디버깅 파이프라인이 제2 디버깅 파이프라인으로부터 격리될 수 있게 해주도록 구성된 격리 프로토콜(isolation protocol)을 포함함 -
    를 포함하는 시스템.
  2. 제1항에 있어서,
    상기 컴퓨터 코드는 호스트 애플리케이션에서 실행되는 시스템.
  3. 제2항에 있어서,
    상기 디버깅 파이프라인은 상기 호스트 애플리케이션에서 실행되는 상기 컴퓨터 코드를 호스팅하는 동일한 머신 상에서 실행되는 애플리케이션에 영향을 미치지 않는 시스템.
  4. 제2항에 있어서,
    상기 디버깅 파이프라인은 상기 호스트 애플리케이션에서 실행되는 상기 컴퓨터 코드를 호스팅하는 동일한 머신 상에서 실행되는 호스트 프로세스에 영향을 미치지 않는 시스템.
  5. 제1항에 있어서,
    상기 방법은, 상기 디버깅을 위해 형식-유니버스 불문 프로토콜(type-universe agnostic protocol)을 구현하는 단계를 포함하는 시스템.
  6. 제1항에 있어서,
    상기 방법은, 상기 디버깅을 위해 상기 디버깅 파이프라인을 상기 디버깅 도구에 노출시키는 단계를 포함하는 시스템.
  7. 제1항에 있어서,
    상기 디버깅 도구는 리치 클라이언트(rich client), 브라우저 또는 명령줄 쉘(command line shell) 중 적어도 하나를 포함하는 시스템.
  8. 실행 환경에서 호스팅되는 컴퓨터 코드를 상기 실행 환경의 외부에서 호스팅되는 디버깅 도구에 의해 디버깅하기 위한 방법으로서,
    상기 컴퓨터 코드의 개체의 인스턴스를 사용 가능하게 하기 위해 디버깅 파이프라인을 URL을 통해 게시하는 단계와,
    상기 실행 환경의 외부에서 호스팅되는 상기 디버깅 도구를 포함하는 컴포넌트의 적어도 일부에 의해 상기 개체의 상기 인스턴스가 선택되는 것에 응답하여, 상기 컴퓨터 코드의 상기 개체를 상기 디버깅 파이프라인을 통해 상기 디버깅 도구로 링크시키는 단계와,
    필터링된 디버깅 파이프라인을 생성하기 위해 상기 디버깅 파이프라인을 필터링하는 단계 - 상기 디버깅 파이프라인은 제1 조건에 연관되고 상기 필터링된 디버깅 파이프라인은 제2 조건에 연관되고, 상기 제1 조건은 상기 컴퓨터 코드의 제1 부분들에 대한 판독/쓰기(read/write) 액세스에 대응하고, 상기 제2 조건은 상기 컴퓨터 코드의 제2 부분들에 대한 판독 전용(read only) 액세스에 대응하며, 상기 제1 부분들은 상기 제2 부분들보다 큼 - 와,
    상기 실행 환경에서 호스팅되는 상기 컴퓨터 코드의 적어도 일부를 디버깅하기 위해 상기 필터링된 디버깅 파이프라인 내에 하나 이상의 프로토콜을 구현하는 단계 - 상기 하나 이상의 프로토콜은 상기 디버깅 동안에 머신 상의 상기 디버깅 파이프라인이 상기 머신 상의 제2 디버깅 파이프라인으로부터 격리될 수 있게 해주도록 구성된 격리 프로토콜을 포함하고, 상기 디버깅 파이프라인은 상기 컴퓨터 코드 외부의 코드에 영향을 미치지 않으며 단일 상태 머신(single-state machine)을 기술함 -
    를 포함하는 방법.
  9. 제8항에 있어서,
    상기 컴퓨터 코드는 호스트 애플리케이션에서 실행되는 방법.
  10. 제9항에 있어서,
    상기 디버깅 파이프라인은 상기 디버깅 파이프라인은 상기 호스트 애플리케이션에서 실행되는 상기 컴퓨터 코드를 호스팅하는 동일한 머신 상에서 실행되는 애플리케이션에 영향을 미치지 않는 방법.
  11. 제9항에 있어서,
    상기 디버깅 파이프라인은 상기 호스트 애플리케이션에서 실행되는 상기 컴퓨터 코드를 호스팅하는 동일한 머신 상에서 실행되는 호스트 프로세스에 영향을 미치지 않는 방법.
  12. 제8항에 있어서,
    상기 방법은, 상기 디버깅을 위해 형식-유니버스 불문 프로토콜을 구현하는 단계를 포함하는 방법.
  13. 제8항에 있어서,
    상기 방법은, 상기 디버깅을 위해 상기 디버깅 파이프라인을 상기 디버깅 도구에 노출시키는 단계를 포함하는 방법.
  14. 제8항에 있어서,
    상기 디버깅 도구는 리치 클라이언트(rich client), 브라우저 또는 명령줄 쉘(command line shell) 중 적어도 하나를 포함하는 방법.
  15. 삭제
KR1020117013798A 2008-12-23 2009-12-11 디버깅 파이프라인 KR101645052B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/342,876 2008-12-23
US12/342,876 US9703678B2 (en) 2008-12-23 2008-12-23 Debugging pipeline for debugging code

Publications (2)

Publication Number Publication Date
KR20110102337A KR20110102337A (ko) 2011-09-16
KR101645052B1 true KR101645052B1 (ko) 2016-08-02

Family

ID=42267989

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020117013798A KR101645052B1 (ko) 2008-12-23 2009-12-11 디버깅 파이프라인

Country Status (7)

Country Link
US (1) US9703678B2 (ko)
EP (1) EP2368189B1 (ko)
JP (1) JP5679989B2 (ko)
KR (1) KR101645052B1 (ko)
CN (1) CN102265264B (ko)
CA (1) CA2744216A1 (ko)
WO (1) WO2010075011A2 (ko)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10169199B2 (en) 2008-06-10 2019-01-01 Microsoft Technology Licensing, Llc Automatic model-specific debugger extensions
US9020939B2 (en) * 2009-06-30 2015-04-28 International Business Machines Corporation Correlating queries issued by applications with their source lines and analyzing applications for problem determination and where used analysis
FR2953612A1 (fr) * 2009-12-03 2011-06-10 Flexycore Procede de mise au point d'application logicielle, systeme et produit programme d'ordinateur correspondant.
US8997049B1 (en) 2010-05-21 2015-03-31 Cadence Design Systems, Inc. Method and system for debugging of compiled code using an interpreter
US8589885B2 (en) * 2010-09-30 2013-11-19 Microsoft Corporation Debugger launch and attach on compute clusters
US8819631B2 (en) * 2011-01-13 2014-08-26 Hewlett-Packard Development Company, L.P. System and method for self dependent web automation
US9262298B2 (en) * 2012-02-16 2016-02-16 Microsoft Technology Licensing, Llc Debugging object abstractions
CN103324567B (zh) * 2012-03-22 2016-03-02 百度在线网络技术(北京)有限公司 一种应用引擎的调试方法和调试系统
US9710357B2 (en) * 2012-08-04 2017-07-18 Microsoft Technology Licensing, Llc Function evaluation using lightweight process snapshots
WO2014203036A1 (en) * 2013-06-18 2014-12-24 Freescale Semiconductor, Inc. Method and apparatus for offloading functional data from an interconnect component
CN104731696B (zh) * 2013-12-19 2017-10-10 腾讯科技(深圳)有限公司 定位程序代码中bug的方法及相关装置
US9268597B2 (en) * 2014-04-01 2016-02-23 Google Inc. Incremental parallel processing of data
US10078382B2 (en) 2014-09-04 2018-09-18 Home Box Office, Inc. Unified input and invoke handling
US10044591B2 (en) 2014-09-04 2018-08-07 Home Box Office, Inc. Two-way remote communication system for testing a client device program
US10686539B2 (en) * 2015-05-29 2020-06-16 Avago Technologies International Sales Pte. Limited Flexible debug observation point insertion in pipeline designs
US10268566B2 (en) * 2016-11-04 2019-04-23 Sap Se Debugging in a private cloud environment
US10120779B1 (en) * 2016-11-08 2018-11-06 Amazon Technologies, Inc. Debugging of hosted computer programs
CN108804317A (zh) * 2018-05-24 2018-11-13 北京握奇智能科技有限公司 一种统一执行脚本的方法和系统
US11487643B1 (en) * 2018-11-12 2022-11-01 Xilinx, Inc. Debugging for integrated scripting applications
JP7422484B2 (ja) 2018-11-14 2024-01-26 三菱電機株式会社 誘導加熱調理器
US10846197B1 (en) * 2018-12-13 2020-11-24 Facebook, Inc. Systems and methods for debugging mixed-language applications
US11669435B2 (en) * 2019-06-26 2023-06-06 Microsoft Technology Licensing, Llc Chat bot diagnostic visualization
US11809576B2 (en) 2020-01-30 2023-11-07 Red Hat, Inc. Establishing secure remote access to debug logs
US11822641B2 (en) 2020-04-29 2023-11-21 Red Hat, Inc. Establishing controlled remote access to debug logs
US11966343B2 (en) 2021-07-19 2024-04-23 Samsung Electronics Co., Ltd. Universal mechanism to access and control a computational device
US20230281342A1 (en) * 2022-03-01 2023-09-07 Microsoft Technology Licensing, Llc Granting entitlements to log data generated by a data privacy pipeline to facilitate debugging

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040230955A1 (en) * 2003-02-26 2004-11-18 Bea Systems, Inc. System for multi-language debugging
JP2008217545A (ja) * 2007-03-06 2008-09-18 Nec Corp コンソール情報取得システム、コンソール情報取得方法及びコンソール情報取得プログラム

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07230393A (ja) 1994-02-17 1995-08-29 Canon Inc 情報処理システムおよび情報処理システムのプログラムデバッグ方法
JPH0883196A (ja) 1994-09-12 1996-03-26 Fujitsu Ltd 分散協調型デバッガ
US6011920A (en) * 1995-04-05 2000-01-04 International Business Machines Corporation Method and apparatus for debugging applications on a personality neutral debugger
US5778230A (en) * 1995-11-13 1998-07-07 Object Technology Licensing Corp. Goal directed object-oriented debugging system
US6126328A (en) 1997-02-28 2000-10-03 Oracle Corporation Controlled execution of partitioned code
US6353923B1 (en) * 1997-03-12 2002-03-05 Microsoft Corporation Active debugging environment for debugging mixed-language scripting code
US5958049A (en) * 1997-03-17 1999-09-28 International Business Machines Corporation Operating system debugger using kernel and dynamic extension with debugger drivers to support different output devices
US5892941A (en) * 1997-04-29 1999-04-06 Microsoft Corporation Multiple user software debugging system
US5901315A (en) 1997-06-13 1999-05-04 International Business Machines Corporation Method for debugging a Java application having native method dynamic load libraries
US6145093A (en) 1997-06-25 2000-11-07 Digital Electronics Corporation Debugging method and method of displaying information for data processing for use in programmable display device
US6393437B1 (en) * 1998-01-27 2002-05-21 Microsoft Corporation Web developer isolation techniques
US6119247A (en) * 1998-06-22 2000-09-12 International Business Machines Corporation Remote debugging of internet applications
EP1196882A1 (en) * 1998-11-30 2002-04-17 Siebel Systems, Inc. Smart scripting call centers
US6671825B1 (en) * 1999-11-19 2003-12-30 Oracle International Corporation Method and apparatus for debugging a software program
US6587995B1 (en) * 2000-04-19 2003-07-01 Koninklijke Philips Electronics N.V. Enhanced programmable core model with integrated graphical debugging functionality
US6718294B1 (en) 2000-05-16 2004-04-06 Mindspeed Technologies, Inc. System and method for synchronized control of system simulators with multiple processor cores
US20030005407A1 (en) * 2000-06-23 2003-01-02 Hines Kenneth J. System and method for coordination-centric design of software systems
US6915416B2 (en) * 2000-12-28 2005-07-05 Texas Instruments Incorporated Apparatus and method for microcontroller debugging
US6826746B2 (en) 2001-03-08 2004-11-30 International Business Machines Corporation Debugger probe for object oriented programming
US7185319B2 (en) * 2002-07-09 2007-02-27 Microsoft Corporation Debugging distributed applications
US20040243979A1 (en) 2003-02-27 2004-12-02 Bea Systems, Inc. Systems utilizing a debugging proxy
US7331049B1 (en) * 2003-04-21 2008-02-12 Borland Software Corporation System and methodology providing typed event and notification services
US7418697B2 (en) 2003-07-25 2008-08-26 Microsoft Corporation Method and system for fast application debugging
US7617487B2 (en) * 2004-12-13 2009-11-10 Sap (Ag) Method and system for debugging individual threads in a productive environment
US7457999B2 (en) 2005-06-28 2008-11-25 Intel Corporation Debug port system for control and observation
US7659901B2 (en) 2006-07-24 2010-02-09 Microsoft Corporation Application program interface for programmable graphics pipeline
US8230052B2 (en) 2007-02-14 2012-07-24 Microsoft Corporation Module diagnostic toolkit for client-server based protocols
US8006232B1 (en) * 2007-07-30 2011-08-23 Nvidia Corporation Serialization of function calls to a graphics API for debugging a remote device

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040230955A1 (en) * 2003-02-26 2004-11-18 Bea Systems, Inc. System for multi-language debugging
JP2008217545A (ja) * 2007-03-06 2008-09-18 Nec Corp コンソール情報取得システム、コンソール情報取得方法及びコンソール情報取得プログラム

Also Published As

Publication number Publication date
US9703678B2 (en) 2017-07-11
EP2368189B1 (en) 2021-07-14
CN102265264A (zh) 2011-11-30
CA2744216A1 (en) 2010-07-01
US20100162212A1 (en) 2010-06-24
JP2012513648A (ja) 2012-06-14
KR20110102337A (ko) 2011-09-16
JP5679989B2 (ja) 2015-03-04
WO2010075011A3 (en) 2010-09-23
CN102265264B (zh) 2013-10-23
WO2010075011A2 (en) 2010-07-01
EP2368189A4 (en) 2016-04-27
EP2368189A2 (en) 2011-09-28

Similar Documents

Publication Publication Date Title
KR101645052B1 (ko) 디버깅 파이프라인
JP7371141B2 (ja) リアルタイムデータフロープログラミング言語のためのツールおよび方法
US9471282B2 (en) System and method for using annotations to automatically generate a framework for a custom javaserver faces (JSF) component
US8533666B2 (en) Interactive design environments to visually model, debug and execute resource oriented programs
US20150095923A1 (en) Api notebook tool
US10162605B2 (en) Code snippet content recommendation to define an object literal
US20140165032A1 (en) Program code library searching and selection in a networked computing environment
CN110955409B (zh) 在云平台上创建资源的方法和装置
US9715372B2 (en) Executable guidance experiences based on implicitly generated guidance models
CN111258802A (zh) 捕获应用程序崩溃信息的方法及相关设备
CN114048415A (zh) 表单生成方法及装置、电子设备和计算机可读存储介质
CN113778897A (zh) 接口的自动测试方法、装置、设备及存储介质
CN113238739A (zh) 一种插件开发和数据获取方法、装置、电子设备及介质
WO2014197258A1 (en) Declarative configuration elements
CN114741294A (zh) 一种页面的调试方法、装置、设备及存储介质
Le Comparison of State Management Solutions between Context API and Redux Hook in ReactJS
CN117075912B (zh) 用于程序语言转换的方法、编译方法及相关设备
Doglio et al. Node. js and REST
Classon et al. Phase 1: Analysis
CN114691131A (zh) 针对用户界面ui文件的框架代码文件生成方法及装置
WO2023132882A1 (en) Infrastructure to integrate an integrated development environment (ide) with game engines
CN117493198A (zh) 一种自动编写测试用例的方法、装置及介质
CN117873482A (zh) 智能合约的代码验证方法、装置、设备及存储介质

Legal Events

Date Code Title Description
N231 Notification of change of applicant
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant