KR101670726B1 - 중간 언어 코드의 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체 - Google Patents

중간 언어 코드의 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체 Download PDF

Info

Publication number
KR101670726B1
KR101670726B1 KR1020130148609A KR20130148609A KR101670726B1 KR 101670726 B1 KR101670726 B1 KR 101670726B1 KR 1020130148609 A KR1020130148609 A KR 1020130148609A KR 20130148609 A KR20130148609 A KR 20130148609A KR 101670726 B1 KR101670726 B1 KR 101670726B1
Authority
KR
South Korea
Prior art keywords
code
intermediate language
debugging information
debugging
executable file
Prior art date
Application number
KR1020130148609A
Other languages
English (en)
Other versions
KR20150063795A (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 KR1020130148609A priority Critical patent/KR101670726B1/ko
Publication of KR20150063795A publication Critical patent/KR20150063795A/ko
Application granted granted Critical
Publication of KR101670726B1 publication Critical patent/KR101670726B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation

Landscapes

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

Abstract

코드 변환 방법은, 소스(source) 코드를 변환하여 중간 언어(intermediate language) 코드를 생성하는 단계; 및 상기 중간 언어 코드로부터, 상기 중간 언어 코드의 디버깅(debugging) 정보에 대응되는 제1 코드를 포함하는 실행파일을 생성하는 단계를 포함할 수 있다. 상기 코드 변환 방법에서, 상기 중간 언어 코드는 상기 소스 코드의 디버깅 정보에 대응되는 제2 코드를 포함하며, 상기 실행파일은 상기 제2 코드를 기계어로 변환하여 생성된 제3 코드를 더 포함할 수도 있다. 소스 코드의 디버깅 정보와 함께 또는 이를 대체하여 중간 언어 코드의 디버깅 정보를 포함하도록 실행파일을 생성함으로써, 개발 단계의 어느 부분에서 문제가 발생하였는지 용이하게 검증할 수 있으며, 소스 코드 없이 중간 언어 코드만을 배포하더라도 디버깅이 이루어질 수 있다.

Description

중간 언어 코드의 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체{METHOD FOR CODE CONVERSION USING DEBUGGING INFORMATION OF INTERMEDIATE LANGUAGE CODE, APPARATUS AND COMPUTER-READABLE RECORDING MEDIUM WITH PROGRAM THEREFOR}
실시예들은 중간 언어 코드의 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체에 대한 것이다. 더욱 상세하게는, 소스 코드의 디버깅 정보와 함께 또는 이를 대체하여 중간 언어(intermediate language) 코드의 디버깅 정보를 포함한 실행파일을 생성하기 위한 코드 변환 방법과, 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체에 관한 것이다.
프로그램(program)은 프로그래밍 언어(programming language)로 기입된다. 프로그래밍 언어는 컴퓨터에 의해 처리 및 실행될 수 있는 명령의 시퀀스(sequence)를 정의하는데 사용될 수 있는 임의의 인공 언어이다. 그러나, 프로그래밍 언어는 일반적으로 프로그래밍 언어를 사용하여 표현된 소스(source) 코드로부터 컴퓨터 또는 데이터 처리 시스템이 작업하는데 필요한 기계 코드로의, 컴파일러(compiler)와 같은 또 다른 프로그램에 의한 번역 절차를 필요로 한다. 예컨대, C 언어 또는 C++ 언어 등의 프로그래밍 언어로 작성된 프로그램들은, 프로그램이 사용될 플랫폼(platform)에 맞게 실행파일의 형태로 변환될 수 있다.
한편, 프로그램밍 언어를 이용한 프로그램의 작성에는, 작성된 코드에 문제(bug)가 발생하였을 때 그 문제를 찾아서 수정하거나 회피하기 위한 디버깅(debugging) 과정이 요구된다. 디버거(debugger)는 이러한 디버깅 과정을 돕는 도구로서, 프로그램 코드의 특정 위치에 중단점(breakpoint)을 지정하여 프로그램의 실행을 정지시키고 메모리에 저장된 값을 살펴보는 등의 기능을 제공한다. 디버거에 의한 디버깅 과정을 원활하게 수행하기 위해서는, 프로그램의 소스 코드를 컴파일하는 과정에서 디버깅 정보가 포함되어야 한다.
도 1은 종래의 디버깅(debugging) 정보를 설명하기 위한 개념도이다.
도 1을 참조하면, C 언어 기반의 프로그래밍 언어로 작성된 소스 코드(110)는 "clang" 이라는 컴파일 명령을 이용하여 기계어 형태의 실행파일(120, 130)로 변환될 수 있다. 소스 코드(110)가 기록된 파일명이 "hello.c" 라고 가정할 경우, "clang hello.c" 라는 명령을 이용하여 소스 코드(110)를 컴파일함으로써 실행파일(120)을 생성할 수 있다. 한편, "clang -g hello.c" 라는 명령을 이용하여 소스 코드(110)를 컴파일할 경우 소스 코드(110)의 디버깅 정보가 추가적으로 포함된 실행파일(130)을 생성할 수도 있다. 디버깅 정보는 실행파일(130)에 바이너리(binary) 코드(131)의 형태로 포함될 수 있다.
디버거는, 디버깅 정보를 포함하는 실행파일(130)을 처리하여, 디버깅 정보를 개발자가 볼 수 있게 출력할 수 있다. 실행파일(130)에 디버깅 정보가 포함되어 있는지 여부에 따라, 디버거에 의한 출력 형태는 상이하게 된다. 도 2a는 공지된 디버거인 gdb에서 디버깅 정보가 포함되지 않은 실행파일을 처리한 출력 형태를 도시하며, 도 2b는 gdb 에서 디버깅 정보가 포함된 실행파일을 처리한 출력 형태를 도시한다.
도 2a를 참조하면, gdb에서 "print"는 특정 심볼에 대한 정보를 출력하는 명령어이며, "next"는 프로그램의 다음 줄을 실행하는 명령어이고, "list"는 프로그램에서 현재 실행되고 있는 부분을 출력하는 명령어이다. 실행파일이 디버깅 정보를 포함하지 않는 경우, 각 gdb 명령어에 대한 응답으로, 디버깅 정보가 없음을 알리는 메시지(211, 212, 213)가 출력될 수 있다. 반면, 도 2b를 참조하면, 실행파일이 디버깅 정보를 포함하는 경우에는 각 gdb 명령어에 대한 응답으로 소스 코드에 관련된 위치, 변수 등에 대한 정보(221, 222, 223, 224)가 출력될 수 있다.
한편, 최근들어 다양한 정보기기의 사용에 따른 다양한 플랫폼이 이용됨에 따라, 소스 코드를 특정 플랫폼에 의존적이지 않은 독립적인 중간 언어(intermediate language)나 실행파일의 형태로 변환하는 기술이 개발되고 있다. 그러나, 소스 코드가 아닌 중간 언어 자체에 대한 디버깅 정보를 이용하는 기술에 대한 연구는 전무한 실정이다.
공개특허공보 제10-2009-0004210호
본 발명의 일 측면에 따르면, 소스(source) 코드의 디버깅(debugging) 정보와 함께 또는 이를 대체하여 중간 언어(intermediate language) 코드의 디버깅 정보를 포함한 실행파일을 생성하기 위한 코드 변환 방법과, 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체를 제공할 수 있다.
일 실시예에 따른 코드 변환 방법은, 소스 코드를 변환하여 중간 언어 코드를 생성하는 단계; 및 상기 중간 언어 코드로부터, 상기 중간 언어 코드의 디버깅 정보에 대응되는 제1 코드를 포함하는 실행파일을 생성하는 단계를 포함할 수 있다.
일 실시예에 따른 코드 변환 장치는, 소스 코드를 변환하여 중간 언어 코드를 생성하는 제1 변환부; 및 상기 중간 언어 코드로부터, 상기 중간 언어 코드의 디버깅 정보에 대응되는 제1 코드를 포함하는 실행파일을 생성하는 제2 변환부를 포함할 수 있다.
이상의 코드 변환 장치 및 방법에서, 상기 중간 언어 코드는 상기 소스 코드의 디버깅 정보에 대응되는 제2 코드를 포함하며, 상기 실행파일은 상기 제2 코드를 기계어로 변환하여 생성된 제3 코드를 더 포함할 수도 있다.
일 실시예에 따른 컴퓨터로 판독 가능한 기록 매체에는, 데이터 처리 기기에 의해 전술한 코드 변환 방법을 수행하기 위한 컴퓨터 프로그램이 기록될 수 있다.
본 발명의 일 측면에 따르면, 중간 언어(intermediate language) 코드의 디버깅(debugging) 정보를 포함하도록 실행파일을 생성함으로써, 소스(source) 코드로부터 중간 언어 코드가 제대로 생성되었는지 검증할 수 있다. 따라서, 프로그램의 개발 단계에서 문제가 발생하더라도 해당 문제가 소스 코드에 기인한 것인지 또는 소스 코드로부터 중간 언어 코드로의 변환 과정에 기인한 것인지를 용이하게 파악할 수 있다. 나아가, 디버깅 검증을 위하여 반드시 소스 코드를 배포할 필요가 없으며, 중간 언어 코드만을 배포하더라도 디버깅 정보를 이용하여 실행파일에서 현재 실행되는 부분과 중간 언어 코드를 매칭시켜 디버깅을 수행할 수 있다.
도 1은 종래의 디버깅(debugging) 정보를 설명하기 위한 개념도이다.
도 2a 및 2b는 종래의 디버거(debugger)에서 실행파일에 디버깅 정보가 포함된 경우와 포함되지 않은 경우 각각의 출력 형태를 나타내는 개략도이다.
도 3은 일 실시예에 따른 코드 변환 장치의 개략적인 구성도이다.
도 4는 일 실시예에 따른 코드 변환 방법에 의한 코드 변환을 나타내는 개념도이다.
도 5a 내지 5c는 일 실시예에 따른 코드 변환 방법에서 디버깅 정보의 출력 형태를 나타내는 개념도이다.
도 6은 일 실시예에 따른 코드 변환 방법에서 디버깅 정보를 포함하는 중간 언어 코드를 나타내는 개념도이다.
도 7은 일 실시예에 따른 코드 변환 방법에서 디버깅 정보를 포함한 중간 언어 코드로부터 실행파일로의 변환을 나타내는 개념도이다.
이하에서, 도면을 참조하여 본 발명의 실시예들에 대하여 상세히 살펴본다.
도 3은 일 실시예에 따른 코드 변환 장치의 개략적인 구성도이다.
도 3을 참조하면, 코드 변환 장치는 개발자 단말기(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)는 프로그램의 소스(source) 코드를 중간 언어(intermediate language) 코드로 변환하기 위한 제1 변환부(12) 및 중간 언어 코드를 특정 플랫폼에 대응되는 실행파일로 변환하기 위한 제2 변환부(13)를 포함할 수 있다. 제1 변환부(12)는, 소스 코드로부터 변환된 코드 및 소스 코드에 대한 디버깅(debugging) 정보를 포함하도록 중간 언어 코드를 생성할 수 있다. 또한 제2 변환부(12)는, 중간 언어 코드를 기계어로 변환한 코드(즉, 바이너리(binary) 코드) 및 중간 언어 코드에 대한 디버깅 정보를 포함하도록 실행파일을 생성할 수 있다.
일 실시예에서, 개발자 단말기(10)는 제2 변환부(13)에서 생성된 실행파일을 디버깅하여 디버깅 정보를 사용자가 볼 수 있도록 출력하는 디버깅부(14)를 포함할 수 있다. 예컨대, 디버깅부(14)는 gdb와 같은 공지된 디버거(debugger) 또는 다른 임의의 디버거 소프트웨어 및 이를 실행하기 위한 하드웨어를 포함할 수 있다.
본 명세서에서 "중간 언어"란, 플랫폼의 CPU 종류(예컨대, x86, x64, ARM 등) 또는 운영체제의 종류(예컨대, 윈도우(Windows), 리눅스(Linux), OSX, iOS, 안드로이드(Android), 윈도우 모바일, 윈도우 폰 등)와 같은 플랫폼의 특성에 의존하지 않으며, 플랫폼에 대해 독립적인 형태의 언어를 의미한다. "중간 언어"로 기록된 코드는 추후 컴파일(compile) 시에 특정 플랫폼에 대응되는 바이너리 코드로 변환하여 실행하는 것이 가능하다. 예를 들어, 중간 언어 코드는 소정 규격의 가상머신(Virtual Machine; VM)에 의하여 실행되는 코드일 수 있다.
또한, 본 명세서에서 "디버깅 정보"란 프로그램 코드의 특정 위치에 중단점(breakpoint)을 지정하여 프로그램의 실행을 정지하고 프로그램 동작을 개발자가 살펴볼 수 있도록 하기 위하여 코드에 추가되는 정보를 지칭한다. 일 실시예에서, 디버깅 정보에는 컴파일되는 코드에 관련된 위치 정보 및 변수 정보가 포함될 수 있다. 예컨대, 위치 정보는 코드에서 각 명령어나 변수가 위치하는 줄 및/또는 단락의 번호 등일 수 있으며, 변수 정보는 코드에 사용된 변수의 정의 및/또는 타입(type) 정보 등일 수 있다.
컴파일러가 코드를 컴파일하는 과정에서 디버깅 정보가 코드에 추가되는데, 디버깅 정보를 이용하기 위해서는 디버깅 정보를 생성하는 컴파일러와 디버깅 정보를 이용하는 디버거가 서로 대응되어야 한다. 이와 관련하여 컴파일러와 디버거 사이에 사용되기 위한 디버깅 정보의 몇몇 표준 형식이 공지되어 있으며, 예컨대 DWARF 또는 Stabs 등이 있다. 그러나 실시예들에서 사용될 수 있는 디버깅 정보의 형식은 전술한 것에 한정되는 것은 아니다.
실시예들에서 개발자 단말기(10)의 제1 변환부(12)는 소스 코드를 컴파일하여 중간 언어 코드를 생성하되, 디버깅부(14)에서 사용되는 디버깅 정보 표준에 부합하도록 소스 코드에서 디버깅 정보를 추출하여 중간 언어 코드에 기록할 수 있다. 마찬가지로, 개발자 단말기(10)의 제2 변환부(13)는 중간 언어 코드를 컴파일하여 실행파일을 생성하되, 디버깅부(14)에서 사용되는 디버깅 정보 표준에 부합하도록 중간 언어 코드에서 디버깅 정보를 추출하여 실행파일에 기록할 수 있다.
일 실시예에서, 개발자 단말기(10)는 소스 코드의 작성을 위한 사용자 입력을 수신하는 입력부(11)를 더 포함할 수도 있다. 입력부(11)는 키보드, 마우스 또는 터치스크린(touchscreen) 등 사용자 입력을 수신할 수 있는 임의의 입력 장치로 구성될 수 있으며, 특정 장치에 한정되지 않는다. 개발자는 입력부(11)를 이용하여 C, C++ 또는 그 외 다른 프로그래밍 언어로 프로그램의 소스 코드를 작성할 수 있다.
일 실시예에서, 개발자 단말기(10)는 생성된 프로그램 코드를 배포를 위하여 사용자 단말기(20)에 전송하기 위한 송신부(15)를 더 포함할 수도 있다. 송신부(15)는 유선 및/또는 무선 네트워크(미도시)를 통하여 사용자 단말기(20)에 프로그램 코드를 전송할 수 있다. 송신부(15)에 의해 전송되는 프로그램 코드는 제2 변환부(12)에 의해 생성된 실행파일일 수도 있으며, 또는 제1 변환부(112)에 의하여 생성된 중간 언어 코드일 수도 있다.
일 실시예에서, 사용자 단말기(20)는 개발자 단말기(10)와 유사하게 변환부(미도시) 및 디버깅부(미도시)를 포함할 수 있다. 사용자 단말기(20)의 변환부 및 디버깅부는 각각 개발자 단말기(10)의 제2 변환부(13) 및 디버깅부(14)와 동일하게 구성될 수 있다. 그 결과, 개발자 단말기(10)가 중간 언어 코드를 사용자 단말기(20)에 전송하면, 사용자 단말기(20)의 변환부에서 중간 언어 코드를 실행파일로 변환할 수 있으며 또한 사용자 단말기(20)의 디버깅부에서 중간 언어 코드의 디버깅 정보를 확인할 수 있다. 만약 실행파일에 문제가 있을 경우, 사용자 단말기(20)에 소스 코드가 없더라도 중간 언어 코드의 디버깅 정보를 이용하여 현재 실행되는 부분과 중간 언어 코드를 매칭시켜 디버깅을 수행할 수 있다.
이하에서는, 도 1에 도시된 코드 변환 장치 및 후술하는 다른 도면들을 함께 참조하여 실시예들에 따른 코드 변환 장치 및 방법에 대하여 더욱 구체적으로 설명한다.
도 4는 일 실시예에 따른 코드 변환 방법에 의한 코드 변환을 나타내는 개념도이다.
도 4를 참조하면, 제1 변환부(12)는 개발자에 의해 입력된 소스 코드(410)를 중간 언어 코드(420)로 변환할 수 있다. 소스 코드(410)는 C 언어 등 프로그래밍 언어로 작성된 코드일 수 있다. 또한, 중간 언어 코드(420)는 특정 플랫폼에 의존적이지 않은 코드로서, 예컨대, 소정의 가상머신에 의하여 실행되는 코드일 수 있다. 이때, 중간 언어 코드(420)에는 소스 코드(410)의 디버깅 정보에 해당하는 코드(421)가 포함될 수 있다.
제2 변환부(13)는, 소스 코드(410)의 디버깅 정보에 해당하는 코드(421)를 포함하는 중간 언어 코드(420)를 실행파일(430)로 변환할 수 있다. 변환 과정에서, 상기 코드(421)는 바이너리 코드(431)로 변환된다. 한편, 제2 변환부(13)에 의해 변환되는 실행파일(430)에는 소스 코드(410)의 디버깅 정보에 해당하는 코드(421)뿐만 아니라, 중간 언어 코드(420) 자체의 디버깅 정보도 포함될 수 있다. 예컨대, 제2 변환부(13)는, 중간 언어 코드(410)의 변수(422)의 위치 및 타입(type) 등을 이용하여 중간 언어 코드(410)의 디버깅 정보에 해당하는 바이너리 코드(432)를 추가적으로 포함하도록 실행파일(430)을 생성할 수 있다.
즉, 이상과 같이 생성된 실행파일(430)에는 작성된 프로그램 자체에 해당하는 바이너리 코드와 함께, 소스 코드(410)의 디버깅 정보에 해당하는 바이너리 코드(431) 및 중간 언어 코드(420)의 디버깅 정보에 해당하는 바이너리 코드(432)가 포함된다. 이후 실행파일(430)을 디버깅부(14)에 의하여 처리함으로써, 소스 코드(410) 및 중간 언어 코드(420)에 각각에 관련된 디버깅 정보를 개발자가 볼 수 있게 출력할 수 있다.
그러나, 실시예들에 따른 코드 변환 방법에서 디버깅 정보가 포함된 실행파일의 형태는 전술한 것에 한정되지 않는다. 다른 실시예에서, 실행파일에는 소스 코드(410)의 디버깅 정보(즉, 바이너리 코드(431)) 및 중간 언어 코드(420)의 디버깅 정보(즉, 바이너리 코드(432)) 중 어느 하나만이 포함될 수도 있다. 개발자 단말기(10)의 제1 및 제2 변환부(12, 13)에서, 사용자의 입력에 따라 컴파일되는 실행파일에 포함될 디버깅 정보의 종류가 결정될 수도 있다.
예컨대, 도 1을 참조하여 전술한 C언어 기반의 소스 코드 파일 "hello.c" 및 컴파일 명령어 "clang" 을 예로 들면, 개발자 단말기(10)에 "clang hello.c" 라는 명령이 입력될 경우 디버깅 정보를 전혀 포함하지 않는 실행파일을 생성할 수 있다. 또한, 개발자 단말기(10)에 "clang -g hello.c" 라는 명령이 입력될 경우 소스 코드(410)의 디버깅 정보(즉, 바이너리 코드(431))만을 포함하는 실행파일을 생성할 수 있다. 나아가, 개발자 단말기(10)에 "clang -gir hello.c"라는 명령이 입력될 경우에는, 소스 코드(410)의 디버깅 정보는 제외하고 중간 언어 코드(420)의 디버깅 정보(즉, 바이너리 코드(432))만을 포함하는 실행파일을 생성할 수도 있다.
이상의 실시예들에 의하면, 개발자는 중간 언어 코드의 디버깅 정보가 포함된 실행파일을 디버깅함으로써, 중간 언어 코드가 제대로 생성되었는지 용이하게 검증할 수 있다. 프로그램의 개발에 있어서 어느 단계에서 문제가 발생하였는지 파악하는 것이 매우 중요한데, 실시예들에 의하면 문제가 소스 코드의 알고리즘 자체에서 발생된 것인지 또는 소스 코드로부터 중간 언어 코드로의 변환 과정에서 발생된 것인지를 용이하게 판별할 수 있다. 또한, 실행파일의 크기를 줄일 필요가 있을 경우에는, 소스 코드와 중간 언어 코드의 디버깅 정보를 모두 포함하는 대신 소스 코드 또는 중간 언어 코드 중 어느 하나의 디버깅 정보만을 포함하도록 실행파일을 생성할 수도 있다.
도 5a 내지 5c는 일 실시예에 따른 코드 변환 방법에서 디버깅 정보의 출력 형태를 나타내는 개념도이다. 도 5a 내지 5c는 공지된 디버거인 gdb의 명령어를 일부 변형하여 구성된 디버깅부(14)에 의한 디버깅 정보의 출력 형태를 설명하나, 디버깅부(14)의 구성이 도 5a 내지 5c에 도시된 명령어 또는 출력 형태에 의하여 한정되는 것은 아니다.
도 5a를 참조하면, 일 실시예에서 디버깅부(14)는 중간 언어 코드의 디버깅 정보와 소스 코드의 디버깅 정보 중 대상으로 하는 정보를 지정하는 모드 전환 명령어를 입력받도록 구성될 수 있다. 예컨대, 디버깅부(14)는 "using irdbg" 라는 명령어가 입력(511)될 경우 이후 입력되는 명령어(예컨대, "list" 및 "next" 등)에 대해서는 중간 언어 코드의 디버깅 정보를 출력하고, "using srcdbg" 라는 명령어가 입력(512)될 경우 이후 입력되는 명령어(예컨대, "list" 및 "next" 등)에 대해서는 소스 코드의 디버깅 정보를 출력하도록 구성될 수 있다. 이상과 같이 동작하는 디버깅부(14)는 공지된 디버거 소프트웨어에 모드 전환을 위한 "using" 명령어만을 추가함으로써 용이하게 구성될 수 있으며, 기존 디버거의 명령어를 중간 언어 코드 및 소스 코드 각각에 대해 동일하게 사용할 수 있다.
도 5b를 참조하면, 다른 실시예에서 디버깅부(14)는 소스 코드의 디버깅 정보를 위한 명령어와 중간 언어 코드의 디버깅 정보를 위한 명령어를 각각 구분하여 개별적으로 입력받도록 구성될 수도 있다. 예컨대, gdb 디버거의 "list" 및 "next"의 명령어를 수정하여, 중간 언어 코드를 출력하는 "listir" 명령어(521) 및 중간 언어 코드에서 다음 줄로 이동하는 "nextir" 명령어(522)를 추가적으로 정의하도록 디버깅부(14)를 구성할 수 있다. 또한, 디버깅부(14)에 추가적으로 정의되는 명령어들은 중간 언어 코드에서 다음 단계로 진행하는 "stepir" 및 중간 언어 코드에서 지역 변수 정보를 확인하는 "info localsir" 등을 더 포함할 수도 있다. 이상과 같이 동작하는 디버깅부(14)에 의하면 모드의 전환 없이 연속적으로 중간 언어 코드 및 소스 코드에 대한 디버깅을 선택적으로 진행할 수 있다.
도 5c를 참조하면, 또 다른 실시예에서 디버깅부(14)는 하나의 명령어에 대한 응답으로 소스 코드의 디버깅 정보와 중간 언어 코드의 디버깅 정보를 함께 출력하도록 구성될 수도 있다. 도시되는 바와 같이, gdb 디버거의 "list" 명령어에 대한 응답으로 현재 실행 중인 소스 코드 부분(531) 및 중간 언어 코드 부분(532)이 함께 출력될 수 있다. 또한, gdb 디버거의 "next" 명령어에 대한 응답으로 소스 코드의 다음 줄(533) 및 중간 언어 코드의 다음 줄(534)이 함께 출력될 수 있다. 이상과 같이 동작하는 디버깅부(14)에 의하면 하나의 명령어에 의하여 중간 언어 코드와 소스 코드 모두의 디버깅 정보를 빠르게 확인할 수 있다. 또한, 공지된 디버거를 이용하여 디버깅부(14)를 구성할 경우 디버거에 추가적인 명령어를 정의하는 수정이 필요치 않아 디버깅부(14)의 구성이 용이하다.
도 6은 일 실시예에 따른 코드 변환 방법에서 디버깅 정보를 포함하는 중간 언어 코드를 나타내는 개념도이다.
도 6을 참조하면, 소스 코드(610)는 제1 변환부(12)에 의하여 중간 언어 코드(620)로 컴파일된다. 이때, 중간 언어 코드(620)는 소스 코드(610)의 디버깅 정보에 대응되는 코드(621)를 포함한다. 디버깅 정보에 대응되는 코드(621)에는 소스 코드(610)에 연관된 위치 정보가 포함될 수 있다. 예를 들어, 코드(621) 중 중간 언어 코드(620)의 4번째 줄 후단에 기록된 "!dbg !7" 및 이에 대응되는 하단의 "!17 = metadata !{i32 6, i32 2, metadata !13}"는, 중간 언어 코드(620)의 4번째 줄("store i32 3, i32* %d, align 4")에 상응하는 소스 코드의 위치 정보를 지시한다. 즉, 중간 언어 코드(620)의 4번째 줄이 소스 코드(610)에서 6번째 행, 2번째 열인 "d=3; "에 상응하는 것을 의미한다.
또한, 중간 언어 코드(620)에서 소스 코드(610)의 디버깅 정보에 대응되는 코드(621)에는 소스 코드(610)에 연관된 변수 정보가 포함될 수도 있다. 예를 들어, 코드(621) 중 아래에서 2번째 줄 및 3번째 줄에 각각 기록된 "!9 = metadata !{i32 786468, null, metadata !"int", null, i32 0, i64 32, ...}" 및 "!12 = metadata !{i32 786688, metadata !13, metadata !"c", metadata !9, ...}"는 소스 코드(610)에서 3번째 줄에 선언된 c라는 변수에 대한 정보를 지칭한다. "metadata !9" 번이 변수 c의 타입(type) 정보를 나타내며, "!9" 로 시작하는 줄을 살펴보면 변수 c의 타입이 "int" 임을 알 수 있다.
도 6에서는 중간 언어 코드(620)에 포함되는 디버깅 정보로서 소스 코드(610)에 연관된 위치 정보 및 변수 정보를 예시적으로 설명하였으나, 디버깅 정보의 종류는 이에 한정되는 것은 아니다. 디버깅 정보로 사용될 수 있는 정보는 제1 변환부(12)와 디버깅부(14) 사이에서 사용되는 디버깅 정보의 표준 형식(예컨대, DWARF, Stabs 등)에 따라 전술한 것과 상이한 내용 및 형식을 갖도록 결정될 수도 있으며, 특정 형태에 한정되지 않는다.
도 7은 일 실시예에 따른 코드 변환 방법에서 디버깅 정보를 포함한 중간 언어 코드로부터 실행파일로의 변환을 나타내는 개념도이다.
도 7을 참조하면, 중간 언어 코드(720)는 제2 변환부(13)에 의하여 먼저 어셈블리(assembly) 코드(730)로 변환될 수 있다. 이때, 중간 언어 코드(720)에서 소스 코드의 디버깅 정보에 대응되는 코드(721) 역시 어셈블리 코드(730)에 포함될 수 있다. 예컨대, 디버깅 정보에 대응되는 코드(721) 중 소스 코드의 위치 정보는 어셈블리 코드(730)에서 코드(731, 732)로 변환되며, 디버깅 정보에 대응되는 코드(721) 중 소스 코드의 변수 정보는 어셈블리 코드(730)에서 코드(735)로 변환될 수 있다.
한편, 제2 변환부(13)는 소스 코드의 디버깅 정보에 대응되는 코드뿐만 아니라 중간 언어 코드(720) 자체의 디버깅 정보에 대응되는 코드를 더 포함하도록 어셈블리 코드(730)를 생성할 수 있다. 이를 위하여, 제2 변환부(13)는 중간 언어 코드(720)의 위치 정보(722)를 생성하고, 이를 이용하여 중간 언어 코드(720)의 각 변수(723, 724)와 관련된 위치 정보를 코드(733, 734)의 형태로 어셈블리 코드(730) 내에 추가할 수 있다. 또한, 제2 변환부(13)는 중간 언어 코드(720)의 각 변수(723, 724)와 관련된 변수 정보를 코드(736)의 형태로 어셈블리 코드(730) 내에 추가할 수 있다.
중간 언어 코드(720)에 관련된 위치 정보나 변수 정보 등 디버깅 정보의 구체적인 구성은, 도 6을 참조하여 전술한 소스 코드의 디버깅 정보로부터 통상의 기술자에게 용이하게 이해될 수 있으므로 자세한 설명을 생략한다.
다음으로, 제2 변환부(13)는 어셈블리 코드(730)를 타겟 플랫폼에 대응되는 바이너리 코드로 변환하여 실행파일(740)을 생성할 수 있다. 그 결과, 실행파일(740)에는, 어셈블리 코드(730) 중 소스 코드의 디버깅 정보에 해당하는 코드들(731, 732, 735)이 변환된 코드(741)가 포함될 수 있다. 또한, 실행파일(740)에는, 어셈블리 코드(730) 중 중간 언어 코드(720)의 디버깅 정보에 해당하는 코드들(733, 734, 736)이 변환된 코드(742)가 포함될 수 있다.
도 7에 도시된 실시예에서는 소스 코드의 디버깅 정보 및 중간 언어 코드의 디버깅 정보를 모두 포함하도록 실행파일(740)을 생성하는 것에 대하여 설명하였으나, 전술한 바와 같이, 다른 실시예에서는 소스 코드의 디버깅 정보 또는 중간 언어 코드의 디버깅 정보 중 어느 하나만을 포함하도록 실행파일을 생성할 수도 있다. 또한, 실행파일에 포함될 디버깅 정보의 종류는 개발자 단말기(10)에서 제1 및 제2 변환부(12, 13)에 대한 사용자 입력에 의하여 결정될 수도 있다.
실시예들에 따른 코드 변환 방법은 프로그램으로 구현되고 컴퓨터로 읽을 수 있는 기록매체에 기록될 수 있다. 본 실시예에 따른 코드 변환 방법을 구현하기 위한 프로그램이 기록되고 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 이러한 컴퓨터가 읽을 수 있는 기록매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피디스크, 광 데이터 저장장치 등이 있으며, 또한 캐리어 웨이브(carrier wave)(예를 들어, 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산 방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수도 있다. 또한, 본 실시예를 구현하기 위한 기능적인 프로그램, 코드 및 코드 세그먼트(segment)들은 본 실시예가 속하는 기술 분야의 통상의 기술자에 의해 용이하게 이해될 수 있을 것이다.
이상에서 살펴본 본 발명은 도면에 도시된 실시예들을 참고로 하여 설명하였으나 이는 예시적인 것에 불과하며 당해 분야에서 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 실시예의 변형이 가능하다는 점을 이해할 것이다. 그러나, 이와 같은 변형은 본 발명의 기술적 보호범위 내에 있다고 보아야 한다. 따라서, 본 발명의 진정한 기술적 보호범위는 첨부된 특허청구범위의 기술적 사상에 의해서 정해져야 할 것이다.

Claims (20)

  1. 코드 변환 방법으로서,
    개발자 단말기가, 소스 코드를 변환하여 중간 언어 코드를 생성하는 단계; 및
    상기 개발자 단말기가, 상기 중간 언어 코드로부터, 상기 중간 언어 코드의 디버깅 정보에 대응되는 제1 코드를 포함하는 실행파일을 생성하는 단계를 포함하며,
    상기 코드 변환 방법은,
    상기 개발자 단말기가, 상기 소스 코드에 대응되는 사용자 입력을 수신하는 단계; 및
    상기 개발자 단말기가, 상기 중간 언어 코드를 생성하는 단계 이후에, 상기 중간 언어 코드를 사용자 단말기에 전송하는 단계를 더 포함하는 것을 특징으로 하는 코드 변환 방법.
  2. 제 1항에 있어서,
    상기 제1 코드는, 상기 중간 언어 코드에 연관된 위치 정보 및 변수 정보를 포함하는 것을 특징으로 하는 코드 변환 방법.
  3. 제 1항에 있어서,
    상기 개발자 단말기가, 상기 실행파일을 처리하여 상기 제1 코드에 대응되는 디버깅 정보를 출력하는 단계를 더 포함하는 것을 특징으로 하는 코드 변환 방법.
  4. 제 1항에 있어서,
    상기 중간 언어 코드를 생성하는 단계는, 상기 소스 코드의 디버깅 정보에 대응되는 제2 코드를 포함하도록 상기 중간 언어 코드를 생성하는 단계를 포함하며,
    상기 실행파일을 생성하는 단계는, 상기 제2 코드를 기계어로 변환한 제3 코드를 더 포함하도록 상기 실행파일을 생성하는 단계를 포함하는 것을 특징으로 하는 코드 변환 방법.
  5. 제 4항에 있어서,
    상기 제2 코드는, 상기 소스 코드에 연관된 위치 정보 및 변수 정보를 포함하는 것을 특징으로 하는 코드 변환 방법.
  6. 제 4항에 있어서,
    상기 개발자 단말기가, 상기 실행파일을 처리하여 상기 제1 코드에 대응되는 디버깅 정보 및 상기 제3 코드에 대응되는 디버깅 정보를 출력하는 단계를 더 포함하는 것을 특징으로 하는 코드 변환 방법.
  7. 제 6항에 있어서,
    상기 출력하는 단계는, 사용자 입력에 대한 응답으로, 상기 제1 코드에 대응되는 디버깅 정보 및 상기 제3 코드에 대응되는 디버깅 정보를 선택적으로 출력하는 단계를 포함하는 것을 특징으로 하는 코드 변환 방법.
  8. 제 6항에 있어서,
    상기 출력하는 단계는, 사용자 입력에 대한 응답으로, 상기 제1 코드에 대응되는 디버깅 정보 및 상기 제3 코드에 대응되는 디버깅 정보를 함께 출력하는 단계를 포함하는 것을 특징으로 하는 코드 변환 방법.
  9. 삭제
  10. 코드 변환 장치로서,
    소스 코드를 변환하여 중간 언어 코드를 생성하는 제1 변환부; 및
    상기 중간 언어 코드로부터, 상기 중간 언어 코드의 디버깅 정보에 대응되는 제1 코드를 포함하는 실행파일을 생성하는 제2 변환부를 포함하며,
    상기 코드 변환 장치는,
    상기 소스 코드에 대응되는 사용자 입력을 수신하는 입력부; 및
    상기 중간 언어 코드를 사용자 단말기에 전송하는 송신부를 더 포함하는 것을 특징으로 하는 코드 변환 장치.
  11. 삭제
  12. 제 10항에 있어서,
    상기 제1 코드는, 상기 중간 언어 코드에 연관된 위치 정보 및 변수 정보를 포함하는 것을 특징으로 하는 코드 변환 장치.
  13. 제 10항에 있어서,
    상기 실행파일을 처리하여 상기 제1 코드에 대응되는 디버깅 정보를 출력하는 디버깅부를 더 포함하는 것을 특징으로 하는 코드 변환 장치.
  14. 제 10항에 있어서,
    상기 중간 언어 코드는, 상기 소스 코드의 디버깅 정보에 대응되는 제2 코드를 포함하며,
    상기 실행파일은, 상기 제2 코드를 기계어로 변환하여 생성된 제3 코드를 더 포함하는 것을 특징으로 하는 코드 변환 장치.
  15. 제 14항에 있어서,
    상기 제2 코드는, 상기 소스 코드에 연관된 위치 정보 및 변수 정보를 포함하는 것을 특징으로 하는 코드 변환 장치.
  16. 제 14항에 있어서,
    상기 실행파일을 처리하여 상기 제1 코드에 대응되는 디버깅 정보 및 상기 제3 코드에 대응되는 디버깅 정보를 출력하는 디버깅부를 더 포함하는 것을 특징으로 하는 코드 변환 장치.
  17. 제 16항에 있어서,
    상기 디버깅부는, 사용자 입력에 대한 응답으로, 상기 제1 코드에 대응되는 디버깅 정보 및 상기 제3 코드에 대응되는 디버깅 정보를 선택적으로 출력하는 것을 특징으로 하는 코드 변환 장치.
  18. 제 16항에 있어서,
    상기 디버깅부는, 사용자 입력에 대한 응답으로, 상기 제1 코드에 대응되는 디버깅 정보 및 상기 제3 코드에 대응되는 디버깅 정보를 함께 출력하는 것을 특징으로 하는 코드 변환 장치.
  19. 삭제
  20. 프로그램이 기록된 컴퓨터로 판독가능한 기록매체로서,
    상기 프로그램은, 데이터 처리 기기가,
    소스 코드를 변환하여 중간 언어 코드를 생성하는 단계; 및
    상기 중간 언어 코드로부터, 상기 중간 언어 코드의 디버깅 정보에 대응되는 코드를 포함하는 실행파일을 생성하는 단계를 수행하도록 하는 명령을 포함하되,
    상기 프로그램은, 상기 데이터 처리 기기가,
    상기 소스 코드에 대응되는 사용자 입력을 수신하는 단계를 수행하도록 하는 명령; 및
    상기 중간 언어 코드를 생성하는 단계 이후에, 상기 중간 언어 코드를 사용자 단말기에 전송하도록 하는 명령을 더 포함하는, 컴퓨터로 판독 가능한 기록매체.
KR1020130148609A 2013-12-02 2013-12-02 중간 언어 코드의 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체 KR101670726B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020130148609A KR101670726B1 (ko) 2013-12-02 2013-12-02 중간 언어 코드의 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020130148609A KR101670726B1 (ko) 2013-12-02 2013-12-02 중간 언어 코드의 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체

Publications (2)

Publication Number Publication Date
KR20150063795A KR20150063795A (ko) 2015-06-10
KR101670726B1 true KR101670726B1 (ko) 2016-10-31

Family

ID=53505485

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130148609A KR101670726B1 (ko) 2013-12-02 2013-12-02 중간 언어 코드의 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체

Country Status (1)

Country Link
KR (1) KR101670726B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101913060B1 (ko) * 2018-02-12 2018-10-29 민경현 디버깅을 위한 모바일 장치 및 방법

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000353112A (ja) * 1999-06-11 2000-12-19 Nec Soft Ltd 中間言語レベルのデバッグ方法及びシステム
US20120159444A1 (en) * 2010-12-17 2012-06-21 Microsoft Corporation Fusing debug information from different compiler stages

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000353112A (ja) * 1999-06-11 2000-12-19 Nec Soft Ltd 中間言語レベルのデバッグ方法及びシステム
US20120159444A1 (en) * 2010-12-17 2012-06-21 Microsoft Corporation Fusing debug information from different compiler stages

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101913060B1 (ko) * 2018-02-12 2018-10-29 민경현 디버깅을 위한 모바일 장치 및 방법

Also Published As

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

Similar Documents

Publication Publication Date Title
CN110059009B (zh) 用于测试代码文件的方法和装置
JP5415557B2 (ja) デバッギングのためのユーザ・スクリプト・コードの変換
US9819758B2 (en) Remote debugging into mobile web applications across devices
US10331425B2 (en) Automated source code adaption to inject features between platform versions
US9223570B2 (en) Migration assistance using compiler metadata
US8776024B2 (en) Software application fine-tuning method, system, and corresponding computer program product
CN108139891A (zh) 针对外部文件的缺失包括建议
KR101770292B1 (ko) 컴퓨터 수행 가능한 모델 역공학 방법 및 장치
WO2016176059A1 (en) Mapping between local and remote for seamless build and design time experience
US8225286B2 (en) Debugging interpreted input
US20060009962A1 (en) Code conversion using parse trees
CN112269566B (zh) 脚本生成处理方法、装置、设备及系统
CN103077066A (zh) 一种编译时嵌入产品关键信息的方法和系统
KR101670726B1 (ko) 중간 언어 코드의 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체
CN115658140A (zh) 一种sdk的打包方法、装置、终端以及存储介质
KR101349631B1 (ko) 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체
KR20130020135A (ko) 통합 개발 환경에서의 코드 동시 개발자 리스트 제공 시스템 및 방법
US11169783B2 (en) System and method for generating an executable hardware-software interface specification
US20110099534A1 (en) Information processing apparatus, execution program operation modification method, and recording medium
KR101154380B1 (ko) 스크립트 언어로 제작된 컨텐츠를 이기종 임베디드 기기에서 실행이 가능하도록 하기 위한 임베디드 기기의 컨텐츠 실행 환경 설정 방법
US9720660B2 (en) Binary interface instrumentation
KR101598819B1 (ko) 타겟 독립적인 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체
KR101449657B1 (ko) 연산자의 값의 범위를 이용한 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체
US8839207B2 (en) Debugging extensible markup language
KR101277145B1 (ko) 공통 표현을 이용한 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체

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: 20190925

Year of fee payment: 4