KR100417655B1 - 최적화과정을참조하면서동작검증을행하도록디버그정보를생성하는디버그정보생성장치및프로그래머가최적화과정을의식하면서동작검증을할수있는디버그장치로이루어지는프로그램개발시스템 - Google Patents

최적화과정을참조하면서동작검증을행하도록디버그정보를생성하는디버그정보생성장치및프로그래머가최적화과정을의식하면서동작검증을할수있는디버그장치로이루어지는프로그램개발시스템 Download PDF

Info

Publication number
KR100417655B1
KR100417655B1 KR1019970011066A KR19970011066A KR100417655B1 KR 100417655 B1 KR100417655 B1 KR 100417655B1 KR 1019970011066 A KR1019970011066 A KR 1019970011066A KR 19970011066 A KR19970011066 A KR 19970011066A KR 100417655 B1 KR100417655 B1 KR 100417655B1
Authority
KR
South Korea
Prior art keywords
variable
unit
information
source code
line
Prior art date
Application number
KR1019970011066A
Other languages
English (en)
Other versions
KR980004050A (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 KR980004050A publication Critical patent/KR980004050A/ko
Application granted granted Critical
Publication of KR100417655B1 publication Critical patent/KR100417655B1/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/362Software debugging
    • 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
    • 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/3628Software debugging of optimised code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

본 발명은 복수의 최적화 처리가 행해진 경우에도 그 과정을 디버그 장치에 전달하는 것을 목적으로 하는 프로그램 개발 시스템에 관한 것으로서, 프리미티브 기억부(102)에는 최적화 과정의 이력정보가 기록되어 있다. 입력부(201)는 변수와 값을 또는 실행 및 정지하고자 하는 행의 입력을 접수한다. 프리미티브 합성부(204)는 최적화 과정을 나타내는 이력정보를 얻는다. 코드 실행부(206)는 실행코드를 실행한다. 변수 조작부(207)는 얻어진 변수와 자원의 관계에 기초하여 변수의 값을 얻는다. 출력부(208)는 얻어진 변수의 값을 표시한다. 행표시부(209)는 프로그램 또는 생성된 실행코드를 표시한다. 행 정보 표시부(210)는 행에 대하여 행해진 최적화에 관한 정보를 행단위로 표시한다. 조작 가능 변수 표시부(211)는 각 행에서 어느 변수가 설정 참조 가능한지를 행단위로 표시한다. 최적화 과정 표시부(212)는 변수에 관하여 어떠한 최적화가 이루어졌는지를 표시한다.

Description

최적화 과정을 참조하면서 동작검증을 행하도록 디버그 정보를 생성하는 디버그 정보 생성장치 및 프로그래머가 최적화 과정을 의식하면서 동작검증을 할 수 있는 디버그 장치로 이루어지는 프로그램 개발 시스템
본 발명은 소프트웨어 개발에 있어서, 프로그램 변환장치에 의해 생성된 실행코드(execution code)가 설계대로 동작하는지를 검증하고, 조기에 그 오류를 발견하는 디버그장치(debugging apparatus)와, 이 디버그장치용 디버그 정보를 생성하는 디버그 정보 생성장치로 이루어지는 프로그램 개발 시스템에 관한 것이다.
최근, 워드프로세서, 퍼스널 컴퓨터, 전자수첩 등의 정보기기나 비디오, 텔레비전, 냉장고 등의 가전제품의 모델 교체가 활발하게 행해지고 있다. 당연한 일이지만 모델의 교체가 빈번하면 그들 정보기기, 가전제품의 개발기간도 매우 짧아진다. 따라서, 제조회사들은 이와 같이 단기간에 신제품 개발을 완수하는 것에 언제나 매달려 있다. 한편, 이들 정보기기, 가전제품에서는 마이크로컴퓨터의 내장은 이미 상식이 되었고, 이 제어용 프로그램의 작성을 단기간에 이를 수 있는 것은 제조회사들의 기술자에게 중요한 문제가 되었다.
이러한 상황에서 「고급언어 지향의 개발환경」의 정비가 주목을 받고 있다. 「고급언어 지향의 개발환경」이란, 프로그램의 코딩으로부터 실제 기기상에서의 동작검증까지를 고급언어로 일관하여 행하는 개발환경을 말하며, 이 정비에 있어서 핵심이 되는 것은 디버그 장치에 고급언어 레벨에서의 동작검증을 행하게 하기 위한 디버그 정보의 생성이다.
디버그 정보(debugging information)란 소스 코드문 상태의 프로그램과 실행 코드 상태의 프로그램과의 대응관계를 나타내는 모든 정보의 총칭이며, 그 대표적인 것은 소스 코드문의 각 행과 실행코드의 어드레스와의 대응 관계를 나타내는 행 어드레스 정보(line-address information)와, 소스 프로그램 내의 변수와 실행코드가 이용하고 있는 레지스터 및 메모리와의 대응을 나타내는 할당 정보(allocation information)이다. 이와 같이 할당 정보에서 대응관계를 명시해 두는 것은, 변수가 프로그래머에 따라 임의로 정의되고 또 필요한 개수만큼 이용되는 것에 대하여, 레지스터나 메모리는 하드웨어 자체이며, 많은 변수 중 어느 것이 어떤 레지스터에 대응하고 있는지를 명시해 두면 사용자는 자신이 작성한 프로그램과 실행코드의 대응관계를 관리할 수 있기 때문이다.
이하, 도 1의 구성도를 참조하면서 이와 같은 디버그 정보를 이용한 디버그 장치의 종래 구성에 대하여 설명하기로 한다.
도 1에서 디버그 장치는 프로그램 기억부(301), 생성 코드 기억부(302), 최적화 정보 기억부(303), 디버그 정보 기억부(304), 입력부(401), 코드 실행부(402), 변수 조작부(403), 출력부(404) 및 행 표시부(405)로 구성된다.
프로그램 기억부(301)에는 기술자가 고급언어를 이용하여 작성한 프로그램이 기억된다.
생성 코드 기억부(302)에는 생성된 실행코드가 기억된다.
최적화 정보 기억부(303)에는 프로그램 기억부(301)에 기억된 프로그램에 대한 할당 정보가 기억된다.
디버그 정보 기억부(304)는 프로그램의 행과 실행코드의 어드레스와의 대응을 나타내는 행 어드레스 기억부(3041)와, 함수의 정보를 나타내는 함수 정보 기억부(3042)로 구성된다. 함수 정보 기억부(3042)의 내용으로서 함수의 개시 어드레스, 함수의 인수와 변수의 이름과 형태, 변수가 스택에 확보되는 경우는 스택의 오프셋값이 기억된다.
입력부(401)는 오퍼레이터가 값을 설정하고자 하는 변수 및 값을 참조하고자 하는 변수의 지정을 사용자로부터 접수한다.
코드 실행부(402)는 생성 코드 기억부(302)에서 실행코드를 얻어 실행한다.
변수 조작부(403)는 입력부(401)에서 지정된 변수의 할당 정보를 최적화 정보 기억부(303) 및 디버그 정보 기억부(304)에서 얻고, 지정 변수로 할당된 자원을 판단한다. 여기에서 자원이란 변수를 표현하기 위해 할당된 실행코드 중의 레지스터 또는 스택이다. 이와 같이 자원을 판단한 후, 코드 실행부(402)에 그 자원의 값을 문의한다. 문의에 의해 자원의 값을 얻으면 이것을 변수의 값으로서 출력부(404)에 표시시킨다.
행 표시부(405)는 프로그램 기억부(301)에서 프로그램을 얻어 정지 행(停止 行)을 포함하는 함수를 표시한다.
이상과 같이 구성된 디버그 장치에 대하여, 이하 그 동작에 대하여 설명하기로 한다. 프로그램 기억부(301)의 내용을 도 2a에, 생성 코드 기억부(302)의 내용을 도 2b에, 디버그 정보 기억부(304)의 내용을 도 2c에, 그리고 최적화 정보 기억부(303)의 내용을 도 2d에 각각 도시한다.
디버그 장치가 기동하면 행 표시부(405)는 함수 단위의 프로그램을 표시하고, 입력부(401)는 명령 라인을 표시하여 조작자로부터의 입력대기 상태가 된다. 이 입력대기 상태에서 조작자가 키를 타이핑함으로써 라인 10 에서의 변수(z)의 값을 참조하고자 한다는 의미의 명령을 입력하면(도 3a를 참조), 변수 조작부(403)는 행 어드레스 기억부(3041)를 검색하여 행 Line10이 어느 어드레스에 대응하는지를 조사한다. 도 2c에 도시한 행 어드레스 기억부(3041)의 예를 참조하면 행 Line10은 어드레스 0x128에 대응하는 것을 알 수 있다. 이와 같이 행 Line10이 어드레스0x128에 대응하는 것이 판명되면 코드 실행부(402)에 어드레스 0x128의 브레이크 포인트의 설정을 명령하는 동시에, 행표시부(405)에 행 Line10을 화살표로 표시하는 의미를 명령한다. 이와 같은 화살표의 표시에 의해 행 Line10까지의 실행이 이루어지는 의미를 조작자에게 통지한다(도 3b를 참조). 코드 실행부(402)는 생성 코드 기억부(302)에 기억된 실행코드를 브레이크 포인트가 설정된 어드레스 0x128까지 실행한다. 어드레스 0x128까지의 실행이 행해지면 변수 조작부(403)는 최적화 정보 기억부(303)를 검색하여 지정된 변수(z)에 어느 자원이 할당되어 있는지를 판정한다. 도 2d에서의 최적화 정보 기억부(303)의 예에서는 지정된 변수(z)가 레지스터(D3)에 할당되어 있다. 변수 조작부(403)는 이와 같이 할당된 데이터 레지스터(D3)를 최적화 정보 기억부(303)에서 얻고, 코드 실행부(402)에 레지스터(D3)의 값을 판독하도록 명령한다. 이와 같이 명령되면 코드 실행부(402)는 데이터 레지스터(D3)의 보유값 『10』을 판독한다. 코드 실행부(402)에 의해 데이터 레지스터(D3)의 보유값 『10』이 판독되면, 변수 조작부(403)는 판독된 유지값『10』을 변수(z)의 보유값으로서 출력하도록 출력부(404)에 명령한다. 이와 같이 명령되면 출력부(404)는 변수(z)의 변수명과 함께 보유값 『10』을 표시한다(도 3c를 참조).
이상과 같이 사용자에게 변수명을 입력시키고, 또 입력된 변수가 어느 자원에 할당되어 있는지를 변수 및 자원의 대응관계를 이용하여 판정하고, 그 자원의 값을 코드 실행부에 출력시킴으로써 실제의 기기상에서 실행코드 상태의 프로그램이 실행되었을 때, 각 변수의 값이 어떠한 값이 되는지를 사용자에게 제시할 수 있다.
이와 같이 변수와 자원의 대응관계에 의해 개발 효율의 향상을 도모한 디버그 장치의 단점은 디버그 장치가 내부 표현에 있어서 실행한 최적화의 내용을 사용자에게 제시할 수 없고, 내부 표현 상태의 최적화에 의해 프로그램 내용이 크게 고쳐 작성된 경우는 사용자는 자신이 기술한 프로그램이 어떻게 고쳐 작성되었지를 이해할 때까지 많은 시간을 필요로 한다.
예를 들면 소스 코드문에 있어서, 어느 변수의 값을 변경하고자 하는 경우, 최적화에 의해 그 변수를 포함하는 식이 일시 변수로 고쳐작성되어 있으면 그 일시 변수와 연산식과의 대응을 파악하지 않으면 상기와 같은 변경 조작은 불가능하다. 만일 다른 변수와 연산식과의 대응이 파악되지 않고 변수의 값을 변경하면 그 변경 조작에 의해 프로그램이 오동작할 염려가 있다.
이상의 원인에 의해 기술자가 이상한 현상에 직면한 경우, 그것이 프로그램의 버그인지 또는 최적화의 영향에 의한 것인지를 특정할 수 없고, 그 원인 규명에 많은 시간을 소비하게 된다. 그 때문에 프로그램의 버그 원인에 대한 해명이 잘 되지 않는다.
그래서 요즘 등장하고 있는 것이 일본특허공개 평6-274369호 공보에 기재되어 있는 바와 같은 디버그 방식이다. 즉, 최적화 전후에 소스 코드문이 어떻게 변화했는지의 해석을 프로그램 변환장치로 행하게 하고, 이 변화의 과정을 나타내는 정보를 생성하는 방식이다. 구체적으로는 소스 코드문내에 존재하면서도 최적화의 과정에서 다른 변수로 치환된 변수가 있었던 경우, 치환후의 변수가 어떤 자원에할당되었는지를 해석하고, 「치환전 변수와 자원」의 조합을 나타내는 정보를 생성한다.
또, 최적화에 의해 소스 코드문 『s=s+2*n』내의 연산식 『2*n』이 변수 『n1』로 치환된 경우, 치환 후의 변수(n1)가 어느 자원에 할당되었는지를 해석하고, 할당된 자원(R6)이 판명되면 상기 연산식 내의 변수 『n』이 『R6/2』로서 표현되는 의미를 나타내는 정보를 생성한다.
그러나 일본특허공개 평6-274369호 공보에 기재된 바와 같은 『치환전 변수와 자원』또는 『변수와 자원을 포함하는 식의 형식』에서는 『변수의 치환』, 『행의 삭제』, 『행의 이동』을 복잡하게 조합시킨 최적화 처리에 의한 프로그램의 고쳐쓰기 경위를 충분히 표현할 수 없다.
내부 표현 상태에서의 복잡한 최적화란 소스 코드문의 삭제, 소스 코드문의 이동, 및 변수의 치환, 이동 또는 삭제라는 기본적인 알고리즘을 조합하여 행해진다. 이 때, 프로그램 변환 장치는 자신의 사용 가능한 일시 변수를 적절히 생성하고, 이것을 이용하여 최적화를 행하는 것도 있다. 이것에 대하여 종래 기술의 디버그 방식에서는 최적화 처리에 의해 소스 코드문내의 변수가 다른 변수로 치환되고, 그 치환 후의 소스 코드문이 삭제되거나 다른 행으로 이동한 경우에도 그들의 모든 최적화가 이루어진 후의 최종 상태의 프로그램에 기초하여 『치환전 변수와 자원』또는 『변수와 자원을 포함하는 식』을 나타내는 정보를 생성한다.
상기 변수의 치환이나 행의 조합이 비교적 단순한 경우 이들 정보는 기술자가 참고로 할 만하지만, 변수의 치환이나 행의 조합이 보다 복잡하게 됨에 따라 이들 정보가 어떻게 생성되었는지의 경위를 파악하기 어려워진다. 그리고 기술자는 그 이해를 하는 것이 어려워지게 된다.
그래서 『카피 전파』(copy propagation),『상수 전파』(constant propagation) 등 지명도가 높은 최적화 방법, 또는 새로 개발된 주목받는 최적화 방법의 경위를 나타내도록 디버그 정보의 표기를 규정하는 방법이 고려되었다. 그러나 내부 표현에 대한 최적화는 신규 최적화 방법이 도입되는 빈도가 상당히 높으므로, 예를 들어 지명도가 높은 최적화 방법이나 주목도가 높은 최적화 방법으로 특화한 디버그 정보의 표기를 규정한다고 하더라도 모처럼 규정한 표기가 곧 시대에 뒤떨어질 우려가 있다.
본 발명은 상술한 문제점을 감안하여 이루어진 것으로, 제 1 목적은 행의 삭제, 이동, 변수의 치환, 이동, 삭제라는 기본적인 알고리즘을 조합한 복잡한 최적화가 행해져도 그 과정을 보다 치밀하게 표현할 수 있는 디버그 정보 생성장치를 갖는 프로그램 개발 시스템을 제공하기 위한 것이다.
본 발명의 제 2 목적은, 행의 삭제, 이동, 변수의 치환, 이동, 삭제라는 기본적인 알고리즘을 조합하여 구성된 새로운 최적화 방법이 프로그램 변환 장치에 의해 행해져도 그 최적화 방법에 의한 최적화 과정을 표현함으로써 최적화 과정의 표현에 확장성을 허용하는 디버그 정보 생성장치를 갖는 프로그램 개발 시스템을 제공하는 것이다.
도 1은 종래의 디버그 장치의 구성도.
도 2a는 프로그램 기억부(301)의 기억 내용의 예를 도시한 도면.
도 2b는 생성 코드 기억부(302)의 기억 내용의 예를 도시한 도면.
도 2c는 디버그 정보 기억부(304)의 기억 내용의 예를 도시한 도면.
도 2d는 최적화 정보 기억부(303)의 기억 내용의 예를 도시한 도면.
도 3a는 입력부(401)에 대하여 입력 조작의 예를 도시한 도면.
도 3b는 행 표시부의 표시 내용을 도시한 도면.
도 3c는 출력부의 표시내용을 도시한 도면.
도 4는 프로그램 변환 장치 및 디버그 장치의 내부 구성, 그들의 내부 구성과 프로그램 기억부(101), 프리미티브 기억부(102), 생성 코드 기억부(103), 디버그 정보 기억부(104)의 입출력 관계를 도시한 도면.
도 5a는 프로그램 기억부(101)의 기억 내용의 예를 도시한 도면.
도 5b는 생성 코드 기억부(103)의 기억 내용의 예를 도시한 도면.
도 5c는 디버그 정보 기억부(104)의 기억 내용의 예를 도시한 도면.
도 5d는 프리미티브 기억부(102)의 기억 내용의 예를 도시한 도면.
도 5e는 이동 행 정보 삭제부(108) 및 불필요 변수 정보 삭제부(109)에 의해 프리미티브의 삭제가 이루어진 후의 프리미티브 기억부(102)의 기억 내용을 도시한 도면.
도 6a는 프리미티브 기억부(102)에 기억된 프리미티브의 프리미티브명, 표현 형식, 의미 내용의 대응을 도시한 도면.
도 6b는 최적화 항목과 프리미티브의 대응 관계를 도시한 도면.
도 7은 본 실시예에 따른 하드웨어 모델을 도시한 도면.
도 8a는 생성 코드 기억부(103)에 기억된 실행코드열의 예를 도시한 도면.
도 8b는 디버그 정보 기억부(104)에 기억된 실행코드열의 예를 도시한 도면.
도 9a는 출력부(208), 행 표시부(209), 행 정보 표시부(210), 조작가능 변수 표시부(211), 최적화 과정 표시부(212), 변수 자동 표시부(214)에 의한 표시가 이루어진 상태의 디스플레이(502) 상의 표시예.
도 9b는 행 표시부(209), 행 정보 표시부(210), 조작가능 변수 표시부(211)에 의한 표시가 이루어진 상태의 디스플레이(502) 상의 표시예.
도 10은 이동 삭제 변수 판정부(202)의 처리 내용을 도시한 플로우 챠트.
도 11은 브레이크 포인트 설정부(203)의 처리 내용을 도시한 플로우 챠트.
도 12는 조작가능 변수 표시부(211)의 처리 내용을 도시한 플로우 챠트.
도 13은 코드 실행부(206)의 처리 내용을 도시한 플로우 챠트.
도 14a는 연동 표시 제어부(215)의 처리 내용을 도시한 플로우 챠트.
도 14b는 연동 표시 제어부(215)의 처리 내용을 도시한 플로우 챠트.
도 15a∼도 15c는 연동 표시 제어부(215)의 동작에 의한 디스플레이(502)의 표시 내용의 이동 변화를 도시한 도면.
도 16은 제 2 실시예에 따른 프로그램 기억부(101)의 기억 내용의 예를 도시한 도면.
도 17a는 제 2 실시예에 따른 프로그램 기억부(101)의 기억 내용의 예를 도시한 도면.
도 17은 제 2 실시예에 따른 프리미티브 기억부(102)의 기억 내용의 예를 도시한 도면.
도 17c는 제 2 실시예에 따른 디버그 정보 기억부(104)의 기억 내용의 예를 도시한 도면.
도 17d는 제 2 실시예에 따른 생성 코드 기억부(103)의 기억 내용의 예를 도시한 도면.
도 18a는 제 2 실시예에 따른 변수 조작부(207)의 처리 내용을 도시한 플로우 챠트.
도 18b는 제 2 실시예에 따른 변수 조작부(207)의 처리 내용을 도시한 플로우 챠트.
도 19a는 코드 실행부(206)가 하드웨어 환경에서 생성 코드 기억부(103)의 실행코드를 실행한 경우의 각 레지스터의 보유 내용의 예를 도시한 도면.
도 19b는 도 18의 플로우 챠트에 의해 변수 조작부(207)가 처리를 행했을 때의 출력부(208)의 표시예.
도 19c는 코드 실행부(206)가 하드웨어 환경에서 생성 코드 기억부(103)의 실행코드를 실행한 경우의 각 레지스터의 보유 내용의 예를 도시한 도면.
* 도면의 주요 부분에 대한 부호의 설명 *
101 : 프로그램 기억부 102 : 프리미티브 기억부
103 : 생성 코드 기억부 104 : 디버그 정보 기억부
201 : 입력부 202 : 이동 삭제변수 판정부
203 : 브레이크 포인트 설정부 204 : 프리미티브 합성부
205 : 합성기동 판단부 206 : 코드 실행부
207 : 변수 조작부 208 : 출력부
209 : 행표시부 210 : 행정보 표시부
211 : 조작가능변수 표시부 212 : 최적화 과정 표시부
213 : 변수순서 전환부 214 : 변수자동 표시부
215 : 연동표시 제어부
상기 제 1 및 제 2 목적 달성을 위한 본 발명의 프로그램 개발 시스템은 번역처리(컴파일링)시에 내부 표현으로 변환된 소스 파일에 대하여 최적화 처리가 행해지는 동안, 소정의 편집 내용이 소스 파일 중의 어떤 코드에 대하여 행해졌는지를 행마다 판정하는 제 1 판정수단과, 소정의 편집 내용이 행해졌다고 판정한 경우 그 코드에 대응하는 소스 코드문을 포함하는 행의 행번호와, 편집 내용과, 편집 전후의 코드의 조합에 의해 편집 전후의 변천을 나타내는 변천 정보를 생성하는 생성 수단으로 이루어지는 번역 후의 기계어 프로그램에 대한 동작검증용 명령인 디버그 명령을 수신하는 명령 수신수단과, 디버그 명령의 내용을 해석하고, 디버그 명령 내에 편집전 코드에 대한 지시가 포함되어 있다면 같은 코드를 포함하던 모든 변천 정보에 기초하여 상기 편집에 의한 상기 편집전 코드의 변천경위를 해석하는 해석 수단과, 해석된 변천 경위를 표시하는 제 1 표시수단과, 기계어 프로그램을 구성하는 복수의 실행코드 중 디버그 명령에 해당하는 것을 해석수단에 의해 해석된 변천 경위를 참조하여 검출하고, 검출한 실행코드에 대하여 동작검증을 행하는 동작검증 수단으로 이루어지는 디버그 장치로 구성되는 것에 있다.
상기 구성에서 제 1 판정수단을 제 1 편집 내용으로서 최적화 처리에 의해 소스 코드문 중의 변수를 다른 변수 또는 상수로 치환하는 의미의 편집 내용이 행해졌는지를 판정하는 제 1 판정부와, 제 2 편집 내용으로서 최적화 처리에 의해 소스 코드문 중의 연산식을 다른 변수 또는 상수로 치환하는 의미의 편집 내용이 행해졌는지를 판정하는 제 2 판정부와, 제 3 편집 내용으로서 최적화 처리에 의해 소스 코드문을 다른 행으로 이동하는 의미의 편집 내용이 행해졌는지를 판정하는 제3 판정부와, 제 4 편집 내용으로서 최적화 처리에 의해 소스 코드문을 삭제하는 의미의 편집 내용이 행해졌는지를 판정하는 제 4 판정부로 구성하고,
생성수단을 제 1 편집 내용의 편집이 행해지면 해당 소스 코드문이 존재하는 행의 행번호와, 치환 전의 변수명과, 치환 후의 변수명 또는 정수명과, 그들이 치환된 의미를 나타내는 식별 정보를 포함하는 제 1 변천 정보를 생성하는 제 1 생성부와, 제 2 편집 내용의 편집이 행해지면 해당 소스 코드문이 존재하는 행의 행번호와, 치환 전의 연산식과 치환 후의 변수명 또는 상수와, 그들이 치환된 의미를 나타내는 식별 정보를 포함하는 제 2 변천 정보를 생성하는 제 2 생성부와, 제 3 편집 내용의 편집이 행해지면 그 소스 코드문이 존재하는 원래 행의 행번호와, 그 소스 코드문의 이동 후의 행의 행번호와, 이동이 행해진 의미를 나타내는 식별 정보를 포함하는 제 3 변천 정보를 생성하는 제 3 생성부와, 제 4 편집 내용의 편집이 행해지면 최적화 처리에 의해 소스 코드문을 삭제하면 그 소스 코드문의 행번호와 그 소스 코드문에 삭제된 것을 나타내는 식별정보를 포함하는 제 4 변천 정보를 생성하는 제 4 생성부로 구성해도 된다.
또, 디버그 장치를 제 1∼제 4 생성부에 의해 생성된 제 1∼제 4 변천 정보를 기억하는 변천정보 기억수단과, 어느 행의 소스 코드문 내의 변수가 어느 하드웨어 자원에 할당되었는지를 소스 코드문에 존재하는 행의 행번호와, 변수명 - 자원명의 나열에 의해 표현한 할당 정보를 기억하는 할당 정보 기억수단으로 구성하고,
해석수단을 디버그 명령 내에 포함되는, 보유값을 판독할 변수명의 지시를해석하는 제 1 해석부와, 제 1 해석부에 의해 해석된 변수를 치환전 변수 또는 치환후 변수로서 지정하고 있는 제 1 변천 정보 및 제 2 변천 정보가 변천정보 기억 수단에 기억되어 있다면 이것을 검출하는 제 1 검출부와, 검출된 제 1 변천정보 및 제 2 변천정보에 포함되는 치환후 변수명을 포함하는 할당 정보가 할당 정보 기억 수단에 기억되어 있다면 이것을 검출하는 제 2 검출부로 구성하고,
동작검증 수단을 검출된 제 1 변천정보, 제 2 변천정보 및 할당 정보를 그들이 포함하고 있는 자원명과 치환전 변수명과, 치환후 변수명으로 이루어지는 할당 정보에 합성하는 합성부와, 판독 지시가 포함되어 있다면 합성된 할당 정보 내의 자원명으로 지시되는 하드웨어 자원의 값을 판독하는 판독부로 구성하고,
제 1 표시수단에 하드웨어 자원의 판독이 행해지면, 치환전 변수가 치환후 변수로 치환된 의미의 메시지와, 그들의 조합이 모두 하드웨어 자원으로부터 판독된 값이라는 의미를 표시하는 제 1 표시부를 구비시켜도 된다.
상술한 목적 및 기타의 목적과 본 발명의 특징 및 이점은 첨부도면과 관련한 다음의 상세한 설명을 통해 보다 분명해 질 것이다.
이하 본 발명의 실시예에 대하여 도 4∼도 19를 참조하여 설명하기로 한다.
(제 1 실시예)
우선 본 실시예에서의 프로그램 개발 시스템의 전체 구성을 도 4에 도시한다. 본 실시예에서의 프로그램 개발 시스템은 디버그 정보 생성장치를 내장한 프로그램 변환 장치, 디버그 장치, 프로그램 기억부(101), 프리미티브(primitive) 기억부(102), 생성 코드 기억부(103) 및 디버그 정보 기억부(104)로 구성되고, 프로그램 변환 장치 및 디버그 장치는 프로그램 기억부(101), 프리미티브 기억부(102), 생성 코드 기억부(103) 및 디버그 정보 기억부(104)에 기억된 정보를 서로 공유한다.
프로그램 기억부(101)는 행단위로 구분된 기억 영역을 갖고 있고, 이 기억영역에 기술자가 고급 언어를 이용하여 작성한 소스 프로그램이 기억된다.
도 5a는 소스 프로그램이 기억된 프로그램 기억부(101)의 기억 내용을 나타내는 것이며, C 프로그래밍언어로 기술된 프로그램의 예이다. 본 프로그램은 복수의 소스 코드문으로 구성되며, 각각의 소스 코드문에 『행(Line1)』『행(Line2)』『행(Line3)』.....이라는 행번호가 붙여져 있다. 각 행에는 기호 『;』를 단락으로 하여 작성된 소스 코드의 문장이 기억되어 있다. 이들 문장 중 등호 『=』의 좌변에 변수명을 배치한 것은 그 변수에 대하여 값을 대입한다는 의미(말하자면 『대입문』)이다.
이 대입문은 3개의 형태가 존재한다. 제 1 형태는 등호의 우변에 변수가 존재하는 것, 제 2 형태는 등호의 우변에 상수(constant)가 존재하는 것, 제 3 형태는 연산자 및 피연산자로 이루어지는 연산식이 존재하는 것이다.
도 5a에서의 프로그램 기억부(101)에 기억된 프로그램의 각 행의 의미 내용을 설명한다.
행 Line1에서의 소스 코드문 『void test(void)』는 함수 test의 시작을 나타낸다. 또, 문장 중의 『void』는 함수 test의 인수와 복귀값이 존재하지 않음을 나타낸다.
행 Line2는 선언문이며, 함수 test만으로 사용하는 일시 변수 『a, b, x, y』를 정수(整數: interger)형 『int』로서 선언한다.
행 Line3은 대입문이며, 변수 b에 100을 대입하는 것을 나타낸다.
행 Line4는 함수 init를 호출하는 함수 호출문이다.
행 Line5는 『while(***)』의 『***』으로 지정되는 조건문이 논리값 『1』인 동안, 『{』 『}』에 의해 닫혀진 범위, 즉 Line5에서 Line12까지의 행을 반복하는 것을 나타낸다. 행 Line5에 있어서는 『***』으로 지정되는 조건문에 『1』을 기술하고 있기 때문에 『{』 『}』에 의해 닫혀진 범위의 반복은 무한히 행해진다.
행 Line6은 함수 getDatal 을 호출하고, 함수의 복귀값을 변수 x에 대입하는 것을 한 문장으로 나타낸다.
행 Line7은 연산식『12*b』의 결과를 변수 a에 대입하는 것을 나타낸다.
행 Line8은 인수를 a로 하여 함수 g1을 호출하는 것을 나타낸다.
행 Line9는 변수 z에 변수 x를 대입하는 것을 나타낸다.
행 Line10은 인수를 z으로 하여 함수 g2를 호출하는 것을 나타낸다.
행 Line11은 인수를 x로 하여 함수 g3을 호출하는 것을 나타낸다.
행 Line12는 Line5의 반복 범위의 종료를 나타낸다.
행 Line13은 함수 test의 종료를 나타낸다.
프리미티브 기억부(102)는 프로그램 기억부(101)와 마찬가지로 행단위로 구분된 기억 영역을 갖는다. 프로그램 기억부(101)와 다른 점은 프로그램 기억부(101)에는 미리 프로그래머가 작성한 소스 프로그램이 기억되어 있는데 대하여 프리미티브 기억부(102)는 그 초기상태에서는 아무것도 기입되어 있지 않다는 것이다. 단, 프리미티브 기억부(102)의 기억 영역은 후술하는 프리미티브 생성부(107)가 기동하면 프리미티브라 불리우는 정보의 기입 장소로서 이용된다.
생성 코드 기억부(103)는 복수의 소영역으로 분할되고, 각각의 소영역에 어드레스가 할당된 기억 영역을 갖는다. 이 기억 영역은 후술하는 코드 생성부(110)가 코드를 생성했을 때 실행코드의 기입장소로서 이용된다.
디버그 정보 기억부(104)는 행어드레스 기억부(1041)와, 함수정보 기억부(1042)로 이루어진다. 행어드레스 기억부(1041)는 대응표 형식으로 구분된 기억 영역을 갖는다. 이 대응표는 어드레스컬럼 및 행컬럼을 갖고, 각각에 생성 코드 기억부(103)가 갖는 기억 영역내의 소영역에 할당된 어드레스, 프로그램 기억부(101)내의 각 행에 할당된 행번호가 기입된다.
함수 정보 기억부(1042)에는 프로그램 기억부(101)에 기억되어 있는 소스 프로그램에 주어진 함수명과, 그 함수의 인수 및 복귀값, 그 인수와 변수의 이름과 형태가 기억된다. 또, 함수가 실행코드로 변환되는 경우에 대비하여 함수의 개시 어드레스가 기입되도록 되어 있다. 또, 변수가 스택에 확보되는 경우에 대비하여 스택의 오프셋값이 기입되도록 되어 있다.
다음으로, 도 4의 프로그램 변환장치의 구성에 대하여 설명한다. 프로그램 변환장치는 내부표현 변환부(105)와, 최적화부(106)와, 프리미티브 생성부(107)와, 이동행 정보 삭제부(108)와, 불필요 변수 정보 삭제부(109)와, 코드 생성부(110)와, 행 어드레스 정보 생성부(111)로 이루어진다. 이 중, 프리미티브 생성부(107)및 행 어드레스 정보 생성부(111)는 디버그 정보 생성장치를 구성한다.
내부 표현 변환부(105)는 프로그램 기억부(101)로부터 프로그램을 얻어 문자열 상태로부터 내부 표현 상태로 변환한다. 일반적으로 내부 표현은 구문해석기로 표현되는데 본 실시예에서는 설명의 편의상, 프로그램에 수정을 가하는 방식으로 표현한다.
최적화부(106)는 내부 표현 변환부(105)에 의해 내부 표현으로 변환된 프로그램으로부터 최적의 코드를 생성할 수 있도록 고쳐 기입한다. 이를 위하여, 최적화부는 공통부분식 최적화부(1061), 상수 전파 최적화부(1062), 복사 전파 최적화부(1063), 루프 불변식 최적화부(1064), 불필요 코드 최적화부(1065), 레지스터 할당부(1066)를 포함한다.
공통부분식 최적화부(1061)에서는 복수의 대입문의 우변에서 공통의 연산식이 이용되고 있는지를 해석한다. 이와 같이 해석하는 것은 일반적으로 가산, 감산, 승산, 제산 등의 연산식에서는 중앙 연산장치가 내장되어 있는 산술 연산기에 대한 제어를 포함하는 연산명령이 생성되기 때문이다. 이들의 연산명령은 그 외의 명령에 비하여 중앙 연산장치에 주는 부담이 크므로 만일 동일한 연산식이 복수의 대입문내에 중복하여 존재하면 중앙 연산장치에 주는 부담은 그 대입문 수에 비례하여 배로 증가하기 때문이다. 이와 같은 현상을 고려하여 공통부분식 최적화부(1061)는 복수의 대입문의 우변에서 공통의 연산식이 이용되고 있는지를 해석한다.
프로그램예를 예로들어 설명하면, 연산식 『x*300』이 4개의 대입문『y=fnc(x*300)』, 『z=(x*300)+5』, 『a=b+13*(x*300)』, 『a=540/(x*300)』내에 포함되어 있는 경우, 공통부분식 최적화부(1061)는 이것을 해석하여 대입문 우변에 존재하는 그들의 연산식 『x*300』을 변수 『t1』으로 치환한다. 이와 같이 치환하면 상기 4개의 대입문은 『y=fnc(t1)』, 『z=t1+5』, 『a=b+13*t1』, 『a=540/t1』으로 된다. 그리고 이와 같은 치환을 마치면 공통부분식 최적화부(1061)는 해당변수 『t1』을 좌변에 배치하고, 상기 연산식 『x*300』을 우변에 배치한 대입문 『t1=x*300』을 생성하여 프로그램내에 삽입한다. 합계를 생각하면, 원래 4개의 대입문에서 존재하던 연산식이 없어지고, 그 대신에 변수를 생성하였으므로 프로그램의 전체에 대한 상기 연산식에 의한 영향은 1/4로 저하하게 된다. 이상과 같이 공통의 연산식을 포함하는 대입문의 수가 많을수록 공통부분식 최적화부(1061)에 의한 최적화는 영향이 커지게 된다.
상수 전파 최적화부(1062)는 상수를 변수에 대입하는 대입문이 있고, 또 대입문 이후의 다른 대입문에서 그 변수가 사용되고 있는지(대입문 우변에 존재하는지)를 해석한다. 이와 같은 해석을 행하는 것은 상수와 변수간의 대입문 수를 가능하면 감소시키기 위해서이다. 즉, 상수와 변수간의 대입문이 존재하지만 해당 변수가 다른 대입문에서 사용되고 있지 않기 때문에 상기 대입문의 존재는 아무것도 아니며, 즉시 삭제해도 아무런 문제도 생기지 않기 때문이다. 만일 대입된 변수가 이후의 대입문에서 사용되는 경우에는 상수 전파 최적화부(1062)는 그 변수가 우변에 존재하는 대입문을 상수로 치환할 수 있는지 여부를 해석한다. 즉, 상수와 변수간의 대입문이 존재하지 않아도 되도록 적극적인 치환을 시도하는 것이다. 만일 가능하다면, 대입문 내의 우변에 존재하는 변수를 상수로 치환한다. 도 5a에서 Line7의소스 코드문 『a=12*b』의 변수 b는 행 Line3에서 상수 100 이 대입되어 있는 것이다. 이 행 Line3에서의 상수 100과 변수 b간의 대입문을 삭제하기 위해 상수 전파 최적화부(1062)는 행 Line7에서의 변수 b를 상수 100으로 치환하여 행 Line7의 소스 코드문을 『a=12*b』에서 『a=12*100』으로 치환한다.
복사 전파 최적화부(1063)는 『a=b』『y=x』등과 같이 변수에서 변수로 단순히 값을 전달할 뿐인 대입문이 있고, 또 대입문 이후의 다른 대입문에서 그 전송 목적지 변수가 사용되고 있는지를 해석한다. 이와 같은 해석을 하는 것은 변수와 변수간의 대입문 수를 가능한 한 감소시키기 위해서이다. 즉, 변수와 변수간의 대입문이 존재하지만 해당 전송 목적지 변수가 다른 문에서 사용되고 있지 않다면 상기 대입문의 존재는 문제될 것이 없으며, 즉시 삭제해도 아무런 문제도 생기지 않기 때문이다. 만일 전송 목적지 변수가 이후의 대입문에서 사용되는 경우는, 복사 전파 최적화부(1063)는 그 변수가 우변에 존재하는 대입문을 전송 출발지 변수로 치환하는 것이 가능한지를 해석한다. 즉, 변수와 변수간의 대입문이 존재하지 않아도 되도록 적극적인 치환을 시도하는 것이다. 만일 치환 가능하다면 대입문 내의 우변에 존재하는 변수를 변수로 치환한다. 도 5a에서 Line9는 변수 x에서 변수 z로의 단순한 전달에 지나지 않는다.
복사 전파 최적화부(1063)는 이와 같은 전송만을 의미하는 대입문을 삭제하기 위해 변수 z의 사용 유무를 탐색하고, 행 Line9에서의 변수 z의 사용을 검출한다. 그리고 변수 z와 변수 x간의 대입문을 삭제하기 위해 복사 전파 최적화부(1063)는 행 Line10에서 『g2(z)』내의 『z』를 『x』로 치환한다. 이 치환 결과, 행 Line10의 소스 코드문은 『g2(x)』 로 된다.
루프 불변식 최적화부(1064)는 루프에 포함되는 문 중에서 루프의 외부로 이동해도 실행 결과에 영향을 주지 않는 문을 해석한다. 일반적으로 프로그램에서 루프 내에 위치하는 부분은 몇천회, 몇백회라는 회수로 반복되는 경우가 적지 않고, 만일 루프 내에 불필요한 용장(redundant) 문이 존재한다면 그 용장 문이 몇천회, 몇백회라는 단위로 불필요하게 반복된다. 상기 『루프의 외부로 이동해도 실행결과에 영향을 주지 않는 문장』이란, 상기 몇천회, 몇백회라는 반복에서도 대입 목적지로 지정된 변수의 증감이 전혀 생기지 않는 문장이며, 『용장 문』 에 상당한다. 이와 같은 『용장 문』 을 해석하면 루프 불변식 최적화부(1064)는 이 『용장 문』을 루프의 외부로 이동한다. 도 5a의 프로그램 예에서 행 Line7에 존재하던 『a=12*b』는 도 5b에 있어서 while문의 반복대상외인 행 Line4로 이동되지만, 이것은 변수 a 및 변수 b가 while문의 반복이 행해져도 전혀 증감이 발생하지 않는 것을 검출했기 때문이다.
불필요 코드 최적화부(1065)는 공통부분식 최적화부(1061), 상수 전파 최적화부(1062), 복사 전파 최적화부(1063)가 치환을 했기 때문에 불필요하게 된 문장을 삭제한다. 도 5a의 프로그램 예를 이용하여 상기 처리를 보충한다. 도5a의 예에서 행 Line7에 포함된 변수 b가 정수 전파 최적화부(1062)에 의해 상수 100로 치환되고, 행 Line10에 포함된 변수 z가 복사 전파 최적화부(1063)에 의해 변수 x로 치환된 것은 이미 설명했다. 이들의 치환이 행해지면 행 Line3, 행 Line9의 대입문은 이미 불필요하게 되는 것을 알 수 있다. 이것을 감안하여 불필요 코드최적화부(1065)는 Line3, Line9의 대입문을 삭제한다. 또 불필요 코드 삭제부(1065)는 변수가 선언되고, 변수가 대입되어 있지만 그 값이 이후의 문장에서 전혀 사용되지 않는 경우 이것을 삭제한다.
레지스터 할당부(1066)는 프로그램 중의 변수를 타겟 머신의 하드웨어가 갖고 있는 레지스터 또는 메모리에 할당한다. 이 자원 할당에 있어서, 레지스터 할당부(1066)는 프로그램에 있어서, 각 변수의 생존구간이 어떻게 서로 중복되어 있는지를 조사하고, 그 서로 중복하는 변수에 각각 다른 레지스터를 할당한다. 또, 레지스터 할당부(1066)는 각 변수의 네스트(nest) 레벨이 어느 만큼인지 또는 각 변수의 사용 빈도가 어느 만큼인지를 조사하여 이 조사한 결과에 기초하여 각 변수에 우선순위를 부여한다. 그리고 이 우선순위가 높은 순서대로 레지스터를 할당해 간다. 그 결과, 레지스터에 할당되지 않은 변수는 스택에 할당한다. 도5a의 예에서는 변수 b, 변수 z가 사용되지 않으므로 할당하지 않는다. 변수 a에 대해서는 레지스터(D2)를 할당하고 변수 x에 대해서는 레지스터(D3)를 할당한다. 이 결과, 최적화된 코드는 도 5c로 된다.
프리미티브 생성부(107)는 말하자면 디버그 정보 생성장치의 구성 요소의 하나이며, 디버그 정보의 생성을 최적화부(106)에 의한 최적화가 행해지는 것을 감시하고, 그 때마다 이것에 동기하여 프리미티브를 생성하여 프리미티브 기억부(102)에 기입한다. 프리미티브란 디버그 정보의 일종으로서 최적화부(106)에 의한 최적화 과정에서의 소스 코드문의 변화 경위를 나타낸 정보이다.
최적화부(106)에 의한 최적화란 공통부분식 최적화부(1061)에 의한 연산식에서 변수로의 치환, 상수 전파 최적화부(1062)에 의한 변수에서 상수로의 치환, 복사 전파 최적화부(1063)에 의한 변수에서 변수로의 치환, 루프 불변식 최적화부(1064)에 의한 루프부에서의 문장 이동, 불필요 코드 최적화부(1065)에 의한 불필요 문장의 삭제, 레지스터 할당부(1066)에 의한 변수에 대한 레지스터와 스택간의 할당이 있고, 최적화가 행해질 때마다 프리미티브 생성부(107)에 의한 프리미티브 생성은 행해진다.
프리미티브의 종류와 표현 형식과 의미에 대해서는 도 6a를 참조한다. 도 6a는 각 종류의 프리미티브가 어떠한 형식으로 표현되고, 어떠한 의미를 갖는지를 나타내는 대응표이며, 프리미티브의 종류의 전부를 나타내는 종류 컬럼과, 각 종류의 프리미티브의 표현 형식을 나타내는 표현형식 컬럼, 어떠한 의미를 갖는지를 나타내는 의미 컬럼으로 이루어진다.
이 대응표에서 종류 컬럼은 크게 나누어 『변수에 관한 프리미티브』 와 『행에 관한 프리미티브』로 나뉘어진다. 『변수에 관한 프리미티브』에는 『변수의 삭제』 『변수의 이동』『변수의 치환』『변수의 자원』이 있고, 『행에 관한 프리미티브』에는 『행의 삭제』『행의 이동』이 있다.
표현 형식 컬럼의 『삭제 x1』는 프리미티브 종류 『변수의 삭제』의 표현 형식의 예이며, 그 의미 내용은 그 오른쪽의 의미 컬럼에 나타낸 것이다. 즉, 변수 x1(이 변수 x1은 이제까지의 설명에 이용한 도 5a의 프로그램 예에 존재하지 않는 것에 유의하기 바람)이 삭제되었다는 의미를 나타낸다.
표현 형식 컬럼의 『이동 x2 To:Line1』은 프리미티브 종류 『변수의 이동』의 표현 형식의 예이며, 그 의미 내용은 그 오른쪽의 의미 컬럼에 나타낸 것이다. 즉, 변수 x2(이 변수 x2도 이제까지 설명에 이용한 도 5a의 프로그램 예에 존재하지 않는 것에 유의하기 바람)가 행 Line1로 이동했다는 의미를 나타낸다.
표현 형식 컬럼의 『치환 x3→ y1』『치환 x4→ 5』는 프리미티브 종류『변수의 치환』의 표현 형식의 예이며, 그 의미 내용은 그 오른쪽의 의미 컬럼에 나타낸 것이다. 즉, 변수 x3이 변수 y1로 치환되고, 변수 x4가 상수 5로 치환되었다는 의미를 나타낸다(이 변수 x3, 변수 x4는 이제까지 설명에 이용한 도 5a의 프로그램 예에 존재하지 않는 것에 유의하기 바람).
또, 최적화 항목과 생성되는 프리미티브의 관계에 대해서는 도 6b를 참조한다. 도 6b는 도 6a에 도시한 각 표현 형식의 프리미티브가 어떠한 최적화 항목이 실행된 경우에 생성되는지를 나타낸 도면이다. 본 도면에서 『공통부분식 최적화』의 가로행을 참조하면 『연산식의 치환』컬럼과 『문장의 생성』컬럼이 『생성』으로 표시되어 있는 것을 알 수 있다. 이것은 공통부분식 최적화부(1061)가 최적화를 행하면 프리미티브 생성부(107)가 『연산식의 치환』의 프리미티브와 『문장의 생성』의 프리미티브를 생성하는 것을 의미한다. 즉, 프리미티브 생성부(107)는 최적화부(106)가 기동하면, 최적화부(106)의 동작 감시를 개시한다. 그리고 공통부분식 최적화부(1061)가 복수의 소스 코드문 중의 연산식을 다른 변수로 치환하면 『연산식의 치환』의 프리미티브를 생성한다. 또, 공통부분식 최적화부(1061)가 해당 연산식을 우변에 배치하고, 다른 변수를 좌변에 배치한 소스 코드문을 생성하면 프리미티브 생성부(107)는 『문장의 생성』의 프리미티브를 생성한다.
또 『상수 전파 최적화』의 가로행을 참조하면 『변수의 치환』컬럼과 『행의 삭제』컬럼이 『생성』으로 표시되어 있는 것을 알 수 있다. 이것은 상수 전파 최적화부(1062)가 최적화를 행하면 프리미티브 생성부(107)가 『변수의 치환』의 프리미티브와 『행의 삭제』의 프리미티브를 생성하는 것을 의미한다. 즉, 프리미티브 생성부(107)는 최적화부(106)가 기동하면 최적화부(106)의 동작 감시를 개시한다. 그리고 복사 전파 최적화부(1063)가 복수의 소스 코드문 중의 변수를 다른 변수로 치환하면 『변수의 치환』의 프리미티브를 생성한다. 또, 복사 전파 최적화부(1063)의 처리 후, 불필요하게 된 소스 코드문이 삭제되면 프리미티브 생성부(107)는 『행의 삭제』의 프리미티브를 생성한다.
또 『복사 전파 최적화』의 가로행을 참조하면 『변수의 치환』컬럼과 『행의 삭제』컬럼이 『생성』으로 표시되어 있는 것을 알 수 있다. 이것은 복사 전파 최적화부(1063)가 최적화를 행하면 프리미티브 생성부(107)가 『변수의 치환』의 프리미티브와 『행의 삭제』의 프리미티브를 생성하는 것을 의미한다. 즉, 프리미티브 생성부(107)는 최적화부(106)가 기동하면 최적화부(106)의 동작 감시를 개시한다.
그리고 복사 전파 최적화부(1063)가 복수의 소스 코드문 중의 연산식을 다른 변수로 치환하면 『변수의 치환』의 프리미티브를 생성한다. 또, 복사 전파 최적화부(1063)의 처리 후, 불필요하게 된 소스 코드문이 삭제되면 프리미티브 생성부(107)는 『행의 삭제』의 프리미티브를 생성한다. 또 불필요 코드 삭제부(1065)가, 변수가 선언되고 변수가 대입되어 있지만 그 값이 이후의 문장에서 전혀 사용되지 않는 변수를 삭제한 경우, 프리미티브 생성부(107)는 변수 삭제의 프리미티브를 생성한다.
다음에 도 5a의 프로그램 예를 이용한 프리미티브 생성부(107)의 설명을 하기로 한다. 도 5a의 예에서 프리미티브 생성부(107)는 상수 전파 최적화부(1062)에 의해 행해진 행 Line7에서의 변수 b로부터 상수 100의 치환 동작에 동기하여 프리미티브 『치환 b-> 100』을 출력한다.
또, 복사 전파 최적화부(1063)에 의해 행해진 행 Line10에서의 변수 z로부터 변수 x로의 치환 동작을 동기하여 프리미티브 생성부(107)는 프리미티브 『치환 z->x』를 출력한다. 또 상수 전파 최적화부(1062) 및 복사 전파 최적화부(1063)에 의해 치환 후, 루프 불변식 삭제부(1064)에 의해 행 Line7에서의 행 이동이 행해지면 프리미티브 생성부(107)는 행 Line7에서의 행의 이동을 나타내는 프리미티브 『행이동 To:Line4』를 출력한다. Line3, Line9에서의 행삭제가 행해지면 Line3, Line9에서의 행의 삭제를 나타내는 프리미티브 『행삭제』를 출력한다.
또, 레지스터 할당부(1066)가 Line4에 있어서, 변수 a에 레지스터(D2)가 할당되어 Line5, Line6, Line8, Line10, Line11에 있어서 설정 참조 가능하게 되면 프리미티브 생성부(107)는 변수와 자원의 할당관계를 나타내는 프리미티브 『자원a:D2』를 Line5, Line6, Line8, Line10, Line11의 각 행에 출력한다. 또, 레지스터 할당부(1066)는 Line6, Line8, Line11의 각 행에 있어서, 변수 x에 레지스터(D3)가 할당되어 Line8, Line10, Line11의 행에서 변수 x가 설정 참조 가능하게 되면 프리미티브 생성부(107)는 변수와 자원의 할당 관계를 나타내는 프리미티브『자원 x:D3』을 Line8, Line10, Line11의 행에 출력한다. 이 결과, 프리미티브 기억부(102)의 기억 내용은 도 5d와 같이 된다.
또, 프리미티브를 프로그램의 어느 단위에 대하여 생성할 것인지에 대한 것인데, 프리미티브의 생성은 행단위의 프로그램, 즉 프로그램 중의 1문장에 대하여 하나의 프리미티브가 생성된다. 이로써 변수와 자원의 할당 관계를 나타내는 프리미티브도 행단위로 생성된다.
또 행보다 세밀한 단위, 말하자면 실행코드의 단위로 프리미티브를 생성할 수도 있다. 본 실시예의 프로그램 변환 장치는 사용자에게 고급언어를 이용한 개발 환경을 제공할 것을 의도하고 있기 때문에 행단위로 프리미티브를 생성하는 구성으로 했다. 그 때문에 후술하는 디버그 장치도 동작 정지를 프로그램 행의 단위로 실현하여 프로그램 변환 장치· 디버그 장치간의 사양의 정합을 도모한다(또, 청구범위에서의 변천 정보란, 상기 프리미티브와 행단위의 조합을 말함).
이동행 정보 삭제부(108)는 프리미티브 생성부(107)가 프리미티브 기억부(102)내에 기입한 프리미티브 중, 이동한 대입문에 포함되는 프리미티브를 삭제한다. 이와 같이 이동 완료된 행에 포함되어 있던 프리미티브를 삭제함으로써 이동행 정보 삭제부(108)는 프리미티브 기억부(102)에 기억되어 있는 정보량의 저감을 도모한다. 예를 들면 도 5a의 프로그램 예에 있어서, Line6으로부터 Line4의 뒤에 대입문 『a=12*b』가 이동한 것은 이미 설명했다. 이 대입문 『a=12*b』에 대해서는 도 5d에 나타내는 생성 코드 기억부(103)내의 행 Line7에 대응하는 컬럼에서 『행이동 To:Line4』『치환b->100』이 기술되어 있다. 이 도 5d에 도시한 생성코드 기억부(103)내의 행 Line7에 대응하는 컬럼에서 이동을 나타내는 프리미티브는 『행이동 To;Line4』이며, 이 이외의 프리미티브란 치환을 나타내는 프리미티브 『치환b->100』이다. 이동행 정보 삭제부(108)는 이 프리미티브를 삭제하여 프리미티브량의 절감을 도모한다.
불필요 변수 정보 삭제부(109)는 행이동 정보 삭제부(108)에서 삭제 후의 프리미티브에 대하여 불필요한 변수와 자원의 할당 관계를 나타내는 프리미티브를 삭제한다. 여기에서 말하는 『불필요한 변수』란 프로그램 행에 존재하지 않고 또 치환 이동을 나타내는 프리미티브에도 포함되지 않는 변수를 말한다.
도 5d의 예에서는 변수 a가 이것에 상당한다. 왜냐하면 프로그램의 어떤 행에 있어서도 변수 a는 존재하지 않기 때문이다. 변수 a에 대해서는 Line5, Line6, Line10, Line11에 있어서, 변수와 자원의 할당 관계를 나타내는 프리미티브 『자원a:D2』가 출력되어 있으나, 이들은 바로 『불필요한 변수』의 자원을 나타내는 것이므로 Line5, Line6, Line10, Line11에 출력되어 있는 변수와 자원의 할당관계를 나타내는 프리미티브 『자원 a:D2』를 삭제한다. 그러나 행 Line8의 소스 코드문과 같이 변수 a가 존재하는 것에 대한 프리미티브 『자원 a:D2』는 삭제하지 않는다.
프로그램에서 사용되지 않는 변수에는 그 외에도 행 Line10에서의 변수 x가 존재하고, 변수와 자원의 할당관계를 나타내는 프리미티브 『자원 x:D3』이 출력되어있으나, 이것에 관한 프리미티브는 삭제하지 않는다. 왜냐하면 변수 x는 치환을 나타내는 프리미티브 『치환 z->x』가 출력되어 있기 때문이다. 따라서 행 Line11에 있어서, 출력되어 있는 변수와 자원의 할당 관계를 나타내는 프리미티브 『자원x:D3』은 삭제되지 않는다.
또, 불필요 변수 정보 삭제부(109)는 프리미티브 생성부(107)가 행삭제의 프리미티브를 생성하면 행삭제의 프리미티브에 포함되는 소스 코드문이 존재하는 행의 행번호와 같은 행번호를 갖는 치환 프리미티브, 자원 할당의 프리미티브를 검출하고, 검출된 이들을 삭제한다.
이상의 이동행 정보 삭제부(108)의 삭제를 거치면 프리미티브 기억부(102)의 기억 내용은 도 5d에 도시하는 것으로부터 도 5e에 도시하는 것으로 변천한다.
코드 생성부(110)는 최적화부(106)에 의해 고쳐쓰여진 내용 표현의 프로그램을 실행코드로 변환하고, 변환된 실행코드를 생성 코드 기억부(103)에 기억시킨다. 실행코드란 타겟 머신으로 되는 하드웨어가 해독할 수 있고, 실행할 수 있는 코드를 말한다. 여기에서 문제가 되는 것은 타겟 머신이 어느 정도의 규모인지에 대한 것인데, 본 실시예의 프로그램 변환장치는 도 7에 도시하는 규모의 하드웨어모델용 실행코드를 생성한다. 도 7에서 중앙연산 처리장치에는 데이터용 레지스터(D0, D1, D2, D3), 어드레스용 레지스터(A0, A1, A2, A3) 및 산술연산회로(ALU)가 준비되어 있다. 또, 중앙연산 처리장치내에는 실행 중인 어드레스를 나타내는 프로그램 카운터(PC), 현재 스택의 선두위치를 나타내는 스택 포인터(SP)가 준비되어 있다. 실행코드와 스택은 메모리상에 배치되어 있다.
이와 같은 하드웨어 모델용으로 프로그램 변환장치가 생성된 코드를 도 8a에 도시한다. 도 8a에서 생성된 코드는 함수를 호출할 때에 인수와 복귀값의 저장장소로서 레지스터를 이용하고, 함수에서 사용하는 레지스터는 함수의 개시시에 보존하고, 함수의 종료시에는 복원한다.
도 8a에서 각 어드레스의 실행코드의 의미는 다음과 같다.
0x100 전의 "test:"는, 레이블을 나타낸다.
0x100의 실행코드는, 레지스터의 보존을 나타낸다.
0x104의 실행코드는, 서브루틴 _init의 호출을 나타낸다.
0x108의 실행코드는, 순시값 『12』를 레지스터(D2)에 대입하는 것을 나타낸다.
0x10C의 실행코드는, D2와 100을 승산하고 결과를 D2에 대입하는 것을 나타낸다.
0x10C와 0x110 사이의 "Loop:"는, 라벨을 나타낸다.
0x110의 실행코드는, 서브루틴 _getData1의 호출을 나타낸다.
0x114의 실행코드는, 레지스터(D0)의 보유값을 레지스터(D3)에 대입함으로써 함수의 복귀값을 인도한다.
0x118의 실행코드는, 레지스터(D2)의 보유값을 레지스터(D0)에 대입함으로써 인수를 인도한다.
0x11C의 실행코드는, 서브루틴 _g1의 호출을 나타낸다.
0x120의 실행코드는, 레지스터(D3)의 보유값을 대입함으로써 레지스터(D0)로 인수를 인도한다.
0x124의 실행코드는, 서브루틴 _g2의 호출을 나타낸다.
0x12S의 실행코드는, 레지스터(D3)의 보유값을 대입함으로써 레지스터(D0)로 인수를 인도한다.
0x12C의 실행코드는, 서브루틴 _g3의 호출을 나타낸다.
0x130의 실행코드는, 레이블 Loop로 점프하는 것을 나타낸다.
0x134의 실행코드는, 레지스터의 복원을 나타낸다.
0x138의 실행코드는, 서브루틴 test로부터 호출한 함수로 복귀하는 것을 나타낸다.
행 어드레스 정보 생성부(111)에서는 코드 생성부(110)에 의해 내부표현 상태의 프로그램에 실행코드로 변환되면 프로그램의 행과 생성된 실행코드의 어드레스의 관계를 나타내는 행 어드레스 정보를 행 어드레스 기억부(1041)에 기입한다. 또, 함수와 어드레스의 관계, 함수의 변수에 관한 정보를 함수정보 기억부(1042)에 출력한다. 이 결과, 작성된 디버그 정보 기억부(104)의 내용을 도 8b에 도시한다.
이어서 도 4를 참조하여 본 실시예에서의 디버그 장치의 구성에 대하여 설명하기로 한다. 디버그 장치는 입력부(201)와, 이동 삭제 변수 판정부(202)와, 브레이크 포인트 설정부(203)와, 프리미티브 합성부(204)와, 합성기동 판단부(205)와, 코드 실행부(206)와, 변수 조작부(207)와, 출력부(208)와, 행 표시부(209)와, 행정보 표시부(210)와, 조작가능 변수 표시부(211)와, 최적화 과정 표시부(212)와, 표시순서 전환부(213)와, 변수자동 표시부(214)와, 연동 표시 제어부(215)로 구성된다.
입력부(201)는 디스플레이(502)상에 명령 라인을 표시하고, 여기에 사용자가키보드를 타이핑하여 입력한 『참조하고 싶은 변수』또는 『설정하고 싶은 변수와 희망값』을 해석한다. 명령 라인에 대한 입력부(201)에 의한 해석은 『Line **에서의 변수 *값의 참조』『Line **에서의 변수 *의 값을 **로 설정』이라는 형식으로 행해진다. 도 9a는 디스플레이(502)의 표시예이며, 본 도면에서 명령라인은 참조부호(y21)로 나타내는 위치에 표시되고, 사용자에 의한 입력을 기다린다.
이동 삭제 변수 판정부(202)는 입력부(201)에서 입력된 변수에 대한 설정·참조가 최적화의 영향에 의해 방해되는 경우가 있을 수 있는지를 조사한다.
이상의 처리를 상세화하면 그 알고리즘은 도 10의 플로우 챠트로서 실현된다. 도 10의 플로우 챠트에 있어서 단계(S01)는 조사대상 행을 초기화하는 단계이며, 여기에서 조사대상 행은 함수의 개시행에 지정된다(여기에서 말하는 함수란 현재 실행을 정지하고 있는 행을 포함한 함수임). 단계(S02)에서는 사용자가 설정 또는 참조하기 위해 입력부(201)에 지정한 변수와 같은 변수가 조사대상 행에서 존재하는지를 프로그램 기억부(101)에서 프로그램을 얻어 조사하고, 만일 존재하지 않는 경우는 단계(S03)이 No가 되고, 단계(S11)로 이행한다. 단계(S11)에 있어서, 조사대상 행이 함수 내의 마지막 행에 도달했는지 여부를 판정하고, 도달하지 않았다면 단계(S12)로 이행한다. 단계(S12)는, 말하자면 증가 단계이며, 조사대상 행을 다음의 프로그램 행으로 진행하여 다시 단계(S02)로 이행한다.
단계(S02), 단계(S03), 단계(S11), 단계(S12)의 반복은 단계(S03)가 Yes라고 판정될 때까지, 즉 사용자가 입력부(201)에 지정한 변수와 같은 변수가 존재하는 행에 도달하는 동안 반복하여 행해진다. 단계(S03)가 Yes라고 판정되면 단계(S04)에서의 프리미티브의 조사를 거쳐서 이 프리미티브의 내용에 따라 단계(S06), 단계(S08), 단계(S10)를 선택적으로 기동한다. 단계(S06)∼단계(S10)의 선택적인 기동은 단계(S05), 단계(S07), 단계(S09)의 판정 단계 중 어느 것인가가 Yes가 될때까지 실행함으로써 행해진다.
단계(S04)에서의 프리미티브의 조사란 프리미티브 기억부(102)에서 프리미티브를 얻어 조사대상 행이 최적화에 의해 이동되지 않았는지, 삭제되지 않았는지, 또는 최적화에 의해 행에 존재한 변수가 삭제되지 않았는지를 판정하는 것을 말한다.
만일 이동행이라고 판단하면 단계(S05)가 Yes가 되고, 어느 행에서 어느 행으로 이동했는지를 행의 이동을 나타내는 프리미티브에서 얻어 출력부(208)에 대하여 『조작된 변수가 포함되는 XXX행은 YYY행으로 이동되어 있습니다. 프로그램대로 설정, 참조되지 않는 경우가 있습니다(여기에서 XXX는 조사대상 행, YYY는 이동 장소의 행을 나타낸다)』라는 내용을 디스플레이(502)에 출력하도록 지시한다.
단계(S05)는 No였으나, 단계(S07)가 Yes라면 단계(S08)에 있어서, 출력부(208)에 대하여 『조작된 변수가 포함되는 XXX행(여기에서 XXX는 조사대상행을 나타냄)은 삭제되어 있습니다. 프로그램대로 설정, 참조되지 않는 경우가 있습니다』라는 내용을 디스플레이(502)에 출력하도록 지시한다.
단계(S07)는 No였으나 단계(S09)가 Yes라면 출력부(208)에 대하여 『조작된 변수는 XXX행에서 삭제되어 있습니다. 프로그램대로 설정, 참조되지 않는 경우가 있습니다(여기에서 XXX는 조사대상 행을 나타냄)』라는 내용을 디스플레이(502)에출력하도록 지시한다.
단계(S06), 단계(S08), 단계(S10)를 선택적으로 기동함으로써 사용자가 조작하고자 한 변수가 이동행 또는 삭제행에 포함되어 있는지가 판단되고, 만일 포함된 경우, 프로그램의 설명대로 값이 설정, 참조되지 않는 경우가 있는 것과, 이동, 삭제행이 사용자에게 통지된다.
브레이크 포인트 설정부(203)는 행단위의 브레이크 포인트 지정을 사용자로부터 접수하고, 지정된 브레이크 포인트를 실행코드상의 어드레스로 변환하여 변환된 어드레스에 브레이크 포인트를 설정한다. 이와 같이 브레이크 포인트를 행에 설정시킬 때, 설정된 행이 이동행일 우려가 있다. 이것을 감안하여 브레이크 포인트 설정부(203)는 프리미티브 기억부(102)로부터 정보를 얻음으로써 지정된 행이 이동행인지 판단한다. 여기에서 지정행이 이동행이라면 출력부(208)에 실행 순서가 프로그램대로 되지 않는 것을 나타내도록 지시한다. 브레이크 포인트 설정부(203)의 알고리즘을 도 11의 플로우 챠트를 이용하여 설명하기로 한다.
도 11의 플로우 챠트에 있어서, 단계(S21)에서는 지정된 행에 브레이크 포인트를 설정한다. 여기에서 브레이크 포인트 설정부(203)에 대하여 사용자가 행 Line7의 대입문에 브레이크 포인트를 설정하라고 지정했다고 하자.
단계(S21)에서는 사용자가 지정한 행의 프리미티브를 프리미티브 기억부(102)에서 인출한다. 여기에서 사용자에 의해 지정된 행 Line7에는 행의 이동을 나타내는 프리미티브가 붙여져 있고, 이것이 브레이크 포인트 설정부(203)에 의해 인출된다. 단계(S22)에서는 인출된 프리미티브가 행의 이동에 관한 것인지를판정한다. 여기에서 행 Line7은 행 Line4의 뒤로 이동한 것이므로 단계(S23)에서 브레이크 포인트 설정부(203)는 행의 이동을 나타내는 프리미티브로부터 이동장소의 행번호 YYY를 얻어 『지정된 행은 이동하고 있습니다. YYY행째의 실행후에 정지합니다』라고 표시한다. 행번호(YYY)=4이므로 사용자에게는 『지정한 행 Line7은 행 Line4로 이동하고 있습니다. 정지는 행 Line4 실행 후에 정지합니다』라고 표시한다.
표시후, 단계(S24)에서 지정된 프로그램의 행에 대응하는 실행코드의 어드레스를 행 어드레스 기억부(1041)로부터 얻는다. 이 경우, 디버그 정보 기억부(104)로부터 행 Line4의 어드레스(0x104)가 얻어지고, 단계(S25)에서 얻어진 어드레스에 대하여 인터럽트를 발생시키는 명령을 기입한다. 이상의 순서에 따라 어드레스(0x104)에 브레이크 포인트가 설정된다.
프리미티브 합성부(204)는 프리미티브 기억부(102)에 기억된 최적화 과정을 나타내는 프리미티브를 거슬러 올라가면서 변수가 어느 자원에 할당되어 있는지, 행이 최종적으로 어느 행으로 이동했는지를 조사한다. 만일 조사할 변수가 최적화의 과정에 의해 프로그램상에서 지워진 변수라면 그 변수가 최종적으로 어느 변수로 치환되고, 어느 자원에 할당되어 있는지를 얻는다.
예를 들면 조사할 변수가 변수(z)인 경우를 생각해 본다. 변수 z는 행 Line10에서의 치환을 나타내는 프리미티브를 참조하면 변수 x에 치환되어 있는 것을 알 수 있다. 또 자원 할당을 나타내는 프리미티브를 참조하면 변수 x의 자원은 레지스터(D3)인 것을 알 수 있다. 이들의 프리미티브를 통합하면 『변수 z』= 『변수 x』= 『레지스터 D3』이라는 관계를 표현할 수 있고, 이들을 합성함으로써 『변수 z』= 『레지스터 D3』(변수 z는 D3에 존재함)이라는 새로운 정보를 얻는다. 일단 합성하여 얻어진 정보는 『합성 z:D3』의 형식으로 프리미티브 기억부(102)에 기입되고, 2회째 이후의 합성을 생략할 수 있도록 한다.
합성기동 판단부(205)는 프리미티브의 합성을 디버그 장치 기동시에 행하게 할 것인지, 변수 참조시에 행하게 할 것인지를 판단한다. 만일 디버그 장치 기동시에 합성으로 행하게 한다고 판단한 경우는 프리미티브 합성부(204)를 기동하고, 사용자로부터의 변수의 참조에 관한 지시가 입력되기 전에 모든 행에서의 프리미티브를 합성한다. 만일 변수 참조시에 행하게 한다고 판단한 경우는 사용자로부터의 변수의 참조에 관한 지시가 입력되는 시점에서 그 행에서의 프리미티브를 합성한다. 디버그 장치 기동시에서의 판단 기준으로서 프리미티브의 정보량, 프로그램행의 행수, 실행코드의 코드 크기의 대소가 있다. 본 실시예에서는 프로그램 행의 행수가 일정량 이상인 경우에 디버그 장치를 기동시에 프리미티브를 합성하는 것으로 한다. 도 5a의 예에서는 프로그램의 행이 10행 이상이므로 사용자의 조작에 따라 프리미티브를 합성한다고 판단한다.
변수 조작부(207)는 사용자가 변수에 대한 조작을 하면 그 조작에 따른 제어를 코드 실행부(206)에 지시한다. 상기의 『사용자에 의한 변수에 대한 조작』이란 입력부(201)가 접수하는 것이다. 그리고 그 조작의 종류에는 『변수의 참조의 지시』, 『참조의 설정의 지시』가 있다.
입력부(201)가 변수의 참조의 지시를 접수하면 프리미티브 기억부(102)에 기억된 프리미티브에 포함되는 변수와 자원의 대응 관계를 참조하여 그 자원의 값을 인출하도록 코드 실행부(206)에 지시한다. 이와 같이 지시하여 코드 실행부(206)가 자원의 값을 인출하면 출력부(208)에 그 변수명과 값을 대응지어 표시하도록 지시한다.
또, 변수 조작부(207)는 변수에 대한 설정의 지시를 접수하고, 그 입력부(201)가 변수명과, 희망값을 접수하면 프리미티브 기억부(102)에 기억된 프리미티브에 포함되는 변수와 자원의 대응을 참조하고, 그 자원에 값을 설정하도록 코드 실행부(206)에 지시한다. 이상의 처리에 있어서, 사용자에 따라 지정된 변수가 치환된 변수인 경우, 출력부(208)에 치환된 변수의 값이 변화하는 의미를 출력시킨다.
예를 들면 도 5a의 프로그램에 대하여 조작자가 변수 z를 참조하는 의미를 지시하면 변수 조작부(207)는 프리미티브 기억부(102)에 기억된 프리미티브에 의해 변수 z가 할당되어 있는 자원(D3)을 알고, 코드 실행부(206)에 대하여 변수 z의 값을 나타내는 레지스터의 값을 인출하도록 지시한다. 레지스터(D3)의 값 『12』가 인출되면 변환 조작부(207)는 출력부(208)에 대하여 『변수 z의 값은 12입니다』라고 표시시킨다. 그와 동시에 변수 조작부(207)는 프리미티브 기억부(102)에 기억된 치환에 관한 프리미티브를 참조함으로써 변수 z는 변수 x로 치환되어 있는 것을 알고, 출력부(208)에 『변수 x는 변수 z로 치환되어 있으므로 변수 x의 값도 바뀝니다』라고 표시시킨다.
코드 실행부(206)는 시뮬레이터, 내부회로 에뮬레이터(emulator), 모니터 중어느 하나로 구성되고, 시뮬레이터, 내부회로 에뮬레이터, 모니터 특유의 기능에 의해 타겟 머신의 하드웨어 환경을 재현하고, 이 하드웨어 환경하에서 생성 코드 기억부(203)에 기억된 복수의 실행코드를 브레이크 포인트 설정부(203)가 설정한 브레이크 포인트까지 순차 실행한다. 브레이크 포인트에 도달하면 해당 하드웨어 환경에서의 자원에 대한 액세스를 변수 조작부(207)의 지시에 따라 행한다.
물론, 내부회로 에뮬레이터, 시뮬레이터, 모니터에 의해 작성되는 하드웨어 환경은 서로 다른 것이지만(모니터, 내부회로 에뮬레이터에 의한 하드웨어 환경은 실제기기와 거의 동일 또는 그것에 가까운데 비하여, 시뮬레이터에 의한 하드웨어 환경은 호스트 컴퓨터상에서 모의적으로 작성된 것에 지나지 않는다), 어느 것이나 도7에 도시한 하드웨어 모델이 갖는 데이터용 레지스터(D0, D1, D2, D3), 어드레스용 레지스터(A0, A1, A2, A3), 프로그램 카운터(PC), 스택 포인터(SP)의 기능을 재현할 수 있는 점은 공통된다.
도 13의 플로우 챠트는 코드 실행부(206)의 처리를 상세히 표현한 것이다. 도 13의 단계(S71)에 있어서, 브레이크 포인트 설정부(203)는 사용자에 의한 실행 코드의 실행이 이루어지는 것을 대기하여, 만일 이루어지면 단계(S72)에서 프로그램 카운터를 생성 코드 기억부(103)에 기억된 선두의 어드레스 『0x100』으로 설정한다. 설정후, 단계(S73)에서 프로그램 카운터로 지시되는 어드레스의 실행코드를 생성 코드 기억부(103)로부터 인출하고, 단계(S74)에서 인출된 실행코드에는 인터럽트를 발생시키는 명령이 부여되어 있는지를 판정한다. 여기에서 말하는 『인터럽트를 발생시키는 명령』이란 브레이크 포인트 설정부(203)가 브레이크 포인트 설정장소 어드레스에 기입한 명령이다. 이 명령이 어드레스 『0x010c』에 기입되어 있다고 하면 『0x100』의 실행코드가 인출된 상태에서는 단계(S74)는 No가 되고, 단계(S75)에서 프로그램 카운터로 지시되는 어드레스 『0x100』의 실행코드를 실행한다. 여기에서 말하는 실행에 의해 어드레스 『0x100』에서의 실행코드 『save』를 해독하고, 이에 따라 도 7에 도시한 하드웨어 모델의 데이터 레지스터, 어드레스 레지스터의 보유값을 스택에 세이브한다. 세이브 후, 단계(S76)에서 프로그램 카운터를 『0x104』로 증가하여 단계(S73)로 이행한다.
이행 후, 단계(S73)에서 프로그램 카운터로 지시되는 어드레스 『0x104』의 실행코드를 생성 코드 기억부(103)로부터 인출하고, 단계(S74)에 있어서, 인출된 실행코드에는 인터럽트를 발생시키는 명령이 부여되어 있는지를 판정하지만, 그렇지 않으므로 단계(S74)는 No가 되고, 단계(S75)에서 프로그램 카운터로 지시되는 어드레스 『0x104』의 실행코드를 실행한다. 여기에서 말하는 실행에 의해 어드레스 『0x104』에 있어서 실행코드 『call_init』를 해독하고, 이에 따라 프로그램 카운터에 『_init』의 선두 어드레스를 저장한 후 단계(S76)에서 프로그램 카운터를 『0x108』로 증가하여 (본래는 코드 실행부(206)의 처리 『_init』로 이행해야 하지만, 설명의 편의상 도 8a의 다음의 어드레스 『0x108』로 진행한다고 하자) 단계(S73)로 이행한다.
이행 후, 단계(S74)에서 프로그램 카운터로 지시되는 어드레스 『0x108』의 실행코드를 생성 코드 기억부(103)로부터 인출하고, 단계(S74)에서 인출된 실행코드에는 인터럽트를 발생시키는 명령이 부여되어 있는지를 판정하지만, 그렇지 않으므로 단계(S74)는 No가 되고, 단계(S75)에서 프로그램 카운터로 지시되는 어드레스 『0x108』의 실행코드를 실행한다. 여기에서 말하는 실행에 의해 어드레스 『0x108』에 있어서 실행코드 『mov 12,D2』를 해독하고, 이에 따라 데이터 레지스터(D2)에 순시값 『12』를 저장한 후 단계(S76)에서 프로그램 카운터를 『0x10c』로 증가하여 단계(S73)로 이행한다.
이행 후, 단계(S74)에서 프로그램 카운터로 지시되는 어드레스 『0x10c』의 실행코드를 생성 코드 기억부(103)로부터 인출하고, 단계(S74)에서 인출된 실행코드에는 인터럽트를 발생시키는 명령이 부여되어 있는지를 판정하지만, 어드레스 『0x10c』에서의 실행코드에는 해당 인터럽트 명령이 부여되어 있으므로 단계(S74)는 Yes가 되고, 단계(S77)에서 프로그램 카운터로 지시되는 어드레스 『0x10c』의 실행코드를 실행한다. 여기에서 말하는 실행에 의해 어드레스 『0x10c』에서의 실행코드 『mul 100,D2』를 해독하고, 이에 따라 데이터 레지스터(D2)의 보유값과 순시값 『100』의 승산을 산술 연산 회로로 행하게 한 후, 그 결과 『1200』을 데이터 레지스터(D2)에 저장하여 단계(S78)로 이행한다.
단계(S78)에서는 어드레스 『0x10c』에 기술되어 있는 인터럽트 명령에 따라 인터럽트 신호를 발생하고, 코드 실행부(206)는 제어를 입력부(201)로 전환한다. 이와 같이 입력부(201)에 제어를 전환하면 앞에서 설명한 명령 라인을 표시한 입력 접수상태가 된다. 여기에서 코드 실행부(206)가 사용자로부터 변수 참조의 지시를 접수하면 변수 조작부(207)는 그 변수에 할당되어 있는 자원을 프리미티브 기억부(102)를 참조하여 판정하여 코드 실행부(206)에 대하여 그 자원의 보유값의인출을 지시한다.
코드 실행부(206)는 단계(S79,S80)에서 자원값의 인출 지시를 기다리고 있고, 만약 인출지시가 이루어지면 단계(S79)가 Yes가 되고, 단계(S81)로 이행하여 코드 실행부(206)는 자원명의 레지스터 또는 메모리를 억세스하여 그 값을 변수 조작부(207)로 출력한다.
앞에서 설명한 명령 라인을 표시한 입력 접수상태에서 변수 설정의 지시를 접수하면 변수 조작부(207)는 그 변수에 할당되어 있는 자원을 프리미티브 기억부(102)를 참조하여 판정하여 코드 실행부(206)에 대하여 그 자원에 대한 희망 값의 설정을 지시한다.
자원값의 설정지시가 이루어지면 단계(S80)가 Yes가 되고, 단계(S81)로 이행하여 코드 실행부(206)는 자원명의 레지스터 또는 메모리에 희망값을 기입한다.
출력부(208)는 입력부(201), 이동 삭제 변수 판정부(202), 브레이크 포인트 설정부(203), 프리미티브 합성부(204)로부터의 지시에 따라 출력 윈도우 내에 입력부(201)에 대하여 조작자가 행한 조작에 대한 해답을 표시한다.
행 표시부(209)는 작성된 복수의 소스 파일을 일람 표시하고, 소스 파일에서 동작검증할 서브루틴을 조작자가 지정하는 것을 기다린다. 조작자에 의해 지정되면 접수된 서브루틴에 포함되는 복수의 소스 코드문 중 일부를 발췌하여 소정의 윈도우 내에 표시한다. 표시후, 기계어 프로그램에 포함되는 복수의 실행코드 중, 윈도우에 표시된 것에 대응하는 것을 윈도우내에 표시된 소스 코드문의 횡방향으로 배치하여 표시한다. 또 현재의 실행 정지위치(브레이크 포인트 설정부(203)가 설정한브레이크 포인트의 설정행이다)를 나타내는 행에 화살표를 표시한다. 행 정보 표시부(210)는 행 표시 윈도우에 표시된 각 행에 대하여 어떠한 최적화가 이루어졌는지를 나타내는 프리미티브를 사용자용으로 판독가능 형식으로 한 행 정보 표시 윈도우를 표시한다(여기에서 말하는 『사용자용 판독가능 형식』이란 사용자가 판독할 수 있다는 의미임). 행정보 표시 윈도우는 가로쓰기의 기술 컬럼을 갖고, 각 기술 컬럼은 행표시 윈도우에 포함되는 프로그램과 행위치가 맞추어져 있다. 이와 같이 행표시 윈도우와 행표시가 맞추어짐으로써 행 표시부(209)내에 표시된 어느 행에 최적화가 이루어졌는지를 사용자는 알 수 있다. 도 9a의 예에서는 행 Line7에 대한 행의 이동, 행 Line3 및 행 Line9에 대한 행삭제가 표시된다. 이와 같이 표시하면 사용자는 자신이 기술한 프로그램의 어느 변이 용장인지를 고찰할 수 있다.
조작가능 변수 표시부(211)는 행표시 윈도우내의 각 행에서 어느 변수가 설정 참조 가능한지를 표시한 조작가능 변수조작 윈도우를 표시한다. 조작가능 변수 조작 윈도우는 행표시 윈도우에 포함되는 프로그램과 행위치가 맞추어져 있고, 각 열은 프로그램내에 이용되는 변수명이 할당된다. 조작가능 변수 표시부(211)에서 설정참조 가능한 변수의 어떤 행에는 그 중 조작 가능한 변수가 어느 것인지를 알수 있다. 만일 그 행에서 디버그 정보, 또는 프리미티브가 나와 있는 경우에는 참조, 또는 설정이 가능한 변수로서 『0』을 붙인다. 조작가능 변수 표시부(211)는 보유값의 참조가 가능한 변수와, 보유값의 설정이 가능한 변수가 일목요연하게 되도록 행표시부(209)를 변경 제어한다.
도 12의 플로우챠트는 조작가능 변수 표시부(211)의 알고리즘을 상세화한 것이다. 도 12에서 단계(S41)는 변수의 조사범위를 좁히는 의미의 초기화 단계이며, 함수 정보 기억부(1042)에서 함수로 사용되는 변수로 조사범위를 좁힌다. 단계(S42)는 조사대상 행의 초기화 단계이며, 여기에서 행 표시부(209)에서 표시하는 프로그램의 표시 개시 행을 조사대상 행으로 한다. 단계(S43)에서 조작가능 변수표시부(211)는 조사대상 행에서 함수내에서 사용되는 각 변수의 설정 참조가 가능한지를 프리미티브 합성부(204)를 이용하여 조사한다. 여기에서 『설정가능』이란 입력부(101)에 의해 지정된 변수에 대응하는 자원이 존재하는 경우이다. 『참조가능』이란 입력부(201)에 의해 지정된 변수에 대응하는 자원이 존재하는 경우, 또는 변수가 다른 변수 또는 상수로 치환되는 경우이다.
단계(S44)에서 변수가 설정가능 또는 참조가능인 경우, 단계(S45)에서 설정 참조가 가능한 변수에 대하여 조사대상 행에 상당하는 행에 표시를 붙인다.
단계(S46)는 하나의 조사대상 행내의 조사가 모든 변수에 대하여 행해졌는지를 판정하는 의미의 종료판정 단계이며, 아직 변수가 남아있다면 단계(S49)에서 조사대상 행내의 다음의 변수를 선택하여 단계(S43)로 이행한다.
조사가 모든 변수에 대하여 행해졌다면 단계(S47)로 이행한다. 단계(S47)는 행 표시부(209)에서 표시된 프로그램의 모든 행에 대하여 조사가 종료되었는지를 판정하는 의미의 종료판정 단계이며, 그렇지 않다면 단계(S48)에서 조사대상 행을 다음 행으로 진행하여 단계(S43)로 이행한다.
표시순서 전환부(213)는 사용자의 요구에 따른 프로그램의 행 표시 전환을 한다. 여기에서 말하는 『사용자의 요구』에는 두가지가 있는데, 『프로그램의 순번으로 표시하라』는 의미의 요구와, 『최적화에 의해 행이 교체된 결과의 순번으로 표시하라』는 의미의 요구이다. 만일 『최적화에 의해 행이 교체된 결과의 순번으로 표시하라』는 요구가 있었을 때, 표시순서 전환부(213)는 프리미티브 기억부(102)에 의해 어느 행이 어느 행의 뒤로 이동했는지를 나타내는 행 이동의 프리미티브를 얻어 프리미티브에 따라 행으로 이동시킨 후에 행표시를 한다. 또 마찬가지로 행정보 표시부(210) 및 조작가능 변수 표시부(211)에서 행의 표시의 순번도 교체한다.
변수자동 표시부(214)는 실행 정지한 행에서의 변수의 값과 최적화 과정을 프리미티브 합성부와 변수 조작부를 이용하여 표시한다.
연동표시 제어부(215)는 브레이크 포인트 주변에서의 실행코드 및 프로그램의 대응관계를 사용자에게 즉시 이해시키기 위한 표시제어를 한다. 그것과 함께 표시개시 행을 변경할 때, 프로그램과 실행코드의 양쪽 개시 위치를 모두 변경한다. 또, 어느 행을 표시할 것인지의 지정 방법으로서는 커서 이동키라 불리우는 키를 이용하여 변경한다고 한다. 커서 이동키에는 커서 상향 키와 커서 하향 키를 이용한다.
사용자가 프로그램과 실행코드의 양쪽을 연동표시하라고 지정하면 도 14a 및 도 14b에 플로우 챠트를 나타내는 처리가 개시된다. 단계(S51)에서 표시영역을 2 분할하고, 프로그램 기억부(101)에서 얻은 프로그램을 표시하는 프로그램 표시틀과 생성 코드 기억부(103)에서 얻은 실행코드를 표시하는 실행코드 표시 프레임을 설치한다.
단계(S52)에서 표시 개시행 = (실행 정지행 - 3)의 식에서 표시개시 위치를 얻어 행 표시부(209)의 프로그램 표시의 개시행을 설정한다. 현재의 정지 위치는 도 9a의 표시예에 있어서 행 Line10이라고 하면. 연동표시에서의 프로그램 표시의 표시 개시위치를 행 Line7로 한다.
단계(S53)에 있어서, 설정한 프로그램 표시의 개시행에 대응하는 실행코드어드레스를 행 어드레스 기억부(1041)에서 얻어 행 표시부(209)의 실행코드 표시의 표시 개시 어드레스에 설정한다. 행 Line7에서의 어드레스의 값을 디버그 정보기억부(104)의 행과 어드레스의 정보에서 얻어 어드레스가 0x10S이라고 안다. 그리고 행 표시부(209)에 대하여 프로그램을 행 Line7로부터 표시하고, 실행코드를 0x108로부터 표시를 개시하라고 지시한다.
단계(S54)에서 행 표시부(209)의 프로그램 표시에서 실행 정지위치로 되는 행을 표시의 초기 반전위치로서 반전한다. 실행 정지 위치 행 Line10을 반전시킨다.
단계(S55)에서 행 어드레스 기억부(1041)로부터 설정한 프로그램 표시의 반전행에 대응하는 실행코드의 어드레스를 얻어 행 표시부(209)에서의 그 어드레스의 실행코드를 반전시킨다. 디버그 정보 기억부(104)에 의해 행 Line10의 어드레스 0x120을 얻어 행 표시부(209)에 대하여 0x120의 위치를 반전표시하도록 지정한다. 도 15a는 이상의 반전표시가 이루어진 후의 표시예이다.
단계(S56)에서 행 표시부(209)에서 실행 정지 위치를 나타내는 화살표를 현재 정지하고 있는 행에 설정한다. 현재의 정지 위치가 행 Line10이므로 정지 위치를 나타내는 화살표를 행 Line10에 표시한다.
연동표시 제어부(215)에 대하여 커서 상향 키, 커서 하향 키가 눌려졌을때의 알고리즘을 도 14b의 플로우 챠트를 이용하여 설명하기로 한다.
단계(S57) 및 단계(S58)는 각각 커서 상향 키, 커서 하향 키를 누른 것을 검출하기 위한 단계이다.
커서 하향 키가 눌려진 것을 검출하면 단계(S59)에서 행 표시부(209)에서의 프로그램 표시의 반전을 1행 아래로 변경하고, 반대로 커서 상향 키가 눌려진 것을 검출하면 단계(S62)에서 행 표시부(209)에서의 프로그램 표시의 반전을 1행 위로 변경한다.
단계(S60) 및 단계(S63)는 각각 반전행이 행 표시부(209)의 상방향으로 밀려 나왔는지 또는 반전행이 행 표시부(209)의 하방향으로 밀려나왔는지를 검출하기 위한 단계이다. 여기에서 도 15a의 표시예에서 행 표시부(209)는 프로그램 프레임과 실행코드 프레임으로 분할되므로 행 표시부(209)의 프로그램 프레임은 행 Line8부터 행 Line13까지의 범위로 좁혀져 있다. 이와 같이 좁히면 반전행은 상하 방향으로 밀려나오기 쉬우므로 단계(S60) 및 단계(S63)에 의해 밀려나왔는지의 유무를 검출한다.
단계(S61) 및 단계(S64)는 단계(S60) 및 단계(S63)에서 밀러나온 것이 검출된 경우의 처리이며, 단계(S60)에서 하방향으로 밀려나온 것이 검출되면 단계(S61)에서 행 표시부(209)에서의 프로그램 표시의 개시행을 1행만큼 늘린다. 도 15a의 예에서 행 Line8부터 행 Line13까지의 범위에서 하향으로 반전행이 밀려나온 경우는 프로그램 표시의 개시행을 늘려서 행 Line9로 하고, 이로써 행 Line9로부터 5행 만큼의 범위, 즉 행 Line9부터 행 Line14까지를 행 표시부(209)상에 표시시킨다. 이로써 프로그램 표시는 아래방향으로 스크롤된다.
단계(S63)에서 상방향으로 밀러나온 것이 검출되면, 단계(S64)에서 행 표시부(209)에서의 프로그램 표시의 개시행을 1행만큼 줄인다. 행 Line8부터 행 Line13까지의 범위에서 상향으로 반전행이 튀어나온 경우는 프로그램 표시의 개시 행을 줄여서 행 Line7로 하여 이 개시행으로부터 5행만큼의 범위, 즉 행 Line7부터 행 Line12까지를 행 표시부(209)상에 표시시킨다. 프로그램 표시는 하향으로 스크롤된다.
여기에서 문제가 되는 것은 새로운 반전행 또는 개시행이 이미 이동 또는 삭제되어 행 어드레스 기억부(1041)에 존재하지 않는 경우이다. 연동 표시 제어부(215)는 이와 같이 행 어드레스 기억부(1041)에 존재하지 않는 경우를 고려한다.
즉, 단계(S65)에서는 디버그 정보 기억부(104)의 행 어드레스 기억부(1041)에 개시행에 해당하는 어드레스가 기억되어 있는지의 여부를 판정하고, 만일 기억되어 있다면 설정한 프로그램 표시의 개시행에 대응하는 실행코드의 어드레스를 행 어드레스 기억부(1041)에서 얻어 행 표시부(209)의 실행코드 표시의 표시개시 어드레스에 설정한다.
단계(S66)에서는 디버그 정보 기억부(104)의 행 어드레스 기억부(1041)에 개시행 또는 반전행에 해당하는 어드레스가 기억되어 있는지의 여부를 판정하고, 기억되어 있다면 설정한 프로그램 표시의 반전행에 대응하는 실행코드의 어드레스를 행 어드레스 기억부(1041)에서 얻어 행 표시부(209)의 실행코드 표시로 반전시킨다.
단계(S67)에서 행 표시부(209)에서 실행 정지 위치를 나타내는 화살표를 현재 정지하고 있는 위치에 설정한다.
또, 조작자가 프로그램 표시의 상부를 보고싶다고 생각하고, 커서 상향키를 눌렀다고 한다. 이 누름은 단계(S58)에서 검출되고, 단계(S62)에서 연동표시 제어부(215)는 행 표시부(209)에서의 프로그램 표시의 반전을 행 Line10에서 행 Line9로 변경한다. 단계(S63)에서 표시는 밀려나온 것이 없는 것으로 확인된 후, 단계(S65)에서 행 Line9에 해당하는 어드레스를 디버그 정보 기억부(104)의 행 어드레스 기억부(1041)에서 얻으려고 하지만 존재하지 않기 때문에 행 표시부(209)에서의 실행코드 표시의 반전을 행하지 않는다.
또, 사용자는 프로그램 표시의 상부를 보고싶다고 생각하고, 커서 상향키를 누른다. 단계(S58)에서 이 누름이 검출되면 연동 표시 제어부(215)는 단계(S62)에서 행 표시부(209)에서의 프로그램 표시의 반전을 행 Line9에서 행 Line8로 변경한다. 단계(S63)에서 반전행이 프로그램 표시 내에 들어가는 것을 확인한 후, 단계(S65) 에서 행 Line8에 해당하는 어드레스는 0x118이며, 행 어드레스 기억부(1041)에 존재하는 것을 확인한다. 확인 후, 실행코드 표시에서의 반전을 0x120의 위치에서 0x118로 변경한다. 이 결과 도 15b로 된다.
또, 사용자는 프로그램 표시의 상부를 보고싶다고 생각하고, 커서 상향키를누른다. 이미 행표시의 개시행과 반전위치가 같아져 있으므로 단계(S58)에서 이 누름이 검출되면 단계(S62)에서 반전행이 1행만큼 올려진다. 이 후, 단계(S63)에서 반전행이 프로그램 표시에서 밀려나왔는지가 검출되지만, 반전행 Line7은 개시행 Line8에 미치지 못하므로 프로그램 표시의 밀려나옴이 판정된다. 이와 같이 밀려나옴이 판정되면 행 표시부(209)의 프로그램의 표시 개시행을 Line7로 변경한다.
변경후 단계(S65)에서 디버그 정보 기억부(104)의 행 어드레스 기억부(1041)에, 행 Line7에 해당하는 어드레스 0x108이 존재하는 것을 확인하고, 행 표시부(209)의 실행코드의 표시 개시 어드레스를 0x108로 변경한다. 그리고 행 표시부(209)에서의 프로그램 표시의 반전을 행 Line8에서 행 Line7로 변경하고, 실행 코드의 반전을 0x118의 위치에서 0x108로 변경한다. 이 결과, 디버그 장치의 표시는 도 15c로 된다.
이상과 같이 본 실시예에 의하면 프로그램 변환장치는 보다 강력한 최적화를 고급언어 상태의 프로그램에 대하여 행하면서도 그 이력을 프리미티브로서 소스 코드문이 기술되어 있던 행 단위로 표현하므로 고급언어 상태의 소스 코드문과 각 실행코드의 대응을 명확히 할 수 있고, 또 각 행의 소스 코드문이 최적화에 의해 어떻게 변화했는지를 명확히 할 수 있다. 디버그 장치는 사용자에 의해 행 지정 및 변수 지정을 접수하면서도 프리미티브 기억부(102)에 기억된 프리미티브를 참조하여 그 행 및 변수가 어떻게 최적화되었는지를 사용자에게 피드백하므로 프로그래머는 최적화 과정을 의식하면서 고급언어 레벨로 동작을 검증할 수 있다.
또, 본 실시예에서의 프로그램 변환 장치의 프리미티브 생성부(107)에 있어서, 최적화 과정을 변수의 치환, 변수의 삭제, 변수의 자원 행의 삭제, 행의 이동이라는 범용성이 높은 정보를 이용하여 표현하고 있기 때문에 최적화부(106)에 있어서 새로운 최적화 항목이 도입되어도 미리 준비한 프리미티브를 조합시킴으로써 최적화 과정을 표현할 수 있다.
또, 본 실시예에서의 디버그 장치의 변수 조작부(207)에 있어서, 변수가 다른 변수로 치환된 경우는 치환된 결과의 변수에 대하여 변수의 값을 설정하고 있었으나 출력부(208)에서 사용자에 대하여 『치환되어 있으므로 설정할 수 없습니다』라고 경고하는데에 그치는 것도 가능하다.
또, 변수 조작부(207)에서 조작 대상이 치환장소의 변수, 치환원의 변수 중 어느 것이라도 경고를 낼 수도 있다. 이 경우, 변수(x)가 변수(y)로 치환되고, 사용자가 변수(y)에 대하여 조작하고자 한 경우, 출력부(208)에서 사용자에 대하여 『변수(y)는 변수(x)로부터 참조되고 있습니다. 변수(x)의 값도 바뀝니다』라고 출력함으로써 사용자에게 알리지 않은 채 치환원의 변수의 값이 바뀌는 것을 방지할 수 있게 된다.
또, 치환된 결과의 변수에 대하여 사용자가 변수의 값을 설정하고자 했을 때 변수 조작부(207)는 출력부(208)에 대하여 『변수는 다른 변수로부터 참조되고 있습니다』라고 경고하므로 사용자가 잘못하여 다른 변수도 동시에 바꾸는 것을 방지할 수도 있게 된다.
또, 브레이크 포인트 설정부(203)에서는 설정된 행이 삭제된 행인 경우, 출력부(208)에 대하여 『삭제되어 있으므로 브레이크 포인트는 설정되지 않습니다』라고 표시하는 것도 가능하다.
또, 조작가능 변수 표시부(211)에서는 치환된 변수도 조작 가능으로서 표시하여 표시하고 있었으나, 스택에 확보되거나 또는 자원 할당된 변수만 표시하는 것도 가능하다.
또, 이동삭제 변수 판정부(202)에서는 이동, 삭제 행에 포함되는 변수와 삭제된 변수를 조사 대상으로 했으나, 치환된 변수도 대상으로 함으로써 다른 행에서 치환된 변수에 대하여 조작하고자 한 경우, 사용자에게 경고를 하는 것이 가능하게 된다.
또, 표시부(209)에서 최적화된 행의 순번으로 표시하는 경우, 이동행을 이동된 결과에 기초하여 표시하고 있었으나 삭제된 행을 표시하지 않음으로써 최적화 결과를 표현하는 것이 가능하다. 또 변수에 관하여 치환된 변수가 존재한 경우, 치환된 결과의 변수로 프로그램을 표시함으로써 변수가 무엇으로 치환되었는지 명시하는 것이 가능하다.
(제 2 실시예)
제 2 실시예는 연산식이 일시 변수로 치환된 경우라도 보다 용이하게 변수의 조작을 마치는 구성을 개시한다. 도 16은 제 2 실시예에서의 프로그램 변환장치가 코드 생성의 대상으로 하는 프로그램 예이다.
복사 전파 최적화부(1063)는 도 16의 행 Line5 에 있어서, 변수 t1로부터 변수 x로의 대입이 행해져 있고, 변수 x는 행 Line6에서 순시값 『0』과 비교되어 있다는 프로그램의 내용을 해석한다. 이와 같은 내용을 해석한 복사 전파최적화부(1063)는 행 Line5에서의 변수 x를 변수 t1로 치환하면 행 Line2에서의 변수 t1로부터 변수 x로의 대입이 삭제된다고 생각된다. 그리고 행 Line6의 대입문 『if(x)』에서의 프로그램의 변수 x를 일시 변수 t1로 치환하여 Line6의 대입문 『if (x)』로 한다.
복사 전파 최적화부(1063)의 치환이 끝나면 공통부분식 최적화부(1061)는 행 Line5∼행 Line9를 해석하여 행 Line7 『y=x+3』과, 행 Line9 『z=x+3』과는 그 우변이 모두 『x+3』이며, 이 상태에서는 『x+3』이라는 계산이 2회나 반복되는 것을 알 수 있다. 이와 같은 내용의 계산의 용장한 반복을 피하기 위해 우변 『x+3』을 일시 변수 t2로 대입하는 대입문 『t2=x+3』을 생성하는 동시에, 행 Line9에서의 우변 『x+3』을 일시 변수 t2로 치환한다. 이로써 같은 내용의 계산의 2회 반복은 새롭게 생성된 『t2=x+3』의 1회로 끝난다. 치환 후, 불필요 코드 최적화부(1065)를 기동한다. 불필요 코드 최적화부(1065)는 치환에 의해 용장하게 된 행 Line5 내의 대입문 『x=t1』을 삭제한다. (또, x는 t1로 치환되어 있으므로 t2=t1+3으로 된다. 이상의 처리 결과를 도 17a에 도시함).
프리미티브 기억부(102)는 복사 전파 최적화부(1063)에 의해 행해진 최적화의 정보를 기억한다. 도 17b는 프리미티브 기억부(102)의 내용이다. 도 17b를 참조하면 행 Line6에서의 변수 x는 변수 t1로 치환된 것을 알 수 있다. 또, 행 Line7, 행 Line9에서의 연산식 『x+3』은 변수 t2로 치환된 것을 알 수 있다. 도 17a의 프로그램에 대하여 코드 생성부(110)가 생성한 실행코드를 도 17d에 도시하고, 도 17a의 프로그램에 대하여 행 어드레스 정보 생성부(111)가 생성한 행 어드레스 간의 대응관계를 도 17c에 도시한다.
제 2 실시예에서의 변수 조작부(207)는 도 18a, 도 18b에 도시하는 플로우챠트에 따라 변수의 조작을 한다. 제 2 실시예에서의 변수 조작부(207)의 처리를 도 18a의 플로우 챠트를 참조하면서 설명하기로 한다. 도 18a의 플로우챠트의 단계(S71)에 있어서, 변수 조작부(207)는 입력부(201)로부터의 변수명 및 조작종류의 지시대기로 되어 있다.
행 Line6에서의 변수 x의 값을 참조하고자 하여 사용자가 입력부(201)의 명령 라인에 대하여 행 Line7의 변수 x의 값을 참조하고자 지정했다고 하자. 이와 같이 입력부(201)로의 입력이 행해지면, 단계(S72)에서의 변수 조작부(207)는 프리미티브 기억부(102)에 기억된 프리미티브를 참조하여 입력부(201)에 대하여 사용자가 지정한 변수가 무엇으로 치환되어 있는지를 판정한다. 그리고 단계(S73)에서 변수가 일시 변수로 치환되어 있는지를 판정하고, 단계(S81)에서 지정된 변수 x를 포함하는 연산식(a(x))이 일시 변수로 치환되어 있는지를 판정한다. 이 경우, 사용자가 입력부(201)에 대하여 지정한 행 Line7에서의 변수 x는 연산식 『x+3』내에 존재하고, 『x+3』은 일시 변수 『t2』로 치환되어 있으므로 단계(S73)가 No, 단계(S81)가 Yes로 되어 단계(S82)로 이행한다. 단계(S82)에 있어서, 변수조작부(207)는 프리미티브 기억부(102)에 기억되어 있는 프리미티브로부터 연산식의 치환장소의 일시 변수명(t2)을 얻는다. 행 Line7에 있어서 연산식 『x+3』은 일시 변수인 일시 변수 t2로 치환되어 있으므로 일시 변수 t2가 얻어진다.
계속해서 단계(S73)에서 변수 조작부(207)는 사용자가 입력부(201)에 대하여지정한 조작의 종류가 참조인지를 판정한다. 이 경우는 참조이므로 단계(84)에서 얻어진 일시 변수에 할당된 자원을 프리미티브 기억부(102)에서 얻는다.
도 17b에 도시한 행 Line7의 프리미티브 일시 변수 t2를 참조하면 일시 변수 t2는 데이터 레지스터(D1)에 할당되어 있는 것을 알 수 있다. 이와 같이 데이터 레지스터(D1)인 것을 알면 얻어진 자원의 보유값을 코드 실행부(206)에 문의한다. 여기에서 코드 실행부(206)가 실행하는 하드웨어 환경에서 각 레지스터의 값이 도 19a에 도시하는 것인 경우, 데이터 레지스터(D1)의 보유값은 『15』인 것을 알 수 있다. 이와 같이 디버그 장치의 보유값을 얻으면 단계(S86)에서 프리미티브에 포함되는 연산식(a(x))의 연산결과를 그 자원의 보유값으로서 연산식에서의 피연산자로서 이용되고 있는 변수 x의 값을 역산한다. 일시 변수 t2의 값은 『15』이며, 치환전의 연산식은 『x+3』이다. 또 프리미티브 기억부(102)에 기억되어 있는 프리미티브에 있어서 『x+3=t2』의 관계가 성립하기 때문에 『x』의 값은 『12』가 된다.
이와 같이 하여 역산한 결과를 얻으면 도 19b에 도시하는 바와 같이 출력부(208)에 변수 x의 값을 표시시킨다.
다음에 이 값을 보고 사용자가 입력부(201)에 대하여 변수 x를 『20』으로 설정하라고 조작했다고 한다. 이 경우, 전회의 동작과 마찬가지로 단계(S73)이 No, 단계(S81)가 Yes가 되고, 단계(S82)를 거쳐서 단계(S83)로 이행하지만, 이번에는 조작의 종류가 설정인 것이므로 No가 되어 단계(S88)로 이행한다. 단계(S88)에서는 변수 조작부(207)는 입력부(201)로부터 희망값 『20』을 받아들이고, 이것을 변수 x 의 값으로서 연산식 (a(x))에 대입하여 연산식 (a(x))의 연산결과를 산출한다.『x+3=t2』의 관계가 성립하고 있으므로 연산식(a(x))의 연산결과는 『23』으로 되고, 일시 변수 t2의 값은 『23』으로 된다. 이와 같이 일시 변수의 값이 산출되면 단계(S90)에서 연산식(a(x))의 치환장소 일시변수에 할당된 자원 데이터 레지스터(D1)를 프리미티브 기억부(102)에서 얻어 연산식(a(x))의 연산 결과를 자원데이터 레지스터에 설정하도록 명령한다. 이로써 데이터 레지스터(D1)의 값은 도 21c에 도시하는 바와 같이 『23』으로 갱신된다.
이상이 연산식으로 치환되어 있던 경우의 처리이지만, 단지 일시 변수로 치환되어 있던 경우의 처리에 대해서도 설명하기로 한다. 이 경우는 단계(S73)에서 Yes로 되고, 변수 조작부(207)는 프리미티브 기억부(102)에 기억된 프리미티브로부터 일시 변수명을 얻는다. 그리고 단계(S74)에서 얻어진 일시변수에 할당된 자원을 프리미티브 기억부(102)로부터 얻는다.
조작의 종류가 참조라면 얻어진 자원의 보유값을 코드 실행부(206)에 문의하여 그 자원의 값을 출력부(208)에 표시시키고, 조작의 종류가 설정이라면 입력부(201)로부터 희망값을 받아들이고 코드 실행부(206)에 그 값을 상기 자원에 설정하도록 명령한다.
이상과 같이 본 실시예에 의하면 프로그램 변환장치의 최적화 기능에 의해 프로그램의 변수를 포함하는 식이 일시 변수로 치환된 경우라도 사용자는 자신이 기술한 프로그램 내에 존재하는 변수의 값을 참조할 수 있고, 또 그 변수로의 값의 설정이 가능하게 된다.
또, 본 실시예에서는 일시 변수로 치환된 프로그램의 식에 포함되는 변수에대하여 참조하는 예를 나타냈으나, 입력부에서 입력된 값에 대하여 변수 조작부(207)가 일시 변수의 값을 계산하고, 변수 조작부에서 설정함으로써 프로그램의 변수에 대한 값의 설정도 가능하다.
또, 본 실시예에서는 디버그 장치에서 프리미티브 기억부(102)로부터 프로그램의 변수와 일시 변수의 관계를 나타내는 계산식을 얻어 일시 변수가 어느 자원에 할당되었는지 정보를 얻고, 우선 프로그램의 변수로부터 식에 포함되는 일시 변수 명을 검색하고, 다음에 일시 변수명으로부터 자원명을 검색했으나, 미리 프로그램 변환장치에서 프리미티브 기억부(102)를 검색하여 프로그램 변수와 자원명의 관계를 얻어 변수와 자원명의 관계를 나타내는 식을 프리미티브 기억부(102)에 기억하는 방법도 가능하다. 이 경우, 디버그 장치에서는 프리미티브 기억부(102)에 기억된 식을 참조하는 것 만으로 프로그램의 변수가 어느 자원에 있는 것인지 얻을 수 있다.
상술한 본 발명의 프로그램 개발 시스템에 의하면 최적화 과정에서의 행의 삭제, 이동, 변수의 치환, 이동, 삭제라는 기본적인 알고리즘을 조합한 복잡한 최적화가 행해져도, 판정수단은 그 과정에서 소정의 편집 내용이 행해졌는지를 판정하고, 만일 행해졌으면 생성 수단이 변천 정보를 생성한다. 이와 같이 판정수단이 최적화 과정을 감시함으로써, 내부 표현의 최적화 과정을 변천 정보에 의해 치밀하게 표현할 수 있다. 따라서 행의 삭제, 이동, 변수의 치환, 이동, 삭제라는 기본적인 알고리즘을 조합한 복잡한 최적화가 행해져도 그 과정을 보다 치밀하게 표현할수 있다.
또, 번역된 기계어 프로그램의 디버그시에는 디버그 장치는 디버그 명령의 내용을 해석하고, 디버그 명령내에 편집전 코드에 대한 지시가 포함되어 있으면 같은 코드를 포함하던 모든 변천 정보에 기초하여 상기 편집에 의한 상기 편집전 코드의 변천 경위를 해석한다. 이와 같이 경위를 해석하여 제 1 표시수단은 해석된 변천 경위를 표시하므로, 예를 들어 소스 코드문이 최적화에 의해 고쳐쓰여져 있어도 프로그램 개발자는 최적화에 의해 어떻게 고쳐쓰여졌는지의 이해에 시간을 들이지 않게 된다. 이로써 프로그램 개발자는 최적화 과정에 의해 고쳐쓰여진 부분에 혼동되지 않고 고급언어로 기술된 소스 코드문을 떠올리면서 그 동작검증을 확인할 수 있다.
또, 본 발명에 의하면, 조작자가 치환전 변수를 지정한 경우에 단지 그 변수의 값을 판독할 뿐만 아니라 치환전 변수가 치환후 변수로 치환되었다는 의미의 메시지와, 그들의 조합이 모두 하드웨어 자원으로부터 판독된 값이라는 의미를 표시하므로 변수끼리의 관련을 조작자에게 의식시킬 수 있다. 이와 같이 변수끼리의 관련을 의식시킴으로써 디버그 작업의 진척도를 높일 수 있다.
제 1 ∼ 제 4 편집 내용인 변수의 치환, 연산식의 치환, 행의 이동, 행의 삭제는 『복사 전파』『상수 전파』 등 지명도가 높은 최적화 방법이거나 새로 개발된 주목도가 높은 최적화 방법이어도 반드시 행할 수 있는 편집 내용이므로 이와 같은 편집 내용에 기초하여 최적화 과정을 표현함으로써 최적화 과정의 표현에 확장성이 부여된다. 따라서 최적화 과정의 표현에 보편성을 부여할 수 있다. 이로써최적화 방법의 등장에 따라 디버그 정보의 표기를 고치기 위해 수고를 할 필요가 없게 된다.
상술한 본 발명의 바람직한 실시예들은 예시의 목적을 위해 개시된 것이며, 당업자라면 첨부된 특허청구의 범위에 개시된 본 발명의 사상과 범위를 통해 각종 수정, 변경, 대체 및 부가가 가능할 것이다.

Claims (24)

  1. 복수의 소스 코드문으로 이루어지는 소스 파일의 번역 처리를 감시하여 디버그용 정보를 생성하는 디버그 정보 생성장치와, 상기 번역 처리에 의해 얻어진 기계어 프로그램의 동작검증을 행하는 디버그 장치로 이루어지는 프로그램 개발 시스템에 있어서,
    상기 디버그 정보 생성장치는,
    상기 소스 파일의 번역 처리시에 내부 표현으로 변환된 상기 소스 파일에 대하여 최적화 처리가 행해지는 동안 소정의 편집 내용이 상기 소스 파일 중의 어느 코드에 대하여 행해졌는가를 행마다 판정하는 제 1 판정수단과,
    상기 제 1 판정수단에 의하여 상기 소정의 편집 내용이 행해졌다고 판정된 경우, 상기 편집 내용이 행해진 코드에 대응하는 소스 코드문을 포함하는 행의 행 번호와, 편집 내용과, 편집 전후의 코드의 조합에 의해 편집 전후의 변천을 나타내는 변천 정보를 생성하는 생성수단을 포함하며,
    상기 디버그 장치는,
    상기 번역 처리에 의해 얻어진 기계어 프로그램에 대한 동작검증용 명령인 디버그 명령을 수신하는 명령 수신수단과,
    상기 명령 수신수단에 의하여 수신된 디버그 명령의 내용을 해석하고, 디버그 명령내에 편집 전 코드에 대한 지시가 포함되어 있다면 같은 코드를 포함하고 있던 모든 변천 정보에 기초하여 상기 편집에 의한 상기 편집 전 코드의 변천 경위를 해석하는 해석수단과,
    상기 해석수단에 의하여 해석된 변천 경위를 표시하는 제 1 표시수단과,
    기계어 프로그램을 구성하는 복수의 실행코드 중 상기 명령 수신수단에 의하여 수신된 디버그 명령에 해당하는 것을 상기 해석수단에 의해 해석된 변천 경위를 참조하여 검출하고, 검출한 실행코드에 대하여 동작검증을 행하는 동작검증수단을 포함하는 것을 특징으로 하는 프로그램 개발 시스템.
  2. 제 1항에 있어서,
    상기 제 1 판정수단은,
    제 1 편집 내용으로서 최적화 처리에 의해 소스 코드문 중의 변수를 다른 변수 또는 상수로 치환하는 의미의 편집 내용이 행해졌는지를 판정하는 제 1 판정부와,
    제 2 편집 내용으로서 최적화 처리에 의해 소스 코드문 중의 연산식을 다른 변수 또는 상수로 치환하는 의미의 편집 내용이 행해졌는지를 판정하는 제 2 판정부와,
    제 3 편집 내용으로서 최적화 처리에 의해 소스 코드문을 다른 행으로 이동하는 의미의 편집 내용이 행해졌는지를 판정하는 제 3 판정부와,
    제 4 편집 내용으로서 최적화 처리에 의해 소스 코드문을 삭제하는 의미의 편집 내용이 행해졌는지를 판정하는 제 4 판정부를 포함하며,
    상기 생성수단은,
    상기 제 1 판정부에 의하여 상기 제 1 편집 내용의 편집이 행해진 것으로 판정되면 해당 소스 코드문이 존재하는 행의 행번호와, 치환 전의 변수명과, 치환 후의 변수명 또는 상수명과, 이들에 대하여 치환이 행해진 것을 나타내는 식별 정보를 포함하는 제 1 변천 정보를 생성하는 제 1 생성부와,
    상기 제 2 판정부에 의하여 상기 제 2 편집 내용의 편집이 행해진 것으로 판정되면 해당 소스 코드문이 존재하는 행의 행번호와 치환 전의 연산식과, 치환 후의 변수명 또는 상수와, 이들에 대하여 치환이 행해진 것을 나타내는 식별 정보를 포함하는 제 2 변천 정보를 생성하는 제 2 생성부와,
    상기 제 3 판정부에 의하여 상기 제 3 편집 내용의 편집이 행해진 것으로 판정되면 해당 소스 코드문이 존재하는 원래의 행의 행번호와, 그 소스 코드문의 이동 후의 행의 행번호와, 이동이 행해진 것을 나타내는 식별 정보를 포함하는 제 3 변천 정보를 생성하는 제 3 생성부와,
    상기 제 4 판정부에 의하여 상기 제 4 편집 내용의 편집이 행해진 것으로 판정되면 최적화 처리에 의해 소스 코드문을 삭제하는 경우 그 소스 코드문의 행번호와, 그 소스 코드문이 삭제된 것을 나타내는 식별정보를 포함하는 제 4 변천 정보를 생성하는 제 4 생성부를 포함하는 것을 특징으로 하는 프로그램 개발 시스템.
  3. 제 2항에 있어서,
    상기 디버그 정보 생성장치는,
    상기 제 3 생성부가 상기 제 3 변천 정보를 생성하면 상기 제 1 및 제 2 생성부에 의해 생성된 제 1 및 제 2 변천 정보 중, 상기 제 3 변천 정보에 포함되는 소스 코드문의 이동 출발지의 행번호와 동일한 행번호를 갖는 변천 정보를 검출하는 제 1 검출수단과,
    상기 제 1 검출수단에 의해 검출된 변천 정보를 삭제하는 제 1 삭제수단을 추가로 포함하는 것을 특징으로 하는 프로그램 개발 시스템.
  4. 제 3항에 있어서,
    상기 디버그 정보 생성장치는,
    상기 제 4 생성부가 상기 제 4 변천 정보를 생성하면 상기 제 1 및 제 2 변천 정보 중 상기 제 4 변천 정보에 포함되는 소스 코드문이 존재하는 행의 행번호와 동일한 행번호를 갖는 변천 정보를 검출하는 제 2 검출수단과,
    상기 제 2 검출수단에 의하여 검출된 변천 정보를 삭제하는 제 2 삭제수단을 추가로 포함하는 것을 특징으로 하는 프로그램 개발 시스템.
  5. 제 2항에 있어서,
    상기 디버그 장치는,
    상기 제 1 내지 제 4 생성부에 의해 생성된 상기 제 1 내지 제 4 변천 정보를 기억하는 변천 정보 기억수단과,
    상기 소스 코드문이 존재하는 행의 행번호와, 변수명과 자원명의 나열에 의해 어느 행의 소스 코드문 내의 변수가 어느 하드웨어 자원에 할당되었는지를 표현한 할당 정보를 기억하는 할당 정보 기억수단을 포함하며,
    상기 해석수단은,
    상기 명령 수신수단에 의해 수신된 상기 디버그 명령내에 포함되는 보유값을 판독할 변수명의 지시를 해석하는 제 1 해석부와,
    상기 제 1 해석부에 의해 해석된 변수를 치환전 변수 또는 치환후 변수로서 지정하고 있는 상기 제 1 변천 정보 및 상기 제 2 변천 정보가 상기 변천정보 기억 수단에 기억되어 있을 경우 이것을 검출하는 제 1 검출부와,
    상기 제 1 검출부에 의하여 검출된 제 1 변천 정보 및 제 2 변천 정보에 포함되는 치환후 변수명을 포함하는 할당 정보가 상기 할당 정보 기억수단에 기억되어 있는 경우 이것을 검출하는 제 2 검출부를 포함하고,
    상기 동작검증수단은,
    상기 제 1 검출부 및 제 2 검출부에 의하여 검출된 상기 제 1 변천 정보, 제 2 변천정보 및 할당 정보를, 이들이 포함하고 있는 자원명, 치환전 변수명 및 치환 후 변수명으로 이루어지는 할당 정보에 합성하는 합성부와,
    상기 합성부에 의하여 합성된 상기 할당 정보내의 자원명으로 지시되는 하드웨어 자원의 값을, 조작자에 의한 판독 지시가 포함되어 있는 경우에 판독하는 판독부를 포함하며,
    상기 제 1 표시수단은,
    상기 판독부에 의해 상기 할당 정보내의 자원명으로 지시되는 하드웨어 자원의 판독이 행해지는 경우, 치환전 변수가 치환후 변수로 치환된 것을 나타내는 메시지와, 그들의 조합이 모두 하드웨어 자원에서 판독된 값이라는 것을 표시하는 제 1 표시부를 포함하는 것을 특징으로 하는 프로그램 개발 시스템.
  6. 제 5항에 있어서,
    상기 디버그 장치는 상기 명령 수신수단에 의해 상기 디버그 명령내에 포함되는 희망값을 기입할 변수명의 지시를 해석하는 제 2 해석부를 갖는 해석수단을 포함하며,
    상기 제 1 검출부는 조작자에 의해 지시된 변수를 치환전 변수 또는 치환후 변수로서 지정하고 있는 제 1 변천정보 및 제 2 변천정보가 상기 디버그 정보 기억 수단에 기억되어 있는 경우 이것을 검출하고,
    상기 제 2 검출부는 상기 제 1 검출부에 의해 검출된 상기 제 1 변천정보 및 제 2 변천정보에 포함되는 치환후 변수명을 포함하는 할당 정보가 존재하는 경우 이것을 검출하며,
    상기 합성부는 상기 제 1 검출부 및 제 2 검출부에 의해 검출된 상기 제 1 변천정보, 제 2 변천정보 및 할당 정보를 그들이 포함하고 있는 자원명, 치환전 변수명 및 치환후 변수명으로 이루어지는 할당 정보에 합성하고,
    상기 동작 검증수단은 조작자에 의한 지시가 기입지시이면 상기 합성부에 의해 합성된 할당 정보내의 하드웨어명으로 지시되는 하드웨어 자원으로 희망값을 기입하는 기입부를 포함하며,
    상기 제 1 표시수단은 상기 기입부에 의하여 상기 하드웨어 자원의 기입이행해지면, 치환전 변수가 치환후 변수로 치환되었다는 것, 이들의 치환전 변수 및 치환후 변수로 이루어지는 변수의 조합이 모두 해당 희망값에 설정된다는 것을 나타내는 메시지를 표시하는 제 2 표시부를 포함하는 것을 특징으로 하는 프로그램 개발 시스템.
  7. 제 6항에 있어서,
    상기 디버그 장치는,
    어느 행의 소스 코드문이 어느 실행코드로 변환되었는지를 소스 코드문이 존재하는 행의 행번호와, 해당 실행코드의 어드레스에 의해 표현한 행 어드레스 정보를 기억하는 행 어드레스 정보 기억수단과,
    판독 기입할 변수를 포함하는 소스 코드문의 행번호를 해석하는 제 3 해석부를 포함하며,
    상기 동작 검증수단은,
    상기 제 3 해석부에 의해 해석된 행번호에 대응하는 실행코드의 어드레스를 인출하는 제 1 인출부와,
    상기 제 1 인출부에 의하여 인출된 어드레스에 대응하는 행번호를 갖는 할당 정보로서, 상기 합성부에 의해 합성된 할당 정보에 나타나 있는 자원의 자원명을 인출하는 제 2 인출부와,
    상기 제 1 인출부에 의하여 인출된 어드레스를 브레이크 포인트 설정장소 어드레스로서 결정하는 제 1 어드레스 결정부와,
    상기 제 1 어드레스 결정부에 의하여 결정된 브레이크 포인트 설정장소 어드레스까지 기계어 프로그램을 실행하는 실행부를 포함하며,
    상기 판독부 및 기입부는,
    상기 실행부에 의하여 기계어 프로그램이 실행된 이후, 상기 제 2 인출부에 의하여 인출된 자원명으로 지시된 하드웨어 자원에 대한 판독 및 기입을 행하는 것을 특징으로 하는 프로그램 개발 시스템.
  8. 제 7항에 있어서,
    상기 디버그 장치는,
    상기 제 1 및 제 2 해석부에 의하여 값을 판독할 변수의 지시 또는 희망값을 기입할 변수의 지시가 해석되면 상기 제 3 변천 정보를 참조하여 그들의 변수를 포함하는 소스 코드문이 이미 이동하고 있는지를 판정하는 제 5 판정부와, 상기 제 1 및 제 2 해석부에 의하여 값을 판독할 변수의 지시 또는 희망값을 기입할 변수의 지시가 해석되면 상기 제 4 변천 정보를 참조하여 조작자가 지정한 변수를 포함하는 소스 코드문이 이미 삭제되어 있는지를 판정하는 제 6 판정부를 갖는 해석 수단과,
    상기 제 1 표시수단은,
    상기 제 5 판정부가 소스 코드문이 이동하였다고 판정한 경우 그 소스 코드문이 해당 행에서 이동되었기 때문에 지시된 판독 기입이 행해지지 않는다는 것을 조작자에게 경고하는 제 1 경고부와, 상기 제 6 판정부가 소스 코드문이 삭제되어있다고 판정한 경우 그 소스 코드문이 해당 행에서 삭제되었기 때문에 지시된 판독 기입이 행해지지 않는다는 것을 조작자에게 경고하는 제 2 경고부와, 상기 소스 코드문이 이동되지도 않고 삭제되지도 않았으나, 상기 제 2 검출 수단에 의해 검출된 상기 제 1 변천 정보 및 제 2 변천 정보에 포함되는 치환후 변수명을 포함하는 할당 정보가 존재하지 않는 경우, 그 변수에 대한 판독 기입이 행해지지 않는다는 것을 경고하는 제 3 경고부를 구비하는 것을 특징으로 하는 프로그램 개발 시스템.
  9. 제 8항에 있어서,
    상기 해석수단은,
    디버그 명령에 포함되는 기계어 프로그램의 실행에 대한 지시와 브레이크 포인트를 설정할 행의 지시를 해석하는 제 4 해석부와,
    상기 제 3 및 제 4 변천 정보를 참조하여 상기 지시된 행의 소스 코드문이 다른 행으로 이동하였는지 아니면 원래의 행에 존재하는지를 판정하는 제 7 판정부를 포함하며,
    상기 제 1 표시수단은, 상기 제 7 판정부에 의해 상기 소스 코드문이 다른 행으로 이동하였다고 판정된 경우, 이동 장소의 행번호와, 그 이동 장소에 브레이크 포인트가 설정되는 것을 알리는 알림부를 포함하며,
    상기 동작검증수단은, 상기 소스 코드문이 원래의 행에 존재하는 경우 또는 삭제된 것으로 판정된 경우, 상기 행 어드레스 정보 기억수단에 기억된 실행코드와 상기 소스 코드문간의 대응관계에 기초하여 브레이크 포인트 설정 장소 어드레스를결정하는 제 1 어드레스 결정부와,
    상기 소스 코드문이 다른 행으로 이동되었다고 판정된 경우, 상기 행 어드레스 정보 기억수단에 기억된 이동 장소의 행번호의 소스 코드문과 실행코드의 대응 관계에 기초하여 브레이크 포인트 설정장소 어드레스를 결정하는 제 2 어드레스 결정부를 포함하며,
    상기 실행부는, 상기 결정된 브레이크 포인트 설정장소 어드레스까지 기계어 프로그램을 실행하는 것을 특징으로 하는 프로그램 개발 시스템.
  10. 제 5항에 있어서,
    상기 디버그 장치는,
    소스 파일에서 동작검증할 함수의 지정을 조작자로부터 수신하는 함수지정 수신수단과,
    상기 지정된 함수에 포함되는 복수의 소스 코드문 중 일부를 발췌하고 이 발췌한 소스 코드문을 소정의 제 1 윈도우 내에 표시하는 제 2 표시수단과,
    기계어 프로그램에 포함되는 복수의 실행코드 중에서 상기 소정의 제 1 윈도우에 표시된 소스 코드문에 대응하는 실행코드를, 상기 표시된 소스 코드문에 대하여 소정의 방향으로 배치된 제 2 윈도우에 표시하는 제 3 표시수단을 포함하며,
    상기 디버그 명령 수신수단은 상기 소스 코드문 중 표시된 어느 하나의 소스 코드문을 지시한 디버그 명령을 수신하고,
    상기 디버그 정보 생성장치는,
    상기 디버그 명령 수신수단이 상기 브레이크 포인트의 설정장소로서 어느 하나의 행을 지시한 디버그 명령을 접수하면 상기 제 2 표시수단에 의해 표시된 상기 제 1 윈도우 내의 해당 소스 코드문 표시를 수식하는 제 1 수식수단과,
    상기 제 1 수식수단에 의하여 어느 하나의 행이 수식되면 이 수식된 소스 코드문이 어느 어드레스의 실행코드에 대응하는지를 판정하는 제 2 판정수단과,
    상기 제 3 표시수단에 의해 표시된 제 2 윈도우 내의 상기 제 2 판정수단에 의해 판정된 어드레스의 실행코드 표시를 수식하는 제 2 수식수단을 추가로 포함하는 것을 특징으로 하는 프로그램 개발 시스템.
  11. 제 10항에 있어서,
    상기 디버그 장치는,
    상기 함수지정 수신수단이 동작검증할 함수의 지정을 조작자로부터 수신하면 그 함수에 포함되는 소스 코드문 중 상기 제 3 변천 정보에서 이동 출발지의 소스 코드문으로서 지정된 것을 검출하는 제 3 검출수단과,
    상기 함수지정 수신수단이 동작검증할 함수의 지정을 조작자로부터 접속하면 그 함수에 포함되는 소스 코드문 중, 상기 제 4 변천 정보에서 삭제된 소스 코드문으로서 지정된 것을 검출하는 제 4 검출수단과,
    상기 제 3 검출수단에 의해 검출된 모든 행에 그 소스 코드문이 이동한 것을 나타내는 라벨을 붙이도록 표시하는 제 1 라벨 부여수단과,
    상기 제 4 검출수단에 의해 검출된 모든 행에 그 소스 코드문이 삭제된 것을나타내는 라벨을 붙이도록 표시하는 제 2 라벨 부여수단을 포함하는 것을 특징으로 하는 프로그램 개발 시스템.
  12. 제 11항에 있어서,
    상기 디버그 장치는,
    상기 함수 지정수단에 의해 지정된 함수에 포함되는 변수를 모두 검출하는 제 5 검출수단과,
    상기 제 5 검출수단에 의하여 검출된 변수를 포함하는 제 1 변천 정보 및 할당 정보를 검출하는 제 6 검출수단과,
    상기 제 6 검출수단에 의하여 검출된 할당 정보에 포함되는 하드웨어 자원명, 치환전 변수, 치환후 변수, 이들 치환이 수행되었다는 것을 나타내는 메시지를 검출된 각각의 변수가 포함되는 소스 코드문의 소정 방향으로 배치하도록 표시하는 배치수단을 포함하는 것을 특징으로 하는 프로그램 개발 시스템.
  13. 제 12항에 있어서,
    상기 디버그 장치는,
    상기 소스 코드문 중의 각 변수가 포함되는 할당 정보를 참조하여 그들의 변수에 대응하는 자원의 판독 기입이 가능한 것을 판정하는 제 3 판정수단과,
    상기 제 3 판정수단에 의하여 판독 기입이 가능하다고 판정된 변수가 포함되는 소스 코드문에 가능하다는 것을 나타내는 기호를 배치하도록 표시하는 기호 배치수단을 포함하는 것을 특징으로 하는 프로그램 개발 시스템.
  14. 제 5항에 있어서,
    상기 디버그 장치는,
    상기 제 1 내지 제 4 변천 정보 및 상기 할당 정보가 변천정보 기억수단 및 할당정보 기억수단에 각각 기억되면 그 정보량을 카운트하는 카운트부와,
    상기 카운트부에 의하여 카운트된 정보량이 소정 기준 이하이면 상기 변천 정보 기억수단 및 상기 할당 정보 기억수단에 기억된 상기 제 1 변천 정보 및 할당 정보를 그들이 포함하고 있는 자원명과, 치환전 변수명과, 치환후 변수명으로 구성되는 할당 정보에 합성하도록 합성수단을 제어하는 제어수단을 포함하는 것을 특징으로 하는 프로그램 개발 시스템.
  15. 제 5항에 있어서,
    상기 디버그 장치는,
    상기 제 1 내지 제 4변천 정보 및 상기 할당 정보가 상기 변천정보 기억수단 및 할당정보 기억수단에 각각 기억되면 소스 코드문의 행수를 카운트하는 카운트부와,
    상기 카운트부에 의하여 카운트된 행수가 소정 기준 이하라면 상기 변천 정보 기억수단 및 할당 정보 기억 수단에 기억된 상기 제 1 변천 정보 및 할당 정보를 그들이 포함하고 있는 자원명과, 치환전 변수명과, 치환후 변수명으로 구성되는할당 정보에 합성하도록 합성 수단을 제어하는 제어수단을 포함하는 것을 특징으로 하는 프로그램 개발 시스템.
  16. 제 5항에 있어서,
    상기 디버그 장치는,
    상기 실행코드의 코드 크기를 카운트하는 카운트부와,
    상기 카운트부에 의하여 카운트된 코드 크기가 소정 기준 이하라면 상기 변천 정보 기억수단 및 할당 정보 기억수단에 기억되어 있는 상기 제 1 변천 정보 및 할당 정보를 그들이 포함하고 있는 자원명과, 치환전 변수명과, 치환후 변수명으로 구성되는 할당 정보에 합성하도록 합성수단을 제어하는 제어수단을 포함하는 것을 특징으로 하는 프로그램 개발 시스템.
  17. 복수의 소스 코드문으로 이루어지는 소스 파일의 해석 처리를 감시하여 디버그용 정보를 생성하는 디버그 정보 생성장치에 있어서,
    상기 디버그 정보 생성장치는,
    번역 처리시에 내부 표현으로 변환된 소스 파일에 대하여 최적화 처리가 행해지는 동안 소정의 편집 내용이 소스 파일 중의 어떤 코드에 대하여 행해졌는지를 행마다 판정하는 제 1 판정수단과,
    상기 제 1 판정수단에 의하여 소정의 편집 내용이 행해졌다고 판정된 경우, 그 코드에 대응하는 소스 코드문을 포함하는 행의 행번호와, 편집 내용과, 편집 전후의 코드의 조합에 의해 편집 전후의 변천을 나타내는 변천 정보를 생성하는 생성 수단을 포함하며,
    상기 제 1 판정 수단은,
    제 1 편집 내용으로서 최적화 처리에 의해 소스 코드문 중의 변수를 다른 변수 또는 상수로 치환하는 것을 나타내는 편집 내용이 행해졌는지를 판정하는 제 1 판정부와,
    제 2 편집 내용으로서 최적화 처리에 의해 소스 코드문 중의 연산식을 다른 변수 또는 상수로 치환하는 것을 나타내는 편집 내용이 행해졌는지를 판정하는 제 2 판정부와,
    제 3 편집 내용으로서 최적화 처리에 의해 소스 코드문을 다른 행으로 이동하는 것을 나타내는 편집 내용이 행해졌는지를 판정하는 제 3 판정부와,
    제 4 편집 내용으로서 최적화 처리에 의해 소스 코드문을 삭제하는 것을 나타내는 편집 내용이 행해졌는지를 판정하는 제 4 판정부를 포함하며,
    상기 생성 수단은,
    상기 제 1 편집 내용의 편집이 행해지면 해당 소스 코드문이 존재하는 행의 행번호와, 치환전의 변수명과, 치환후의 변수명 또는 정수명과, 그들이 치환된 것을 나타내는 식별 정보를 포함하는 제 1 변천 정보를 생성하는 제 1 생성부와,
    상기 제 2 편집 내용의 편집이 행해지면 해당 소스 코드문이 존재하는 행의 행번호와, 치환전의 연산식과, 치환후의 변수명 또는 정수와, 그들이 치환된 것을 나타내는 식별 정보를 포함하는 제 2 변천 정보를 생성하는 제 2 생성부와,
    상기 제 3 편집 내용의 편집이 행해지면 그 소스 코드문이 존재하는 원래 행의 행번호와, 그 소스 코드문의 이동후의 행의 행번호와, 이동이 행해진 것을 나타내는 식별 정보를 포함하는 제 3 변천 정보를 생성하는 제 3 생성부와,
    상기 제 4 편집 내용의 편집이 행해지는 경우 최적화 처리에 의해 소스 코드문을 삭제하면 그 소스 코드문의 행번호와, 그 소스 코드문이 삭제된 것을 나타내는 식별 정보를 포함하는 제 4 변천 정보를 생성하는 제 4 생성부를 포함하는 것을 특징으로 하는 프로그램 개발 시스템.
  18. 제 17항에 있어서,
    상기 디버그 정보 생성장치는
    상기 제 3 생성부가 상기 제 3 변천 정보를 생성하면 상기 제 1 및 제 2 생성부에 의해 이제까지 생성된 상기 제 1 및 제 2 변천 정보 중, 해당 제 3 변천 정보에 포함되는 소스 코드문의 이동 출발지의 행번호와 동일 행번호를 갖는 변천정보를 검출하는 제 1 검출수단과,
    상기 제 1 검출수단에 의하여 검출된 제 1 및 제 2 변천 정보를 삭제하는 제 1 삭제수단을 포함하는 것을 특징으로 하는 프로그램 개발 시스템.
  19. 제 18항에 있어서,
    상기 디버그 정보 생성장치는
    상기 제 4 생성부가 제 4 변천 정보를 생성하면 상기 제 1 및 제 2 변천정보중 상기 제 4 변천 정보에 포함되는 소스 코드문이 존재하는 행의 행번호와 동일 행번호를 갖는 변천 정보를 검출하는 제 2 검출수단과,
    상기 제 2 검출수단에 의하여 검출된 변천 정보를 삭제하는 제 2삭제수단을 포함하는 것을 특징으로 하는 프로그램 개발 시스템.
  20. 복수의 소스 코드문으로 이루어지는 소스 파일을 번역하여 얻어진 기계어 프로그램의 동작검증을 행하는 디버그 장치에 있어서,
    상기 소스 파일은 번역 처리시에 내부 표현으로 변환된 상태에서 소정의 편집 내용이 이루어져 있고,
    상기 디버그 장치는,
    상기 소정의 편집 내용이 행해진 코드에 대응하는 소스 코드문을 포함하는 행의 행번호와, 편집 내용과, 편집 전후의 코드의 조합에 의해 편집 전후의 변천을 나타내는 변천 정보를 기억하는 기억 수단과,
    상기 번역 후의 기계어 프로그램에 대한 동작검증용 명령인 디버그 명령을 수신하는 명령 수신수단과,
    상기 명령 수신수단에 의하여 수신된 상기 디버그 명령의 내용을 해석하고, 상기 디버그 명령 내의 편집전 코드에 대한 지시가 포함되어 있다면 같은 코드를 포함하고 있던 모든 변천 정보에 기초하여 상기 편집에 의한 상기 편집전 코드의 변천 경위를 해석하는 해석수단과,
    상기 해석수단에 의하여 해석된 변천의 경위를 표시하는 제 1표시 수단과,
    상기 기계어 프로그램을 구성하는 복수의 실행코드 중 디버그 명령에 해당하는 것을 상기 해석수단에 의해 해석된 변천 경위를 참조하여 검출하고, 검출된 실행코드에 대하여 동작검증을 행하는 동작검증 수단을 포함하는 것을 특징으로 하는 디버그 장치.
  21. 제 20항에 있어서,
    상기 기억 수단은,
    제 1 내지 제 4 생성부에 의해 제 1 내지 제 4 변천 정보를 기억하는 변천 정보 기억수단과,
    어느 행의 소스 코드문 내의 변수가 어느 하드웨어 자원에 할당되었는지를 소스 코드문이 존재하는 행의 행번호와, 변수명 및 자원명의 나열에 의해 표현한 할당 정보를 기억하는 할당 정보 기억수단을 포함하며,
    상기 해석 수단은,
    상기 디버그 명령내에 포함되는, 보유값을 판독할 변수명의 지시를 해석하는 제 1 해석부와,
    상기 제 1 해석부에 의해 해석된 변수를 치환전 변수 또는 치환후 변수로서 지정하는 상기 제 1 변천 정보 및 제 2 변천 정보가 상기 변천 정보 기억 수단에 기억되어 있다면 이것을 검출하는 제 1 검출부와,
    상기 제 1 검출부에 의하여 검출된 상기 제 1 변천 정보 및 제 2 변천 정보에 포함되는 치환후 변수명을 포함하는 할당 정보가 상기 할당 정보 기억수단에 기억되어 있다면 이것을 검출하는 제 2 검출부를 포함하며,
    상기 동작검증 수단은,
    상기 제 1 및 제 2 검출부에 의해 각각 검출된 제 1 변천 정보, 제 2 변천 정보 및 할당 정보를 그들이 포함하고 있는 자원명, 치환전 변수명 및 치환후 변수명으로 이루어지는 할당 정보에 합성하는 합성부와,
    기입 지시가 포함되어 있으면 상기 합성부에 의하여 합성된 할당 정보 내의 자원명으로 지시되는 하드웨어 자원의 값을 판독하는 판독부를 포함하며,
    상기 제 1 표시 수단은 상기 하드웨어 자원의 판독이 행해지면 치환전 변수가 치환후 변수로 치환된 의미의 메시지와, 그들의 조합이 모두 하드웨어 자원에서 판독된 값이라는 것을 표시하는 제 1 표시부를 포함하는 것을 특징으로 하는 디버그 장치.
  22. 제 21항에 있어서,
    상기 해석 수단은 상기 디버그 명령내에 포함되는 희망값을 기입할 변수명의 지시를 해석하는 제 2 해석부를 포함하며,
    상기 제 1 검출부는 조작자에 의해 지시된 변수를 치환전 변수 또는 치환후 변수로서 지정하고 있는 제 1 변천 정보, 제 2 변천 정보가 상기 디버그 정보 기억 수단에 기억되어 있으면 이것을 검출하고,
    상기 제 2 검출부는 상기 검출된 제 1 변천 정보, 제 2 변천 정보에 포함되는 치환 후 변수명을 포함하는 할당 정보가 존재하면 이것을 검출하며,
    상기 합성부는 상기 제 1 및 제 2 검출부에 의해 각각 검출된 제 1 변천 정보, 제 2 변천 정보 및 할당 정보를 그들이 포함하고 있는 자원명과, 치환전 변수명과 치환후 변수명으로 이루어지는 할당 정보에 합성하고,
    상기 동작검증수단은 조작자에 의한 지시가 기입 지시이면 합성된 할당 정보 내의 하드웨어명으로 지시되는 하드웨어 자원으로 희망값을 기입하는 기입부를 포함하며,
    상기 제 1 표시수단은 상기 기입부에 의해 상기 하드웨어 자원의 기입이 행해지면 치환전 변수가 치환후 변수로 치환된 의미와, 이들의 치환전 변수, 치환후 변수로 이루어지는 변수의 조합이 모두 해당 희망값에 설정되는 의미를 나타내는 메시지를 표시하는 제 2 표시부를 포함하는 것을 특징으로 하는 디버그 장치.
  23. 제 22항에 있어서,
    상기 디버그 장치는,
    어느 행의 소스 코드문이 어느 실행코드로 변환되었는지를 소스 코드문이 존재하는 행의 행번호와, 해당 실행코드의 어드레스에 의해 표현한 행 어드레스 정보를 기억하는 행 어드레스 정보 기억수단과,
    판독 기입한 변수를 포함하는 소스 코드문의 행번호를 해석하는 제 3 해석부를 포함하며,
    상기 동작검증 수단은,
    상기 제 3 해석부에 의해 해석된 행번호에 대응하는 실행코드의 어드레스를인출하는 제 1 인출부와,
    상기 제 1 인출부에 의하여 인출된 어드레스에 대응하는 행번호를 갖는 할당 정보에서, 상기 합성부에 의해 합성된 할당 정보에 나타나 있는 자원의 자원명을 인출하는 제 2 인출부와,
    상기 제 2 인출부에 의하여 인출된 어드레스를 브레이크 포인트 설정장소 어드레스로서 결정하는 제 1 어드레스 결정부와,
    상기 제 1 어드레스 결정부에 의하여 결정된 브레이크 포인트 설정장소 어드레스까지 기계어 프로그램을 실행하는 실행부를 포함하며,
    상기 판독부 및 기입부는 상기 실행부에 의해 기계어 프로그램이 실행된 후, 인출된 자원명으로 지시된 하드웨어 자원에 대한 판독 및 기입을 하는 것을 특징으로 하는 디버그 장치.
  24. 제 23항에 있어서,
    상기 디버그 장치는,
    상기 제 1, 제 2 해석부에 의해 값을 판독할 변수의 지시 또는 희망값을 기입할 변수의 지시가 해석되면 상기 제 3 변천 정보를 참조하여 그들의 변수를 포함하는 소스 코드문이 이미 이동하고 있는지를 판정하는 제 5 판정부와,
    상기 제 1 및 제 2 해석부에 의해 값을 판독할 변수의 지시 또는 희망값을 기입할 변수의 지시가 해석되면 상기 제 4 변천 정보를 참조하여 조작자가 지정한 변수를 포함하는 소스 코드문이 이미 삭제되었는지를 판정하는 제 6 판정부와,
    상기 제 5 판정부에 의하여 상기 소스 코드문이 이동하고 있다고 판정된 경우, 상기 소스 코드문이 해당 행으로부터 이동되었기 때문에 지시된 판독 기입이 행해지지 않는 것을 조작자에게 경고하는 제 1 경고부와,
    상기 제 6 판정부에 의하여 상기 소스 코드문이 삭제된 것으로 판정된 경우, 상기 소스 코드문이 해당 행으로부터 삭제되었기 때문에 지시된 판독 기입이 행해지지 않는 것을 조작자에게 경고하는 제 2 경고부와,
    상기 제 5 판정부 및 제 6 판정부에 의하여 상기 소스 코드문의 이동 및 삭제는 되지 않은 것으로 판정되었으나, 상기 제 2 검출 수단에 의해 검출된 제 1 변천 정보, 제 2 변천 정보에 포함되는 치환후 변수명을 포함하는 할당 정보가 존재하지 않는 경우, 그 변수에 대한 판독 기입이 행해지지 않는 것을 경고하는 제 3 경고부를 갖는 제 1 표시수단을 포함하는 것을 특징으로 하는 디버그 장치.
KR1019970011066A 1996-06-28 1997-03-28 최적화과정을참조하면서동작검증을행하도록디버그정보를생성하는디버그정보생성장치및프로그래머가최적화과정을의식하면서동작검증을할수있는디버그장치로이루어지는프로그램개발시스템 KR100417655B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP8169195A JPH1021086A (ja) 1996-06-28 1996-06-28 プログラム変換装置とデバッグ装置
JP96-169195 1996-06-28

Publications (2)

Publication Number Publication Date
KR980004050A KR980004050A (ko) 1998-03-30
KR100417655B1 true KR100417655B1 (ko) 2004-06-09

Family

ID=15881985

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019970011066A KR100417655B1 (ko) 1996-06-28 1997-03-28 최적화과정을참조하면서동작검증을행하도록디버그정보를생성하는디버그정보생성장치및프로그래머가최적화과정을의식하면서동작검증을할수있는디버그장치로이루어지는프로그램개발시스템

Country Status (6)

Country Link
EP (1) EP0817049B1 (ko)
JP (1) JPH1021086A (ko)
KR (1) KR100417655B1 (ko)
CN (1) CN1143225C (ko)
DE (1) DE69712986T2 (ko)
TW (1) TW366451B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008147741A3 (en) * 2007-05-25 2009-02-19 Microsoft Corp In-process debugging using external debugging infrastructure

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6269454B1 (en) * 1998-11-06 2001-07-31 Advanced Micro Devices, Inc. Maintaining object information concurrent with data optimization for debugging
JP3612294B2 (ja) 2001-08-06 2005-01-19 松下電器産業株式会社 デバッグ方法およびデバッグ装置
JP2015194881A (ja) 2014-03-31 2015-11-05 富士通株式会社 コンパイル装置、コンパイラプログラム、コンパイル方法
WO2018037513A1 (ja) * 2016-08-24 2018-03-01 三菱電機株式会社 プログラマブルロジックコントローラ
WO2019059040A1 (ja) 2017-09-25 2019-03-28 株式会社フジキン バルブ装置、調整情報生成方法、流量調整方法、流体制御装置、流量制御方法、半導体製造装置および半導体製造方法
CN109240743B (zh) * 2018-08-03 2021-07-27 挖财网络技术有限公司 一种利用特定标签来进行代码切换的方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4667290A (en) * 1984-09-10 1987-05-19 501 Philon, Inc. Compilers using a universal intermediate language
US4953084A (en) * 1987-11-16 1990-08-28 Hewlett-Packard Company Method and apparatus using variable ranges to support symbolic debugging of optimized code
JPH03240837A (ja) * 1990-02-19 1991-10-28 Nec Corp デバッグ情報生成装置
JPH06274369A (ja) * 1993-03-19 1994-09-30 Hitachi Ltd 最適化プログラムのデバッグ方式

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1993025964A1 (en) * 1992-06-05 1993-12-23 Convex Computer Corporation Computer program debugging in the presence of compiler synthesized variables
US5371747A (en) * 1992-06-05 1994-12-06 Convex Computer Corporation Debugger program which includes correlation of computer program source code with optimized object code

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4667290A (en) * 1984-09-10 1987-05-19 501 Philon, Inc. Compilers using a universal intermediate language
US4953084A (en) * 1987-11-16 1990-08-28 Hewlett-Packard Company Method and apparatus using variable ranges to support symbolic debugging of optimized code
JPH03240837A (ja) * 1990-02-19 1991-10-28 Nec Corp デバッグ情報生成装置
JPH06274369A (ja) * 1993-03-19 1994-09-30 Hitachi Ltd 最適化プログラムのデバッグ方式

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008147741A3 (en) * 2007-05-25 2009-02-19 Microsoft Corp In-process debugging using external debugging infrastructure
US8239832B2 (en) 2007-05-25 2012-08-07 Microsoft Corporation In-process debugging using external debugging infrastructure

Also Published As

Publication number Publication date
JPH1021086A (ja) 1998-01-23
DE69712986T2 (de) 2002-10-17
CN1172304A (zh) 1998-02-04
KR980004050A (ko) 1998-03-30
EP0817049A1 (en) 1998-01-07
DE69712986D1 (de) 2002-07-11
TW366451B (en) 1999-08-11
EP0817049B1 (en) 2002-06-05
CN1143225C (zh) 2004-03-24

Similar Documents

Publication Publication Date Title
US6138271A (en) Operating system for embedded computers
EP0785510B1 (en) Program debugging system for debugging a program having a graphical user interface
JP4822817B2 (ja) コンパイルシステム
US5701487A (en) Method and apparatus for displaying locations of errors detected inside software macro calls
US5182806A (en) Incremental compiler for source-code development system
US5325531A (en) Compiler using clean lines table with entries indicating unchanged text lines for incrementally compiling only changed source text lines
US5313387A (en) Re-execution of edit-compile-run cycles for changed lines of source code, with storage of associated data in buffers
US5832270A (en) System having automatic insertion of hooks into object-oriented software for visualizing execution thereof
Fischer et al. The POE language-based editor project
US5193191A (en) Incremental linking in source-code development system
US5201050A (en) Line-skip compiler for source-code development system
US7426717B1 (en) System and method for debugging files in a runtime environment
JP6845429B2 (ja) コンパイラプログラム、情報処理装置およびコンパイル方法
KR100417655B1 (ko) 최적화과정을참조하면서동작검증을행하도록디버그정보를생성하는디버그정보생성장치및프로그래머가최적화과정을의식하면서동작검증을할수있는디버그장치로이루어지는프로그램개발시스템
Bahlke et al. The psg-programming system generator
CN114356783A (zh) 单元测试代码自动生成方法、装置、存储介质及设备
Knor et al. Reengineering C/C++ source code by transforming state machines
Bahlke et al. Context-sensitive editing with PSG environments
KR100846203B1 (ko) 모바일 어플리케이션의 생성 방법 및 이를 구현하기 위한프로그램을 기록한 기록매체
Nagl et al. Software specification by graph grammars
Sloman et al. PoPLoo: A MULTILANGUAGE PROGRAM
Kolb et al. Programming environments
JP2811804B2 (ja) 変数出力範囲指定方式
JPH06289919A (ja) Nc装置のマンマシンインタフェース装置
JP2662533B2 (ja) ロジック・アナライザ

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

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20140103

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20150105

Year of fee payment: 12

FPAY Annual fee payment

Payment date: 20160105

Year of fee payment: 13

FPAY Annual fee payment

Payment date: 20170103

Year of fee payment: 14

EXPY Expiration of term