CN108139891A - 针对外部文件的缺失包括建议 - Google Patents

针对外部文件的缺失包括建议 Download PDF

Info

Publication number
CN108139891A
CN108139891A CN201680062060.3A CN201680062060A CN108139891A CN 108139891 A CN108139891 A CN 108139891A CN 201680062060 A CN201680062060 A CN 201680062060A CN 108139891 A CN108139891 A CN 108139891A
Authority
CN
China
Prior art keywords
file
undefined
label
program
source code
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.)
Granted
Application number
CN201680062060.3A
Other languages
English (en)
Other versions
CN108139891B (zh
Inventor
R·F·佩雷斯阿科斯达
M·卢帕鲁
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 CN108139891A publication Critical patent/CN108139891A/zh
Application granted granted Critical
Publication of CN108139891B publication Critical patent/CN108139891B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)

Abstract

在编写程序代码时,可以检测到语法错误,并且可以提供诊断错误消息。基于C的编程语言(诸如但不限于C++)中的错误原因之一是缺失定义。该定义可以存在于与源程序文件分离的文件中。文件可以由特定语句指定,诸如指向其中定义了在代码中使用的标记的文件的“#include”语句。文件及其关系的列表形成包括图(include graph)。IDE中的特征可以建议潜在的“#include”语句以纠正缺失“#include”语句错误。通过使用包括图,可以建议更准确的潜在纠正列表,使得能够编写标准且平台无关的代码。

Description

针对外部文件的缺失包括建议
背景技术
C编程语言是一种广泛使用的通用命令式计算机编程语言。C支持结构化编程、词法变量作用域和递归。C实现了静态类型系统。C具有内置特征,该内置特征实现到典型机器指令的高效映射,并且因此,除了其在应用软件中的使用之外,它还经常代替汇编语言被使用以及用于操作系统。在C中,可执行代码被封装成子例程,称为“函数”。C程序源文本是自由格式的。分号用作语句终止符。大括号用于对语句的块进行分组。
C程序的常见示例是“hello,world”程序:
程序的第一行包括预处理指令“#include”。编译器的预处理器将利用stdio.h文件的内容替换“#include<stdio.h>”行。stdio.h文件是标准头。头包括函数声明(例如,stdio.h包括函数“printf”的声明)。
C编程语言可以使用库来被扩展。C库是文件中的函数的集合。每个库通常包括头文件。头文件包括能够由程序使用的库中包括的函数的原型。头文件还可以包括与这些函数一起使用的特殊数据类型和宏符号的声明。为了使用库,程序包括库的头文件的名称。在编译期间,库与程序相链接。
多个编程语言已经基于C,包括但不限于C++和MIDL(微软接口定义语言)。C++是支持面向对象编程的图灵完备通用编程语言。MIDL是能够用于定义客户端与服务器程序之间的接口的编程语言。MIDL使得开发人员能够创建远程过程调用(RPC)接口和COM/DCOM(组件对象模型/分布式组件对象模型)接口所需要的接口定义语言(IDL)文件和应用配置文件(ACF)。MIDL还支持用于OLE(对象链接和嵌入)自动化的类型库的生成。
发明内容
在编写程序代码时,可以检测到很多类型的错误,并且可以提供诊断错误消息。例如,在集成开发环境(IDE)中,当开发人员在源代码编辑器中录入编程源代码时,可以以各种方式指示语法错误。例如,语法错误可以通过源程序编辑器中的标记下存在红色波浪线来指示。可以被检测到的一种类型的错误是未定义标记错误。标记可以在源代码外部的文件中被定义,并且源代码可以以某种方式指定其中定义了该标记的文件。可以创建图,其中一个或多个应用所需要的源代码和所有其他文件被表示。工具可以使用该图来提出用以纠正未定义标记错误的潜在建议。例如,在一些编程语言(诸如但不限于C++和其他基于C的语言)中,未定义标记错误可以由缺失定义引起。在基于C的语言中,标记定义可以存在于与源程序文件分离的文件中。其中定义了标记的文件可以通过诸如“#include”语句的特定语句在源代码中指定。某些基于C的语言中的“#include”语句指向其中定义了在代码中使用的标记的文件。这些文件转而可以包括其他文件。文件及其关系的列表形成所谓的包括图(include graph),其中图中的节点表示文件,并且关系由包括图的节点被布置的方式来表示。IDE中的特征可以建议潜在的“#include”语句来纠正缺失“#include”语句错误。通过使用包括图,可以建议更准确的潜在纠正的列表,使得能够编写标准且平台无关的代码。
提供本“发明内容”是为了以简化的形式介绍将在以下“具体实施方式”中进一步描述的一些概念。本“发明内容”并不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
附图说明
在附图中:
图1a示出了根据本文中描述的主题的方面的由于未定义标记(例如,类型或函数)而触发的诊断错误的显示的示例220,其中标记由于缺失标记定义文件而未定义;
图1b示出了根据本文中描述的主题的方面的建议的“#include”语句的简单实现的示例225;
图1c示出了根据本文中描述的主题的方面的描述如何为未定义标记生成和/或建议缺失“#include”语句的列表的方法200;
图1d示出了根据本文中描述的主题的方面的描述如何为标记建议缺失“#include”语句的方法210,该标记在作为不是项目的一部分(项目外部)的文件的包括图的一部分的文件中被定义;
图1e示出了根据本文中描述的主题的方面的项目的包括图220;
图1f示出了根据本文中描述的主题的方面的从其中定义了标记的文件到项目的路径232;
图1g示出根据本文中描述的主题的方面的基于包括文件的文件夹而分段的单个路径234;
图1h示出了根据本文中描述的主题的方面的来自分段路径的所选择的文件;
图1i示出了根据本文中描述的主题的各方面的显示可以显示的建议的“#include”语句的显示器250;
图2是根据本文中描述的主题的方面的可以执行上面描述的方法中的一个或多个方法的系统100的框图;
图3是根据本文中描述的主题的方面的计算环境的示例的框图;以及
图4是根据本文中描述的主题的方面的集成开发环境的示例的框图。
具体实施方式
概述
为缺失“#include”语句提供建议的编程工具的已知实现仅示出了其中定义了标记的“#include”语句文件选项。这种方法的主要问题在于,在使用头的一些基于C语言的编程语言中,诸如但不限于C++,库通常具有用于头的抽象层。通常这样做以使得在低级别处存在平台特定的实现,同时使用户代码保持平台无关。例如,假设当使用在C++标准中定义的字符串类型时,假设被包括的头是“string”(抽象),但是类型实际上在平台特定的头文件“xstring”(实际)中被定义。因此,尽管表明“xstring”文件在技术上可能是正确的,但是它可能会导致代码是平台相关的并且非标准的。使用“string”头文件实现了代码的抽象,使得代码是平台无关的。为了产生平台无关的代码,最高级别的“#include”语句是应当添加到程序源代码的语句而不是低级别语句。
根据本文中描述的主题的各方面,编程工具可以建议潜在的“#include”语句来纠正包括缺失“#include”语句(缺失定义文件)的语法错误,从而使得能够更容易编写标准且平台无关的代码。如本文中使用的,标准代码是符合用于编写程序源代码的准则的代码。项目的包括图可以用于找到源自包括标记的文件的所有路径。每个路径可以被遍历。被遍历的路径可以基于节点所驻留的文件夹(目录)而被分段。当路径中的节点属于项目时,该路径的遍历可以停止。对于标识的每个分段,在顶部的文件可以被提供作为用于自动完成或纠正的建议。在距离较远的分段之前,可以建议更靠近包括图的顶部的分段。其中定义了标记的文件可以被提供作为建议列表中的最后的建议。尽管在IDE的上下文中描述了主题,但是应当理解,主题同样适用于在IDE之外以独立方式执行的编程工具。在这种情况下,建议可以以可打印的报告或其他适当的方式提供。应当理解,尽管在基于C的编程语言中缺失定义的上下文中进行描述,但是本文中所描述的主题适用于其中检测到未定义标记的很多编程环境。
针对外部文件的缺失包括建议
图1a示出了可以针对诸如数据类型或函数的未定义标记而显示的诊断错误的示例220。在图1a中,错误由阴影线224指示,但是本领域技术人员将理解,错误可以以任何适当的方式来指示,诸如但不限于波浪线、突出显示、下划线或通过其他方式标识未定义标识符(标记)。在图1a中,错误指示数据类型“string”221未定义。错误消息222“错误:标识符“string”未定义”被显示。选择“示出潜在修复”特征223可以导致“添加#include<xstring>”226的显示,如图1b的示例225中所示。然而,如上所述,尽管包括语句“#include<xstring>”在技术上是正确的,因为字符串类型在文件xstring中被定义,但是包括语句的使用将创建非标准的平台相关的程序代码。
图1c示出了根据本文中公开的主题的方面的可以用于提供针对缺失“#include”语句的建议的方法200的示例。在图1c中描述的方法可以由诸如但不限于关于图2描述的系统的系统来实践。尽管方法200描述了在序列中被执行的一系列操作,但是应当理解,方法200不受所描绘的序列的顺序的限制。例如,一些操作可以以与所描述的顺序不同的顺序发生。另外,一个操作可以与另一操作同时发生。在一些情况下,并非所有描述的操作都被执行。在一些情况下,并非所有执行的操作都被示出。
在操作201处,可以检测与未定义标记(例如,类型或函数)相关的错误。标记可以是未定义的,因为例如包括标记的定义的文件(例如,头文件)从程序源代码中缺失。在操作204处,可以确定标记是否在外部文件中被定义。响应于确定标记未在外部文件(项目外部的文件,其中术语“项目”是指包括用于构建二进制文件的属性和文件的逻辑单元)中被定义,在操作205处,可以在操作205处建议其中定义了标记的项目中的文件。响应于确定标记在外部文件中被定义,在操作206处可以基于包括图来建议外部文件,如下面更全面描述的。
图1d示出了根据本文中公开的主题的方面的可以用于确定建议以校正未定义标记错误的方法210的示例。在图1d中描述的方法可以由诸如但不限于关于图2描述的系统的系统来实践。尽管方法210描述了在序列中被执行的一系列操作,但是应当理解,方法210不受所描绘的序列的顺序的限制。例如,一些操作可以以与所描述的顺序不同的顺序发生。另外,一个操作可以与另一操作同时发生。在一些情况下,并非所有描述的操作都被执行。在一些情况下,并非所有执行的操作都被示出。
在操作211处,可以访问包括图。包括图的示例在图1e中示出。在操作212处,可以获取源自包括标记的文件的所有路径。关于图1f更详细地描述操作212。在操作213处,可以遍历源自包括标记的文件的每个路径,如关于图1g更全面描述的。遍历的每个路径可以基于节点所驻留的文件夹而被分段。在操作214处,每个路径的遍历可以停止,当其中的节点属于项目时。也就是说,对于路径中的每个路径,从初始文件(也即,包括标记的文件)走进包括图并且每当包括文件的文件夹改变时,显示该文件夹中的最后的文件作为建议。当其中的文件是当前项目的一部分时,停止走进每个路径(并且不提供项目中的文件作为建议)。也就是说,在操作215处,对于在操作213处标识的每个分段,在顶部的文件可以被提供作为建议,其中包括图中最靠近项目节点的分段在列表的顶部被提供,而距离项目较远的分段可以在距离列表的顶部较远处被提供。也就是说,建议可以按照与项目节点的接近度的顺序被显示。这被关于图1h和图1i更充分地描述。在操作216处,其中定义了标记的文件可以作为建议在列表的底部被提供。该方法可以处理标准库的情况,其中对于“string”示例,所建议的修复“string”和“xstring”将如图1i所示那样被显示。此外,在到文件的路径中存在多于一个文件夹的情况下,可以显示附加建议。因此,例如,如果项目使用预编译的头并且字符串已经被包括在头中,则建议可以是:
添加#include<pch.h>
添加#include<string>
添加#include<xstring>
其中pch.h是包括字符串定义的预编译的头。
图1e示出了项目221的包括图220的示例。在该项目221中有两个文件:Source.cpp222和Header.h 223。如本文中使用的,术语“项目”是指产生用于软件产品的可执行文件所需要的文件的集合。节点224是pch.h,节点225是string,并且节点226是xstring。中间节点与包括图220中的其他节点一样未加标签。覆盖图是节点221、222、223、224、225和226以及从xstring到表示项目221的节点的路径上的中间节点的更大的表示。图1f示出了具有从项目中定义了标记的文件到项目节点221的路径的包括图220,其中路径通过在框232中的放置来区分。图1g示出了单个路径的分段,其中分段基于包括定义标记的文件的文件夹。也就是说,图1g示出了分段路径234,其中第一分段包括被包括在项目221中的文件:source.cpp222和header.h223。第二分段包括第一文件夹227并且包括pch.h文件224。第三分段包括第二文件夹228,第二文件夹228包括文件string225、多个中间文件229和最低级别文件xstring 226。在第二文件夹228中,文件string225具有对文件istream 225a的依赖性(包括文件istream 225a)。文件istream 225a对文件ostream 225b具有依赖性等等。图1h示出了从分段路径选择的文件240。对于被包括在项目221中的文件(source.cpp 222和header.h 223),工具中没有提供建议。文件夹227和228是潜在地将产生建议的分组。文件pch.h 224和文件string225将被建议作为潜在的错误修复。文件xstring 226也会出现在建议列表中。图1i示出了显示器250中的建议251以用于纠正缺失的包括定义字符串的#include语句的#include语句。尽管通常最低级别的文件将是优选的,因为将需要更少的依赖性,但是当选择最低级别的文件将导致非标准的平台相关的代码时,最高级别的文件是优选的,因为它会导致标准的平台无关的代码。
图2示出了根据本文中描述的主题的方面的用于在程序代码中生成和显示缺失#include建议(显示其在项目中的包括将纠正未定义标记错误的文件)的系统100的框图。系统100的全部或部分可以驻留在一个或多个计算机或计算设备上,诸如下面关于图3描述的计算机。预期的计算设备包括但不限于台式计算机、平板计算机、膝上型计算机、笔记本计算机、个人数字助理、智能电话、蜂窝电话、移动电话、传感器等。因此,计算设备(例如,计算设备102等)可以是任何类型的固定或移动计算设备,包括台式计算机(例如,个人计算机等)、移动计算机或计算设备(例如,设备、RIM设备、个人数字助理(PDA)、膝上型计算机、笔记本计算机、平板计算机(例如,Apple iPadTM)、上网本等)、移动电话(例如,蜂窝电话、智能电话,诸如Apple iPhone、Google AndroidTM电话、Microsoft电话等)或其他类型的移动设备。
系统100或其部分可以包括驻留在一个或多个计算机(诸如也在下面关于图3描述的计算机)上的集成开发环境104(IDE)的一部分,诸如下面关于图4描述和说明的那些。备选地,系统100或其部分可以被提供作为独立系统或作为插件。
系统100可以包括一个或多个计算设备,诸如计算设备102。计算设备可以包括一个或多个处理器(诸如处理器142等)和与一个或多个处理器通信的存储器(诸如存储器144)。系统100或其部分可以包括从服务(例如,在云中)获取的信息,或者可以在云计算环境中操作。云计算环境可以是其中计算服务不被拥有但是按需提供的环境。例如,信息可以驻留在联网云中的多个设备上,和/或数据可以存储在云内的多个设备上。
系统100可以包括以下中的一个或多个的任何组合:包括程序开发工具的一个或多个程序模块。一个这样的程序开发工具可以是程序开发工具122、诸如编辑器105的编辑器、诸如外部文件126的一个或多个外部文件、诸如包括图107的包括图、诸如源代码124的输入程序源代码、以及校正建议显示器128。系统100还可以包括本领域已知的程序开发元件,包括但不限于一个或多个编译器、预处理器、数据库等,其中的一些可以由编译器或其他程序开发工具等生成。应当理解,当被加载到存储器中并且由一个或多个处理器访问时,元件可以引起一个或多个处理器执行归因于该元件的功能和操作。诸如程序开发工具122的程序开发工具可以生成和/或显示针对标识其中定义了标记的文件的缺失语句的建议,如上面更全面描述的。系统100的全部或部分可以驻留在一个或多个计算机上,诸如下面关于图3描述的计算机。
编译器可以是将以(通常为高级别)编程语言编写的文本(输入源代码124)翻译为另一(通常为较低级别)计算机语言(目标语言)的计算机程序或程序集合。编译器的输出可以是目标代码(未显示)。通常,输出以适合于由其他程序(例如,链接器)处理的形式,但是输出可以是人类可读的文本文件。通常,源代码124被编译以创建可执行程序,但是可以由各种程序开发工具处理,程序开发工具可以包括工具,诸如编辑器、修饰器、静态分析工具、重构工具以及在后台或前台操作的其他工具。
编译器和/或程序开发工具很可能执行以下操作中的至少一个:预处理、词法分析、解析(语法分析)、语义分析、代码生成、代码优化、自动完成等。编程开发工具可以包括工具,该工具生成和/或显示(例如,在源代码程序编辑器中)针对缺失#include语句的建议,如上面更全面描述的。
诸如但不限于基于C语言的一些语言通常经历预处理阶段(例如,通过预处理器),其支持宏替换、文件包括和条件编译。通常,预处理器在词法分析阶段之前处理来自源代码的预处理器指令并且从源代码中移除预处理器指令。预处理阶段可以接收由词法分析器生成的标记流并且输出不包括预处理器指令的经修改的标记流。词法分析(由词法分析器或词法分析程序执行)可以将源代码文本分解为标记流中的标记。标记是语言的单个原子单位,诸如关键字、标识符、符号名称、函数、类型等。预处理通常发生在语法或语义分析之前;例如在C的情况下,预处理器可以操纵词汇标记而不是语法形式。然而,一些语言可以支持基于语法形式的宏替换。
语法分析器可以执行语法分析。语法分析涉及解析标记序列以标识程序的语法结构。语法分析阶段通常构建解析树。解析树利用根据定义编程语言的语法的形式文法的规则而构建的树结构来替换标记流的标记的线性序列。解析树经常被编译器中的较后阶段分析、增强和转换。
在由语义分析器执行的语义分析阶段中,利用语义信息增强解析树,以生成解析树。语义分析器通常也构建符号表。语义分析执行语义检查,诸如类型检查(检查类型错误)或对象绑定(将变量和函数引用与它们的定义关联)或明确赋值(要求所有局部变量在使用之前被初始化),并且可以拒绝不正确的程序或发出警告。语义分析通常在逻辑上位于代码生成阶段之前,尽管在一些编译器实现中,多个阶段可以被折叠成对代码的一次处理。
系统100可以包括编辑器105,其中可以写入或开发用于计算机程序的源代码124。随着源代码124在编程器105内被开发,程序开发工具可以在预定的时间或在指定的时间(例如,以指定的时间间隔或者在语句结束处或者在软件开发环境不活动或闲置时,诸如例如,当开发者暂停时)解析源代码124。程序开发工具可以随时查询数据源,并且以各种方式提供信息以使用户受益并且辅助程序的开发。程序开发工具可以提供关于程序元件的实时更新信息,并且可以在开发人员正在编辑器内编写程序时提供其他手段来帮助程序的开发,诸如提供编译错误和警告等。后台编译可以不生成可执行代码,和/或可以使用与用于生成可执行代码的编译器不同的编译器。
输入源代码124包括程序指令的序列。输入源代码124可以以任何基于C的编程语言来编写。输入源代码124可以以任何编程语言来编写,无论是面向对象的还是命令式的,其中预处理器指令被使用并且其具有编程结构(例如,声明或宣布变量、函数、过程、方法、子例程等的存在,或者定义变量、函数、过程、方法等的声明或定义)。编程结构可以是头文件。系统100或其部分可以执行上述方法。
适合的计算环境的示例
为了提供本文中公开的主题的各个方面的上下文,图3和以下讨论旨在提供其中可以实现本文中公开的主题的各种实施例的适当计算环境510的简要一般概述。尽管本文中公开的主题在由一个或多个计算机或其他计算设备执行的诸如程序模块的计算机可执行指令的一般上下文中描述,但是本领域的技术人员将认识到,本文中公开的主题的部分也可以与其他程序模块和/或硬件和软件的组合相结合来实现。通常,程序模块包括执行特定任务或实现特定数据类型的例程、程序、对象、物理制品、数据结构等。通常,在各种实施例中,程序模块的功能可以根据需要而被组合或分布。计算环境510仅是适当的操作环境的一个示例,并且不旨在限制本文中公开的主题的使用或功能的范围。
参考图3,描述了计算机512形式的计算设备。计算机512可以包括至少一个处理单元514、系统存储器516和系统总线518。至少一个处理单元514可以执行存储在存储器中的指令,存储器诸如但不限于系统存储器516。处理单元514可以是各种可用处理器中的任何一种。例如,处理单元514可以是图形处理单元(GPU)。这些指令可以是用于实现由上面讨论的一个或多个组件或模块执行的功能的指令或者用于实现上面描述的一个或多个方法的指令。双微处理器和其他多处理器架构也可以用作处理单元514。计算机512可以用在支持在显示屏幕上渲染图形的系统中。在另一示例中,计算设备的至少一部分可以用在包括图形处理单元的系统中。系统存储器516可以包括易失性存储器520和非易失性存储器522。非易失性存储器522可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)或闪存。易失性存储器520可以包括随机存取存储器(RAM),其可以用作外部高速缓存存储器。系统总线518将包括系统存储器516的系统物理制品耦合到处理单元514。系统总线518可以是包括存储器总线、存储器控制器、外围总线、外部总线或本地总线的若干类型中的任何一种,并且可以使用各种可用的总线架构。计算机512可以包括由处理单元514通过系统总线518可访问的数据存储库。数据存储库可以包括用于图形渲染的可执行指令、3D模型、材料、纹理等。
计算机512通常包括各种计算机可读介质,诸如易失性和非易失性介质、可移除和不可移除介质。计算机可读介质可以以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据的信息的任何方法或技术来实现。计算机可读介质包括计算机可读存储介质(也称为计算机存储介质)和通信介质。计算机存储介质包括物理(有形)介质,诸如但不限于RAM、ROM、EEPROM、闪存或其他存储器技术,CDROM、数字多功能盘(DVD)或其他光盘存储器,磁带盒、磁带、磁盘存储或其他磁存储设备,其可以存储期望的数据并且可以由计算机512访问。通信介质包括诸如但不限于通信信号、调制载波或可以用于通信期望的信息并且可以由计算机512访问的任何其他无形介质。
应当理解,图3描述了可以用作用户与计算机资源之间的中介的软件。该软件可以包括可以操作系统528,其可以被存储在磁盘存储装置524上并且可以分配计算机512的资源。磁盘存储装置524可以是通过诸如接口526的不可移除存储器接口连接到系统总线518的硬盘驱动器。系统应用530通过存储在系统存储器516中或磁盘存储装置524上的程序模块532和程序数据534来利用由操作系统528对资源的管理。应当理解,计算机可以利用各种操作系统或操作系统的组合来实现。
用户可以通过输入设备536向计算机512中录入命令或信息。输入设备536包括但不限于定点设备,诸如鼠标、轨迹球、触针、触摸板、键盘、麦克风、语音识别和姿势识别系统等。这些和其他输入设备经由接口端口538通过系统总线518连接到处理单元514。接口端口538可以表示串行端口、并行端口、通用串行总线(USB)等。输出设备540可以使用与输入设备相同类型的端口。提供输出适配器542以说明存在一些输出设备540,如需要特定适配器的显示器、扬声器和打印机。输出适配器542包括但不限于在输出设备540与系统总线518之间提供连接的视频卡和声卡。其他设备和/或系统或诸如远程计算机544的设备可以提供输入能力和输出能力两者。
计算机512可以使用到诸如远程计算机544的一个或多个远程计算机的逻辑连接在联网环境中操作。远程计算机544可以是个人计算机、服务器、路由器、网络PC、对等设备或其他公共网络节点,并且通常包括上面关于计算机512描述的元件中的很多或全部元件,尽管在图3中仅示出了存储器存储设备546。远程计算机544可以经由通信连接550在逻辑上被连接。网络接口548包括诸如局域网(LAN)和广域网(WAN)的通信网络,但是也可以包括其他网络。通信连接550是指用于将网络接口548连接到总线518的硬件/软件。通信连接550可以在计算机512内部或外部,并且包括内部和外部技术,诸如调制解调器(电话、电缆、DSL和无线)以及ISDN适配器、以太网卡等。
应当理解,所示的网络连接仅仅是示例,并且可以使用在计算机之间建立通信链路的其他手段。本领域普通技术人员可以理解,计算机512或其他客户端设备可以被部署为计算机网络的一部分。就这一点而言,本文中公开的主题可以涉及具有任何数目的存储器或存储单元、以及跨越任何数目的存储单元或卷发生的任何数目的应用和过程的任何计算机系统。本文中公开的主题的方面可以应用于具有远程或本地存储的、具有部署在网络环境中的服务器计算机和客户端计算机的环境。本文中公开的主题的方面还可以应用于具有编程语言功能、解释和执行能力的独立计算设备。
本文中描述的各种技术可以结合硬件或软件或者在适当的情况下结合两者的组合来实现。因此,本文中描述的方法和装置或其某些方面或部分可以采取在有形介质中实施的程序代码(即,指令)的形式,有形介质诸如软盘、CD-ROM、硬盘驱动器或任何其他机器可读存储介质,其中当程序代码被加载到诸如计算机的机器中并且由其执行时,机器变成用于实践本文中公开的主题的方面的装置。如本文使用的,术语“机器可读介质”应当被理解为排除提供(即,存储和/或传输)任何形式的传播信号的任何机制。在可编程计算机上的程序代码执行的情况下,计算设备通常将包括处理器、由处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备。可以利用(例如通过使用数据处理API等)对领域特定的编程模型方面的创建和/或实现的一个或多个程序可以以高级别过程式或面向对象的编程语言来实现,以与计算机系统通信。然而,如果需要,程序可以以汇编或机器语言来实现。无论如何,语言可以是编译的或解释的语言,并且与硬件实现相结合。
图4示出了集成开发环境(IDE)600和公共语言运行时环境602。IEC 600可以允许用户(例如,开发人员、程序员、设计人员、编码人员等)在计算机系统中设计、编码、编译、测试、运行、编辑、调试或构建程序、程序集、网站、网络应用和网络服务。软件程序可以包括以一种或多种源代码语言(例如,Visual Basic、Visual J#、C++、C#、J#、Java Script、APL、COBOL、Pascal、Eiffel、Haskell、ML、Oberon、Perl、Python、Scheme、Smalltalk等)创建的源代码(组件610)。IDE 600可以提供原生代码开发环境,或者可以提供在虚拟机上运行的托管代码开发,或者可以提供其组合。IDE 600可以使用.NET框架来提供托管代码开发环境。可以使用语言特定的源编译器620从源代码组件610和本地代码组件611创建中间语言组件650,并且当应用被执行时,使用中间语言编译器660(例如,即时(JIT)编译器)从中间语言组件650创建原生代码组件611(例如,机器可执行指令)。也就是说,当IL应用被执行时,它在被执行时被编译成针对其正在被执行的平台的适当机器语言,由此使得代码跨若干平台可移植。备选地,在其他实施例中,程序可以被编译为适合其预期平台的原生代码机器语言(未示出)。
用户可以经由IDE 600中的用户界面640和源代码编辑器651根据已知的软件编程技术以及与特定源语言相关联的特定逻辑和语法规则来创建和/或编辑源代码组件。此后,源代码组件610可以经由源编译器620被编译,由此可以创建程序的中间语言表示,诸如汇编630。汇编630可以包括中间语言组件650和元数据642。
应用设计可以能够在部署之前被验证。
本文中描述的各种技术可以结合硬件或软件或者在适当的情况下结合两者的组合来实现。因此,本文中描述的方法和装置或其某些方面或部分可以采取在有形介质中实施的程序代码(即,指令)的形式,有形介质诸如软盘、CD-ROM、硬盘驱动器或任何其他机器可读介质,其中当程序代码被加载到诸如计算机的机器中并且由其执行时,机器变成用于实践本文中公开的主题的方面的装置。如本文使用的,术语“机器可读介质”应当被理解为排除提供(即,存储和/或传输)任何形式的传播信号的任何机制。在可编程计算机上的程序代码执行的情况下,计算设备通常将包括处理器、由处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备。可以利用(例如通过使用数据处理API等)对领域特定的编程模型方面的创建和/或实现的一个或多个程序可以以高级别过程式或面向对象的编程语言来实现,以与计算机系统通信。然而,如果需要,程序可以以汇编或机器语言来实现。无论如何,语言可以是编译的或解释的语言,并且与硬件实现相结合。
尽管已经以特定于结构特征和/或方法动作的语言描述了主题,但是应当理解,所附权利要求中限定的主题不一定限于上面描述的特定特征或动作。更确切地,上述特定特征和动作被公开作为实现权利要求的示例形式。

Claims (15)

1.一种用于生成平台无关的代码的系统,包括:
至少一个处理器:
连接到所述至少一个处理器的存储器;以及
至少一个程序模块,所述至少一个程序模块在被加载到所述存储器中时引起所述至少一个处理器:
生成建议以纠正程序源代码中的包括未定义标记的错误,所述生成通过使用项目的包括图以找到从表示外部文件中的其中定义了所述标记的文件的节点去往项目节点的所有路径;以及
连同其中定义了所述标记的所述文件一起显示每个目录中的最顶端的文件作为建议。
2.根据权利要求1所述的系统,其中所述标记由于在基于C的编程语言中缺失#include语句而未定义。
3.根据权利要求1所述的系统,其中所述标记由于缺失定义而未定义。
4.根据权利要求1所述的系统,其中所述未定义标记在外部文件中被定义,外部文件包括不在所述项目中的文件。
5.根据权利要求1所述的系统,其中针对头文件的抽象化的使用使得平台无关的源代码能够被生成。
6.根据权利要求1所述的系统,其中生成的所述源代码是平台无关的。
7.根据权利要求1所述的系统,其中针对所述头文件的抽象化的使用使得源代码能够符合用于编写程序源代码的准则。
8.一种用于生成建议以纠正程序源代码中的未定义标记错误的方法,包括:
检测程序源代码中的未定义标记错误;
由计算设备的处理器访问项目的包括图;
获取源自表示包括所述未定义标记的文件的节点的所有路径;
基于文件夹来对每个路径分段,表示包括所述未定义标记的所述文件的所述节点驻留在所述文件夹中;以及
显示由在所述项目节点之前的所述包括图中最后的节点表示的文件作为建议以用于纠正所述错误。
9.根据权利要求8所述的方法,还包括当遍历的每个路径中的节点被包括在所述项目中时,结束对所述路径的遍历。
10.根据权利要求8所述的方法,还包括:
对于所述路径中的每个路径,从表示定义所述未定义标记的所述文件的所述节点走进所述包括图。
11.根据权利要求9所述的方法,还包括:
每当包括所述文件的文件夹改变时,显示所述文件夹中的最后的文件作为建议以纠正所述未定义标记错误,所述文件包括所述未定义标记。
12.根据权利要求9所述的方法,其中作为当前项目的一部分的文件不被提供作为建议以纠正所述未定义标记错误。
13.根据权利要求8所述的方法,还包括:
在纠正建议列表的顶部提供在所述包括图中最靠近所述项目节点的分段的文件。
14.根据权利要求8所述的方法,还包括:
按照与所述项目节点的接近度的顺序显示纠正建议。
15.一种用于生成建议以纠正未定义标记错误的系统,包括:
至少一个处理器:
连接到所述至少一个处理器的存储器;以及
至少一个程序模块,所述至少一个程序模块在被加载到所述存储器中时引起所述至少一个处理器:
响应于检测到程序源代码中的未定义标记,通过在项目的包括图中寻找至少一个文件来生成建议以纠正所述程序源代码,其中所述至少一个文件不是所述项目的一部分,所述至少一个文件包括至少一个外部文件,所述至少一个外部文件包括所述未定义标记的定义;以及
显示所述至少一个外部文件作为纠正建议。
CN201680062060.3A 2015-10-23 2016-10-17 用于生成建议以纠正未定义标记错误的方法和系统 Active CN108139891B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201562245717P 2015-10-23 2015-10-23
US62/245,717 2015-10-23
US15/014,055 US9928156B2 (en) 2015-10-23 2016-02-03 Missing include suggestions for external files
US15/014,055 2016-02-03
PCT/US2016/057303 WO2017070040A1 (en) 2015-10-23 2016-10-17 Missing include suggestions for external files

Publications (2)

Publication Number Publication Date
CN108139891A true CN108139891A (zh) 2018-06-08
CN108139891B CN108139891B (zh) 2021-05-28

Family

ID=57209913

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680062060.3A Active CN108139891B (zh) 2015-10-23 2016-10-17 用于生成建议以纠正未定义标记错误的方法和系统

Country Status (4)

Country Link
US (1) US9928156B2 (zh)
EP (1) EP3365772B1 (zh)
CN (1) CN108139891B (zh)
WO (1) WO2017070040A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113031963A (zh) * 2021-03-24 2021-06-25 北京字节跳动网络技术有限公司 条件编译的实现方法、装置、设备及存储介质
CN113064606A (zh) * 2021-04-26 2021-07-02 平安普惠企业管理有限公司 软件工程项目故障处理方法、装置、设备及存储介质

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10489122B1 (en) * 2015-09-02 2019-11-26 Devin Abbott Inline text editor elements as an abstraction layer for graphical code editing
WO2017134677A1 (en) * 2016-02-06 2017-08-10 Picangelo Ltd. Methods and systems for software related problem solution
US10474750B1 (en) * 2017-03-08 2019-11-12 Amazon Technologies, Inc. Multiple information classes parsing and execution
US10552123B2 (en) * 2018-03-12 2020-02-04 Microsoft Technology Licensing, Llc In-line code adornments
US10872027B2 (en) * 2018-04-18 2020-12-22 The Mathworks, Inc. Run-time or compile-time error solutions for locating missing program elements in a programming environment
CN108710575B (zh) * 2018-05-23 2020-11-24 华南理工大学 基于路径覆盖测试用例自动生成的单元测试方法
US11392373B1 (en) * 2019-12-10 2022-07-19 Cerner Innovation, Inc. System and methods for code base transformations
CN111581094B (zh) * 2020-05-08 2023-06-23 贝壳技术有限公司 头文件名检测方法、装置、存储介质及电子设备
CN112328226B (zh) * 2020-09-17 2022-03-04 北京中数科技术有限公司 一种嵌入式系统自动化测试代码生成方法及装置
US11327723B1 (en) * 2021-02-25 2022-05-10 Red Hat, Inc. Development environment integrated with failure detection system
US11900275B2 (en) * 2021-09-21 2024-02-13 Capital One Services, Llc Proactively detecting and predicting potential breakage or support issues for impending code changes

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101442412A (zh) * 2008-12-18 2009-05-27 西安交通大学 一种基于软件缺陷及网络攻击关系挖掘的攻击预警方法
US8544016B2 (en) * 2008-05-30 2013-09-24 Oracle International Corporation Rebuilding a first and second image based on software components having earlier versions for one or more appliances and performing a first and second integration test for each respective image in a runtime environment
CN103885880A (zh) * 2014-03-28 2014-06-25 上海斐讯数据通信技术有限公司 一种模块间内部接口引用的静态检测方法

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5956513A (en) 1997-08-07 1999-09-21 Mci Communications Corporation System and method for automated software build control
US6493868B1 (en) * 1998-11-02 2002-12-10 Texas Instruments Incorporated Integrated development tool
US6305008B1 (en) 1998-11-13 2001-10-16 Microsoft Corporation Automatic statement completion
US20030028864A1 (en) 2001-01-29 2003-02-06 Matt Bowen System, method and article of manufacture for successive compilations using incomplete parameters
US20030033588A1 (en) 2001-01-29 2003-02-13 John Alexander System, method and article of manufacture for using a library map to create and maintain IP cores effectively
US7877738B2 (en) 2003-06-20 2011-01-25 Apple Inc. Speculative compilation
US7200529B2 (en) * 2003-08-15 2007-04-03 National Instruments Corporation Automatic configuration of function blocks in a signal analysis system
US20060277525A1 (en) * 2005-06-06 2006-12-07 Microsoft Corporation Lexical, grammatical, and semantic inference mechanisms
US8141065B2 (en) 2007-09-27 2012-03-20 Alcatel Lucent Method and apparatus for performing non service affecting software upgrades in place
US8196112B1 (en) * 2008-02-15 2012-06-05 Amazon Technologies, Inc. Systems and methods for testing widgets in computer environments
US9286083B2 (en) 2008-09-10 2016-03-15 Microsoft Technology Licensing, Llc Satisfying missing dependencies on a running system
US8997067B2 (en) 2012-01-31 2015-03-31 Sap Se Unified software build system
US8954940B2 (en) 2012-10-12 2015-02-10 International Business Machines Corporation Integrating preprocessor behavior into parsing
US20140109042A1 (en) 2012-10-12 2014-04-17 Sitecore A/S Method and a tool for automatically generating program code for a computer program
US20160117154A1 (en) * 2014-10-23 2016-04-28 Telefonaktiebolaget L M Ericsson (Publ) Automated software include graph and build environment analysis and optimization in compiled language

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8544016B2 (en) * 2008-05-30 2013-09-24 Oracle International Corporation Rebuilding a first and second image based on software components having earlier versions for one or more appliances and performing a first and second integration test for each respective image in a runtime environment
CN101442412A (zh) * 2008-12-18 2009-05-27 西安交通大学 一种基于软件缺陷及网络攻击关系挖掘的攻击预警方法
CN103885880A (zh) * 2014-03-28 2014-06-25 上海斐讯数据通信技术有限公司 一种模块间内部接口引用的静态检测方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
GGD: "PC-LINT安装及使用总结-精品版", 《豆丁网 HTTPS://WWW.DOCIN.COM/TOUCH/DETAIL.DO?ID=399952053》 *
KINN: "PCLINT+C51", 《CSDN博客 HTTP://BLOG.CSDN.NET/KINNHEUNG/ARTICLE/DETAILS/6853810》 *
ZHZHT19861011: "嵌入式C语言之---模块化编程", 《CSDN博客 HTTP://BLOG.CSDN.NET/ZHZHT19861011/ARTICLE/DETAILS/5974945》 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113031963A (zh) * 2021-03-24 2021-06-25 北京字节跳动网络技术有限公司 条件编译的实现方法、装置、设备及存储介质
CN113031963B (zh) * 2021-03-24 2023-09-12 北京字节跳动网络技术有限公司 条件编译的实现方法、装置、设备及存储介质
CN113064606A (zh) * 2021-04-26 2021-07-02 平安普惠企业管理有限公司 软件工程项目故障处理方法、装置、设备及存储介质

Also Published As

Publication number Publication date
US9928156B2 (en) 2018-03-27
CN108139891B (zh) 2021-05-28
EP3365772B1 (en) 2021-06-16
WO2017070040A1 (en) 2017-04-27
US20170116109A1 (en) 2017-04-27
EP3365772A1 (en) 2018-08-29

Similar Documents

Publication Publication Date Title
CN108139891A (zh) 针对外部文件的缺失包括建议
David et al. Neural reverse engineering of stripped binaries using augmented control flow graphs
Allamanis et al. A survey of machine learning for big code and naturalness
US10656940B1 (en) Systems, devices, and methods for source code generation from binary files
CN108885545B (zh) 用于实时数据流编程语言的工具和方法
KR102059705B1 (ko) 적응식 이식가능 라이브러리
CN102902529B (zh) 用于管理数据源的方法和系统
US8407667B2 (en) Inferring missing type information for reflection
US8239823B2 (en) Generating libraries for reflection without project compilation
US20110258600A1 (en) Using a dsl for calling apis to test software
CN106471476A (zh) 用于对经优化代码的编辑并继续以及增强的经优化调试的技术
CN105446725A (zh) 用于模型驱动开发的方法和系统
CN102696026A (zh) 带有增量改变的高效不可变句法表示
WO2023014370A1 (en) Source code synthesis for domain specific languages from natural language text
US20140359579A1 (en) Combined data and instruction test content
US20140189656A1 (en) Flow Analysis in Program Execution
Wille et al. Identifying variability in object-oriented code using model-based code mining
CN115686467A (zh) 动态语言中的类型推断
US11605006B2 (en) Deep-learning model catalog creation
Fu et al. A neural-based program decompiler
Höver et al. A domain specific language for describing s-bpm processes
Utkin et al. Evaluating the impact of source code parsers on ML4SE models
Piñeiro et al. Perldoop2: A big data-oriented source-to-source Perl-Java compiler
Jnanamurthy et al. Clone detection in model-based development using formal methods to enhance performance in software development
Fraternali et al. Almost rerere: An approach for automating conflict resolution from similar resolved conflicts

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant