当前位置: 首页 > 专利查询>微软公司专利>正文

融合来自不同编译器阶段的调试信息制造技术

技术编号:7682467 阅读:161 留言:0更新日期:2012-08-16 05:50
本发明专利技术公开了融合来自不同编译器阶段的调试信息。本发明专利技术涉及用于融合来自不同编译器阶段的调试信息的各方法、系统和计算机程序产品。本发明专利技术的各实施例在代码生成过程中将来自多个不同编译阶段的调试信息融合为单个调试信息集。该单个调试信息集直接在输入至第一编译阶段的指令和符号(例如,源代码)与从最后的编译阶段输出的指令和符号(例如,机器码)之间映射。

【技术实现步骤摘要】

本专利技术涉及计算机技术,尤其涉及计算机调试技术。相关串请的交叉引用不适用。
技术介绍
I.背景和相关技术 计算机系统和相关技术影响社会的许多方面。的确,计算机系统处理信息的能力已转变了人们生活和工作的方式。计算机系统现在通常执行在计算机系统出现以前手动执行的许多任务(例如,文字处理、日程安排和会计等)。最近,计算机系统彼此耦合并耦合到其他电子设备以形成计算机系统和其他电子设备可以在其上传输电子数据的有线和无线计算机网络。因此,许多计算任务的执行跨多个不同的计算机系统和/或多个不同的计算环境分布。为了开发用于执行计算任务的软件应用程序,开发者通常编写表达软件应用程序的所需功能的源代码(例如,使用C++、Visual Basic等)。然后可将源代码编译为可执行代码(或者另选地在执行时解释)。在源代码编译过程中,编译器将源代码指令转换为在计算机系统上可直接执行的机器指令(例如,x86指令)。在计算机系统上运行可执行代码以实现所需功能。许多编译器还输出调试信息,其有助于开发者定位和修正源程序中导致偏离所需功能的缺陷。在一些实施例中,使用单阶段编译器将源代码编译为可执行代码。例如,C++编译器可直接将C++源代码编译为可在个人计算机的处理器上运行的可执行代码。在其他实施例中,使用多阶段编译器将源代码编译为可执行代码。多阶段编译器可包括多个不同的编译阶段。每一编译器阶段可执行某个翻译、转换等以朝着将接收到的源代码编译为机器指令(例如,定向至特定的处理器)的方向前进。在更具体的环境中,开发Data Parallel C++(数据并行C++,“DPC++”)源代码来与中央处理单元(“CPU”)一起并行地使用图形处理单元(“GPU”)以实现所需功能。即,某些源代码是以CPU为目标来编写的,其他源代码是以GPU为目标来编写的。对于以GPU为目标的源代码,使用多阶段编译器来将Data Parallel C++(“DPC++)源代码编译为高级着色语言(“HLSL”)字节码(其可在GPU上执行)。第一编译阶段将DPC++源代码翻译为HLSL源代码。第二编译阶段然后将HLSL源代码转换为用于在GPU上执行的HLSL字节码。使用多阶段编译器允许DPC++开发者开发GPU的代码而并不必具备HLSL知识。在使用多阶段编译器时,每一编译阶段通常输出在采用输入格式的指令和符号与采用输出格式的指令和符号之间映射的调试信息。例如,第一编译阶段可输出在源代码指令和符号与中间代码(例如,第二源代码、中间语言代码等)指令和符号之间映射的调试信息。第二编译阶段可输出在中间代码指令和符合与可执行代码指令和符号之间映射的调试信息。返回之前的示例,第一编译阶段可输出在DPC++源代码指令和符号与HLSL源代码指令和符号之间映射的调试信息。第二编译阶段可输出在HLSL源代码指令和符号与HLSL字节码指令和符号之间映射的调试信息。由此,为了调试使用多阶段编译器来编译的应用程序,开发者必须使用来自每一编译阶段的一组调试信息来将源代码指令或符号映射至可执行代码指令或符号。处理多组调试信息是资源密集的,并且资源使用随编译阶段数量的增加而增加。
技术实现思路
本专利技术涉及用于融合来自不同编译器阶段的调试信息的各方法、系统和计算机程序产品。第一编译阶段访问第一代码。第一代码包括采用第一格式的第一指令和第一符号。将第一代码翻译为第二代码。翻译第一代码包括将第一指令和第一符号转换为对应的采用 第二格式的第二指令和第二符号。第二格式与第一格式不同。翻译第一代码还包括生成第一调试信息。第一调试信息将第一指令中的每一指令映射至第二指令中对应的指令,并将第一符号中的每一符号映射至第二符号中对应的符号。第二编译阶段访问第二代码。将第二代码翻译为第三代码。翻译第二代码包括将第二指令和第二符号转换为对应的采用第三格式的第三指令和第三符号。第三格式不同于第一格式和第二格式。翻译第二代码还包括生成第二调试信息。第二调试信息将第二指令中的每一指令映射至第三指令中对应的指令,并将第二符号中的每一符号映射至第三符号中对应的符号。将第一调试信息和第二调试信息融合为合并的第三调试信息。合并的第三调试信息将第一指令直接地映射至第三指令,并将第一符号直接地映射至第三符号。对于第一指令和第一符号中的每一个,从第一调试信息内标识对应于第一指令或第一符号的第二指令或第二符号。从第二调试信息内标识对应于所标识的第二指令或第二符号的第三指令或第三符号。将第一指令或第一符号直接地映射至所标识的对应的第三指令或第三符号。将第一指令或第一符号至所标识的对应的第三指令或第三符号的映射存储在合并的第三调试信息中。提供本
技术实现思路
以便以简化的形式介绍将在以下的详细描述中进一步描述的一些概念。本
技术实现思路
并非旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。本专利技术的附加特征和优点将在以下描述中叙述,且其一部分根据本描述将是显而易见的,或可通过对本专利技术的实践来获知。本专利技术的特征和优点可通过在所附权利要求书中特别指出的工具和组合来实现和获得。本专利技术的这些和其他特征将通过以下描述和所附权利要求书变得更加显而易见,或可通过对下文中所述的本专利技术的实践来领会。附图说明为了描述可获得本专利技术的上述和其他优点和特征的方式,将通过参考附图中示出的本专利技术的具体实施例来呈现以上简要描述的本专利技术的更具体描述。可以理解,这些附图仅描述本专利技术的典型实施例,从而不被认为是对其范围的限制,本专利技术将通过使用附图用附加特征和细节来描述和说明,在附图中图I示出了便于融合来自不同编译器阶段的调试信息的示例计算机体系结构。图2示出了便于融合来自不同编译器阶段的调试信息的另一示例计算机体系结构。图3示出了用于融合来自不同编译器阶段的调试信息的示例方法的流程图。具体实施例方式本专利技术涉及用于融合来自不同编译器阶段的调试信息的各方法、系统和计算机程序产品。第一编译阶段访问第一代码。第一代码包括采用第一格式的第一指令和第一符号。将第一代码翻译为第二代码。翻译第一代码包括将第一指令和第一符号转换为对应的采用第二格式的第二指令和第二符号。第二格式与第一格式不同。翻译第一代码还包括生成第一调试信息。第一调试信息将第一指令中的每一指令映射至第二指令中对应的指令,并将第一符号中的每一符号映射至第二符号中对应的符号。第二编译阶段访问第二代码。将第二代码翻译为第三代码。翻译第二代码包括将第二指令和第二符号转换为对应的采用第三格式的第三指令和第三符号。第三格式不同于第一格式和第二格式。翻译第二代码还包括生成第二调试信息。第二调试信息将第二指令中的每一指令映射至第三指令中对应的指令,并将第二符号中的每一符号映射至第三符号中对应的符号。将第一调试信息和第二调试信息融合为合并的第三调试信息。合并的第三调试信息将第一指令直接地映射至第三指令,并将第一符号直接地映射至第三符号。对于第一指令和第一符号中的每一个,从第一调试信息内标识对应于第一指令或第一符号的第二指令或第二符号。从第二调试信息内标识对应于所标识的第二指令或第二符号的第三指令或第三符号。将第一指令或第一符号直接地映射至所标识的对应的第三指令或第三符号。将第一指令或第一符号至所标识的对应的第三指令或第三符本文档来自技高网
...

【技术保护点】

【技术特征摘要】
...

【专利技术属性】
技术研发人员:A·K·阿加瓦尔T·P·多舍尔P·梅比
申请(专利权)人:微软公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1