KR101598819B1 - 타겟 독립적인 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체 - Google Patents

타겟 독립적인 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체 Download PDF

Info

Publication number
KR101598819B1
KR101598819B1 KR1020130148614A KR20130148614A KR101598819B1 KR 101598819 B1 KR101598819 B1 KR 101598819B1 KR 1020130148614 A KR1020130148614 A KR 1020130148614A KR 20130148614 A KR20130148614 A KR 20130148614A KR 101598819 B1 KR101598819 B1 KR 101598819B1
Authority
KR
South Korea
Prior art keywords
code
debugging information
intermediate language
language code
types
Prior art date
Application number
KR1020130148614A
Other languages
English (en)
Other versions
KR20150063798A (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 한국과학기술연구원
Priority to KR1020130148614A priority Critical patent/KR101598819B1/ko
Publication of KR20150063798A publication Critical patent/KR20150063798A/ko
Application granted granted Critical
Publication of KR101598819B1 publication Critical patent/KR101598819B1/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
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code

Landscapes

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

Abstract

코드 변환 방법은, 소스 코드에 사용되는 하나 이상의 타입(type)을 하나 이상의 지시자에 각각 매핑(mapping)시킨 타입 테이블(type table)을 생성하는 단계; 및 상기 소스 코드를 중간 언어(intermediate language)로 변환한 제1 코드 및 상기 소스 코드의 디버깅 정보에 대응되는 제2 코드를 포함하는 중간 언어 코드를 생성하는 단계를 포함할 수 있다. 상기 제2 코드는 상기 하나 이상의 지시자를 이용하여 상기 하나 이상의 타입에 관련된 디버깅 정보를 지시하도록 구성되어, 장치 또는 플랫폼(platform)에 독립적인 형태를 갖는다. 그 결과, 중간 언어 코드의 배포만으로 모든 타겟에 대응되는 디버깅 정보를 갖도록 실행파일을 생성할 수 있다.

Description

타겟 독립적인 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체{METHOD FOR CODE CONVERSION USING TARGET-INDEPENDENT DEBUGGING INFORMATION, APPARATUS AND COMPUTER-READABLE RECORDING MEDIUM WITH PROGRAM THEREFOR}
실시예들은 타겟 독립적인 디버깅(debugging) 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체에 대한 것이다. 보다 구체적으로는, 소스 코드의 디버깅 정보를 포함하는 중간 언어(intermediate language) 코드를 생성하되, 디버깅 정보를 타겟 독립적인 형태로 변환하도록 구성된 코드 변환 방법과, 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체에 관한 것이다.
프로그램(program)은 프로그래밍 언어(programming language)로 기입된다. 프로그래밍 언어는 컴퓨터에 의해 처리 및 실행될 수 있는 명령의 시퀀스(sequence)를 정의하는데 사용될 수 있는 임의의 인공 언어이다. 그러나, 프로그래밍 언어는 일반적으로 프로그래밍 언어를 사용하여 표현된 소스 코드로부터 컴퓨터 또는 데이터 처리 시스템이 작업하는데 필요한 기계 코드로의, 컴파일러(compiler)와 같은 또 다른 프로그램에 의한 번역 절차를 필요로 한다. 예컨대, C 언어 또는 C++ 언어 등의 프로그래밍 언어로 작성된 프로그램들은, 프로그램이 사용될 플랫폼(platform)에 맞게 실행파일의 형태로 변환될 수 있다.
프로그램밍 언어를 이용한 프로그램의 작성에는, 작성된 코드에 문제(bug)가 발생하였을 때 그 문제를 찾아서 수정하거나 회피하기 위한 디버깅(debugging) 과정이 요구된다. 디버거(debugger)는 이러한 디버깅 과정을 돕는 도구로서, 프로그램 코드의 특정 위치에 중단점(breakpoint)을 지정하여 프로그램의 실행을 정지시키고 메모리에 저장된 값을 살펴보는 등의 기능을 제공한다. 디버거에 의한 디버깅 과정을 원활하게 수행하기 위해서는, 프로그램의 소스 코드를 컴파일하는 과정에서 디버깅 정보가 포함되어야 한다.
한편, 최근들어 다양한 정보기기의 사용에 따른 다양한 플랫폼이 이용됨에 따라, 소스 코드를 특정 플랫폼에 의존적이지 않은 독립적인 중간 언어(intermediate language)나 실행파일의 형태로 변환하는 기술이 개발되고 있다. 그러나, 디버깅 정보는 소스 코드를 컴파일(compile)하는 시점에 지정된 타겟 플랫폼(platform)에 맞게 변환되어 생성되므로, 중간 언어 코드 및 실행파일에는 모두 특정 타겟에 대응되도록 생성된 디버깅 정보만이 저장된다. 따라서, 타겟 플랫폼에 달라질 경우 디버깅 정보를 이용하기 위해서는 소스 코드로부터 다시 컴파일하여야 하는 문제점이 있다.
공개특허공보 제10-2009-0004210호
본 발명의 일 측면에 따르면, 소스 코드로부터 타겟 독립적인 디버깅(debugging) 정보를 포함하는 중간 언어(intermediate language) 코드를 생성할 수 있는 코드 변환 방법과, 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체를 제공할 수 있다.
일 실시예에 따른 코드 변환 방법은, 소스 코드에 사용되는 하나 이상의 타입을 하나 이상의 지시자에 각각 매핑시킨 타입 테이블을 생성하는 단계; 및 상기 소스 코드를 중간 언어 코드로 변환한 제1 코드 및 상기 소스 코드의 디버깅 정보에 대응되는 제2 코드를 포함하는 중간 언어 코드를 생성하는 단계를 포함할 수 있다.
일 실시예에 따른 코드 변환 장치는, 소스 코드에 사용되는 하나 이상의 타입을 하나 이상의 지시자에 각각 매핑시킨 타입 테이블을 생성하는 타입 테이블 생성부; 및 상기 소스 코드를, 상기 소스 코드를 중간 언어 코드로 변환한 제1 코드 및 상기 소스 코드의 디버깅 정보에 대응되는 제2 코드를 포함하는 중간 언어 코드로 변환하는 제1 변환부를 포함할 수 있다.
이상의 코드 변환 방법 및 장치에서, 상기 제2 코드는 상기 하나 이상의 지시자를 이용하여 상기 하나 이상의 타입에 관련된 디버깅 정보를 지시하도록 구성될 수 있다.
일 실시예에 따른 컴퓨터로 판독 가능한 기록 매체에는, 데이터 처리 기기에 의해 전술한 코드 변환 방법을 수행하기 위한 컴퓨터 프로그램이 기록될 수 있다.
본 발명의 일 측면에 따르면, 소스 코드의 디버깅(debugging) 정보를 포함하는 중간 언어(intermediate language) 코드를 생성하되, 디버깅 정보를 타겟 독립적인 형태로 변환하여 중간 언어 코드를 생성할 수 있다. 따라서, 타겟 플랫폼(platform)이 달라지더라도 소스 코드로부터 다시 중간 언어 코드를 컴파일(compile)할 필요가 없으며, 타겟 독립적인 디버깅 정보를 갖는 중간 언어 코드를 배포하는 것만으로 모든 타겟 플랫폼에서 디버깅 정보를 포함하는 실행파일을 생성할 수 있다.
도 1은 일 실시예에 따른 코드 변환 장치의 개략적인 구성도이다.
도 2a는 종래의 중간 언어(intermediate language) 코드에 포함된 디버깅(debugging) 정보를 나타내는 개념도이다.
도 2b는 일 실시예에 따라 생성된 중간 언어 코드에 포함된 타겟 독립적인 디버깅 정보를 나타내는 개념도이다.
도 2c는 도 2b의 중간 언어 코드로부터 실행파일 생성 시의 변환을 나타내는 개념도이다.
도 3a는 또 다른 실시예에 따라 생성된 중간 언어 코드에 포함된 타겟 독립적인 디버깅 정보를 나타내는 개념도이다.
도 3b는 도 3a의 중간 언어 코드에서 디버깅 정보가 포함된 데이터 블록의 구성을 나타내는 개념도이다.
도 3c는 도 3a의 중간 언어 코드로부터 실행파일 생성 시의 변환을 나타내는 개념도이다.
이하에서, 도면을 참조하여 본 발명의 실시예들에 대하여 상세히 살펴본다.
도 1은 일 실시예에 따른 코드 변환 장치의 개략적인 구성도이다.
도 1을 참조하면, 코드 변환 장치는 개발자 단말기(10)를 포함할 수 있다. 본 명세서에 기술된 실시예는 전적으로 하드웨어이거나, 부분적으로 하드웨어이고 부분적으로 소프트웨어이거나, 또는 전적으로 소프트웨어인 측면을 가질 수 있다. 본 명세서에서 "부(unit)", "장치" 또는 "단말기" 등의 용어는 하드웨어 및 해당 하드웨어에 의해 구동되는 소프트웨어의 조합을 지칭하는 것으로 의도된다. 예를 들어, 하드웨어는 CPU 또는 다른 프로세서(processor)를 포함하는 데이터 처리 기기일 수 있다. 또한, 하드웨어에 의해 구동되는 소프트웨어는 실행중인 프로세스, 객체(object), 실행파일(executable), 실행 스레드(thread of execution), 프로그램(program) 등을 지칭할 수 있다.
개발자 단말기(10)는 개발자의 조작 또는 명령에 의해 프로그램 코드를 생성할 수 있으며, 통신망을 경유하여 각종 데이터를 송수신할 수 있는 임의의 단말기일 수 있다. 예컨대, 개발자 단말기(10)는 태블릿 PC(Tablet PC), 랩톱(Laptop), 개인용 컴퓨터(PC: Personal Computer), 스마트폰(Smart Phone), 개인휴대용 정보단말기(PDA: Personal Digital Assistant) 및 이동통신 단말기(Mobile Communication Terminal) 등 중 어느 하나일 수 있으나, 이에 한정되는 것은 아니다.
일 실시예에서, 개발자 단말기(10)는 프로그램의 소스 코드를 중간 언어(intermediate language) 코드로 변환하기 위한 타입 테이블(type table) 생성부(11) 및 제1 변환부(12)를 포함할 수 있다. 제1 변환부(12)는, 타입 테이블 생성부(11)에 의해 생성된 타입 테이블을 이용하여, 소스 코드가 중간 언어로 변환된 코드 및 소스 코드의 디버깅 정보를 포함하도록 중간 언어 코드를 생성할 수 있다. 이때, 디버깅 정보에서 소스 코드의 각 타입에 대한 디버깅 정보는 특정 플랫폼(platform)에 종속적이지 않은 지시자를 이용하여 기술되며, 이는 상세히 후술한다.
본 명세서에서 "중간 언어"란, 플랫폼의 CPU 종류(예컨대, x86, x64, ARM 등) 또는 운영체제의 종류(예컨대, 윈도우(Windows), 리눅스(Linux), OSX, iOS, 안드로이드(Android), 윈도우 모바일, 윈도우 폰 등)와 같은 플랫폼의 특성에 의존하지 않으며, 플랫폼에 대해 독립적인 형태의 언어를 의미한다. "중간 언어"로 기록된 코드는 추후 컴파일(compile) 시에 특정 플랫폼에 대응되는 바이너리 코드로 변환하여 실행하는 것이 가능하다. 예를 들어, 중간 언어 코드는 소정 규격의 가상머신(Virtual Machine; VM)에 의하여 실행되는 코드일 수 있다.
또한, 본 명세서에서 "디버깅 정보"란 프로그램 코드의 특정 위치에 중단점(breakpoint)을 지정하여 프로그램의 실행을 정지하고 프로그램 동작을 개발자가 살펴볼 수 있도록 하기 위하여 코드에 추가되는 정보를 지칭한다. 예컨대, 디버깅 정보에는 컴파일되는 코드에 관련된 위치 정보 및 변수 정보가 포함될 수 있다. 위치 정보는 코드에서 각 명령어나 변수가 위치하는 줄 및/또는 단락의 번호 등일 수 있으며, 변수 정보는 코드에 사용된 변수의 정의 및/또는 타입 정보 등일 수 있다.
컴파일러가 코드를 컴파일하는 과정에서 디버깅 정보가 코드에 추가되는데, 디버깅 정보를 이용하기 위해서는 디버깅 정보를 생성하는 컴파일러와 디버깅 정보를 이용하는 디버거가 서로 대응되어야 한다. 이와 관련하여 컴파일러와 디버거 사이에 사용되기 위한 디버깅 정보의 몇몇 표준 형식이 공지되어 있으며, 예컨대 DWARF 또는 Stabs 등이 있다. 그러나 실시예들에서 사용될 수 있는 디버깅 정보의 형식은 전술한 것에 한정되는 것은 아니다.
개발자 단말기(10)에는 입력부(미도시)를 통하여 소스 코드의 작성을 위한 사용자 입력이 수신될 수 있다. 입력부는 키보드, 마우스 또는 터치스크린(touchscreen) 등 사용자 입력을 수신할 수 있는 임의의 입력 장치로 구성될 수 있으며, 특정 장치에 한정되지 않는다. 개발자는 입력부를 이용하여 C, C++ 또는 그 외 다른 프로그래밍 언어로 프로그램의 소스 코드를 작성할 수 있다.
이후 개발자 단말기(10)에 소스 코드의 변환을 위한 명령이 입력되면, 타입 테이블 생성부(11)는 작성된 소스 코드에 사용된 타입들, 또는 소스 코드가 작성된 프로그래밍 언어에서 사용 가능한 타입들을 장치 독립적인 지시자에 매핑(mapping)시킨 타입 테이블을 생성할 수 있다. 이러한 타입 테이블은 타입 테이블 생성부(11)에 의해 미리 생성되거나, 또는 제1 변환부(12)에 의해 소스 코드를 중간 언어 코드로 변환하는 과정의 일부로서 타입 테이블 생성부(11)에 의하여 생성될 수 있다.
제1 변환부(12)는, 소스 코드가 중간 언어로 변환된 코드와 더불어 소스 코드에 대한 디버깅(debugging) 정보를 포함하도록 중간 언어 코드를 생성할 수 있다. 즉, 제1 변환부(12)는 소스 코드를 중간 언어 코드로 컴파일하되, 디버깅부(14)에서 사용되는 디버깅 정보 표준에 부합하도록 소스 코드에서 디버깅 정보를 추출하여 중간 언어 코드에 기록할 수 있다. 이때, 중간 언어 코드에서 소스 코드의 각 타입에 대한 디버깅 정보는 타입 테이블 생성부(11)에 의해 생성된 타입 테이블에 따라 장치 독립적인 지시자를 이용하여 표현될 수 있다.
일 실시예에서, 개발자 단말기(10)는 중간 언어 코드를 타겟 플랫폼에 대응되는 실행파일로 변환하기 위한 제2 변환부(13)를 더 포함할 수 있다. 제2 변환부(12)는, 제1 변환부(12)에 의해 생성된 중간 언어 코드를 기계어로 변환한 코드(즉, 바이너리(binary) 코드)를 포함하도록 실행파일을 생성할 수 있다. 실행파일로의 변환 과정의 일부로서, 제2 변환부(13)는 중간 언어 코드의 각 타입에 대한 디버깅 정보 중 지시자를 해당 타겟 플랫폼에 대응되는 상수로 변환할 수 있다.
일 실시예에서, 개발자 단말기(10)는 제2 변환부(13)에서 생성된 실행파일을 디버깅하여 디버깅 정보를 사용자가 볼 수 있도록 출력하는 디버깅부(14)를 더 포함할 수 있다. 예컨대, 디버깅부(14)는 gdb와 같은 공지된 디버거(debugger) 또는 다른 임의의 디버거 소프트웨어 및 이를 실행하기 위한 하드웨어를 포함할 수 있다.
일 실시예에서, 개발자 단말기(10)는 생성된 프로그램 코드를 배포를 위하여 사용자 단말기(20)에 전송하기 위한 송신부(15)를 더 포함할 수도 있다. 송신부(15)는 유선 및/또는 무선 네트워크(미도시)를 통하여 사용자 단말기(20)에 프로그램 코드를 전송할 수 있다. 송신부(15)에 의해 전송되는 프로그램 코드는 제2 변환부(13)에 의해 생성된 실행파일일 수도 있으며, 또는 제1 변환부(12)에 의하여 생성된 중간 언어 코드일 수도 있다.
일 실시예에서, 사용자 단말기(20)는 개발자 단말기(10)와 유사하게 변환부(미도시) 및 디버깅부(미도시)를 포함할 수 있다. 사용자 단말기(20)의 변환부 및 디버깅부는 각각 개발자 단말기(10)의 제2 변환부(13) 및 디버깅부(14)와 동일하게 구성될 수 있다. 그 결과, 개발자 단말기(10)가 중간 언어 코드를 사용자 단말기(20)에 전송하면, 사용자 단말기(20)의 변환부에서 중간 언어 코드를 해당 플랫폼에 대응되는 실행파일로 변환할 수 있으며 또한 사용자 단말기(20)의 디버깅부에서 장치 독립적인 디버깅 정보를 확인할 수 있다.
이하에서는, 도 1에 도시된 코드 변환 장치 및 후술하는 다른 도면들을 함께 참조하여 실시예들에 따른 코드 변환 장치 및 방법에 대하여 더욱 구체적으로 설명한다.
도 2a는 종래의 중간 언어 코드에 포함된 디버깅(debugging) 정보를 나타내는 개념도이다.
도 2a에 도시된 중간 언어 코드의 4번째 줄은 소스 코드에 "int" 타입의 변수가 사용되었음을 나타낸다. 또한, 중간 언어 코드의 6번째 줄 및 7번째 줄은 각각 "int" 타입에 대응되는 크기 및 얼라인(align)을 비트(bit) 단위로 나타낸다. 도 2a에 도시된 중간 언어 코드는 32비트 타겟 플랫폼을 대상으로 컴파일된 것이며, 그 결과 중간 언어 코드에서 "int" 타입의 비트 크기 및 얼라인은 상수 32로 기재된다. 따라서, 도 2a의 중간 언어 코드는 32비트 타겟 플랫폼에 대응되는 실행파일로만 컴파일될 수 있으며, 타겟 플랫폼의 종류가 달라질 경우에는 소스 코드를 다시 중간 언어 코드로 컴파일하는 과정이 필요하다.
도 2b는 일 실시예에 따라 생성된 중간 언어 코드에 포함된 타겟 독립적인 디버깅 정보를 나타내는 개념도이다.
도 2b를 참조하면, 일 실시예에 따른 중간 언어 코드 변환 방법에서 타입 테이블 생성부(11)는 "int" 등 소스 코드에 사용되었거나 사용 가능한 각 타입에 대한 타입 테이블을 생성할 수 있다. 예컨대, 타입 테이블은 하기 표 1과 같은 형태로 생성될 수 있다.
지시자 타입
1 Int
2 Void
3 Int*
타입 테이블 생성부(11)에 의한 타입 테이블의 생성은 독립적인 동작으로 수행될 수도 있으며, 또는 제1 변환부(12)에 의한 변환 과정의 일부로서 수행될 수도 있다. 예컨대, 타입 테이블 생성부(11) 및 제1 변환부(12)는 기능적 및/또는 물리적으로 연관된 하나의 컴파일러(compiler) 모듈을 구성할 수도 있다.
일 실시예에서, 타입 테이블 생성부(11)는 변환 대상 소스 코드에서 타입이 기록되어 있는 순서에 따라 각 타입에 순차적으로 지시자를 부여할 수 있다. 예컨대, 소스 코드를 각 줄 별로 분석하면서 "int" 타입의 변수가 처음 등장하면 "int" 타입에 지시자 "1"을 부여하고, 두 번째로 "void" 타입의 변수가 등장하면 "void" 타입에 지시자 "2"를 부여할 수 있다. 그러나 이는 예시적인 것으로서, 타입 테이블에서 각 지시자의 결정 방법은 전술한 것에 한정되는 것은 아니다. 예컨대, 다른 실시예에서는, 프로그래밍 언어의 각 타입에 대해 지시자가 미리 지정되어 있을 수도 있다.
제1 변환부(12)는, 소스 코드로부터 중간 언어 코드를 생성하되, 중간 언어 코드에서 각 타입의 디버깅 정보를 타입 테이블을 이용하여 기록하도록 구성된다. 즉, 도 2b의 중간 언어 코드의 6번째 줄 및 7번째 줄은 각각 "int" 타입에 대응되는 크기 및 얼라인을 나타나되, 해당 디버깅 정보를 직접 상수로 표시하는 대신 "int" 타입에 해당하는 타입 테이블의 지시자(즉, "1")로 나타낸다. 이와 유사하게, "void" 타입의 정보는 중간 언어 코드에서 지시자 "2"로 표현될 것이며, "int*" 타입의 정보는 중간 언어 코드에서 지시자 "3"으로 표현될 것이다.
도 2c는 도 2b의 중간 언어 코드로부터 실행파일 생성 시의 변환을 나타내는 개념도이다.
도 2c를 참조하면, 제2 변환부(13)는 디버깅 정보를 포함하는 중간 언어 코드를 특정 타겟 플랫폼에 대응되는 실행파일로 변환할 수 있다. 이를 위하여, 제2 변환부(13)는 먼저 제1 변환부(12)에 의해 생성된 중간 언어 코드에서 타입 테이블의 지시자에 해당하는 부분을 특정 타겟 플랫폼에 대응되는 상수로 변환할 수 있다. 예를 들어, 32비트 타겟 플랫폼을 대상으로 한 컴파일을 수행하는 경우, 제2 변환부(13)는 도 2b의 중간 언어 코드에서 6번째 줄 및 7번째 줄에 기재된 지시자 "1"이 "int" 타입을 의미하는 것으로 결정하고, 이를 타겟 플랫폼에서 "int" 타입에 대응되는 상수 32로 변환할 수 있다. 다음으로, 제2 변환부(13)는 지시자가 상수로 변환된 중간 언어 코드를 다시 타겟 플랫폼에 대응되는 바이너리 코드 형태의 실행파일로 변환할 수 있다.
일 실시예에서, 제1 변환부(12)에 의해 생성되는 중간 언어 코드에는 타입 테이블 자체가 포함되어 있을 수도 있다. 이 경우, 제2 변환부(13)는 중간 언어 코드에 포함된 타입 테이블을 이용하여 중간 언어 코드에 기록된 각 지시자에 해당하는 타입을 알아내고, 지시자를 해당 타입에 대응되는 상수로 변환할 수 있다.
그러나 이는 예시적인 것으로서, 다른 실시예에서 중간 언어 코드에는 타입 테이블이 포함되지 않을 수도 있다. 예컨대, 제2 변환부(13)에는 타입 테이블이 미리 저장되어 있을 수 있다. 또는, 제2 변환부(13)는 변환 과정에서 중간 언어 코드에 타입이 기록되어 있는 순서에 따라 해당 타입에 대응되는 지시자를 결정할 수도 있다. 예컨대, 중간 언어 코드에 최초로 기록된 타입이 "int"일 경우, 제2 변환부(13)는 지시자 "1"이 "int" 타입에 대응되는 것으로 결정하고, 32비트 타겟 플랫폼을 대상으로 컴파일하는 경우 중간 언어 코드의 지시자 "1"을 상수 32로 변환할 수 있다.
이상의 실시예에 기재한 타입 테이블 및 타입 테이블에 포함된 타입 및 지시자는 단지 예시적인 것으로서, 타입 테이블은 전술한 것과 상이한 형태로 구성될 수 있다. 예컨대, 타입 테이블에서 각각의 타입은 숫자 형태의 지시자 대신 임의의 문자 또는 문자열 형태의 지시자에 의하여 지시되도록 구성될 수도 있다.
도 3a는 또 다른 실시예에 따라 생성된 중간 언어 코드에 포함된 플랫폼 독립적인 디버깅 정보를 나타내는 개념도이며, 도 3b는 도 3a의 중간 언어 코드에서 디버깅 정보가 포함된 데이터 블록의 구성을 나타내는 개념도이다. 도 3a 및 3b에 도시된 실시예의 설명에 있어서, 전술한 실시예로부터 용이하게 이해될 수 있는 구성에 대해서는 설명의 중복을 피하기 위하여 자세한 설명을 생략한다.
도 3a에 도시된 중간 언어 코드는, 도 2b에 도시된 중간 언어 코드와 마찬가지로, 표 1에 기재된 것과 같은 타입 테이블을 이용하여 각 타입에 대한 디버깅 정보를 지시하도록 구성될 수 있다. 다만, 본 실시예에서 타입에 대한 디버깅 정보는 타입 테이블의 지시자를 이용하여 기록된 디버깅 정보와 함께, 해당 디버깅 정보가 특정 타겟 플랫폼에 대응되도록 변환된 상수 디버깅 정보를 함께 포함할 수 있다. 예컨대, 표 1에 기재된 타입 테이블을 이용하여 32비트 타겟 플랫폼을 대상으로 "int" 타입에 대한 디버깅 정보를 생성하는 경우, 디버깅 정보의 특정 데이터 블록에는 타입 테이블의 지시자 "1"과 함께 32비트 타겟 플랫폼에서 "int" 타입에 대응되는 비트 수 32가 함께 포함될 수 있다.
도 3b는 도 3a에 도시된 디버깅 정보에서 6번째 줄에 기재된 크기 정보에 대한 데이터 블록(300)의 구체적인 구성을 나타낸 것이다. 데이터 블록(300)은 8 바이트(byte) 크기의 데이터로 구성되는데, 여기서 데이터 블록(300)의 최상위 바이트(Most Significant Byte; MSB)(310)에는 타입 테이블의 지시자가 포함될 수 있다. 예컨대, 표 1의 타입 테이블을 이용하여 "int" 타입에 대한 디버깅 정보를 기록하는 경우 MSB(310)에는 "1"이 기록될 수 있다. 한편, 데이터 블록(300)의 최하위 바이트(Least Significant Byte; LSB)(320)에는 해당 타입에 대응되는 상수가 포함될 수 있다. 예컨대, 32비트 타겟 플랫폼을 대상으로 "int" 타입에 대한 디버깅 정보를 기록하는 경우 LSB(320)에는 32가 기록될 수 있다.
도 3b에 도시된 것과 같은 데이터 블록을 이용하여 디버깅 정보를 기록할 경우, 중간 언어 코드의 디버깅 정보에는 타겟 독립적인 지시자로 기록된 디버깅 정보와 특정 타겟 플랫폼에 대응되는 상수로 기록된 디버깅 정보가 모두 포함될 수 있다. 따라서, 컴파일러가 타입 테이블을 포함하지 않거나 중간 언어 코드로부터 타입 테이블을 생성할 수 없는 경우에는, 종래의 컴파일러에 의하여 상수 형태의 디버깅 정보를 이용하여 변환을 수행할 수도 있다.
도 3c는 도 3a의 중간 언어 코드로부터 실행파일 생성 시의 변환을 나타내는 개념도이다.
도 3b 및 도 3c를 참조하면, 제2 변환부(13)는 디버깅 정보의 각 데이터 중 MSB(310)에 기록된 지시자를 이용하여 변환을 수행할 수 있다. 예컨대, 제2 변환부(13)는, 각 타입이 기록된 순서를 이용하여 각 타입에 대응되는 지시자를 순차적으로 결정할 수 있다. 다음으로, 제2 변환부(13)는 각 타입에 대응되는 지시자를, 타겟 플랫폼에서 해당 타입에 대응되는 상수로 변환할 수 있다. 또는, 제2 변환부(13)는 이상의 변환 과정을 수행하는 대신 디버깅 정보의 각 데이터 중 LSB(320)에 기록된 상수를 이용하여 종래의 방식으로 변환을 수행할 수도 있다.
이상에서 설명한 실시예들에 따른 코드 변환 방법은, 프로그램으로 구현되고 컴퓨터로 읽을 수 있는 기록매체에 기록될 수 있다. 본 실시예에 따른 코드 변환 방법을 구현하기 위한 프로그램이 기록되고 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 이러한 컴퓨터가 읽을 수 있는 기록매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피디스크, 광 데이터 저장장치 등이 있으며, 또한 캐리어 웨이브(carrier wave)(예를 들어, 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산 방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수도 있다. 또한, 본 실시예를 구현하기 위한 기능적인 프로그램, 코드 및 코드 세그먼트(segment)들은 본 실시예가 속하는 기술 분야의 통상의 기술자에 의해 용이하게 이해될 수 있을 것이다.
이상에서 살펴본 본 발명은 도면에 도시된 실시예들을 참고로 하여 설명하였으나 이는 예시적인 것에 불과하며 당해 분야에서 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 실시예의 변형이 가능하다는 점을 이해할 것이다. 그러나, 이와 같은 변형은 본 발명의 기술적 보호범위 내에 있다고 보아야 한다. 따라서, 본 발명의 진정한 기술적 보호범위는 첨부된 특허청구범위의 기술적 사상에 의해서 정해져야 할 것이다.

Claims (18)

  1. 코드 변환 방법으로서,
    개발자 단말기에서, 소스 코드에 사용되는 하나 이상의 타입을 하나 이상의 지시자에 각각 매핑시킨 타입 테이블을 생성하는 단계; 및
    상기 개발자 단말기에서, 상기 소스 코드를 중간 언어 코드로 변환한 제1 코드 및 상기 소스 코드의 디버깅 정보에 대응되는 제2 코드를 포함하는 중간 언어 코드를 생성하는 단계를 포함하되,
    상기 제2 코드는 상기 하나 이상의 지시자를 이용하여 상기 하나 이상의 타입에 관련된 디버깅 정보를 지시하도록 구성되고,
    상기 코드 변환 방법은,
    상기 중간 언어 코드를 생성하는 단계 후에, 상기 개발자 단말기에서 또는 상기 개발자 단말기로부터 상기 중간 언어 코드를 수신한 사용자 단말기에서, 상기 중간 언어 코드의 상기 제2 코드에서 상기 하나 이상의 지시자를 타겟 플랫폼에 대응되는 상수로 변환하는 단계를 더 포함하는 것을 특징으로 하는 코드 변환 방법.
  2. 제 1항에 있어서,
    상기 타입 테이블을 생성하는 단계는, 상기 개발자 단말기에서, 상기 소스 코드에 기록된 순서에 기초하여 상기 하나 이상의 타입에 순차적으로 지시자를 부여하는 단계를 포함하는 것을 특징으로 하는 코드 변환 방법.
  3. 제 1항에 있어서,
    상기 타입 테이블을 생성하는 단계 및 상기 중간 언어 코드를 생성하는 단계는 동시에 수행되는 것을 특징으로 하는 코드 변환 방법.
  4. 제 1항에 있어서,
    상기 중간 언어 코드는 상기 타입 테이블을 더 포함하도록 생성되는 것을 특징으로 하는 코드 변환 방법.
  5. 제 1항에 있어서,
    상기 제2 코드는,
    상기 하나 이상의 타입에 관련된 디버깅 정보를 상기 하나 이상의 지시자를 이용하여 기록한 제1 디버깅 정보; 및
    상기 하나 이상의 타입에 관련된 디버깅 정보를 타겟 플랫폼에 대응되는 상수를 이용하여 기록한 제2 디버깅 정보를 포함하는 것을 특징으로 하는 코드 변환 방법.
  6. 제 5항에 있어서,
    상기 제2 코드는 상기 하나 이상의 타입에 관련된 데이터 블록을 포함하되, 상기 제1 디버깅 정보는 상기 데이터 블록의 최상위 비트에 기록되는 것을 특징으로 하는 코드 변환 방법.
  7. 제 5항에 있어서,
    상기 제2 코드는 상기 하나 이상의 타입에 관련된 데이터 블록을 포함하되, 상기 제2 디버깅 정보는 상기 데이터 블록의 최하위 비트에 기록되는 것을 특징으로 하는 코드 변환 방법.
  8. 삭제
  9. 제 1항에 있어서,
    상기 상수로 변환하는 단계는, 상기 개발자 단말기에서 또는 상기 사용자 단말기에서, 상기 중간 언어 코드에 기록된 순서에 기초하여 상기 하나 이상의 타입에 대응되는 지시자를 결정하는 단계를 포함하는 것을 특징으로 하는 코드 변환 방법.
  10. 코드 변환 장치에 있어서,
    소스 코드에 사용되는 하나 이상의 타입을 하나 이상의 지시자에 각각 매핑시킨 타입 테이블을 생성하는 타입 테이블 생성부; 및
    상기 소스 코드를, 상기 소스 코드를 중간 언어 코드로 변환한 제1 코드 및 상기 소스 코드의 디버깅 정보에 대응되는 제2 코드를 포함하는 중간 언어 코드로 변환하는 제1 변환부를 포함하되,
    상기 제2 코드는 상기 하나 이상의 지시자를 이용하여 상기 하나 이상의 타입에 관련된 디버깅 정보를 지시하도록 구성되고,
    상기 코드 변환 장치는,
    상기 중간 언어 코드의 상기 제2 코드에서 상기 하나 이상의 지시자를 타겟 플랫폼에 대응되는 상수로 변환하도록 구성된 제2 변환부를 더 포함하는 것을 특징으로 하는 코드 변환 장치.
  11. 제 10항에 있어서,
    상기 타입 테이블 생성부는, 상기 소스 코드에 기록된 순서에 기초하여 상기 하나 이상의 타입에 순차적으로 지시자를 부여하도록 구성된 것을 특징으로 하는 코드 변환 장치.
  12. 제 10항에 있어서,
    상기 제1 변환부는, 상기 타입 테이블을 더 포함하도록 상기 중간 언어 코드를 생성하도록 구성된 것을 특징으로 하는 코드 변환 장치.
  13. 제 10항에 있어서,
    상기 제2 코드는,
    상기 하나 이상의 타입에 관련된 디버깅 정보를 상기 하나 이상의 지시자를 이용하여 기록한 제1 디버깅 정보; 및
    상기 하나 이상의 타입에 관련된 디버깅 정보를 타겟 플랫폼에 대응되는 상수를 이용하여 기록한 제2 디버깅 정보를 포함하는 것을 특징으로 하는 코드 변환 장치.
  14. 제 13항에 있어서,
    상기 제2 코드는 상기 하나 이상의 타입에 관련된 데이터 블록을 포함하되, 상기 제1 디버깅 정보는 상기 데이터 블록의 최상위 비트에 기록되는 것을 특징으로 하는 코드 변환 장치.
  15. 제 13항에 있어서,
    상기 제2 코드는 상기 하나 이상의 타입에 관련된 데이터 블록을 포함하되, 상기 제2 디버깅 정보는 상기 데이터 블록의 최하위 비트에 기록되는 것을 특징으로 하는 코드 변환 장치.
  16. 삭제
  17. 제 10항에 있어서,
    상기 제2 변환부는, 상기 중간 언어 코드에 기록된 순서에 기초하여 상기 하나 이상의 타입에 대응되는 지시자를 결정하도록 더 구성된 것을 특징으로 하는 코드 변환 장치.
  18. 데이터 처리 기기가,
    소스 코드에 사용되는 하나 이상의 타입을 하나 이상의 지시자에 각각 매핑시킨 타입 테이블을 생성하는 단계; 및
    상기 소스 코드를 중간 언어 코드로 변환한 제1 코드 및 상기 소스 코드의 디버깅 정보에 대응되는 제2 코드를 포함하는 중간 언어 코드를 생성하는 단계를 포함하는 코드 변환 방법을 수행하도록 상기 데이터 처리 기기를 제어하기 위한 프로그램이 기록되며,
    상기 제2 코드는 상기 하나 이상의 지시자를 이용하여 상기 하나 이상의 타입에 관련된 디버깅 정보를 지시하도록 구성되고,
    상기 코드 변환 방법은,
    상기 중간 언어 코드를 생성하는 단계 후에, 상기 데이터 처리 기기가, 상기 중간 언어 코드의 상기 제2 코드에서 상기 하나 이상의 지시자를 타겟 플랫폼에 대응되는 상수로 변환하는 단계를 더 포함하는 것을 특징으로 하는 컴퓨터로 판독 가능한 기록매체.
KR1020130148614A 2013-12-02 2013-12-02 타겟 독립적인 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체 KR101598819B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020130148614A KR101598819B1 (ko) 2013-12-02 2013-12-02 타겟 독립적인 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020130148614A KR101598819B1 (ko) 2013-12-02 2013-12-02 타겟 독립적인 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체

Publications (2)

Publication Number Publication Date
KR20150063798A KR20150063798A (ko) 2015-06-10
KR101598819B1 true KR101598819B1 (ko) 2016-03-02

Family

ID=53505488

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130148614A KR101598819B1 (ko) 2013-12-02 2013-12-02 타겟 독립적인 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체

Country Status (1)

Country Link
KR (1) KR101598819B1 (ko)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120159444A1 (en) * 2010-12-17 2012-06-21 Microsoft Corporation Fusing debug information from different compiler stages

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101195822B1 (ko) * 2005-09-27 2012-11-05 에스케이플래닛 주식회사 서로 다른 프로그래밍 언어로 각각 작성된 어플리케이션을실행하기 위한 가상 머신 및 이를 이용해 이동통신단말기에서 어플리케이션을 실행하는 방법
CN101641690A (zh) * 2007-01-22 2010-02-03 E3网络股份有限公司 用于生成跨平台程序的方法及其中间件平台引擎
KR20090004210A (ko) 2007-07-06 2009-01-12 이양선 통합 개발 환경을 이용한 소프트웨어 프로그램을 개발하기위한 장치 및 통합 개발 환경을 이용한 소프트웨어프로그램 개발 시스템
KR20130094153A (ko) * 2012-01-20 2013-08-23 (주)누스코 컴퓨터 및 휴대용 전자기기의 프로그램 관리 장치 및 방법

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120159444A1 (en) * 2010-12-17 2012-06-21 Microsoft Corporation Fusing debug information from different compiler stages

Also Published As

Publication number Publication date
KR20150063798A (ko) 2015-06-10

Similar Documents

Publication Publication Date Title
JP5415557B2 (ja) デバッギングのためのユーザ・スクリプト・コードの変換
US10331425B2 (en) Automated source code adaption to inject features between platform versions
US9632754B2 (en) Auto generation and linkage of source code to test cases
KR20150024842A (ko) 적응식 이식가능 라이브러리
CN110245467B (zh) 基于Dex2C与LLVM的Android应用程序保护方法
US8881123B2 (en) Enabling symbol resolution of private symbols in legacy programs and optimizing access to the private symbols
CN111740948B (zh) 数据包发布方法、动态更新方法、装置、设备及介质
CN109948308A (zh) 代码安全保护方法、装置、电子设备和计算机可读存储介质
US20190108006A1 (en) Code coverage generation in gpu by using host-device coordination
KR101770292B1 (ko) 컴퓨터 수행 가능한 모델 역공학 방법 및 장치
CN104134039A (zh) 病毒查杀方法、客户端、服务器以及病毒查杀系统
JP2007304840A (ja) コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラム
US8225286B2 (en) Debugging interpreted input
US20060009962A1 (en) Code conversion using parse trees
KR101349631B1 (ko) 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체
KR101598819B1 (ko) 타겟 독립적인 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체
KR20130020135A (ko) 통합 개발 환경에서의 코드 동시 개발자 리스트 제공 시스템 및 방법
KR101670726B1 (ko) 중간 언어 코드의 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체
CN114115959A (zh) App热修复方法及其装置、可读存储介质和计算机设备
CN109947407B (zh) 一种数据获取方法及装置
KR101449657B1 (ko) 연산자의 값의 범위를 이용한 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체
CN112052007A (zh) 源码调试方法、装置、服务器及存储介质
US20150278089A1 (en) Execution control method and execution control apparatus
KR101277145B1 (ko) 공통 표현을 이용한 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체
US20110099534A1 (en) Information processing apparatus, execution program operation modification method, and recording medium

Legal Events

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

Payment date: 20190201

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20200203

Year of fee payment: 5