CN102637136B - 用于融合来自不同编译器阶段的调试信息的方法和设备 - Google Patents

用于融合来自不同编译器阶段的调试信息的方法和设备 Download PDF

Info

Publication number
CN102637136B
CN102637136B CN201110428634.3A CN201110428634A CN102637136B CN 102637136 B CN102637136 B CN 102637136B CN 201110428634 A CN201110428634 A CN 201110428634A CN 102637136 B CN102637136 B CN 102637136B
Authority
CN
China
Prior art keywords
symbol
code
instruction
debugging message
action
Prior art date
Legal status (The legal status 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 status listed.)
Expired - Fee Related
Application number
CN201110428634.3A
Other languages
English (en)
Other versions
CN102637136A (zh
Inventor
A·K·阿加瓦尔
T·P·多舍尔
P·梅比
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
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 Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN102637136A publication Critical patent/CN102637136A/zh
Application granted granted Critical
Publication of CN102637136B publication Critical patent/CN102637136B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

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

Abstract

本发明公开了融合来自不同编译器阶段的调试信息。本发明涉及用于融合来自不同编译器阶段的调试信息的各方法、系统和计算机程序产品。本发明的各实施例在代码生成过程中将来自多个不同编译阶段的调试信息融合为单个调试信息集。该单个调试信息集直接在输入至第一编译阶段的指令和符号(例如,源代码)与从最后的编译阶段输出的指令和符号(例如,机器码)之间映射。

Description

用于融合来自不同编译器阶段的调试信息的方法和设备
技术领域
本发明涉及计算机技术,尤其涉及计算机调试技术。
相关申请的交叉引用
不适用。
背景技术
1.背景和相关技术
计算机系统和相关技术影响社会的许多方面。的确,计算机系统处理信息的能力已转变了人们生活和工作的方式。计算机系统现在通常执行在计算机系统出现以前手动执行的许多任务(例如,文字处理、日程安排和会计等)。最近,计算机系统彼此耦合并耦合到其他电子设备以形成计算机系统和其他电子设备可以在其上传输电子数据的有线和无线计算机网络。因此,许多计算任务的执行跨多个不同的计算机系统和/或多个不同的计算环境分布。
为了开发用于执行计算任务的软件应用程序,开发者通常编写表达软件应用程序的所需功能的源代码(例如,使用C++、VisualBasic等)。然后可将源代码编译为可执行代码(或者另选地在执行时解释)。在源代码编译过程中,编译器将源代码指令转换为在计算机系统上可直接执行的机器指令(例如,x86指令)。在计算机系统上运行可执行代码以实现所需功能。许多编译器还输出调试信息,其有助于开发者定位和修正源程序中导致偏离所需功能的缺陷。
在一些实施例中,使用单阶段编译器将源代码编译为可执行代码。例如,C++编译器可直接将C++源代码编译为可在个人计算机的处理器上运行的可执行代码。在其他实施例中,使用多阶段编译器将源代码编译为可执行代码。多阶段编译器可包括多个不同的编译阶段。每一编译器阶段可执行某个翻译、转换等以朝着将接收到的源代码编译为机器指令(例如,定向至特定的处理器)的方向前进。
在更具体的环境中,开发DataParallelC++(数据并行C++,“DPC++”)源代码来与中央处理单元(“CPU”)一起并行地使用图形处理单元(“GPU”)以实现所需功能。即,某些源代码是以CPU为目标来编写的,其他源代码是以GPU为目标来编写的。对于以GPU为目标的源代码,使用多阶段编译器来将DataParallelC++(“DPC++)源代码编译为高级着色语言(“HLSL”)字节码(其可在GPU上执行)。第一编译阶段将DPC++源代码翻译为HLSL源代码。第二编译阶段然后将HLSL源代码转换为用于在GPU上执行的HLSL字节码。使用多阶段编译器允许DPC++开发者开发GPU的代码而并不必具备HLSL知识。
在使用多阶段编译器时,每一编译阶段通常输出在采用输入格式的指令和符号与采用输出格式的指令和符号之间映射的调试信息。例如,第一编译阶段可输出在源代码指令和符号与中间代码(例如,第二源代码、中间语言代码等)指令和符号之间映射的调试信息。第二编译阶段可输出在中间代码指令和符合与可执行代码指令和符号之间映射的调试信息。返回之前的示例,第一编译阶段可输出在DPC++源代码指令和符号与HLSL源代码指令和符号之间映射的调试信息。第二编译阶段可输出在HLSL源代码指令和符号与HLSL字节码指令和符号之间映射的调试信息。
由此,为了调试使用多阶段编译器来编译的应用程序,开发者必须使用来自每一编译阶段的一组调试信息来将源代码指令或符号映射至可执行代码指令或符号。处理多组调试信息是资源密集的,并且资源使用随编译阶段数量的增加而增加。
发明内容
本发明涉及用于融合来自不同编译器阶段的调试信息的各方法、系统和计算机程序产品。第一编译阶段访问第一代码。第一代码包括采用第一格式的第一指令和第一符号。将第一代码翻译为第二代码。翻译第一代码包括将第一指令和第一符号转换为对应的采用第二格式的第二指令和第二符号。第二格式与第一格式不同。翻译第一代码还包括生成第一调试信息。第一调试信息将第一指令中的每一指令映射至第二指令中对应的指令,并将第一符号中的每一符号映射至第二符号中对应的符号。
第二编译阶段访问第二代码。将第二代码翻译为第三代码。翻译第二代码包括将第二指令和第二符号转换为对应的采用第三格式的第三指令和第三符号。第三格式不同于第一格式和第二格式。翻译第二代码还包括生成第二调试信息。第二调试信息将第二指令中的每一指令映射至第三指令中对应的指令,并将第二符号中的每一符号映射至第三符号中对应的符号。
将第一调试信息和第二调试信息融合为合并的第三调试信息。合并的第三调试信息将第一指令直接地映射至第三指令,并将第一符号直接地映射至第三符号。对于第一指令和第一符号中的每一个,从第一调试信息内标识对应于第一指令或第一符号的第二指令或第二符号。从第二调试信息内标识对应于所标识的第二指令或第二符号的第三指令或第三符号。将第一指令或第一符号直接地映射至所标识的对应的第三指令或第三符号。将第一指令或第一符号至所标识的对应的第三指令或第三符号的映射存储在合并的第三调试信息中。
提供本发明内容以便以简化的形式介绍将在以下的详细描述中进一步描述的一些概念。本发明内容并非旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。
本发明的附加特征和优点将在以下描述中叙述,且其一部分根据本描述将是显而易见的,或可通过对本发明的实践来获知。本发明的特征和优点可通过在所附权利要求书中特别指出的工具和组合来实现和获得。本发明的这些和其他特征将通过以下描述和所附权利要求书变得更加显而易见,或可通过对下文中所述的本发明的实践来领会。
附图说明
为了描述可获得本发明的上述和其他优点和特征的方式,将通过参考附图中示出的本发明的具体实施例来呈现以上简要描述的本发明的更具体描述。可以理解,这些附图仅描述本发明的典型实施例,从而不被认为是对其范围的限制,本发明将通过使用附图用附加特征和细节来描述和说明,在附图中:
图1示出了便于融合来自不同编译器阶段的调试信息的示例计算机体系结构。
图2示出了便于融合来自不同编译器阶段的调试信息的另一示例计算机体系结构。
图3示出了用于融合来自不同编译器阶段的调试信息的示例方法的流程图。
具体实施方式
本发明涉及用于融合来自不同编译器阶段的调试信息的各方法、系统和计算机程序产品。第一编译阶段访问第一代码。第一代码包括采用第一格式的第一指令和第一符号。将第一代码翻译为第二代码。翻译第一代码包括将第一指令和第一符号转换为对应的采用第二格式的第二指令和第二符号。第二格式与第一格式不同。翻译第一代码还包括生成第一调试信息。第一调试信息将第一指令中的每一指令映射至第二指令中对应的指令,并将第一符号中的每一符号映射至第二符号中对应的符号。
第二编译阶段访问第二代码。将第二代码翻译为第三代码。翻译第二代码包括将第二指令和第二符号转换为对应的采用第三格式的第三指令和第三符号。第三格式不同于第一格式和第二格式。翻译第二代码还包括生成第二调试信息。第二调试信息将第二指令中的每一指令映射至第三指令中对应的指令,并将第二符号中的每一符号映射至第三符号中对应的符号。
将第一调试信息和第二调试信息融合为合并的第三调试信息。合并的第三调试信息将第一指令直接地映射至第三指令,并将第一符号直接地映射至第三符号。对于第一指令和第一符号中的每一个,从第一调试信息内标识对应于第一指令或第一符号的第二指令或第二符号。从第二调试信息内标识对应于所标识的第二指令或第二符号的第三指令或第三符号。将第一指令或第一符号直接地映射至所标识的对应的第三指令或第三符号。将第一指令或第一符号至所标识的对应的第三指令或第三符号的映射存储在合并的第三调试信息中。
本发明的各实施例可包括或利用专用或通用计算机,该专用或通用计算机包括诸如例如一个或多个处理器和系统存储器等计算机硬件,如以下更详细讨论的。本发明范围内的各实施例还包括用于携带或存储计算机可执行指令和/或数据结构的物理介质和其他计算机可读介质。这些计算机可读介质可以是通用或专用计算机系统能够访问的任何可用介质。存储计算机可执行指令的计算机可读介质是计算机存储介质(设备)。携带计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种完全不同类型的计算机可读介质:计算机存储介质(设备)和传输介质。
计算机存储介质(设备)包括RAM、ROM、EEPROM、CD-ROM、DVD或其他光盘存储、磁盘存储或其他磁存储设备、闪存驱动器、拇指型驱动器或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置的且可由通用或专用计算机访问的任何其他介质。
“网络”被定义为允许在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。当信息通过网络或另一个通信连接(硬连线、无线、或者硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可包括可用于携带计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的网络和/或数据链路。上述的组合也应被包括在计算机可读介质的范围内。
此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码装置可从传输介质自动传输到计算机存储介质(设备)(或反之亦然)。例如,通过网络或数据链接接收到的计算机可执行指令或数据结构可被缓存在网络接口模块(例如,“NIC”)内的RAM中,然后最终被传输到计算机系统RAM和/或计算机系统处的较不易失性的计算机存储介质(设备)。因而,应当理解,计算机存储介质(设备)可被包括在还利用(甚至主要利用)传输介质的计算机系统组件中。
计算机可执行指令例如包括,当在处理器处执行时使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语言之类的中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述特征或动作。相反,上述特征和动作是作为实现权利要求的示例形式而公开的。
本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等等。本发明也可在其中通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实施。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备二者中。
在一些实施例中,开发源代码来与中央处理单元(“CPU”)一起并行地使用图形处理单元(“GPU”)以实现需要的功能。即,某些源代码是以CPU为目标来编写的,而其他源代码是以GPU为目标来编写的。对于以GPU为目标的源代码,可使用多阶段编译器来将源代码编译为在GPU上可执行的代码。
一般地,本发明的各实施例在代码生成过程中将来自多个不同编译阶段的调试信息融合为单个的调试信息集。该单个调试信息集直接在输入至第一编译阶段的指令和符号(例如,源代码)与从最后的编译阶段输出的指令和符号(例如,机器码)之间映射。
首先参考图2,图2示出了便于融合来自不同编译器阶段的调试信息的示例计算机体系结构200。计算机体系结构200包括多阶段编译器201和调试信息映射器206。多阶段编译器201包括多个编译器阶段,包括编译器阶段202、203、204等。省略号205表示多阶段编译器201可包括一个或多个附加的编译器阶段。所描绘的组件中的每一个可通过诸如例如局域网(“LAN”)、广域网(“WAN”)和甚至因特网等网络(或作为网络的一部分)彼此连接。因此,所描绘的组件中的每一个以及任何其他连接的计算机系统及其组件都可以创建消息相关数据并通过网络交换与消息相关数据(例如,网际协议(“IP”)数据报和利用IP数据报的其他更高层协议,诸如传输控制协议(“TCP”)、超文本传输协议(“HTTP”)、简单邮件传输协议(“SMTP”)等)。
可提供(基本上任何编程语言的)源代码211作为多阶段编译器201的输入。编译器阶段202可接收源代码211。编译器阶段202可执行以下各项中的一个或多个:对源代码211进行翻译、转换、编译等,以生成中间代码212。作为翻译、转换、编译等的一部分,编译阶段202还可生成调试信息221。调试信息221在源代码211中的指令和符号与中间代码212中的指令和符号之间映射。
编译器阶段203可接收中间代码212。编译器阶段203可执行以下各项中的一个或多个:对中间代码212进行翻译、转换、编译等,以生成中间代码212。作为翻译、转换、编译等的一部分,编译阶段203还可生成调试信息222。调试信息222在中间代码213中的指令和符号与中间代码214中的指令和符号之间映射。
编译器阶段204可接收中间代码213。编译器阶段204可执行以下各项中的一个或多个:对中间代码213进行翻译、转换、编译等,以生成进一步的代码(例如,可执行代码214或传递至下一编译器阶段的进一步的中间代码)。作为翻译、转换、编译等的一部分,编译阶段204还可生成调试信息223。调试信息223在中间代码213中的指令和符号与进一步的代码中的指令和符号之间映射。当进一步的代码是可执行代码214时,调试信息223在中间代码213中的指令和符号与可执行代码214中的指令和符号之间映射。
在多阶段编译器201中包括附加的编译器阶段时,这些附加的编译器阶段还可生成诸如例如调试信息224之类的调试信息。
调试信息映射器206可接收在多阶段编译器201的各编译阶段生成的调试信息。例如,调试信息映射器206可接收调试信息221、222、223、224(在存在时)等。调试信息映射器206可将221、222、223、224(在存在时)等融合为合并的调试信息226。合并的调试信息226直接地在源代码211指令和可执行代码214指令之间映射,并直接地在源代码211符号和可执行代码214符号之间映射。由此,在使用合并的调试信息226时,可更高效地对源代码211进行调试。
现在转向图1,图1示出了便于融合来自不同编译器阶段的调试信息的示例计算机体系结构100。如所描绘的,计算机体系结构100包括多阶段编译器101和调试信息映射器106。多阶段编译器101还包括编译器阶段102和编译器阶段103。一般而言,多阶段编译器101可接收输入源代码并将该输入源代码编译为可执行代码。在编译期间,编译器阶段102和103中的每一个可生成调试信息。
图3示出了用于融合来自不同编译器阶段的调试信息的示例方法300的流程图。方法300将参考计算机体系结构100的组件和数据来描述。
在第一编译阶段,方法300包括访问第一代码的动作,第一代码包括采用第一格式的第一指令和第一符号(动作301)。例如,编译器阶段102可访问源代码111。源代码111可包括采用第一格式(例如,DataParallelC++(“DPC++”))的第一指令和第一符号。
方法300包括将第一代码翻译为第二代码的动作(动作302)。例如,编译器阶段102可将源代码111翻译为中间代码112。动作302包括将第一指令和第一符号转换为对应的采用第二格式的第二指令和第二符号的动作,第二格式不同于第一格式(动作303)。例如,编译器阶段102可将源代码111中的指令和符号转换为中间代码112中对应的指令和符号。中间代码112(例如,高级着色语言(“HLSL”)源代码)的格式可不同于源代码111(例如,DPC++)的格式。
动作302包括生成第一调试信息的动作,第一调试信息将第一指令中的每一指令映射至第二指令中的对应指令,并将第一符号中的每一符号映射至第二符号中的对应符号(动作304)。例如,编译器阶段102可生成调试信息121。调试信息121将源代码111中的每一指令映射至中间代码112中的对应指令。例如,指令映射131将源代码111的第7行映射至中间代码112的第12行。调试信息121还将源代码111中的每一符号映射至中间代码112中的对应符号。例如,符号映射132将源代码111的符号x映射至中间代码112的符号“var_5”。
在第二编译阶段,方法300包括访问第二代码的动作(动作305)。例如,编译器阶段103可访问中间代码112(例如,HLSL源代码)。
方法300包括将第二代码翻译为第三代码的动作(动作306)。例如,编译器阶段103可将中间代码112翻译为可执行代码113。动作306包括将第二指令和第二符号转换为对应的采用第三格式的第三指令和第三符号的动作,第三格式不同于第一格式和第二格式(动作307)。例如,编译器阶段103可将中间代码112中的指令和符号转换为可执行代码113中对应的指令和符号。可执行代码113(例如,HLSL字节码)的格式可不同于源代码111(例如,DPC++)和中间代码112(例如,HLSL源代码)的格式。
动作306包括生成第二调试信息的动作,第二调试信息将第二指令中的每一指令映射至第三指令中的对应指令,并将第二符号中的每一符号映射至第三符号中的对应符号(动作308)。例如,编译器阶段103可生成合并的调试信息123。合并的调试信息123将中间代码112中的每一指令映射至可执行代码113中的对应指令。例如,指令映射133将中间代码112的第12行映射至可执行代码117的指令id7。合并的调试信息123还将中间代码112中的每一符号映射至可执行代码113中对应的符号。例如,符号映射134将中间代码112的符号var_5映射至可执行代码113的寄存器r3。
方法300包括将第一调试信息和第二调试信息融合为第三调试信息的动作,第三调试信息将第一指令直接地映射至第三指令并将第一符号直接地映射至第三符号(动作309)。例如,调试映射器106可将调试信息121和调试信息122融合为合并的调试信息123。合并的调试信息123直接地在源代码111中的指令与可执行代码113中的指令之间映射。合并的调试信息123还直接地在源代码111中的符号与可执行代码113中的符号之间映射。
对于第一指令和第一符号中的每一个,动作309包括从第一调试信息内标识对应于第一指令或第一符号的第二指令或第二符号的动作(动作310)。例如,调试映射器106可标识中间代码112的第12行对应于源代码111的第7行。类似地,调试映射器106可标识中间代码112的符号var_5对应于源代码111的符号x。
对于第一指令和第一符号中的每一个,动作309包括从第二调试信息内标识对应于所标识的第二指令或第二符号的第三指令或第三符号的动作(动作311)。例如,调试映射器106可标识可执行代码113的指令id7对应于中间代码112的第12行。类似地,调试映射器106可标识可执行代码133的寄存器r3对应于中间代码112的符号var_5。
对于第一指令和第一符号中的每一个,动作309包括将第一指令或第一符号直接地映射至所标识的对应的第三指令和第三符号的动作(动作312)。例如,调试映射器106可制定指令映射136以在源代码111的第7行与可执行代码113的指令id7之间直接地映射。类似地,调试映射器可制定符号映射137以在源代码111的符号x与可执行代码113的寄存器r3之间直接地映射。对于第一指令和第一符号中的每一个,动作309包括将第一指令或第一符号至所标识的对应的第三指令和第三符号的映射存储在第三调试信息中的动作(动作313)。例如,调试映射器106可将指令映射136和符号映射137存储在合并的调试信息123中。
然后可在调试模块(未示出)处使用合并的调试信息123以辅助调试源代码111。
本发明的一些实施例更具体地涉及将DPC++代码编译为HLSL字节码以供在图形处理单元(“GPU”)处执行。第一编译阶段生成对应于每一DPC++forall调用点的展平HLSL源级计算着色器。第二编译阶段调用HLSL编译器以生成对应于所生成的HLSL源级计算着色器的HLSL字节码。之后将forall调用点处的每一内核调用的生成的字节码存储在编译器生成的PE(portableexecutable,可移植的可执行体)可执行体的文本片段内。
在每一编译阶段,生成一组符号映射。符号映射表示作为该编译阶段的一部分来执行的翻译。第一编译阶段定义了DPC++源符号和生成的HLSL源代码符号之间的映射。第二编译阶段定义了HLSL源代码符号与最终HLSL字节码中对应位置(字节码地址、寄存器)之间的映射。
为了促进调试效率并减少存储器占用量,出于以下原因可将符号调试信息融合为提供DPC++源符号与最终HLSL字节码之间的直接映射的单个记录集。单个映射集使得编译器能够将中间HLSL至字节码符号的映射信息从HLSL字节码团块(其存储在PE可执行体中)剥离,由此降低了可执行体的存储器占用量。此外,通过启用源符号和位置与HLSL字节码地址和寄存器之间的直接映射(而非从DPC++源至HLSL源之后HLSL源至字节码映射或者反之亦然的两级映射),单个符号调试信息记录集既简化也加快了GPU调试器中的DPC++符号解析。
例如,第一编译器阶段可用于将示例DPC++代码:
voidint_add_kernel(…)
{
c=a+b;//第11行
}
翻译为该示例,即HLSL源代码:
voidhlsl_int_add_kernel(…)
{
var_2=var_1+var_0;//第24行
}
随后,第二编译器阶段将该示例即HLSL源代码编译为示例HLSL字节码:
r2=r1+r0//指令索引5
在编译器后端中生成HLSL源代码时,可将从代码元组和符号至HLSL源位置和符号名的映射存储在诸如例如程序数据库(PDB)记录之类的一些内部数据结构中。例如,第一编译器阶段可生成将DPC++源代码指令和符号映射至HLSL源代码指令和符号的第一内部数据结构。
DPC++“第11行”->HLSL“第24行”
DPC++符号“a”->HLSL符号“var_0”
DPC++符号“b”->HLSL符号“var_1”
DPC++符号“c”->HLSL符号“var_2”
随后,第二编译器阶段可生成将HLSL源代码指令和符号映射至HLSL字节码的第二内部数据结构。
HLSL“第24行”->字节码“指令id5”
HLSL符号“var_0”->字节码寄存器“r0”
HLSL符号“var_1”->字节码寄存器“r1”
HLSL符号“var_2”->字节码寄存器“r2”
可实现读取器组件来读取第二内部数据结构并将HLSL源位置和符号解析为字节地址&寄存器。接下来,使用第一内部数据结构来生成DPC++源位置和符号与HLSL字节地址和寄存器名的直接映射。该直接映射可存储在诸如例如以PDB记录形式的第三内部数据结构中。
DPC++“第11行”->字节码“指令id5”
DPC++符号“a”->字节码寄存器“r0”
DPC++符号“b”->字节码寄存器“r1”
DPC++符号“c”->字节码寄存器“r2”
本发明可具体化为其它具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。从而,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变应被权利要求书的范围所涵盖。

Claims (10)

1.一种在包括一个或多个处理器和系统存储器的计算机系统上用于对在不同编译阶段生成的调试信息进行组合的方法,所述计算机系统还包括用于将源代码编译为可执行代码的多阶段编译器(101),所述多阶段编译器具有包括至少第一编译阶段(102)和第二编译阶段(103)的多个编译阶段,所述多个编译阶段中的每一编译阶段被配置成在代码格式之间转换并朝着从源代码(111)生成可执行代码(113)的方向前进,所述方法包括:
将第一调试信息(121)和第二调试信息(122)融合为合并的第三调试信息(123)的动作,
所述第一调试信息(121)生成于将采用第一格式的第一代码(111)翻译为采用不同的第二格式的第二代码(112)的第一编译阶段(102),所述第一调试信息将所述第一代码中的每一指令映射(131)至所述第二代码中对应的指令并将所述第一代码中的每一符号映射(132)至所述第二代码中对应的符号,
所述第二调试信息(122)生成于将所述第二代码(112)翻译为采用不同的第三格式的第三代码(113)的第二编译阶段(103),所述第三格式不同于所述第一格式和所述第二格式两者,所述第二调试信息(122)将所述第二代码中的每一指令映射(113)至所述第三代码中对应的指令并将所述第二代码中的每一符号映射(134)至所述第三代码中对应的符号,
所述合并的第三调试信息(123)将所述第一代码中的每一指令直接映射至所述第三代码中对应的指令并将所述第一符号直接映射至所述第三符号,融合所述第一调试信息和所述第二调试信息包括对于所述第一代码中的每一指令和符号:
使用所述第一调试信息来标识所述第二代码中与所述第一代码中的指令或符号对应的指令或符号的动作;
使用所述第二调试信息来标识所述第三代码中与所述第二代码中所标识的指令或符号对应的指令或符号的动作;
将所述第一代码中的指令或符号直接地映射(136,137)至所述第三代码中所标识的对应的指令或符号成为单个映射集的动作,所述直接映射提供所述第一代码中的所述指令或符号与所述第三代码中所标识的对应的指令或符号之间的直接链接,所述单个映射集使得所述多阶段编译器能够将包括所述第一调试信息和所述第二调试信息中的映射的中间映射从所得的可执行代码剥离,由此降低所述可执行代码的存储器占用量;以及
将所述第一代码中的指令或符号至所述第三代码中的指令或符号的直接映射(136,137)存储在所述合并的第三调试信息中的动作。
2.如权利要求1所述的方法,其特征在于,所述将所述第一调试信息和第二调试信息融合为合并的第三调试信息的动作包括:将在DataParallelC++(DPC++)源代码中的指令位置和符号与高级着色语言(HLSL)源代码中的指令位置和符号之间进行映射的第一调试信息与在HLSL源代码中的指令位置和符号与在HLSL字节码中的地址和寄存器名之间进行映射的第二调试信息融合为在所述DPC++源代码中的位置和符号与所述HLSL字节码中的地址和寄存器名之间进行映射的合并的第三调试信息的动作。
3.如权利要求1所述的方法,其特征在于,所述第一编译阶段被配置为将DataParallelC++(DPC++)源代码翻译为高级着色语言(HLSL)源代码。
4.如权利要求1所述的方法,其特征在于,所述第二编译阶段被配置为将高级着色语言(HLSL)源代码翻译为HLSL字节码。
5.如权利要求1所述的方法,其特征在于,所述第一调试信息、所述第二调试信息和所述合并的第三调试信息被存储为程序数据库(PDB)记录。
6.如权利要求1所述的方法,其特征在于,还包括:使用合并的第三调试信息以辅助调试所述第一代码的动作。
7.一种在包括一个或多个处理器和系统存储器的计算机系统上用于对在不同编译阶段生成的调试信息进行组合的设备,所述计算机系统还包括用于将源代码编译为可执行代码的多阶段编译器(101),所述多阶段编译器具有包括至少第一编译阶段(102)和第二编译阶段(103)的多个编译阶段,所述多个编译阶段中的每一编译阶段被配置成在代码格式之间转换并朝着从源代码(111)生成可执行代码(113)的方向前进,所述设备包括:
用于将第一调试信息(121)和第二调试信息(122)融合为合并的第三调试信息(123)的装置,
所述第一调试信息(121)生成于将采用第一格式的第一代码(111)翻译为采用不同的第二格式的第二代码(112)的第一编译阶段(102),所述第一调试信息将所述第一代码中的每一指令映射(131)至所述第二代码中对应的指令并将所述第一代码中的每一符号映射(132)至所述第二代码中对应的符号,
所述第二调试信息(122)生成于将所述第二代码(112)翻译为采用不同的第三格式的第三代码(113)的第二编译阶段(103),所述第三格式不同于所述第一格式和所述第二格式两者,所述第二调试信息(122)将所述第二代码中的每一指令映射(113)至所述第三代码中对应的指令并将所述第二代码中的每一符号映射(134)至所述第三代码中对应的符号,
所述合并的第三调试信息(123)将所述第一代码中的每一指令直接映射至所述第三代码中对应的指令并将所述第一符号直接映射至所述第三符号,融合所述第一调试信息和所述第二调试信息的装置包括用于对于所述第一代码中的每一指令和符号:
使用所述第一调试信息来标识所述第二代码中与所述第一代码中的指令或符号对应的指令或符号的装置;
使用所述第二调试信息来标识所述第三代码中与所述第二代码中所标识的指令或符号对应的指令或符号的装置;
将所述第一代码中的指令或符号直接地映射(136,137)至所述第三代码中所标识的对应的指令或符号成为单个映射集的装置,所述直接映射提供所述第一代码中的所述指令或符号与所述第三代码中所标识的对应的指令或符号之间的直接链接,所述单个映射集使得所述多阶段编译器能够将包括所述第一调试信息和所述第二调试信息中的映射的中间映射从所得的可执行代码剥离,由此降低所述可执行代码的存储器占用量;以及
将所述第一代码中的指令或符号至所述第三代码中的指令或符号的直接映射(136,137)存储在所述合并的第三调试信息中的装置。
8.一种在包括一个或多个处理器和系统存储器的计算机系统处用于对生成于不同编译阶段的调试信息进行组合的方法,所述计算机系统还包括用于将源代码(111)编译为可执行代码(113)的多阶段编译器(101),所述多阶段编译器(101)具有多个编译阶段(102,103),所述多个编译阶段中的每一编译阶段被配置为在代码格式之间转换并朝着从源代码生成可执行代码的方向前进,所述方法包括:
在第一编译阶段(102):
访问第一代码(111)的动作,所述第一代码包括采用第一格式的第一指令和第一符号;
将所述第一代码(111)翻译为第二代码(112)的动作,包括:
将所述第一指令和第一符号转换为对应的采用第二格式的第二指令和第二符号的动作,所述第二格式不同于所述第一格式;以及
生成第一调试信息(121)的动作,所述第一调试信息将所述第一指令中的每一指令映射至所述第二指令中对应的指令并将所述第一符号中的每一符号映射至所述第二符号中对应的符号;
在第二编译阶段(103):
访问所述第二代码(112)的动作;
将所述第二代码(112)翻译为第三代码(113)的动作,包括:
将所述第二指令和第二符号转换为对应的采用第三格式的第三指令和第三符号的动作,所述第三格式不同于所述第一格式和第二格式;以及
生成第二调试信息(122)的动作,所述第二调试信息将所述第二指令中的每一指令映射至所述第三指令中对应的指令并将所述第二符号中的每一符号映射至所述第三符号中对应的符号;
将所述第一调试信息(121)和所述第二调试信息(122)融合为合并的第三调试信息(123)的动作,所述合并的第三调试信息将所述第一指令直接地映射至所述第三指令并将所述第一符号直接地映射至所述第三符号,对于所述第一指令和第一符号中的每一个包括:
从所述第一调试信息内标识与所述第一指令或第一符号对应的第二指令或第二符号的动作;
从所述第二调试信息内标识与所标识的第二指令或第二符号对应的第三指令或第三符号的动作;以及
将所述第一指令或第一符号直接地映射(136,137)至所标识的对应的第三指令或第三符号成为单个映射集的动作,所述直接映射提供所述第一代码中的所述指令或符号与所述第三代码中所标识的对应的指令或符号之间的直接链接,所述单个映射集使得所述多阶段编译器能够将包括所述第一调试信息和所述第二调试信息中的映射的中间映射从所得的可执行代码剥离,由此降低所述可执行代码的存储器占用量;
将所述第一指令或第一符号至所标识的对应的第三指令或第三符号的映射(136,137)存储在所述合并的第三调试信息中的动作。
9.如权利要求8所述的方法,其特征在于,所述将所述第二指令和第二符号转换为对应的采用第三格式的第三指令和第三符号的动作包括:将所述第二指令和第二符号转换为在图形处理单元(“GPU”)上可执行的代码的动作。
10.如权利要求8所述的方法,其特征在于,所述将所述第一调试信息和第二调试信息融合为所述合并的第三调试信息的动作包括:将在DataParallelC++(DPC++)源代码中的指令位置和符号与高级着色语言(HLSL)源代码中的指令位置和符号之间进行映射的第一调试信息与在HLSL源代码中的指令位置和符号与在HLSL字节码中的地址和寄存器名之间进行映射的第二调试信息融合为在所述DPC++源代码中的位置和符号与所述HLSL字节码中的地址和寄存器名之间进行映射的第三调试信息的动作。
CN201110428634.3A 2010-12-17 2011-12-19 用于融合来自不同编译器阶段的调试信息的方法和设备 Expired - Fee Related CN102637136B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/971,943 2010-12-17
US12/971,943 US20120159444A1 (en) 2010-12-17 2010-12-17 Fusing debug information from different compiler stages

Publications (2)

Publication Number Publication Date
CN102637136A CN102637136A (zh) 2012-08-15
CN102637136B true CN102637136B (zh) 2016-06-01

Family

ID=46236216

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110428634.3A Expired - Fee Related CN102637136B (zh) 2010-12-17 2011-12-19 用于融合来自不同编译器阶段的调试信息的方法和设备

Country Status (8)

Country Link
US (1) US20120159444A1 (zh)
EP (1) EP2652609A4 (zh)
JP (1) JP2014503902A (zh)
KR (1) KR20140001953A (zh)
CN (1) CN102637136B (zh)
CA (1) CA2821308A1 (zh)
HK (1) HK1172408A1 (zh)
WO (1) WO2012083266A2 (zh)

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7350194B1 (en) * 2001-09-24 2008-03-25 Oracle Corporation Techniques for debugging computer programs involving multiple computing machines
US10169199B2 (en) 2008-06-10 2019-01-01 Microsoft Technology Licensing, Llc Automatic model-specific debugger extensions
TW201419140A (zh) * 2012-11-06 2014-05-16 Ind Tech Res Inst 可重新配置的指令編碼方法、執行方法及電子裝置
US20130290940A1 (en) * 2012-04-25 2013-10-31 Balaji Palanisamy Symbol-based merging of computer programs
WO2013175368A1 (en) * 2012-05-25 2013-11-28 Koninklijke Philips N.V. Method, system and device for protection against reverse engineering and/or tampering with programs
JP5891976B2 (ja) * 2012-07-03 2016-03-23 富士通株式会社 コンパイル実行・管理方法、装置、及びプログラム
KR102013582B1 (ko) * 2012-09-07 2019-08-23 삼성전자 주식회사 혼합 모드 프로그램의 소스 코드 오류 위치 검출 장치 및 방법
JP6036089B2 (ja) * 2012-09-25 2016-11-30 日本電気株式会社 データ遷移トレース装置、データ遷移トレース方法、及び、データ遷移トレースプログラム
US9684587B2 (en) 2012-10-12 2017-06-20 Vmware, Inc. Test creation with execution
US10067858B2 (en) 2012-10-12 2018-09-04 Vmware, Inc. Cloud-based software testing
US9292422B2 (en) 2012-10-12 2016-03-22 Vmware, Inc. Scheduled software item testing
US9292416B2 (en) 2012-10-12 2016-03-22 Vmware, Inc. Software development kit testing
US8839201B2 (en) * 2012-10-12 2014-09-16 Vmware, Inc. Capturing test data associated with error conditions in software item testing
US10387294B2 (en) 2012-10-12 2019-08-20 Vmware, Inc. Altering a test
US8949794B2 (en) 2012-10-12 2015-02-03 Vmware, Inc. Binding a software item to a plain english control name
US8839202B2 (en) * 2012-10-12 2014-09-16 Vmware, Inc. Test environment managed within tests
US9069902B2 (en) 2012-10-12 2015-06-30 Vmware, Inc. Software test automation
KR101670726B1 (ko) * 2013-12-02 2016-10-31 한국과학기술연구원 중간 언어 코드의 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체
KR101598819B1 (ko) * 2013-12-02 2016-03-02 한국과학기술연구원 타겟 독립적인 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체
US9235388B2 (en) 2014-02-13 2016-01-12 Red Hat, Inc. Multi-dimensional, multi-configuration compilation phase output visualization technique
US9195567B1 (en) 2014-05-16 2015-11-24 International Business Machines Corporation Debugging data format conversion
US9317266B1 (en) 2014-11-12 2016-04-19 Bank Of America Corporation Leveraging legacy applications for use with modern applications
US10048960B2 (en) * 2014-12-17 2018-08-14 Semmle Limited Identifying source code used to build executable files
RU2016137176A (ru) * 2016-09-16 2018-03-19 Оракл Интернэйшнл Корпорейшн Связывание преобразованного исходного кода с первоначальным исходным кодом с помощью метаданных
RU2016137177A (ru) 2016-09-16 2018-03-19 Оракл Интернэйшнл Корпорейшн Усовершенствованное преобразование исходного кода языка программирования
US10353802B2 (en) 2016-11-04 2019-07-16 International Business Machines Corporation Debugging a live streaming application
CN107656726A (zh) * 2017-10-10 2018-02-02 北京元比特科技有限责任公司 一种互联网信息及技术共享平台及方法
US11487520B2 (en) * 2017-12-01 2022-11-01 Cotiviti, Inc. Automatically generating reasoning graphs
CN108874396A (zh) * 2018-05-31 2018-11-23 苏州蜗牛数字科技股份有限公司 基于hlsl的多平台多目标语言的交叉编译器及编译方法
US10936771B1 (en) * 2019-10-02 2021-03-02 Microsoft Technology Licensing, Llc Using a common fuse controller hardware design for different applications
CN111091612B (zh) * 2019-10-09 2023-06-02 武汉凌久微电子有限公司 一种抽象目标码架构的着色语言机器码生成方法及装置
CN114556289A (zh) * 2019-11-06 2022-05-27 英特尔公司 用于应用中的向量计算的多阶段自动编译
CN110865815A (zh) * 2019-11-12 2020-03-06 广州泳泳信息科技有限公司 一种shader语言多平台编译发布系统及方法
US20230297491A1 (en) * 2022-03-18 2023-09-21 Red Hat, Inc. Source-level debugging of intermediate code
CN116205783B (zh) * 2023-04-24 2023-08-18 芯瞳半导体技术(山东)有限公司 一种基于gpu着色器代码的调试方法、装置及存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5560009A (en) * 1990-09-21 1996-09-24 Hewlett-Packard Company Generating symbolic debug information by merging translation and compiler debug information

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03144832A (ja) * 1989-10-31 1991-06-20 Nec Corp プリコンパイラ言語プログラムのシンボリックデバッグ装置
JPH03240837A (ja) * 1990-02-19 1991-10-28 Nec Corp デバッグ情報生成装置
US5845121A (en) * 1995-10-06 1998-12-01 International Business Machines Corporation Expression evaluation in a multi-language debugger
US6091896A (en) * 1995-12-22 2000-07-18 Hewlett-Packard Company Debugging optimized code using data change points
US6760903B1 (en) * 1996-08-27 2004-07-06 Compuware Corporation Coordinated application monitoring in a distributed computing environment
US5857093A (en) * 1996-09-20 1999-01-05 Allen-Bradley Company, Llc Cross-compiled simulation timing backannotation
US6449615B1 (en) * 1998-09-21 2002-09-10 Microsoft Corporation Method and system for maintaining the integrity of links in a computer network
US6785884B1 (en) * 1999-09-29 2004-08-31 Unisys Corporation Symbolic debug interface for register transfer simulator debugger
US6795963B1 (en) * 1999-11-12 2004-09-21 International Business Machines Corporation Method and system for optimizing systems with enhanced debugging information
US6966051B2 (en) * 2001-05-24 2005-11-15 International Business Machines Corporation Automatically generated symbol-based debug script executable by a debug program for software debugging
JP3612294B2 (ja) * 2001-08-06 2005-01-19 松下電器産業株式会社 デバッグ方法およびデバッグ装置
US7146604B2 (en) * 2003-01-06 2006-12-05 Xerox Corporation Program operators for composing abstractions
US7284242B2 (en) * 2003-01-06 2007-10-16 Xerox Corporation Program compiler with abstraction composer
US7299454B2 (en) * 2003-02-26 2007-11-20 Bea Systems, Inc. Method for multi-language debugging
US7634763B2 (en) * 2003-07-15 2009-12-15 Microsoft Corporation Extensible multi-language compilation
US7305376B2 (en) * 2003-10-23 2007-12-04 Microsoft Corporation Multiple language-dependent resources compacted into a single resource file
US7607123B2 (en) * 2004-09-21 2009-10-20 Hewlett-Packard Development Company, L.P. Systems and methods for validating debug information for optimized code
JP4822817B2 (ja) * 2005-11-22 2011-11-24 パナソニック株式会社 コンパイルシステム
US8819625B2 (en) * 2009-09-03 2014-08-26 International Business Machines Corporation Sharable development environment bookmarks for functional/data flow

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5560009A (en) * 1990-09-21 1996-09-24 Hewlett-Packard Company Generating symbolic debug information by merging translation and compiler debug information

Also Published As

Publication number Publication date
CN102637136A (zh) 2012-08-15
EP2652609A2 (en) 2013-10-23
JP2014503902A (ja) 2014-02-13
WO2012083266A2 (en) 2012-06-21
KR20140001953A (ko) 2014-01-07
WO2012083266A3 (en) 2013-01-17
CA2821308A1 (en) 2012-06-21
EP2652609A4 (en) 2017-11-22
HK1172408A1 (zh) 2013-04-19
US20120159444A1 (en) 2012-06-21

Similar Documents

Publication Publication Date Title
CN102637136B (zh) 用于融合来自不同编译器阶段的调试信息的方法和设备
CN110096338B (zh) 智能合约执行方法、装置、设备及介质
CN107844294B (zh) 一种高可用的合约执行方法及系统
CN102609243B (zh) 仿真指针
Kodaganallur Incorporating language processing into java applications: A javacc tutorial
CN103620553B (zh) 在运行时处绑定可执行代码
CN109564540A (zh) 用于jit编译器的调试工具
US20090064096A1 (en) System and methods for tracing code generation in template engines
US20120304154A1 (en) Software application fine-tuning method, system, and corresponding computer program product
WO2013002979A2 (en) Debugging in a multiple address space environment
CN103051711B (zh) 基于spice协议的嵌入式云终端系统的构建方法
US20150331781A1 (en) Debugging data format conversion
US8930923B2 (en) Generating debugging extension source code utilizing debugging information
US8539458B2 (en) Transforming addressing alignment during code generation
US8990515B2 (en) Aliasing buffers
KR101349631B1 (ko) 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체
EP2782005A1 (en) Verifying state reachability in a statechart model having computer program code embedded therein
KR101277145B1 (ko) 공통 표현을 이용한 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체
CN114791811B (zh) 一种基于元函数模板的汇编器实现方法
Beevi et al. Enhancing flexibility and portability of Execution Preserving Language Transformation using Meta programming
CN115794161A (zh) 基于Archive包的加固方法、装置、存储介质和计算机设备
KR101598819B1 (ko) 타겟 독립적인 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체
Watson et al. Implementation Issues
Son et al. A Study on the SIL Codes based Java Compiler for Supporting the Java Contents in the Smart Cross Platform
Allen et al. Code generation for just-in-time compiled mobile collector agents

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1172408

Country of ref document: HK

ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150729

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20150729

Address after: Washington State

Applicant after: Micro soft technique license Co., Ltd

Address before: Washington State

Applicant before: Microsoft Corp.

C14 Grant of patent or utility model
GR01 Patent grant
REG Reference to a national code

Ref country code: HK

Ref legal event code: GR

Ref document number: 1172408

Country of ref document: HK

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20160601

Termination date: 20171219

CF01 Termination of patent right due to non-payment of annual fee