KR20040091560A - Jmc 디버깅을 위한 시스템 및 방법 - Google Patents

Jmc 디버깅을 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20040091560A
KR20040091560A KR1020040026969A KR20040026969A KR20040091560A KR 20040091560 A KR20040091560 A KR 20040091560A KR 1020040026969 A KR1020040026969 A KR 1020040026969A KR 20040026969 A KR20040026969 A KR 20040026969A KR 20040091560 A KR20040091560 A KR 20040091560A
Authority
KR
South Korea
Prior art keywords
thread
jmc
debugging
code
stepping
Prior art date
Application number
KR1020040026969A
Other languages
English (en)
Other versions
KR100996807B1 (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 KR20040091560A publication Critical patent/KR20040091560A/ko
Application granted granted Critical
Publication of KR100996807B1 publication Critical patent/KR100996807B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/28Error detection; Error correction; Monitoring by checking the correct order of processing
    • 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/3624Software debugging by performing operations on the source code, e.g. via a compiler

Abstract

JMC(Just-My-Code) 디버깅을 위한 시스템 및 방법이 기술된다. 일 태양에 있어서, 디버깅 탐지기(debugging probes)가 관심 코드(interesting code)를 나타내는 각각의 프로그래밍 구성물(programming constructs)에 자동으로 삽입된다. 디버깅 탐지기는 원시 코드(native code)를 생성하는 컴퓨터 컴퓨터-프로그램 컴파일링 동작(computer-program compiling operation) 동안 삽입된다. 그 후, 원시 코드는 프로세스로 실행된다. 프로세스는 JMC 스텝 동작 동안 비관심 코드(uniteresting code)에 대해 자유롭게 실행되는 실행의 하나 이상의 스레드를 포함한다. 그러한 하나 이상의 스레드 중의 하나의 스레드는, 스레드가 프로세스를 통해 JMC 스텝핑(JMC stepping) 동안 스레드가 디버깅 탐지기 중의 활성인 것(active one)을 마주친 경우에 오직 관심 코드에서 멈추어진다.

Description

JMC 디버깅을 위한 시스템 및 방법{JUST-MY-CODE DEBUGGING}
본 발명은 소프트웨어 개발에 관련된다.
디버깅(debugging)은 전형적으로 디버거(debugger)의 사용을 포함하는데, 디버거는 소프트웨어 개발자가 컴퓨터 프로그램의 런타임(run-time) 행동을 관찰하고, 의미 에러(semantic error)의 위치를 파악하는 것을 허용하는 도구이다. 정지 명령(stop command)과 같은 일부 디버깅 명령어는 프로그래머가 임의의 시점에 실행중인 프로세스의 실행을 멈추는 것을 허용한다. 반면, 중단점(breakpoint)을 수동으로 삽입함으로써 프로그래머는 코드 내의 예정된 지점에 도달한 경우 프로세스를 멈출 수 있다. 디버기(debugee)는 명령어 스트림(instruction stream) 내에서 중단 연산 코드(break op-code)를 만나기 전까지 자유롭게 실행되는데, 그 때까지 디버거가 디버기를 계속하다가 그 지점에서 운영 시스템(operating system)은 디버기를 멈출 것이다. 그러므로, 컴퓨터 프로그램을 디버깅하는 경우, 프로그램은 실행(즉, 프로세스로 실행)되고 있거나, 멈추어진 상태 중의 하나에 있다. 스텝-인(step-into), 스텝-오버(step-over), 스텝-아웃(step-out) 명령과 같은 일부 디버깅 명령어들은 오직 중단 모드(break mode)(즉, 디버기가 멈추어진 경우)에서만 기능하고, 프로그래머가 프로그램 상태(program state)를 통해 단계를 조회하고, 관찰 및/또는 변수, 포인터 등의 내용을 변경하는 것을 가능하게 한다.
전통적인 스텝핑(stepping)은 명령어 스트림(instruction stream)의 정적인 분석(static analysis)을 통해 전략적인 지점에 중단 연산 코드를 위치시킴으로써 수행되고, 각각의 패치(patch)를 마주칠 때까지(만날 때까지) 자유롭게 실행된다.예컨대, 스텝-인은 들어가게 될 함수의 시작에 패치를 위치시키고, 스텝-오버는 넘어가게 될 라인(line)의 뒤에 패치를 위치시키며, 스텝-아웃은 현재 함수가 반환하면 실행될 명령어에 패치를 위치시킨다. 불행하게도, 그러한 전통적인 스텝핑 명령은 프로그래머가 "비관심 코드(uninteresting code)"를 자동적으로 건너뛰는 것을 허용하지 않는다. 오히려, 상술한 바와 같이, 프로그래머는 관심 코드(interesting code)에 수동으로 중단점을 삽입한 후 중단점을 만날 때까지 실행하고/하거나 관심 코드에 이르기 위해 비관심 코드를 수동으로 스텝 조회해야 한다. 환언하면, 프로그래머는 반복하여 스텝-인하여 비관심 코드를 조회하고, 함수를 스텝-오버하여 비관심 코드에 도달하고/하거나 함수를 스텝-아웃하여 비관심 코드에 도달해야 할 수도 있다.
예컨대, 스텝-인 및 스텝-오버 명령은 오직 그들이 함수 호출을 처리하는 방식에 있어 차이가 있다. 둘 중 하나의 명령은 디버거에게 명령하여 소스 코드의 다음 라인을 실행하도록 한다. 그 라인이 함수 호출을 포함하면, 스텝-인 명령은 오직 호출 자체만을 실행하고, 코드의 제1 라인이 비관심 코드인지와 무관하게, 함수 내의 코드의 제1 라인에서 멈춘다. 스텝-오버 명령은 전체 함수를 실행하고, 코드의 제1 라인이 비관심 코드인지와 무관하게, 함수 밖의 제1 라인에서 멈춘다. 내포된 함수 호출에서, 스텝-인은 가장 깊이 내포된 함수로 들어간다. 예컨대, 스텝-인이 F1(F2())와 같은 호출에서 사용되면, 디버거는 함수 F2로 들어간다. 스텝-아웃 명령은 함수가 반환될 때까지 프로그램 실행을 재개함(resume)으로써 함수에서 나가기 위해 사용되고, 반환 점이 비관심 코드에 대응되는지와 무관하게 호출 함수의 반환 점에서 실행을 중단한다.
부가적으로, 코드의 부분을 한 단계씩 조회하기 위하여 각각의 코드의 라인에 대하여 스텝-인 명령을 반복적으로 수행하도록 디버거에 명령할 수도 있지만, 이러한 프로세스는 실질적으로 디버깅 프로세스 성능을 감소시키고, 프로세스 데드락(process deadlock)(즉, 디버거로 인한 동일한 캐시 라인(cache-line)에 대한 경쟁)의 위험을 증가시킨다. 예컨대, 다수의 반복적인 스텝-인 동작을 모방하기 위하여, 코드의 각각의 라인에 대하여 디버거는 다음 명령어에 중단점을 삽입하고, 프로세스를 실행하며, 연관된 예외(exception)를 포착(catch)하고, 미리 설정된 중단점에 도달했는지(또는 디버거가 수동으로 중단될 때까지) 결정하기 위하여 명령어 포인터(instruction pointer)를 검사한다. 인식할 수 있는 바와 같이, 디버거가 다른 예외가 발생하기 전까지 코드의 하나의 라인 이상을 실행하지 않는 (즉, 코드는 매우 적은 시간 동안에만 "자유롭게 실행(run free)"하는 것이 허락됨) 그러한 반복적인 동작은 디버깅 성능을 상당히 저해하고, 프로세스 데드락의 가능성을 증가시킨다. 논의를 위해, 자유롭게 실행되는 코드는 마주친 중단점에 의해 방해받지 않고 실행되는 것이 허용되는 메소드(method) 또는 비관심 코드와 같은 코드의 논리적인 블록이다.
그러한 디버깅 제한은 디버깅되는 컴퓨터 프로그램이 프로그래머가 디버깅에 관심이 없는 많은 양의 코드를 통합하는 정교한 환경에서 동작하도록 디자인된 경우에 특히 문제가 된다. 예컨대, 그러한 비관심 코드는 프로그래머가 작성하지 않은 코드, 이미 디버깅된 코드, 다른 공유 코드, 네트워크 서비스 코드, 상호 운용성 프레임워크 코드(interoperability framework code) 등을 포함할 수 있다. 그러한 경우에, 프로그래머가 쉽게 비관심 코드를 건너뛰는 것을 허용하지 않는, 프로그램을 디버그하기 위한 현재 기술은 초보자 및 숙련된 프로그래머 모두에게 부담스러울 수 있는 시간 소모와 노동 집약적인 수고를 요구할 수 있다.
따라서, 관심 코드에 수동으로 중단점을 설정해야 하고/하거나 관심 코드에 도달하기 위해 비관심 코드를 수동으로 스텝 조회(step-through)해야 하는 일 없이, 사용자가 오직 관심 코드만을 디버그하는 것을 허용하는 시스템 및 방법이 매우 요구된다.
디버깅 제한은 디버깅되는 컴퓨터 프로그램이 프로그래머가 디버깅에 관심이 없는 많은 양의 코드를 통합하는 정교한 환경에서 동작하도록 디자인된 경우에 특히 문제가 된다. 예컨대, 그러한 비관심 코드는 프로그래머가 작성하지 않은 코드, 이미 디버깅된 코드, 다른 공유 코드, 네트워크 서비스 코드, 상호 운용성 프레임워크 코드 등을 포함할 수 있다. 그러한 경우에, 프로그램을 디버그하기 위한 현재 기술은 프로그래머가 쉽게 비관심 코드를 건너뛰는 것을 허용하지 않으므로, 초보자 및 숙련된 프로그래머 모두에게 부담스러울 수 있는 시간 소모와 노동 집약적인 수고를 요구할 수 있다.
따라서, 관심 코드에 수동으로 중단점을 설정해야 하고/하거나 관심 코드에 도달하기 위해 비관심 코드를 수동으로 스텝 조회해야 하는 일 없이, 사용자가 오직 관심 코드만을 디버그하는 것을 허용하는 시스템 및 방법이 매우 요구된다.
도 1은 JMC 디버깅을 위한 시스템 및 방법이 구현될 수 있는 예시적인 컴퓨팅 환경을 도시하는 도면.
도 2는 JMC 디버깅을 위한 애플리케이션 프로그램 및 프로그램 데이터를 포함하는 도 1의 시스템 메모리의 예시적인 태양을 더 도시하는 도면.
도 3은 JMC 디버깅을 위한 예시적인 절차를 도시하는 도면.
< 도면의 주요 부분에 대한 부호 설명 >
106 : 시스템 메모리
202 : 프로세스
204 : 주 컴파일러
206 : 디버거
208 : 런타임
210 : 원시 코드
212 : 관심 코드 목록/ID(들)
214 : 디버깅 서비스
JMC(Just-My-Code) 디버깅을 위한 시스템 및 방법이 기술된다. 일 태양에 있어서, 관심 코드를 나타내는 각각의 프로그래밍 구성물(programming constructs)에 디버깅 탐지기(debugging probe)가 자동적으로 삽입된다. 디버깅 탐지기는 원시 코드(native code)를 생성하는 컴퓨터 컴퓨터-프로그램 컴파일링(computer program compiling) 동작 동안 삽입된다. 그 후, 원시 코드는 프로세스로서 실행된다. 그 프로세스는 JMC 스텝핑 동작 동안 비관심 코드에 대해 자유롭게 실행되는 실행(execution)의 하나 이상의 스레드(thread)를 포함한다. 하나 이상의 스레드 중 하나의 스레드는, 오직 스레드가 프로세스에 대해 JMC 스텝핑 중인 동안에 스레드가 디버깅 탐지기 중의 활성 상태인(active) 하나를 마주친 경우 관심 코드에서만 멈춘다.
개관
전통적인 디버깅 기술의 상술한 제한을 다루기 위해, 디버깅 동작 동안 비관심 코드를 자동적으로 건너뛰는 JMC 디버깅을 위한 시스템 및 방법이 기술된다. 논의를 위하여, 비관심 코드는 이유를 불문하고 그 시점에 프로그래머의 디버깅 수고와 관련된 것으로 간주되지 않는 코드이다(예컨대, 프로그래머가 작성하지 않은 코드, 이미 디버깅 된 코드 등). "관심 코드"는 디버깅 동작 동안 프로그래머에게 중요한 것으로, 비관심 코드에 대한 필연적 결과(corollary)이다.
특히, 발명의 다양한 실시예는 디버깅 애플리케이션(디버거)이 어셈블리 내의 임의의 메소드를 관심 있는 것으로 표시하는 것을 허용한다. 어셈블리로부터 원시 코드를 생성하기 위한 JIT(Just In Time) 컴파일러 동작 동안, 디버깅 탐지기가 자동적으로 관심 메소드에 삽입된다. 디버거를 사용하여, 사용자는 디버깅을 위해 원시 코드를 프로세스로 적재한다. JMC 스텝핑 동작에 응답하여, JMC 스텝핑 스레드(들)가 관심 메소드를 마주치는 경우에만, 프로세스 실행이 자동적으로 멈춘다. 모든 비JMC 스텝핑 스레드(non-JMC stepping thread)는 관심 및 비관심 코드에 대해 자유롭게 실행된다. 이는 사용자가 관심 코드에 수동으로 중단점을 설정하지 않아도 될 뿐만 아니라, 프로그래머가 관심 코드에 도달하기 위해 비관심 코드를 힘들여 나아가지(즉, 전통적인 스텝 동작을 수행하지) 않아도 됨을 의미한다.
예시적인 운영 환경
도면에서, 유사한 참조 번호는 유사한 요소를 참조하고, 본 발명이 적절한 컴퓨팅 환경에서 구현된 것으로 도시되어 있다. 필수적이지는 않지만, 발명은 개인용 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행 가능 명령어의 일반적인 상황에서 기술된다. 프로그램 모듈은 일반적으로 특정한 업무를 수행하거나 특정한 추상 데이터 타입을 구현하는 루틴(routines), 프로그램, 개체, 컴포넌트, 데이터 구조 등을 포함한다.
도 1은 이후에 기술된 JMC 디버깅을 위한 시스템, 장치 및 방법이 (완전히 또는 부분적으로)구현될 수 있는 적절한 컴퓨팅 환경(100)의 예를 도시한다. 예시적인 컴퓨팅 환경(100)은 적절한 컴퓨터 환경의 하나의 예에 불과하고, 이하 기술된 시스템 및 방법의 기능 또는 사용의 범위에 대한 어떠한 제한을 제시하려는 의도가 아니다. 컴퓨팅 환경(100)은 컴퓨팅 환경(100)에 도시된 컴포넌트들의 조합 또는 이들 중 임의의 하나에 관련된 종속성(dependancy)이나 요구 사항(requirement)을 가지는 것으로 해석되어서는 안 된다.
이하 기술된 방법 및 시스템은 다수의 다른 범용(general purpose) 및 전용(special purpose) 컴퓨팅 시스템 환경 또는 설정과 사용할 수 있다. 사용하기에 적절할 수 있는, 잘 알려진 컴퓨팅 시스템, 환경 및/또는 설정의 예로 개인용 컴퓨터, 서버 컴퓨터, 멀티프로세서 시스템(multiprocessor systems), 마이크로프로세서 기반 시스템, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 이상의 시스템 및 장치들 중의 임의의 것을 포함하는 분산 컴퓨팅 환경 등이 포함된다(이에 제한되지 않음). 또한, 프레임워크의 소형 또는 부집합 버전(compact and subset version)은 핸드헬드 컴퓨터(handheld computers) 또는 다른 컴퓨팅 장치와 같은 제한된 자원의 클라이언트에서 구현될 수 있다. 또한, 발명은 통신 네트워크를 통해 링크된 원격 프로세싱 장치에 의해 작업이 수행되는 분산 컴퓨팅 환경에서 실시될 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 지역 및 원격 메모리 저장 장치(local and remote memory storage devices) 모두에 위치할 수 있다.
도 1에 도시된 바와 같이, 컴퓨팅 환경(100)은 컴퓨터(102)의 형태로 범용 컴퓨팅 장치를 포함한다. 컴퓨터(102)의 컴포넌트는 하나 이상의 프로세서 또는 프로세싱 유닛(104), 시스템 메모리(106) 및 시스템 메모리(106)를 포함하는 다양한 시스템 컴포넌트들을 프로세서(104)에 결합시키는 버스(108)를 포함할 수 있으나, 이에 제한되지는 않는다. 시스템 버스(108)는 메모리 버스 또는 메모리 제어기, 주변 버스(peripheral bus), 가속 그래픽 포트(accelerated graphics port) 및 프로세서 또는 다양한 버스 구조 중의 임의의 것을 사용하는 로컬 버스를 포함하는 여러 유형의 버스 아키텍쳐(bus structure)들 중의 임의의 하나 이상을 나타낸다. 제한이 아닌 예로서, 그러한 아키텍처는 ISA(Industry Standard Architecture) 버스, EISA(Enhanced ISA) 버스, VESA(Video Electronics Standards Association) 로컬 버스 및 메자닌 버스(Mezzanine bus)로도 잘 알려진 PCI(Peripheral Component Interconnects) 버스를 포함한다.
컴퓨터(102)는 전형적으로 다양한 컴퓨터 판독 가능 기록 매체를 포함한다. 이러한 매체는 컴퓨터(102)에 의해 접근 가능한 임의의 이용 가능한 매체일 수 있고, 휘발성 및 비휘발성 매체(non-volatile media), 분리식(removable) 및 고정식 매체(non-removable media) 모두를 포함한다. 도 1에서, 시스템 메모리(106)는 RAM(Random Access Memory; 110)과 같은 휘발성 메모리 및/또는 ROM(Read Only Memory; 112)과 같은 비휘발성 메모리의 형태로 컴퓨터 판독 가능 기록 매체를 포함한다. 기동(start-up) 동안과 같이, 컴퓨터(102) 내의 요소 간에 정보의 전송을 돕는 기본 루틴을 포함하는 BIOS(Basic Input/Output System; 114)는 ROM(112)에 저장된다. 전형적으로, RAM(110)은 프로세서(104)에 의해 현재 동작되고/되거나 즉시 접근 가능한 프로그램 모듈 및/또는 데이터를 포함한다.
컴퓨터(102)는 다른 분리식/고정식, 휘발성/비휘발성 컴퓨터 저장 매체를 더 포함할 수 있다. 예컨대, 도 1은 고정식, 비휘발성 자기 매체(도시되지 않음, 전형적으로 "하드 드라이브"라고 함)로부터의 판독 및 이 매체로의 기록을 위한 하드 디스크 드라이브(116), 분리식, 비휘발성 자기 디스크(120)(예컨대, "플로피 디스크")로부터의 판독 및 이 디스크로의 기록을 위한 자기 디스크 드라이브(118) 및 CD-ROM/R/RW, DVD-ROM/R/RW/+R/RAM 또는 다른 광 매체와 같은 분리식, 비휘발성 광 디스크(124)로부터의 판독 및 이 디스크로의 기록을 위한 광 디스크 드라이브(122)를 도시한다. 하드 디스크 드라이브(116), 자기 디스크 드라이브(118) 및 광 디스크 드라이브(122) 각각은 하나 이상의 인터페이스(126)에 의해 버스(108)에 접속된다.
드라이브 및 연관된 컴퓨터 판독 가능 기록 매체는 컴퓨터(102)를 위한 컴퓨터 판독 가능 명령어, 데이터 구조, 프로그램 모듈 및 다른 데이터의 비휘발성 저장을 제공한다. 이하에서 기술된 예시적인 환경이 하드 디스크, 분리식 자기 디스크(120) 및 분리식 광 디스크(124)를 사용하고 있지만, 당업자는 자기 카세트, 플래시 메모리, 디지털 비디오 디스크, RAM, ROM 등과 같이, 컴퓨터에 의해 액세스 가능한, 데이터를 저장할 수 있는 다른 유형의 컴퓨터 판독 가능 기록 매체도 또한 예시적인 운영 환경에서 사용될 수 있음을 인식해야 한다.
사용자는 키보드(140) 및 ("마우스"와 같은) 위치 지정 장치(142)와 같은 입력 장치를 통하여 컴퓨터(102)에게 명령 및 정보를 제공할 수 있다. 다른 입력 장치(도시되지 않음)로는 마이크로폰, 조이스틱, 게임 패드, 위성 접시(satellite dish), 직렬 포트, 스캐너, 카메라 등이 포함된다. 이들 입력 장치 및 다른 입력 장치는 버스(108)에 결합된 사용자 입력 인터페이스(144; user input interface)를통해 프로세싱 유닛(104)에 접속되지만, 다른 인터페이스 및 병렬 포트, 게임 포트 또는 USB(Universal Serial Bus)와 같은 버스 구조에 의해 접속될 수 있다.
또한, 모니터(146) 또는 다른 유형의 디스플레이 장치는 비디오 어댑터(148)와 같은 인터페이스를 통해 버스(108)에 접속된다. 모니터(146)에 부가하여, 개인용 컴퓨터는 전형적으로 스피커 및 프린터와 같은 다른 주변 출력 장치(도시되지 않음)를 포함하는데, 이는 출력 주변 인터페이스(output peripheral interface; 150)를 통해 접속될 수 있다.
컴퓨터(102)는 원격 컴퓨터(152)와 같은 하나 이상의 원격 컴퓨터로의 논리 접속을 사용하여 네트워크 환경에서 동작할 수 있다. 원격 컴퓨터(152)는 본 명세서에서 컴퓨터(102)에 대해 기술된 많은 또는 모든 요소 및 특징을 포함할 수 있다. 도 1에서 도시된 논리 접속은 LAN(Local Area Network; 154) 및 일반적인 WAN(Wide Arear Network; 156)이다. 그러한 네트워킹 환경은 사무실, 기업 규모 컴퓨터 네트워크(enterprise-wide computer networks), 인트라넷 및 인터넷에서 흔한 경우이다.
LAN 네트워킹 환경에서 사용되는 경우, 컴퓨터(102)는 네트워크 인터페이스 또는 어댑터(158)를 통해 LAN(154)에 접속된다. WAN 네트워킹 환경에서 사용되는 경우, 컴퓨터는 전형적으로 WAN(156)에 대한 통신을 설정하기 위한 모뎀(160) 또는 다른 수단을 포함한다. 내장형 또는 외장형인 모뎀(160)은 사용자 입력 인터페이스(144) 또는 다른 적절한 메커니즘을 통해 시스템 버스(108)에 접속될 수 있다. 인터넷을 통한 WAN의 특별한 실시예가 도 1에 도시되어 있다. 이 경우,컴퓨터(102)는 인터넷(162)을 통해 적어도 하나의 원격 컴퓨터(152)와의 접속을 설정하기 위하여 모뎀(160)을 사용한다.
네트워크 환경에서, 컴퓨터(102)에 대하여 기술된 프로그램 모듈 또는 그 일부는 원격 메모리 저장 장치(remote memory storage device)에 저장될 수 있다. 그러므로, 예컨대 도 1에서 도시된 바와 같이, 원격 애플리케이션 프로그램들(164)은 원격 컴퓨터(152)의 메모리 장치에 존재할 수 있다. 도시 및 기술된 네트워크 접속은 예시적이고, 컴퓨터들 간의 통신 링크를 설정하기 위하여 다른 수단이 사용될 수 있음을 인식할 것이다.
예컨대, 런타임 환경을 제공하기 위한 OS(Operating System; 128), JMC 디버깅을 위한 애플리케이션 프로그램들(130), 다른 프로그램 모듈들(132; 예컨대, 장치 드라이버 등) 및 소스 코드, 중간 어셈블리 등과 같은 프로그램 데이터(134)를 포함하는 다수의 프로그램 모듈이 하드 디스크, 자기 디스크(120), 광 디스크(124), ROM(112) 또는 RAM(110)에 저장될 수 있다.
도 2는 JMC 디버깅을 위한 애플리케이션 프로그램들(130) 및 프로그램 데이터(134)를 포함하여, 도 1의 시스템 메모리(106)의 추가적인 예시 태양을 도시한다. 애플리케이션 프로그램들(130) 및 프로그램 데이터(134)는 예컨대 프로세스(202), 주 컴파일러(primary compiler; 204), 프로세스(202)를 디버깅하기 위한 디버깅 프로그램("debugger"; 206) 및 공용 런타임 컴포넌트("런타임"; 208)를 포함한다. 프로세스(202)는 어셈블리(도시되지 않음)로 컴파일된 소스 코드(도시되지 않음)의 결과로서, 이는 차례로 원시 코드(210)로 컴파일된다.프로세스(202)는 디버거(206)에 의한 원시 코드(210)의 실행을 의미한다.
소스 코드는 임의의 유형의 컴퓨터 프로그래밍 언어로 작성된 임의의 유형의 컴퓨터 프로그래밍 코드를 의미한다. 주 컴파일러(204)는 디버그 스위치를 켠 채로(예컨대, "/debug") 소스 코드를 어셈블리(도시되지 않음)로 컴파일한다. 이러한 주 컴파일러는 C, C++, C#, 비주얼 베이직 및 또는 JMC 디버깅을 구현하도록 수정된 다른 유형의 컴파일러와 같은 임의의 컴퓨터 프로그램 언어 컴파일러가 될 수 있다. 어셈블리는 실행을 위해 소스 코드를 플랫폼에 특정한 원시 코드로 변환하는 과정의 중간 단계로 알려져 있고, 이를 의미한다. 이러한 목적으로, 위와 같은 어셈블리는 예컨대 플랫폼/프로세서 독립적인 중간 언어(platform/processor independent intermediate language; IL) 및 대응되는 메타데이터를 포함한다.
사용자는 어셈블리를 디버거(206)로 적재한다. 어셈블리를 디버깅 애플리케이션으로 적재하기 위한 기술은 공지되었다. 예컨대, 어셈블리는 어셈블리 이름을 (예컨대 명령 라인(command line) 또는 UI를 통해서) 지정하거나 어셈블리를 선택함으로써 디버거(206)로 적재될 수 있다. 어셈블리 적재 동작 동안, 디버거(206)는 비관심 코드와 비교하여 관심 코드인 어셈블리의 부분을 구분하기 위하여 관심 코드(212)의 목록을 생성한다. 일반적으로, 사용자 코드(반복하여 : 어셈블리로 변환되고, 이하 기술되는 바와 같이 결국 프로세스로서 실행되는 원시 코드로 변환되는 소스 코드)는 관심 및 비관심 코드의 일부 조합을 포함한다. 그러나, 사용자 코드는 런타임(208)에 속하는 호스트 코드(hosted code)를 포함하지 않는다. 일 실시예에서, 관심 코드(212)는 사용자 입력 인터페이스(144; 도 1)의 임의의 태양으로의 사용자 입력을 통해 생성된다. 예컨대, 사용자는 디버깅 서비스에 의한 다이얼로그 박스에 디스플레이되는 다수의 방법 중의 특정한 하나를 (예컨대, 위치 지정 장치, 키보드, 음성 인식 기술(voice activated techniques) 등을 통해)선택하거나, 명령 라인 인터페이스 등에 프로그래밍 구성물의 이름을 타이핑하여 입력할 수 있다. 디버거(206)는 노출된 디버깅 API(216)(한 부분은 런타임(208)의 서비스로서, 다른 부분은 디버깅 API(216)를 구현하고 디버거(206)에 의해 소비되는 공개 컴포넌트로서 되는 두 부분으로 구현됨)를 통해 식별된 관심 코드(212)에 대하여 디버깅 서비스(214)에 통지한다.
이 시점에서, 사용자는 예컨대 JMC 메뉴 항목, 명령 라인 또는 다른 JMC 가능 명령어(JMC enabling instruction)를 인에이블시키고, 실행 또는 시작 명령을 발생시킴으로써 디버깅 동작을 시작하도록 디버거(206)에게 명령한다. 이는 디버거(206)가 프로세스(202)로서의 추후 실행을 위해 JIT 컴파일러(220)로 하여금 어셈블리를 원시 코드(210)로 변환하도록 명령할 것을 야기한다.
어셈블리 변환 동작 동안, JIT 컴파일러(220)는 원시 코드(210)의 프로그래밍 구성물(예컨대, 실행 가능한 파일/이진, 동적 링크 라이브러리, 클래스 개체 및 메소드, 정적 함수 등)에 JMC 가능 컴포넌트, 플래그들(222) 및 디버깅 탐지기들(224)을 삽입한다. 이러한 실시예에서, JIT 가능 컴포넌트가 클래스 메소드 및/또는 정적 함수의 서문(prolog) 바로 뒤에 삽입된다. JIT 컴파일러(220)는 상술한 바와 같이 디버거(206)에 의해 생성된 관심 코드 목록/ID들(212)을 파싱(parsing)함으로써 이러한 클래스 메소드 및/또는 정적 함수들을 식별한다.
디버깅 탐지기(224)는 활성화된 탐지기(224; activated probe)를 마주친 실행의 특정 스레드가 JMC 스텝핑 동작을 수행 중인지 평가하도록 디버깅 서비스(214)에 요청할 것인지 그리고, 만약 그렇다면 프로세스(202)를 멈출 것인지 결정하기 위하여 컴파일 시 상수 포인터 값(compile time constant pointer value)을 통해 연관된 플래그(222)를 참조한다. 이제부터 기술하는 바와 같이, 비활성화된 플래그(inactivated flag)에 대해서는 이러한 결정이 내려지지 않고, 오직 활성화된 플래그에 대해서만 결정이 내려진다. 예시적인 디버깅 탐지기(224)는 다음과 같이 나타낼 수 있는데,
if(*pFlag){call JMC_Probe},
이 경우 pFlag는 대응되는 플래그(222)로의 컴파일 시 상수 포인터이다("*"는 연관된 플러그(222)의 값을 알아내기 위해 런타임에 주소가 역참조됨(de-referenced)을 나타냄). 탐지기(224)의 "JMC_Probe" 부분은 JMC_Probe 함수(226)라고 불린다. 포인터 간접 연산자(pointer indirection)를 사용하여, 자신이 삽입된 다수의 프로그래밍 구조로부터의 pFlag들 모두가 동일한 플래그(222)를 가리킬 수 있다.
도시된 바와 같이, JMC_Probe(226)에 대한 호출은 참조된 플래그(222)가 활성화되었는지 또는 비활성화되었는지에 따라 조건적이다. 논의를 위하여, 활성화된 플래그(222)는 0이 아닌 값을 가지고, 비활성화된 플래그(222)는 0 또는 널 값(null value)을 가진다. 플래그(222)가 활성 상태인 경우, 디버깅 탐지기(224)가 활성 상태(예컨대, 활성 탐지기)라고 말할 수 있고, 그 반대도 가능하다. 예컨대, 실행의 스레드가 활성 탐지기(224)를 마주친 경우, JMC_Probe가 호출된다. 마찬가지로, 비활성화된 탐지기(224)를 마주치면 이러한 호출을 하지 않는다. 이는 하나의 플래그(222)를 토글(toggle)시킴으로서 각각의 연관된 탐지기(224)를 개별적으로 활성화 또는 비활성화시킬 수 있음을 의미한다. 이하에서, 디버깅 동작 동안 이러한 신규한 JMC 디버깅 탐지기(224)가 어떻게 이용되는지 기술한다.
프로세스(202)가 멈추어진 경우(예컨대, 전통적인 중단점의 사용을 통한 임의의 전통적인 정지 메커니즘), 디버거(206)는 사용자가 JMC 스텝핑 명령(들)(228)(즉, JMC 스텝-인, JMC 스텝-아웃 및 JMC 스텝-오버 명령들)을 통해 프로세스(202)를 JMC 스텝 조회(JMC step through)하는 것을 허용한다. 예컨대, 이러한 명령들은 사용자 인터페이스(144; 도 1)의 명령 라인 및/또는 UI 부분을 통해서 사용자에 의해 선택된다. 디버거(206)에 의해 디버깅 서비스(214)로 전송된 JMC 스텝핑 명령(즉, JMC 스텝-인, 스텝-아웃 및 스텝-오버 명령들(228) 중의 임의의 하나)에 응답하여, 디버깅 서비스 모임은 플래그들(222)을 인에이블시키고(enable), 연관된 탐지기(224)를 활성화시킨다. 사용자는 어떤 탐지기가 활성인지에 대해 알 필요가 없다.
활성화된 디버깅 탐지기(224)로 인해 실행의 프로세스(202) 스레드들이 비관심 코드에 대해 자유롭게(즉, 실질적으로 완전한 속도로 불필요한 멈춤없이) 실행될 수 있다. 관심 코드에 위치한 활성화된 탐지기(224)를 마주친 임의의 스레드는 마주친 탐지기(224)가 JMC_Probe(226)에 대한 호출을 통해 스레드가 코드에 대하여 JMC 스텝핑 중이라고 결정한 경우에만, (TriggerMethodEntry(230)에 의해) 멈추어진다. 이러한 목적을 위해, JMC_Probe(226)는 마주친("유발된") 디버깅 탐지기(224)와 연관된 메소드의 명령어 포인터(instruction poiner; ip) 및 프레임 포인터(frame pointer; fp)를 식별하기 위하여 호출 스택(call stack)을 디코딩(decoding)함으로써 JMC 스텝핑을 수행하지 않는 스레드들을 걸러낸다(filter out). 현재 스레드가 JMC 스텝핑을 수행하고 있다면, JMC_Probe(226)는 ip 및 fp 파라미터를 TriggerMethodEntry(230)으로 넘겨주는데, 그 후에 관심 코드 목록/ID들(212)에 나타난 바에 따라 메소드가 "관심 있는" 것인지를 결정하기 위하여 ip를 메소드에 역으로 매핑시킨다. (런타임(208)은 디버깅 탐지기(224)가 룩업 동작(lookup operation)을 통해 탐지기가 관심 코드에 위치하는지를 결정할 수 있음을 JIT 컴파일러가 실질적으로 보장하도록 충분한 부기(bookkeeping)를 함) 메소드가 관심 있는 것이라면, JMC_Probe(226)는 디버깅 탐지기(224) 다음에 중단 연산 코드(즉, 중단점(234), 모든 중담점들(234)은 JMC_Probe에 의해 삽입됨)를 삽입하고, 실행 스레드가 중단점(234)을 만나서 관심있는 코드에서 정지하도록 프로세스의 실행을 계속한다.
부가적으로, JMC 스텝핑 명령(228)이 다음과 같다면,
. JMC 스텝-인, 디버깅 서비스(214)는 모든 JMC_Probe들(224)을 활성화시키고, 들어가게 될 메소드에 대한 호출 뒤에 중단점(JMC_Probe가 삽입한 중단점이 아님)을 위치시킨다. JMC 탐지기들(224)은 모든 관심 코드의 시작부에 위치하고, 탐지기가 활성화되므로, 호출이 (간접적으로, 결국 "관심" 코드를 야기하는 비관심/프레임워크 코드를 야기함으로써) 결국 임의의 "관심" 코드를 야기하면, 스레드는TriggerMethodEntry(230)(스레드를 정지시키고, 관심 코드에서 완료되는 단계)을 호출하는 활성화된 탐지기를 만나게 된다. 호출이 어떠한 관심 코드도 야기하지 않는다면, 스레드는 들어가게 된 메소드의 호출 후에 삽입된 중단점(즉, JMC_Probe가 삽입한 중단점(234)이 아님)을 만나게 되고, JMC 스텝-인 동작은 완료된다. 이러한 방법으로, 프로세스(202)는 JMC 스텝-인이 시작하고 끝나는 시점 사이에서 완전한 속도로(즉, 중간의 중단 연산 코드에 의해 방해받지 않고) 실행된다.
. JMC 스텝-아웃, JMC_Probe(226)는 제1 스택 프레임(first stack frame)에 의해 식별되는 관심 메소드로의 반환 주소에 중단점(234)을 삽입한다. 그러므로, 중단점은 디버깅 탐지기(224)가 마주치게 되는 동일한 메소드에 삽입되지 않는다. 관심 코드로의 반환 주소를 가지는 제1 스택 프레임의 위치를 알아 내기 위하여, 디버깅 서비스(214)는 프로세스 스택을 완전히 올라가며 확인(full walk up)한다(즉, 스택을 풀어냄(unwind)). 디버깅 서비스(214)는 스택 프레임 주소가 관심 메소드의 반환 주소인지를 결정하기 위하여 "다른 데이터(232)"의 "관심 메소드 데이터" 부분의 관점에서 하나 이상의 런타임(208) 서비스를 이용한다. 예컨대, 이러한 관심 메소드 데이터는 각각의 관심 메소드에 대해 각자의 실질적으로 유일한 ID(예컨대 GUID)를 포함한다. 일 실시예에서, 관심 메소드 데이터는 디버깅 탐지기(224) 삽입 동작 동안에 JIT 컴파일러(220)에 의해 생성된다.
. JMC 스텝-오버 그리고 스레드는 메소드의 종단부에서 명령어를 실행하지 않음으로 인해 JMC_Probe(226)는 전통적인 스텝-오버와 유사하게 행동한다. 스레드가 메소드의 종단부에 있다면, JMC_Probe(226)는 스레드가 실행되는 관심 코드의제1 인스턴스(행)에서 정지하도록 스텝-인 및 스텝-아웃으로부터의 모든 동작을 수행한다.
JMC 스텝핑 스레드가 멈추어짐으로써 명확해지는 JMC 스텝핑 명령(228)의 완료에 대한 응답으로, 디버깅 서비스(214)는 모든 탐지기를 디스에이블시킨다(disable)(디버거(206)는 오직 JMC 스텝핑 동작만을 이해하고, 탐지기에 대해서는 어떤 것도 알지 못함). 어떠한 실행 스레드도 JMC 스텝핑이 아닌 경우에 발생하게 되는, JMC_Probe(226)에 대한 불필요한 호출을 피하기 위한 성능 최적화(performance optimization)로 탐지기들(224)을 비활성화시킨다.
본 실시예에서, 플래그들(222)은 모듈 당 기반(per-module basis)으로 인에이블/디스에이블된다(즉, 각각의 모듈에 하나의 플래그가 삽입됨). 이러한 방법으로, 모듈내의 각각의 메소드는 pFlag에 대하여 동일한 값을 갖는다. 이러한 특별한 구현은 모듈 당 기반으로 코드는 관심있거나 그렇지 않다는 합리성(rational)에 기초한다. 상이한 합리성은 다른 실시예에서 특별한 구현 디자인(implementation's design)을 가지는 기능으로 구현될 수 있음을 인식할 수 있다. 예컨대, 플래그(222)는 또한 메소드 당 기반(per-method basis)으로 삽입될 수 있는데, 더 많은 플래그들(222)이 존재할수록, 하나의 플래그(222)의 값을 플립/토글(flipping/toggling)함으로써 인에이블될 수 있는 탐지기가 더 적어지는 트레이드오프(tradeoff)가 존재한다.
따라서, 활성 탐지기(224)를 마주친 모든 스레드는, 현재의 스레드가 JMC 스텝핑이 아니더라도 JMC_Probe(226)을 호출하게 된다. 오직 JMC_Probe(226)가 스레드는 JMC 스텝핑이라고 결정한 경우에만 스레드가 멈춘다. 마찬가지로, 마주친 디버깅 탐지기(224)가 활성이 아니면, JMC_Probe(226)에 대한 호출을 완전히 건너뛰고, 스레드는 프로세스를 통해 정상처럼 실행을 계속한다(즉, 자유롭게 실행된다).
본 실시예에서, JMC_Probe(226) 함수에 대한 호출은 그것이 어떠한 파라미터도 취하지 않고, 반환 값도 갖지 않기 때문에 크기에 있어서 실질적으로 최적화된다. 이는 모든 "호출사이트(callsites)"(JMC_Probe 함수(226)에 대해 각각의 호출이 발생하는 위치)의 최적화를 제공한다. 그러므로, 디버깅 탐지기(224)로부터 JMC_Probe로의 호출이 탐지기로부터 발생하면(예컨대 *pFlag != 0의 경우), 그 호출은 부담이 큰 호출(heavy-weight call)이 아닐 것이다. 이는 위의 호출이 스택으로의/스택으로부터의 푸싱 및 풀링 함수 파라미터(pushing and pulling function parameter)를 요구하지 않음을 의미하는데, 이는 파라미터를 푸시 및 풀하는 함수에 비하여 JMC_Probe 호출사이트가 상당히 부담이 적음(lightweight)을 차례로 의미한다. 비활성 탐지기(224)를 마주친 스레드가 겪는 유일한 프로세싱 오버헤드(overhead)는 (*pFlag를 통해) 플래그(222)를 평가하고, 삽입된 디버깅 탐지기(224) 이후의 다음 명령어로 점프하기 위해 걸리는 프로세싱이다. 이러한 방식으로, 기술된 JMC 디버깅 동작으로 인해, 스레드들은 관심 코드를 마주칠 때까지 모든 비관심 코드에 대하여 실질적으로 완전한 속도로 자유롭게 실행될 수 있다.
본 실시예에서, 런타임(208)은 실행 코드 및 자신이 실행될 가상 실행 환경(virtual execution environment)에 대한 명세(specification)를 제공하는 공용 언어 기반(Common Language Infrastructure; CLI)에 기초한다. 그러므로, 도 2에 개별적으로 도시되어 있지만, 프로세스(208) 및 런타임(202)은 동일한 실행 환경의 일부이다(즉, 프로세스(202)가 런타임(208)을 호스팅함).
예시적인 절차
도 3은 JMC 디버깅을 위한 예시적인 절차(300)를 도시한다. 논의를 위해, 절차적인 동작은 도 1 과 도 2의 프로그램 모듈 및 데이터 특징을 참조하여 기술된다. 블록(302)에서 디버거(206; 도 2)는 관심 있는 컴퓨터 프로그래밍 구성물(예컨대, 개체 메소드 및/또는 정적 함수)을 식별한다. 일 실시예에서, 이는 사용자 입력 인터페이스(144; 도 1)로의 사용자 입력을 통해 달성된다. 예컨대, 사용자는 디버깅 서비스에 의해 다이얼로그 박스에 디스플레이된 다수의 메소드들 중의 특정한 하나를 (예컨대, 위치 지정 장치, 키보드, 음성 인식 기술을 통해) 선택하거나, 명령 라인 인터페이스 등에 프로그래밍 구성물의 이름을 타이핑하여 삽입할 수 있다. 이러한 사용자 입력은 관심 코드 목록/ID들(212; 도 2)에서 절약되는데, 이는 관심 있는 프로그래밍 구성물(즉, 관심 코드)을 식별하기 위하여 런타임 컴파일러(220; 도 2)에 의해 판독된다.
블록(304)에서, 디버거(206; 도 2)는 도 2의 JIT 컴파일러(220)와 같은 컴파일러에게, 컴파일 동작 동안 컴퓨터 프로그램의 각각의 프로그래밍 구성물에 JMC 가능 컴포넌트들(222 및 224; JMC enabling components)을 자동적으로 삽입하도록 명령한다. 본 구현에서, JIT 컴파일러(220)는 어셈블리를 컴파일하여 원시 코드(210; 도 2)를 생성하는데, 각각의 플래그들(222) 및 디버깅 탐지기들(224)이원시 코드에 자동으로 삽입된다. 블록(306)에서, 원시 코드(210; 도 2)가 디버거(206)의 제어 하에 프로세스(202; 도 2)로서 실행된다. 프로세스(202)는 프로세스의 특정 구현의 함수로서 임의의 수의 실행 스레드를 포함한다.
블록(308)에서, 디버거(206; 도 2)는 사용자가 JMC 스텝핑 명령(228; 도 2)의 입력을 통해 프로세스(202)에 걸쳐 스레드를 JMC 스텝핑 시키는 것을 허용한다. 스레드가 JMC 스텝핑 중이므로, 그 스레드는 "관심 스레드"라고 불린다. 프로세스(202)는 멀티 스레드일 수도 있고, ("비관심 스레드"라고 불리는) JMC 스텝핑 중이 아닌 스레드를 포함할 수도 있다. 관심 스레드는 비관심 코드(즉, 블록(302)에서 선택된 프로그래밍 구성물들 중의 선택된/개별적인 것들에 의해 식별된 관심 코드에 대응되지 않는 임의의 코드)에 대해 (멈추지 않고) 자유롭게 실행된다. 관심 스레드는 활성 디버깅 탐지기(224)를 처음으로 마주칠 때마다 디버깅 서비스(214)에 의해 자동적으로 멈추어진다. 프로세스(202; 도 2)의 스레드가 관심 스레드인지 그리고 관심 스레드가 선택된 프로그래밍 구성물들 중의 하나에 있는 코드를 실행/액세스하는지에 대한 판단은 런타임에 마주친 디버깅 탐지기(224)에 의해 결정된다. 그러므로, 모든 비JMC 스텝핑 스레드(들)는 관심 및 비관심 코드 모두에서 모든 마주치는 디버깅 탐지기(들)(224)에 대해 자유롭게 실행된다.
결론
기술된 시스템 및 방법은 JMC 디버깅을 제공한다. 시스템 및 방법이 구조적특징 및 방법론적 동작에 특정한 언어로 기술되었더라도, 첨부된 청구항에 정의된 발명의 내용은 기술된 동작 또는 특정한 특징에 반드시 제한되는 것은 아니다. 오히려, 특정한 특징 및 동작은 청구된 발명을 구현하기 위한 예시적인 형태로 공개된다.
발명의 다양한 실시예는 디버깅 애플리케이션(디버거)이 어셈블리 내의 임의의 메소드를 관심 있는 것으로 표시하는 것을 허용한다. 어셈블리로부터 원시 코드를 생성하기 위한 JIT 컴파일러 동작 동안, 디버깅 탐지기가 자동적으로 관심 메소드에 삽입된다. 디버거를 사용하여, 사용자는 디버깅을 위해 원시 코드를 프로세스로 적재한다. JMC 스텝핑 동작에 응답하여, JMC 스텝핑 스레드(들)가 관심 메소드를 마주치는 경우에만, 프로세스 실행이 자동적으로 멈춘다. 모든 비JMC 스텝핑 스레드는 관심 및 비관심 코드에 대해 자유롭게 실행된다. 이는 사용자가 관심 코드에 수동으로 중단점을 설정하지 않아도 될 뿐만 아니라, 프로그래머가 관심 코드에 도달하기 위해 비관심 코드를 힘들여 나아가지(즉, 전통적인 스텝핑 동작을 수행하지) 않아도 됨을 의미한다.

Claims (33)

  1. JMC(Just-My-Code) 디버깅을 위한 컴퓨터 프로그램 명령어들을 포함하는 컴퓨터 판독 가능 기록 매체에 있어서, 상기 컴퓨터 프로그램 명령어들은
    관심 코드(interesting code)를 나타내는 각각의 프로그래밍 구성물들(programming constructs)에 디버깅 탐지기들(debugging probes)을 자동으로 삽입하는 동작 - 상기 디버깅 탐지기들은 원시 코드(native code)를 생성하기 위한 컴퓨터 컴퓨터-프로그램 컴파일링 동작들 동안에 삽입됨 - ; 및
    상기 원시 코드를 프로세스로서 실행하는 동작 - 상기 프로세스는 JMC 스텝핑 동작(JMC step operation) 동안 비관심 코드(uninteresting code)에 대해 자유롭게 실행되는 실행(execution)의 하나 이상의 스레드(thread)를 포함하는데, 상기 하나 이상의 스레드 중의 하나의 스레드는, 오직 상기 스레드가 상기 프로세스를 통해 JMC 스텝핑 중인 동안 상기 디버깅 탐지기들 중의 활성인 하나(active one)를 마주치는 경우, 상기 관심 코드에서 멈춰짐 -
    을 위한 프로세서에 의해 실행 가능한 컴퓨터 판독 가능 기록 매체.
  2. 제1항에 있어서, 상기 각각의 프로그래밍 구성물들은 클래스 메소드들(class methods) 및/또는 정적 함수들(static functions)인 컴퓨터 판독 가능 기록 매체.
  3. 제1항에 있어서, JMC 스텝핑은 디버거에 의한 JMC 스텝-인(JMC step-in),JMC 스텝-아웃(JMC step-out) 또는 JMC 스텝-오버(JMC step-over) 명령의 발행(issuance)을 포함하는 컴퓨터 판독 가능 기록 매체.
  4. 제1항에 있어서, 각각의 디버깅 탐지기는 컴파일 시 상수(compile time constant) 및 디버깅 서비스에 대한 호출을 포함하고, 상기 컴퓨터 프로그램 명령어들은
    상기 활성인 하나를 마주치는 것에 응답하여, 실행의 상기 하나 이상의 스레드 중의 임의의 것이 JMC 스텝핑 중인지 결정하기 위하여 상기 활성인 하나에 대응되는 상기 컴파일 시 상수를 역참조하는(dereferencing) 동작;
    적어도 하나의 스레드가 JMC 스테핑 중이면, 상기 스레드가 JMC 스테핑 중인지 결정하기 위하여 상기 디버깅 서비스를 호출하는 동작;
    상기 스레드가 JMC 스테핑 중이라고 결정하는 것에 응답하여, 상기 활성인 하나 이후의 코드 라인에서 상기 스레드를 멈추는 동작; 및
    상기 스레드가 JMC 스텝핑 중이 아니라고 결정하는 것에 응답하여, 상기 스레드를 멈추기 위하여 중단점(breakpoint)을 상기 코드에 자동으로 삽입하지 않는 동작
    을 위한 명령어들을 더 포함하는 컴퓨터 판독 가능 기록 매체.
  5. 제1항에 있어서, 각각의 디버깅 탐지기는 컴파일 시 상수 및 디버깅 서비스에 대한 호출을 포함하고, 상기 컴퓨터 프로그램 명령어들은
    상기 활성인 하나를 마주치는 것에 응답하여, 실행의 상기 하나 이상의 스레드 중의 임의의 것이 JMC 스텝핑 중인지 결정하기 위하여 상기 활성인 하나에 대응되는 상기 컴파일 시 상수를 역참조하는 동작;
    적어도 하나의 스레드가 JMC 스텝핑 중이면, 상기 스레드가 JMC 스텝핑 중인지 결정하기 위하여 상기 디버깅 서비스를 호출하는 동작; 및
    상기 스레드가 JMC 스텝핑 중이라고 결정하는 것에 응답하여:
    상기 활성인 하나 이후의 코드 라인에서 상기 스레드를 멈추는 동작;
    대응되는 중단점을 제거하는 동작; 및
    상기 디버깅 탐지기들의 각각의 탐지기를 비활성화시키는(de-activating) 동작
    을 위한 명령어들을 더 포함하는 컴퓨터 판독 가능 기록 매체.
  6. 제1항에 있어서, 각각의 디버깅 탐지기는 컴파일 시 상수 및 디버깅 서비스에 대한 호출을 포함하고, 상기 컴퓨터 프로그램 명령어들은
    상기 활성인 하나를 마주치는 것에 응답하여, 실행의 상기 하나 이상의 스레드 중의 임의의 것이 JMC 스텝핑 중인지 결정하기 위하여 상기 활성인 하나에 대응되는 상기 컴파일 시 상수를 역참조하는 동작;
    적어도 하나의 스레드가 JMC 스텝핑 중이면, 상기 스레드가 JMC 스텝핑 중인지 결정하기 위하여 상기 디버깅 서비스를 호출하는 동작; 및
    상기 스레드가 JMC 스텝-인 중이라고 결정하는 것에 응답하여, 상기 스레드가 JMC 스텝-인 중인 프로그래밍 구성물에 대한 호출의 바로 이후의 코드 라인에 중단점을 위치시키는 동작
    을 위한 명령어들을 더 포함하는 컴퓨터 판독 가능 기록 매체.
  7. 제1항에 있어서, 각각의 디버깅 탐지기는 컴파일 시 상수 및 디버깅 서비스에 대한 호출을 포함하고, 상기 컴퓨터 프로그램 명령어들은
    상기 활성인 하나를 마주치는 것에 응답하여, 실행의 상기 하나 이상의 스레드 중의 임의의 것이 JMC 스텝핑 중인지 결정하기 위하여 상기 활성인 하나에 대응되는 상기 컴파일 시 상수를 역참조하는 동작;
    적어도 하나의 스레드가 JMC 스텝핑 중이면, 상기 스레드가 JMC 스텝핑 중인지 결정하기 위하여 상기 디버깅 서비스를 호출하는 동작; 및
    상기 스레드가 JMC 스텝-아웃 중이라고 결정하는 것에 응답하여:
    관심 프로그래밍 구성물(interesting programming construct)로의 제1 스택 프레임의 반환 주소(return address of a first stack frame)를 식별하는 동작; 및
    상기 반환 주소에 중단점을 삽입하는 동작
    을 위한 명령어들을 더 포함하는 컴퓨터 판독 가능 기록 매체.
  8. 제1항에 있어서, 각각의 디버깅 탐지기는 컴파일 시 상수 및 디버깅 서비스에 대한 호출을 포함하고, 상기 컴퓨터 프로그램 명령어들은
    상기 활성인 하나를 마주치는 것에 응답하여, 실행의 상기 하나 이상의 스레드 중의 임의의 것이 JMC 스텝핑 중인지 결정하기 위하여 상기 활성인 하나에 대응되는 상기 컴파일 시 상수를 역참조하는 동작;
    적어도 하나의 스레드가 JMC 스텝핑 중이면, 상기 스레드가 JMC 스텝핑 중인지 결정하기 위하여 상기 디버깅 서비스를 호출하는 동작; 및
    상기 스레드가 JMC 스텝-오버 중이라고 결정하는 것에 응답하여:
    상기 스레드가 메소드 종단 근처에 있는지 결정하는 동작; 및
    결정하는 것에 응답하여, 상기 스레드가 메소드 종단 근처에 있으면, 실행되는 다음 관심 코드의 제1 라인에서 상기 스레드를 멈추는 동작
    을 위한 명령어들을 더 포함하는 컴퓨터 판독 가능 기록 매체.
  9. 제1항에 있어서, 상기 컴퓨터 프로그램 명령어들은 상기 프로그래밍 구성물들 중의 특정한 것으로서 상기 관심 코드를 식별하기 위한 명령어들을 더 포함하는 컴퓨터 판독 가능 기록 매체.
  10. 제9항에 있어서, 상기 프로그래밍 구성물들 중의 상기 특별한 것은 사용자 인터페이스, 명령 라인 및/또는 설정 파일 데이터 입력(configuration file data input)을 통해 식별되는 컴퓨터 판독 가능 기록 매체.
  11. JMC 디버깅을 위한 방법에 있어서,
    관심 코드를 나타내는 각각의 프로그래밍 구성물들에 디버깅 탐지기들을 자동으로 삽입하는 단계 - 상기 디버깅 탐지기들은 원시 코드를 생성하기 위한 컴퓨터 컴퓨터-프로그램 컴파일링 동작들 동안에 삽입됨 -;
    상기 원시 코드를 프로세스로서 실행하는 단계 - 상기 프로세스는 JMC 스텝 동작 동안에 비관심 코드에 대해 자유롭게 실행되는 실행의 하나 이상의 스레드를 포함하며, 상기 하나 이상의 스레드 중의 하나의 스레드는, 오직 상기 스레드가 상기 프로세스를 통해 JMC 스텝핑 중인 동안 상기 디버깅 탐지기들 중의 활성인 하나를 마주치는 경우, 상기 관심 코드에서 멈추어짐 -;
    를 포함하고, 여기서, JMC 스텝핑은 JMC 스텝-인, JMC 스텝-아웃 또는 JMC 스텝-오버 동작을 포함하는 방법.
  12. 제11항에 있어서, 상기 각각의 프로그래밍 구성물들은 클래스 메소드들 및/또는 정적 함수들인 방법.
  13. 제11항에 있어서, 각각의 디버깅 탐지기는 컴파일 시 상수(compile-time constant) 및 디버깅 서비스에 대한 호출을 포함하고,
    상기 활성인 하나를 마주치는 것에 응답하여, 실행의 상기 하나 이상의 스레드 중의 임의의 것이 JMC 스텝핑 중인지 결정하기 위하여 상기 활성인 하나에 대응되는 상기 컴파일 시 상수를 역참조하는 단계;
    적어도 하나의 스레드가 JMC 스텝핑 중이면, 상기 스레드가 JMC 스텝핑 중인지 결정하기 위하여 상기 디버깅 서비스를 호출하는 단계;
    상기 스레드가 JMC 스텝핑 중이라고 결정하는 것에 응답하여, 상기 활성인 하나 이후의 코드 라인에서 상기 스레드를 멈추는 단계; 및
    상기 스레드가 JMC 스텝핑 중이 아니라고 결정하는 것에 응답하여, 상기 스레드를 멈추기 위하여 중단점을 상기 코드에 자동으로 삽입하지 않는 단계
    를 더 포함하는 방법.
  14. 제11항에 있어서, 각각의 디버깅 탐지기는 컴파일 시 상수 및 디버깅 서비스에 대한 호출을 포함하고,
    상기 활성인 하나를 마주치는 것에 응답하여, 실행의 상기 하나 이상의 스레드 중의 임의의 것이 JMC 스텝핑 중인지 결정하기 위하여 상기 활성인 하나에 대응되는 상기 컴파일 시 상수를 역참조하는 단계;
    적어도 하나의 스레드가 JMC 스텝핑 중이면, 상기 스레드가 JMC 스텝핑 중인지 결정하기 위하여 상기 디버깅 서비스를 호출하는 단계; 및
    상기 스레드가 JMC 스텝핑 중이라고 결정하는 것에 응답하여:
    상기 활성인 하나 이후의 코드 라인에서 상기 스레드를 멈추는 단계;
    대응되는 중단점을 제거하는 단계; 및
    상기 디버깅 탐지기들의 각각의 탐지기를 비활성화 시키는 단계
    를 더 포함하는 방법.
  15. 제11항에 있어서, 각각의 디버깅 탐지기는 컴파일 시 상수 및 디버깅 서비스에 대한 호출을 포함하고,
    상기 활성인 하나를 마주치는 것에 응답하여, 실행의 상기 하나 이상의 스레드 중의 임의의 것이 JMC 스텝핑 중인지 결정하기 위하여 상기 활성인 하나에 대응되는 상기 컴파일 시 상수를 역참조하는 단계;
    적어도 하나의 스레드가 JMC 스텝핑 중이면, 상기 스레드가 JMC 스텝핑 중인지 결정하기 위하여 상기 디버깅 서비스를 호출하는 단계; 및
    상기 스레드가 JMC 스텝-인 중이라고 결정하는 것에 응답하여, 상기 스레드가 JMC 스텝-인 중인 프로그래밍 구성물에 대한 호출의 바로 이후의 코드 라인에 중단점을 위치시키는 단계
    를 더 포함하는 방법.
  16. 제11항에 있어서, 각각의 디버깅 탐지기는 컴파일 시 상수 및 디버깅 서비스에 대한 호출을 포함하고,
    상기 활성인 하나를 마주치는 것에 응답하여, 실행의 상기 하나 이상의 스레드 중의 임의의 것이 JMC 스텝핑 중인지 결정하기 위하여 상기 활성인 하나에 대응되는 상기 컴파일 시 상수를 역참조하는 단계;
    적어도 하나의 스레드가 JMC 스텝핑 중이면, 상기 스레드가 JMC 스텝핑 중인지 결정하기 위하여 상기 디버깅 서비스를 호출하는 단계; 및
    상기 스레드가 JMC 스텝-아웃 중이라고 결정하는 것에 응답하여:
    관심 프로그래밍 구성물로의 제1 스택 프레임의 반환 주소를 식별하는 단계; 및
    상기 반환 주소에 중단점을 삽입하는 단계
    를 더 포함하는 방법.
  17. 제11항에 있어서, 각각의 디버깅 탐지기는 컴파일 시 상수 및 디버깅 서비스에 대한 호출을 포함하고,
    상기 활성인 하나를 마주치는 것에 응답하여, 실행의 상기 하나 이상의 스레드 중의 임의의 것이 JMC 스텝핑 중인지 결정하기 위하여 상기 활성인 하나에 대응되는 상기 컴파일 시 상수를 역참조하는 단계;
    적어도 하나의 스레드가 JMC 스텝핑 중이면, 상기 스레드가 JMC 스텝핑 중인지 결정하기 위하여 상기 디버깅 서비스를 호출하는 단계; 및
    상기 스레드가 JMC 스텝-오버 중이라고 결정하는 것에 응답하여:
    상기 스레드가 메소드 종단 근처에 있는지 결정하는 단계; 및
    결정하는 것에 응답하여, 상기 스레드가 메소드 종단 근처에 있으면, 실행되는 다음 관심 코드의 제1 라인에서 상기 스레드를 멈추는 단계
    를 더 포함하는 방법.
  18. 제11항에 있어서, 상기 방법은 상기 프로그래밍 구성물들 중의 특정한 것으로서 상기 관심 코드를 식별하는 단계를 더 포함하는 방법.
  19. JMC 디버깅을 위한 컴퓨팅 장치에 있어서,
    프로세서; 및
    상기 프로세서에 연결된 메모리를 포함하고, 상기 메모리는
    관심 코드를 나타내는 각각의 프로그래밍 구성물들에 디버깅 탐지기들을 자동으로 삽입하는 동작 - 상기 디버깅 탐지기들은 원시 코드를 생성하기 위한 컴퓨터 컴퓨터-프로그램 컴파일링 동작들 동안에 삽입되며 상기 프로그래밍 구성은 클래스 메소드들 및/또는 정적 함수들을 포함함 -; 및
    상기 원시 코드를 프로세스로서 실행하는 동작 - 상기 프로세스는 JMC 스텝 동작 동안에 비관심 코드에 대해 자유롭게 실행되는 실행의 하나 이상의 스레드를 포함하며 상기 하나 이상의 스레드 중의 하나의 스레드는, 오직 상기 스레드가 상기 프로세스를 통해 JMC 스텝핑 중인 동안 상기 디버깅 탐지기들 중의 활성인 하나를 마주치는 경우, 상기 관심 코드에서 멈추어짐 -
    을 위한, 상기 프로세서에 의해 실행 가능한 컴퓨터 프로그램 명령어들을 포함하는 컴퓨팅 장치.
  20. 제19항에 있어서, JMC 스텝핑은 디버거에 의한 JMC 스텝-인, JMC 스텝-아웃 또는 JMC 스텝-오버 명령의 발행을 포함하는 컴퓨팅 장치.
  21. 제19항에 있어서, 각각의 디버깅 탐지기는 컴파일 시 상수 및 디버깅 서비스에 대한 호출을 포함하고, 상기 컴퓨터 프로그램 명령어들은
    상기 활성인 하나를 마주치는 것에 응답하여, 실행의 상기 하나 이상의 스레드 중의 임의의 것이 JMC 스텝핑 중인지 결정하기 위하여 상기 활성인 하나에 대응되는 상기 컴파일 시 상수를 역참조하는 동작;
    적어도 하나의 스레드가 JMC 스텝핑 중이면, 상기 스레드가 JMC 스텝핑 중인지 결정하기 위하여 상기 디버깅 서비스를 호출하는 동작;
    상기 스레드가 JMC 스텝핑 중이라고 결정하는 것에 응답하여, 상기 활성인 하나 이후의 코드 라인에서 상기 스레드를 멈추는 동작; 및
    상기 스레드가 JMC 스텝핑 중이 아니라고 결정하는 것에 응답하여, 상기 스레드를 멈추기 위하여 중단점을 상기 코드에 자동으로 삽입하지 않는 동작
    을 위한 명령어들을 더 포함하는 컴퓨팅 장치.
  22. 제19항에 있어서, 각각의 디버깅 탐지기는 컴파일 시 상수 및 디버깅 서비스에 대한 호출을 포함하고, 상기 컴퓨터 프로그램 명령어들은
    상기 활성인 하나를 마주치는 것에 응답하여, 실행의 상기 하나 이상의 스레드 중의 임의의 것이 JMC 스텝핑 중인지 결정하기 위하여 상기 활성인 하나에 대응되는 상기 컴파일 시 상수를 역참조하는 동작;
    적어도 하나의 스레드가 JMC 스텝핑 중이면, 상기 스레드가 JMC 스텝핑 중인지 결정하기 위하여 상기 디버깅 서비스를 호출하는 동작; 및
    상기 스레드가 JMC 스텝핑 중이라고 결정하는 것에 응답하여:
    상기 활성인 하나 이후의 코드 라인에서 상기 스레드를 멈추는 동작;
    대응되는 중단점을 제거하는 동작; 및
    상기 디버깅 탐지기들의 각각의 탐지기를 비활성화시키는 동작
    을 위한 명령어들을 더 포함하는 컴퓨팅 장치.
  23. 제19항에 있어서, 각각의 디버깅 탐지기는 컴파일 시 상수 및 디버깅 서비스에 대한 호출을 포함하고, 상기 컴퓨터 프로그램 명령어들은
    상기 활성인 하나를 마주치는 것에 응답하여, 실행의 상기 하나 이상의 스레드 중의 임의의 것이 JMC 스텝핑 중인지 결정하기 위하여 상기 활성인 하나에 대응되는 상기 컴파일 시 상수를 역참조하는 동작;
    적어도 하나의 스레드가 JMC 스텝핑 중이면, 상기 스레드가 JMC 스텝핑 중인지 결정하기 위하여 상기 디버깅 서비스를 호출하는 동작; 및
    상기 스레드가 JMC 스텝-인 중이라고 결정하는 것에 응답하여, 상기 스레드가 JMC 스텝-인 중인 프로그래밍 구성물에 대한 호출의 바로 이후의 코드 라인에 중단점을 위치시키는 동작
    을 위한 명령어들을 더 포함하는 컴퓨팅 장치.
  24. 제19항에 있어서, 각각의 디버깅 탐지기는 컴파일 시 상수 및 디버깅 서비스에 대한 호출을 포함하고, 상기 컴퓨터 프로그램 명령어들은
    상기 활성인 하나를 마주치는 것에 응답하여, 실행의 상기 하나 이상의 스레드 중의 임의의 것이 JMC 스텝핑 중인지 결정하기 위하여 상기 활성인 하나에 대응되는 상기 컴파일 시 상수를 역참조하는 동작;
    적어도 하나의 스레드가 JMC 스텝핑 중이면, 상기 스레드가 JMC 스텝핑 중인지 결정하기 위하여 상기 디버깅 서비스를 호출하는 동작; 및
    상기 스레드가 JMC 스텝-아웃 중이라고 결정하는 것에 응답하여:
    관심 프로그래밍 구성물로의 제1 스택 프레임의 반환 주소를 식별하는 동작; 및
    상기 반환 주소에 중단점을 삽입하는 동작
    을 위한 명령어들을 더 포함하는 컴퓨팅 장치.
  25. 제19항에 있어서, 각각의 디버깅 탐지기는 컴파일 시 상수 및 디버깅 서비스에 대한 호출을 포함하고, 상기 컴퓨터 프로그램 명령어들은
    상기 활성인 하나를 마주치는 것에 응답하여, 실행의 상기 하나 이상의 스레드 중의 임의의 것이 JMC 스텝핑 중인지 결정하기 위하여 상기 활성인 하나에 대응되는 상기 컴파일 시 상수를 역참조하는 동작;
    적어도 하나의 스레드가 JMC 스텝핑 중이면, 상기 스레드가 JMC 스텝핑 중인지 결정하기 위하여 상기 디버깅 서비스를 호출하는 동작; 및
    상기 스레드가 JMC 스텝-아웃 중이라고 결정하는 것에 응답하여:
    상기 스레드가 메소드 종단 근처에 있는지 결정하는 동작; 및
    결정하는 것에 응답하여, 상기 스레드가 메소드 종단 근처에 있으면,실행되는 다음 관심 코드의 제1 라인에서 상기 스레드를 멈추는 동작
    을 위한 명령어들을 더 포함하는 컴퓨팅 장치.
  26. 제19항에 있어서, 상기 컴퓨터 프로그램 명령어들은 상기 프로그래밍 구성물들 중의 특정한 것으로서 상기 관심 코드를 식별하기 위한 명령어들을 더 포함하는 컴퓨팅 장치.
  27. JMC 디버깅을 위한 컴퓨팅 장치에 있어서,
    관심 코드를 나타내는 각각의 프로그래밍 구성물들에 디버깅 탐지기들을 자동으로 삽입하기 위한 수단 - 상기 디버깅 탐지기들은 원시 코드를 생성하기 위한 컴퓨터 컴퓨터-프로그램 컴파일링 동작들 동안에 삽입되며, 상기 프로그래밍 구성은 클래스 메소드들 및/또는 정적 함수들을 포함함 -; 및
    상기 원시 코드를 프로세스로서 실행하기 위한 수단 - 상기 프로세스는 JMC 스텝 동작 동안에 비관심 코드에 대해 자유롭게 실행되는 실행의 하나 이상의 스레드를 포함하며, 상기 하나 이상의 스레드 중의 하나의 스레드는, 오직 상기 스레드가 상기 프로세스에 대해 JMC 스텝핑 중인 동안 상기 디버깅 탐지기들 중의 활성인 하나를 마주치는 경우, 상기 관심 코드에서 멈추어짐 -
    을 포함하는 컴퓨팅 장치.
  28. 제27항에 있어서, JMC 스텝핑은 JMC 스텝-인, JMC 스텝-아웃 또는 JMC 스텝-오버 동작을 포함하는 컴퓨팅 장치.
  29. 제27항에 있어서,
    상기 활성인 하나를 마주치는 것에 응답하여, 실행의 상기 하나 이상의 스레드 중의 임의의 것이 JMC 스텝핑 중인지를 결정하기 위한 수단;
    적어도 하나의 스레드가 JMC 스텝핑 중이면, 상기 스레드가 JMC 스텝핑 중인지 결정하기 위한 수단;
    상기 스레드가 JMC 스텝핑 중이라고 결정하는 것에 응답하여, 상기 활성인 하나 이후의 코드 라인에서 상기 스레드를 멈추기 위한 수단; 및
    상기 스레드가 JMC 스텝핑 중이 아니라고 결정하는 것에 응답하여, 상기 관심 코드에서 상기 스레드를 자동으로 멈추지 않기 위한 수단
    을 더 포함하는 컴퓨팅 장치.
  30. 제27항에 있어서,
    상기 활성인 하나를 마주치는 것에 응답하여, 실행의 상기 하나 이상의 스레드 중의 임의의 것이 JMC 스텝핑 중인지를 결정하기 위한 수단;
    적어도 하나의 스레드가 JMC 스텝핑 중이면, 상기 스레드가 JMC 스텝핑 중인지 결정하기 위한 수단;
    상기 스레드가 JMC 스텝-인 중이라고 결정하는 것에 응답하여, 상기 스레드가 JMC 스텝-인 중인 프로그래밍 구성물에 대한 호출의 바로 이후의 코드 라인에서상기 스레드를 멈추기 위한 수단
    을 더 포함하는 컴퓨팅 장치.
  31. 제27항에 있어서,
    상기 활성인 하나를 마주치는 것에 응답하여, 실행의 상기 하나 이상의 스레드 중의 임의의 것이 JMC 스텝핑 중인지를 결정하기 위한 수단;
    적어도 하나의 스레드가 JMC 스텝핑 중이면, 상기 스레드가 JMC 스텝핑 중인지 결정하기 위한 수단;
    상기 스레드가 JMC 스텝-아웃 중이라고 결정하는 것에 응답하여:
    관심 프로그래밍 구성물로의 제1 스택 프레임의 반환 주소를 식별하기 위한 수단; 및
    상기 반환 주소에서 상기 스레드를 멈추기 위한 수단
    을 더 포함하는 컴퓨팅 장치.
  32. 제27항에 있어서,
    상기 활성인 하나를 마주치는 것에 응답하여, 실행의 상기 하나 이상의 스레드 중의 임의의 것이 JMC 스텝핑 중인지를 결정하기 위한 수단;
    적어도 하나의 스레드가 JMC 스텝핑 중이면, 상기 스레드가 JMC 스텝핑 중인지 결정하기 위한 수단;
    상기 스레드가 JMC 스텝-오버 중이라고 결정하는 것에 응답하여:
    상기 스레드가 메소드 종단 근처에 있는지 결정하기 위한 수단; 및
    결정하는 것에 응답하여, 상기 스레드가 메소드 종단 근처에 있으면, 실행되는 다음 관심 코드의 제1 라인에서 상기 스레드를 멈추기 위한 수단
    을 더 포함하는 컴퓨팅 장치.
  33. 제27항에 있어서, 상기 프로그래밍 구성물들 중의 특정한 것으로서 상기 관심 코드를 식별하기 위한 수단을 더 포함하는 컴퓨팅 장치.
KR1020040026969A 2003-04-21 2004-04-20 Jmc 디버깅을 위한 시스템, 방법 및 컴퓨터 판독가능 기록 매체 KR100996807B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/419,384 2003-04-21
US10/419,384 US7401323B2 (en) 2003-04-21 2003-04-21 Just-My-Code debugging

Publications (2)

Publication Number Publication Date
KR20040091560A true KR20040091560A (ko) 2004-10-28
KR100996807B1 KR100996807B1 (ko) 2010-11-25

Family

ID=32990322

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020040026969A KR100996807B1 (ko) 2003-04-21 2004-04-20 Jmc 디버깅을 위한 시스템, 방법 및 컴퓨터 판독가능 기록 매체

Country Status (5)

Country Link
US (1) US7401323B2 (ko)
EP (1) EP1475714B1 (ko)
JP (1) JP4901075B2 (ko)
KR (1) KR100996807B1 (ko)
CN (1) CN100430904C (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101019938B1 (ko) * 2006-06-26 2011-03-09 가부시키가이샤 엔티티 도코모 문서들에 임베디드된 스크립트의 거동을 제한하는 프로그램인스트루멘테이션 방법 및 장치
KR20150132161A (ko) * 2013-03-15 2015-11-25 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 저스트 마이 코드를 이용하는 자바스크립트 디버깅 기법

Families Citing this family (57)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7143407B2 (en) * 2001-07-26 2006-11-28 Kyocera Wireless Corp. System and method for executing wireless communications device dynamic instruction sets
US7493615B2 (en) * 2003-05-01 2009-02-17 Sun Microsystems, Inc. Apparatus and method for synchronizing multiple threads in an out-of-order microprocessor
US20050071820A1 (en) * 2003-09-25 2005-03-31 International Business Machines Corporation Using a debugging framework to enforce best practices in program development
US20050120272A1 (en) * 2003-11-13 2005-06-02 Smith Zachary S. Systems and methods for determining bug ownership
US7647586B2 (en) * 2004-08-13 2010-01-12 Sun Microsystems, Inc. System and method for providing exceptional flow control in protected code through watchpoints
US7882492B2 (en) * 2004-09-17 2011-02-01 Oracle America, Inc. Intelligent computer program debugger, and system and method for implementing the same
US7457671B2 (en) 2004-09-30 2008-11-25 Rockwell Automation Technologies, Inc. Systems and methods that facilitate management of add-on instruction generation, selection, and/or monitoring during execution
US7493604B2 (en) * 2004-10-21 2009-02-17 Microsoft Corporation Conditional compilation of intermediate language code based on current environment
CN100345120C (zh) * 2004-12-24 2007-10-24 华为技术有限公司 一种利用编解码输出信息的方法
US20060161896A1 (en) * 2005-01-14 2006-07-20 International Business Machines Corporation Performing debug requests that are within the debug domain of a class loader
US7698691B2 (en) * 2005-09-20 2010-04-13 Microsoft Corporation Server application state
US20070074168A1 (en) * 2005-09-29 2007-03-29 International Business Machines Corporation Automated step type determination
US20070078538A1 (en) * 2005-09-30 2007-04-05 Omron Corporation Debug device
US20070168972A1 (en) * 2005-11-30 2007-07-19 International Business Machines Corporation Debugging a computer program
US7774761B2 (en) * 2005-12-27 2010-08-10 International Business Machines Corporation Use of memory watch points and a debugger to improve analysis of runtime memory access errors
CN100485636C (zh) * 2006-04-24 2009-05-06 华为技术有限公司 一种基于模型驱动进行电信级业务开发的调试方法及装置
US7716646B2 (en) * 2006-05-11 2010-05-11 Rekha Kaushik Loading a chain of processors from an XML file
US8225286B2 (en) * 2006-05-23 2012-07-17 Microsoft Corporation Debugging interpreted input
US8429613B2 (en) * 2006-10-31 2013-04-23 Microsoft Corporation Stepping and application state viewing between points
US7926036B2 (en) * 2007-04-26 2011-04-12 Microsoft Corporation Technologies for code failure proneness estimation
US8355706B2 (en) * 2007-07-20 2013-01-15 Broadcom Corporation Method and system for utilizing context data tags to catalog data in wireless system
US7882495B2 (en) * 2007-06-14 2011-02-01 Microsoft Corporation Bounded program failure analysis and correction
US8291381B2 (en) * 2007-09-27 2012-10-16 Microsoft Corporation Call stack parsing in multiple runtime environments
US20090132666A1 (en) * 2007-11-15 2009-05-21 Shahriar Rahman Method and apparatus for implementing a network based debugging protocol
US8191074B2 (en) 2007-11-15 2012-05-29 Ericsson Ab Method and apparatus for automatic debugging technique
CN101482845B (zh) * 2008-01-08 2011-08-10 国际商业机器公司 一种调用即时调试器的方法和系统
US8141056B2 (en) * 2008-04-03 2012-03-20 International Business Machines Corporation Just-in-time dynamic instrumentation
US8196107B2 (en) * 2008-06-19 2012-06-05 Microsoft Corporation Simulating stepping through interpreted code
US8683439B2 (en) * 2008-08-21 2014-03-25 International Business Machines Corporation System and process for debugging object-oriented programming code leveraging preprocessors
US8752020B2 (en) * 2008-08-21 2014-06-10 International Business Machines Corporation System and process for debugging object-oriented programming code leveraging runtime metadata
CN101739333B (zh) * 2008-11-25 2013-10-16 国际商业机器公司 应用程序的调试方法、调试工具及调试装置
US9632909B2 (en) * 2008-12-16 2017-04-25 Microsoft Technology Licensing, Llc Transforming user script code for debugging
US8732663B2 (en) * 2010-02-24 2014-05-20 Salesforce.Com, Inc. System, method and computer program product for providing automated testing by utilizing a preconfigured point of entry in a test or by converting a test to a predefined format
US20110321017A1 (en) * 2010-06-29 2011-12-29 International Business Machines Corporation Computer code debugging method and apparatus providing exception breakpoints
EP2477116A1 (en) * 2011-01-13 2012-07-18 Software AG Method and system for debugging a job running on a legacy system
US8756572B2 (en) 2011-03-22 2014-06-17 Microsoft Corporation Debugger-set identifying breakpoints after coroutine yield points
US8661413B2 (en) * 2011-04-13 2014-02-25 International Business Machines Corporation Impact indication of thread-specific events in a non-stop debugging environment
US8893090B2 (en) 2011-04-15 2014-11-18 Microsoft Corporation Stepping out of an asynchronous method into its continuation in a debugger
US8918767B2 (en) 2011-06-16 2014-12-23 Microsoft Corporation Pattern-based compilation of asynchronous consumption
US9009678B2 (en) * 2011-06-28 2015-04-14 International Business Machines Corporation Software debugging with execution match determinations
JP5785474B2 (ja) * 2011-10-27 2015-09-30 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation プログラムのデバッグ方法、デバッグ装置、およびデバッグ支援gui
US8776025B2 (en) * 2011-11-04 2014-07-08 International Business Machines Corporation Integrated debugger and code coverage tool
US9087153B2 (en) 2011-11-04 2015-07-21 International Business Machines Corporation Code coverage framework
EP2608057A1 (en) 2011-12-23 2013-06-26 Software AG Computer-implemented system for analyzing an instance of a process
US9274931B2 (en) 2013-05-06 2016-03-01 International Business Machines Corporation Inserting implicit sequence points into computer program code to support debug operations
US10127138B2 (en) * 2013-06-06 2018-11-13 Microsoft Technology Licensing, Llc. Debugging native code by transitioning from execution in native mode to execution in interpreted mode
US9146834B2 (en) * 2013-08-22 2015-09-29 Oracle International Corporation Targeted cloud-based debugging
US9239774B2 (en) * 2014-01-15 2016-01-19 Microsoft Technology Licensing, Llc Classification of JavaScript code for debugging using just my code
US9424163B2 (en) * 2014-01-15 2016-08-23 Microsoft Technology Licensing, Llc Exception and debugging behaviors for JavaScript debugging using just my code
US10275234B2 (en) * 2015-05-28 2019-04-30 Sap Se Selective bypass of code flows in software program
US10579498B2 (en) * 2016-07-31 2020-03-03 Microsoft Technology Licensing, Llc. Debugging tool for a JIT compiler
US10162731B2 (en) 2017-01-23 2018-12-25 International Business Machines Corporation Conditional breakpoint on call stack during debugging at runtime
US10169197B2 (en) * 2017-01-24 2019-01-01 International Business Machines Corporation Temporary breakpoints during debug process
US10120656B1 (en) 2017-11-07 2018-11-06 Bank Of America Corporation Robotic process automation system for functional evaluation and improvement of back end instructional constructs
US10713145B2 (en) * 2018-01-05 2020-07-14 International Business Machines Corporation Automated debugging with combined static and dynamic analysis
US11436830B2 (en) 2020-03-11 2022-09-06 Bank Of America Corporation Cognitive robotic process automation architecture
US11294793B1 (en) * 2020-10-23 2022-04-05 UiPath Inc. Robotic process automation (RPA) debugging systems and methods

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2653411B2 (ja) * 1992-02-19 1997-09-17 工業技術院長 ブレークポイント設定方法
JPH0822401A (ja) * 1994-07-07 1996-01-23 Hitachi Ltd プログラム実行中断方法およびデバッギング装置
JPH09146776A (ja) * 1995-11-22 1997-06-06 Hitachi Ltd オブジェクト生成方法、及びデバッグ方法
JPH11194959A (ja) * 1997-12-26 1999-07-21 Nec Corp コンパイル方法もしくはコンパイルプログラムを記録したコンピュータ読みとり可能な記憶媒体
US6249907B1 (en) * 1998-03-24 2001-06-19 International Business Machines Corporation Method system and article of manufacture for debugging a computer program by encoding user specified breakpoint types at multiple locations in the computer program
JP3130884B2 (ja) * 1998-12-17 2001-01-31 日本電気アイシーマイコンシステム株式会社 デバッグ装置およびデバッグ方法
JP2001060161A (ja) * 1999-08-24 2001-03-06 Nec Ic Microcomput Syst Ltd デバッグ装置、方法及び記録媒体
US6681384B1 (en) * 1999-12-23 2004-01-20 International Business Machines Corporation Multi-threaded break-point
US6826746B2 (en) 2001-03-08 2004-11-30 International Business Machines Corporation Debugger probe for object oriented programming
US6931631B2 (en) * 2001-06-27 2005-08-16 International Business Machines Corporation Low impact breakpoint for multi-user debugging
US7134115B2 (en) * 2002-02-07 2006-11-07 Matsushita Electric Industrial Co., Ltd. Apparatus, method, and program for breakpoint setting
US20040123279A1 (en) * 2002-12-18 2004-06-24 International Business Machines Corporation Method and system for auto-instrumenting java applications through probe injection
US20040230955A1 (en) * 2003-02-26 2004-11-18 Bea Systems, Inc. System for multi-language debugging

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101019938B1 (ko) * 2006-06-26 2011-03-09 가부시키가이샤 엔티티 도코모 문서들에 임베디드된 스크립트의 거동을 제한하는 프로그램인스트루멘테이션 방법 및 장치
KR20150132161A (ko) * 2013-03-15 2015-11-25 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 저스트 마이 코드를 이용하는 자바스크립트 디버깅 기법

Also Published As

Publication number Publication date
JP2004326789A (ja) 2004-11-18
EP1475714B1 (en) 2016-11-16
US20040210876A1 (en) 2004-10-21
CN1540517A (zh) 2004-10-27
CN100430904C (zh) 2008-11-05
JP4901075B2 (ja) 2012-03-21
US7401323B2 (en) 2008-07-15
EP1475714A3 (en) 2008-07-16
KR100996807B1 (ko) 2010-11-25
EP1475714A2 (en) 2004-11-10

Similar Documents

Publication Publication Date Title
KR100996807B1 (ko) Jmc 디버깅을 위한 시스템, 방법 및 컴퓨터 판독가능 기록 매체
US7761855B2 (en) Computer program product and system for altering execution flow of a computer program
EP2359247B1 (en) Transforming user script code for debugging
US5761510A (en) Method for error identification in a program interface
US10169199B2 (en) Automatic model-specific debugger extensions
US20050223363A1 (en) Evaluation of a code segment
US6874140B1 (en) Debug annotations
JP2000181725A (ja) 実行可能なコ―ドを改変し、追加機能を付与するための方法およびシステム
US9367423B1 (en) Methods, systems, and articles of manufacture for using multiple modes during execution of a program
US20180107585A1 (en) Using edit and continue to dynamically set and unset optimizations in source code while debugging
JPH09325901A (ja) デバッギングを実施する方法
US7320121B2 (en) Computer-implemented system and method for generating embedded code to add functionality to a user application
US7694289B2 (en) Method for embedding object codes in source codes
US20090320007A1 (en) Local metadata for external components
US20080307397A1 (en) Program Analysis by Partial Emulation
Aktemur et al. Debugging SYCL programs on heterogeneous Intel® architectures
Bouraqadi et al. Test-driven development for generated portable Javascript apps
US20060174230A1 (en) Methods for hosting general purpose computer languages on speical purpose systems
US20030056197A1 (en) Method and apparatus to facilitate debugging computer code within an operating system kernel
JPH11110256A (ja) プログラムデバッグ装置、プログラムデバッグ方法及びその方法を記録したコンピュータ読取り可能な記録媒体
Wielemaker SWI-Prolog 3.2
Lee et al. Object-Oriented Programming
Olsson et al. Investigation of High-Level Language Support in a Resource-Constrained Embedded Environment
Apter Debug Interface for Multi-Aspect Debugging
Martorell et al. gtrace: function call and memory access traces of dynamically linked programs in IA-32 and IA-64 Linux

Legal Events

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

Payment date: 20131016

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20141017

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20151016

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20161019

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20171018

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20181018

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20191016

Year of fee payment: 10