CN102667730B - 设计时调试 - Google Patents

设计时调试 Download PDF

Info

Publication number
CN102667730B
CN102667730B CN201080058092.9A CN201080058092A CN102667730B CN 102667730 B CN102667730 B CN 102667730B CN 201080058092 A CN201080058092 A CN 201080058092A CN 102667730 B CN102667730 B CN 102667730B
Authority
CN
China
Prior art keywords
design
program
user interface
during
debugging
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.)
Active
Application number
CN201080058092.9A
Other languages
English (en)
Other versions
CN102667730A (zh
Inventor
A·Y·阿哈罗尼
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 Corp
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 Corp filed Critical Microsoft Corp
Publication of CN102667730A publication Critical patent/CN102667730A/zh
Application granted granted Critical
Publication of CN102667730B publication Critical patent/CN102667730B/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/3604Software analysis for verifying properties of programs
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/74Reverse engineering; Extracting design information from source code

Abstract

一种设计时调试工具,通过展示从该编译器可用的信息而不发起调试会话且不执行被调试的程序,在设计时期间提供从编译器可用的调试信息,就像用户正在调试提供该调试信息的代码一样。

Description

设计时调试
技术领域
本发明涉及计算机,尤其涉及设计时调试。
背景技术
调试是指在程序执行期间检查并观察计算机程序行为和状态的过程。传统调试工具允许在代码的特定行处或当特定条件发生时停止程序执行,此时开发者可检查程序状态。例如,对于在范围之内的变量,开发者能够在程序执行中断的时刻看到这些变量的值。开发者还能够在所调试的程序的上下文中运行新的代码并观察该应用及其数据结构的新状态。此实践常用于寻找并纠正计算机程序中的隐错(缺陷),使得它如所预期的那样并且在写新应用或功能的过程中执行,其中观察现有应用的行为是有帮助的。调试一般而言是耗时的、乏味的任务。经常提供调试工具来让这项工作稍微不那么麻烦。
运行时调试工具是允许开发者或测试者监视程序的执行的软件工具。用户能够停止或暂停程序的执行、重启程序、设置断点、检查存储器中的值、改变存储器中的值等等。运行时调试工具提供关于程序的运行实例的信息并且不能够在设计时期间提供信息。
发明内容
在为具有可扩展性模型的应用创建插件(plug-in)、附加件(add-on)、自动化组件或扩展(本文后面称为“扩展”)时,当扩展在应用的上下文中运行时,调试成为检查并探索该应用的状态的有用技术。具有基于扩展的不同状态创建的数据结构和对象模型的知识是有用的。今天,关于与扩展的特定状态相关联的应用的数据结构和对象模型的信息通常通过当该扩展在该应用的特定实例的上下文内执行时对该扩展进行运行时调试来提供,而当扩展不在执行时不可得到。如本文所述的,基于应用的实例的数据结构和对象的信息在与该应用的常规交互期间被展示,而不需要执行和调试该扩展。这样的应用的示例包括但不限于VisualOffice。这样的扩展的示例包括但不限于Visual中着色(coloring)的或Office中的宏。
提供本概述以便以简化的形式介绍将在以下详细描述中进一步描述的一些概念。本概述并不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
附图说明
在附图中:
图1a是已知运行时调试系统的示例的框图;
图1a是根据此处所公开的主题的各方面的设计时调试系统的示例的框图;
图1c是示出现有技术中已知的在运行时期间调试常规应用的框图;
图1d是示出现有技术中已知的在运行时期间调试作为对代码的现有主体的扩展的应用的框图;
图1e是示出根据此处所公开的主题的各方面使用调试隐喻(debuggingmetaphor)在设计时期间调试设计时编译器对源代码的表示的框图;
图1f是现有技术中已知的运行时调试用户界面的示例;
图1g是根据此处所公开的主题的各方面的设计时调试用户界面的示例;
图2是根据此处所公开的主题的各方面的用于设计时调试的方法的示例的流程图;
图3是示出了其中可以实现此处所公开的主题的各方面的计算环境的示例的框图;以及
图4是根据此处所公开的主题的各方面的集成开发环境的示例的框图。
具体实施方式
概览
诸如Eclipse、和Visual其他等某些集成开发环境(IDE)包括调试工具的阵列。例如,某些IDE包括交互式的、运行时调试器,所述调试器能用于调试以该IDE所支持的任何语言编写的应用。该调试器可能够附加于在该IDE之内或之外的正在运行的进程以监视并调试该进程。如果该正在运行的进程的源代码可用,则该调试器可能够在正在运行该程序时显示源代码。如果源代码不可用,则该调试器可能够示出反汇编(disassembly)。
该调试器还允许开发者或其他用户设置断点,断点允许在代码中的某点处临时停止执行,在程序执行期间创建的对象的值被调试以被检查和改变并且恢复执行。该调试器还支持用户界面,诸如监视窗口(watch windows),在程序的执行继续时各变量的值在其中被监视并显示。断点可能够是条件式的,意味着当满足指定条件时可触发断点。用户可能够每次执行一行代码,步入函数以在该函数内部调试,或越过函数,隐藏在函数主体的执行期间所发生的。在某些调试器中,在调试会话期间,如果用户将鼠标指针悬停在一变量上,则该变量的当前值可被显示在数据工具提示(tooltip)中,在其中如果需要还可以修改该值。该调试器可包括表达式评估器特征,该特征可评估上下文中的表达式以及所调试的应用状态。
图1a是在具有处理器142和存储器144的计算机102上执行的诸如Visual,Eclipse、Office、或其他IDE等已知集成开发环境(IDE)104的图示。IDE104可包括运行时调试模块106,运行时调试模块106包括运行时调试引擎112,运行时调试引擎112在调试会话期间监视在进程110的执行期间发生的调试事件108并提供一个或多个调试用户界面(诸如监视窗口114、数据工具提示118和表达式评估器116)并接受该调试用户界面内的用户输入126。图1c示出了在运行时期间调试用户应用。在IDE128的一个实例(实例1)中,计算机102上执行的运行时调试引擎132可监视正被调试的运行时进程134,并在调试会话进行时显示与正被调试的运行时进程134相关联的源代码130。可显示运行时调试用户界面136(例如,监视窗口、工具提示等)。图1f(下面更全面地描述)示出了这样的运行时监视窗口。
然而,假定开发者想要编写一些在另一个程序的上下文内执行的代码。在另一个程序的上下文中执行的代码的示例是对应用(诸如IDE)的扩展。例如,假定该扩展代码提供重构功能并且该扩展代码通过对函数A的参数a和b重新排序来操纵用户代码。今天,为了确定该扩展代码是否对函数A正确地执行,开发者编写该扩展代码并将该扩展并入到包括使用函数A的一些代码的用户项目的IDE中。开发者随后通过启动该用户项目内的编译器来获得该编译器对该用户代码的视图或表示。他将调试器附加到该IDE的另一个实例的参数重排序代码中。他在该扩展代码中插入断点,并且当遇到断点时,开发者步进通过由编译器从用户代码创建的数据结构以查看该扩展代码是否对该用户代码已有了期望的效果。
图1d示出现有技术中已知的对在第二程序的上下文内运行的在计算机102上的程序进行运行时调试。在第二程序的上下文内运行的程序可以是扩展代码。IDE148的第一实例(实例1)(包括该扩展代码的可执行件)被实例化,而运行时调试引擎152可监视正被调试的运行时进程158并显示与正被调试的运行时进程158相关联的源代码150。运行时调试引擎152与包括该扩展代码在其中运行的IDE154的第二实例(实例2)的进程(正被调试的运行时进程158)相关联。运行时调试用户界面156显示用于该调试会话的运行时调试信息,并可示出如由该扩展代码所操纵的用户代码的编译器表示。
根据此处所述的主题的各方面,如图1e中所示,与上面相反,IDE160的单一实例在计算机103上被实例化。设计时编辑器163显示在被用户交互式开发的源代码166。设计时编辑器162中显示的源代码166可包括扩展代码,即,对另一个应用的功能采取动作或扩展该另一个应用的功能的代码。该扩展代码可对一种类型的应用的特定用户实例采取动作。例如,该扩展代码可扩展用户的电子表格的功能。替代地,该扩展可在已加载特定用户项目等等的IDE中为特定语言扩展源代码编辑器的功能。在该扩展代码的交互式开发期间,设计时编辑器162引发表示对该扩展代码的开发者改变的事件。设计时调试引擎164监视由设计时编辑器162所引发的事件。
响应于由设计时编辑器162所引发的事件,设计时调试引擎164可从设计时编译器170请求信息。所请求的信息可包括关于由与该扩展对其采取动作的代码相关联的编译器所创建的对象的信息、与包括代码文件、设计者人为产物(artifacts)、资源文件等的用户文件相关联的信息、与该编译器相关联的对象、响应于与该IDE的用户交互的与该IDE相关联的对象。此信息可在设计时调试用户界面168中被格式化并被显示,如下面更完整地描述的,即便该扩展代码未在执行。设计时调试引擎164还监视设计时调试用户界面168中的用户交互,并且响应于所述交互,可改变设计时编辑器162中的源代码166的显示或改变在设计时调试用户界面168中所显示的信息。例如,响应于设计时调试用户界面168中的用户交互等,源代码编辑器中的一段代码可被突出显示。
可以理解,在上面的示意性的、非限制性的示例中,正被该扩展代码操纵的用户代码可以是托管应用(hosting application)而该扩展代码可以是被托管应用(hosted application)。可将此处公开的主题的各方面类似地应用到其他托管场景中,诸如但不限于任何可扩展应用,包括但不限于例如,大多数浏览器是可扩展的,具有支持Flash应用的插件、Java小程序等等。当用户与网页交互时,这种插件可显示浏览器对象模型。根据此处公开的主题的各方面,关于托管应用的特定状态的类似信息在被托管的应用的设计时期间可用并且被显示在设计时调试用户界面中。
设计时调试
此处所使用的短语“软件扩展”是一种计算机程序,该计算机程序被设计成被并入到另一段软件中以增强或扩展它所并入的软件的功能。即,该软件扩展被认为是在另一(托管)应用的上下文内运行或由另一(托管)应用托管。用于表示软件扩展的其他术语是附加件(add-on)、加入件(add-in)或插件(plug-in)。软件扩展本身通常是没有用处的或者无法发挥功能的。支持扩展的软件应用的示例包括Visual和Eclipse、诸如Mozilla Firefox Web浏览器等浏览器、以及诸如Adobe Systems Photoshop、Windows Explorer等应用,所有这些均为扩展而提供。通常,范围潜在无边界的应用将具有扩展应用编程接口(API)的特征。API的描述常常被公开,使得第三方开发者能够制作扩展。
编写软件扩展的挑战之一在于理解该API和在最终用户(托管)程序的任何给定状态下的托管应用的数据结构。例如,在开发环境中,理解语言编译器和由该语言编译器所创建的数据结构需要极大的努力。今天,为了能够查看托管程序的数据结构,必须将调试器附加到使用该数据结构的软件扩展(被托管的)代码。为了能够将调试器附加到软件扩展代码,开发者必须在该扩展内编写具有在范围内的开发环境和编译器对象的代码。他必须为这些对象设置正确的高级上下文(例如,加载到加载了该扩展的正确的文件或项目中)。在那之后,常常需要找到更具体的信息以能够显示数据结构的相关部分。例如,获得开发环境中的特定打开文件的整个解析树可能是不够的。相反,显示特定的解析节点可能有用得多。可提供更特定的上下文,使得可通过例如使用编辑器中的光标的当前位置来显示该特定解析节点。
在句法上纠正该代码之后,开发者在该IDE中编译并部署该代码,使得下次启动该开发环境时,该扩展将被包括在正在运行的代码中。最后,启动该开发环境,打开封装期望场景的项目,将调试器附加到正在运行的应用(扩展代码)并使用调试工具来调查适用的数据结构。
例如,假定开发者正在编写包括对编译器的扩展的软件扩展并且想要在它在命令处理程序的用户实例上运行时调试该编译器。如果开发者想要确定编译器如何查看该命令处理代码,他启动该用户项目内的编译器,将调试器附加到该编译器过程并插入中断以确定该命令处理程序的编译器视图。即,该编译器API在它具有其中输入是正在执行的命令处理程序的具体状态时被调查。开发环境的两个实例正在运行:一个实例中该命令处理程序正在运行,以及一个实例中操纵该命令处理程序的编译器正在运行。
相反,根据此处公开的主题的各方面,提供用于活动的文档或项目的软件扩展的调试信息,就像用户正在调试提供此数据的代码一样。通过使用诸如编译器监视窗口和诸如数据工具提示和表达式评估器等其他传统运行时调试用户界面等工具展示关于该环境的已知信息来提供此信息,而不创建运行时调试会话。当用户改变应用状态时自动提供设计时调试信息而无需用户干预。
图1b示出了根据此处所公开的主题的各方面的在计算机103上执行设计时调试的系统101的示例。系统101的全部或某些部分可以驻留在诸如下面参考图3所描述的计算机之类的一台或多台计算机上。系统101的全部或部分可驻留在诸如以下参照图4描述的计算机之类的一个或多个软件开发计算机上。系统101或其一些部分可以包括诸如下面参考图4所描述的和所示出的那些集成开发环境(例如,IDE105)的一部分。替代地,系统101或其一些部分可以作为独立系统或作为插件或加入件来提供。
系统101可以包括以下中的一个或多个:处理器(诸如处理器142)、存储器144以及设计时调试模块107。本领域公知的其他组件也可被包括其中但不在这里示出。可以理解,设计时调试模块107可以被加载到存储器144中,以导致诸如处理器142等一个或多个处理器执行归属于设计时调试模块107的动作。根据此处公开的主题的各方面,设计时调试模块107可接收以下中的一个或多个:用户输入127和一个或多个数据源(未示出)并在设计时调试用户界面中基本同时显示:在交互式开发下的扩展(第一程序)的源代码和基于与可扩展IDE的实例相关联的数据结构和/或对象的运行时调试信息,而不执行该扩展。设计时调试用户界面中显示的信息可被自动显示(例如,而无需请求显示该信息的人类干预)。而且,设计时调试用户界面中显示的信息可响应于操纵该应用的用户交互而自动改变。例如,设计时调试用户界面中显示的信息可响应于操纵IDE的源代码的用户交互而自动改变,或通过操纵设计时调试用户界面中呈现的信息的用户交互而自动改变。设计时调试用户界面中呈现的信息可包括基于该应用(第二程序)的执行的运行时调试信息。
设计时调试模块可包括以下中的一个或多个:与用户界面并与可扩展性API相关联的应用,该可扩展性API允许用户观察并操纵该应用的数据结构。例如,该设计时调试模块可包括诸如等应用,具有使用户能够设置电子表单和使用宏的程序任务的用户界面以及允许用户观察并操纵由生成的数据结构的可扩展性API。
设计时调试模块107可包括以下中的一个或多个:编辑器109、编译器111和设计时调试引擎113。编辑器109可包括源代码编辑器。编辑器109可基于操纵第一程序的源代码的用户输入、对源代码编辑器中的光标位置或焦点的变化、对源代码文件的编辑或操纵、或通过接收由用户点击相关菜单项所导致的事件来生成设计时编辑事件。编辑器109可将设计时编辑器事件发送到设计时调试引擎113。
设计时调试引擎113可基于所接收的编辑器事件而从编译器111请求数据结构、对象等的更新后的视图。编译器111可表示后台编译器、动态解析器或并行编译器。在正在编写代码时,这种编译器可在后台编译该代码以提供关于句法和编译错误的反馈,这些错误可用诸如红色波浪下划线等指示符来标记。也可以标记警告,诸如用绿色下划线等。编译器111可生成或刷新语言模型,并响应于从设计时调试引擎113接收的请求而将当前语言模型的刷新后的视图、编译器生成的对象、编译器生成的数据结构、IDE对象、IDE数据结构等发送到设计时调试引擎113。
设计时调试引擎113可基于从编译器111或应用接收的信息来生成运行时调试信息,并在在最终用户正交互式地编写代码时在设计时可用的诸如调试器窗口等设计时调试用户界面中显示该运行时调试信息。填充设计时调试用户界面的信息可响应于诸如对源代码编辑器中的光标位置的变化、对源文件的编辑、通过接收诸如由用户点击相关菜单项导致的事件的用户交互、或通过与设计时调试用户界面的用户交互的用户事件。
当设计时调试引擎113检测或接收到这种事件时,设计时调试引擎113可要求编译器111刷新该编译器对与第二程序的实例相关联的数据结构或对象的表示、或与编译器或IDE相关联的数据结构或对象的表示。可通过设计时调试用户界面来将由编译器返回到设计时调试引擎113的信息呈现给用户,该设计时调试用户界面类似于在传统运行时调试会话期间显示的传统运行时调试用户界面。设计时调试用户界面包括但不限于监视窗口115、表达式评估器117和数据工具提示119。在设计时调试用户界面中显示的信息呈现基于托管(第二)程序的状态的编译器视图的信息。该信息可包括关于文件、编译器对象和参考的信息。可以理解,在设计时期间开发第一程序期间,显示此运行时调试信息而不执行第一程序。
设计时调试引擎113还可监视与设计时调试用户界面的用户交互。响应于检测到编辑器109内或设计时调试用户界面内的用户交互,可自动刷新或修改该设计时调试用户假面内显示的信息的内容。响应于检测设计时调试用户界面内的用户交互,可自动修改该设计时编辑器中显示的信息的外观,例如,一段源代码可被突出显示等。
图1f是如本领域当前已知的,在运行时调试会话期间,可能显示的显示器172的示例的表示。显示器172的一部分显示程序ConsoleApplication17(控制台应用17)174的源代码。程序ConsoleApplication17 174创建类型为Element(元素)的变量x,对x赋值“fff”(第177行)并在控制台上写x的值。断点176已被置于Console.WriteLine(x);这一行上。在执行ConsoleApplication17期间,当达到断点时,ConsoleApplication17的执行停止并且显示运行时调试监视窗口Watch1(监视1)178。Watch1 178显示x的值180(“fff”)和x的类型182(System.XElement…)、x的不同属性(First Attribute(第一属性),Has Attributes(具有属性),Has Elements(具有元素),Is Empty(为空),LastAttribute(最后属性)等等)。对于每个属性,可扩展所示出的信息,使得例如通过点击First Attribute(第一属性)前的加号来显示此属性的所有成员。该运行时调试会话中示出的信息反映所知道的关于x所指向的实际对象的信息,该对象是在程序ConsoleApplication17 174的执行期间创建的。
相反,图1g是在编辑器中的软件扩展代码Module1(模块1)186的交互式设计时开发期间可能显示的设计时调试用户界面188的显示184的示例。当开发者在设计时编辑器中键入Module1 186的代码时,诸如设计时调试用户界面188等设计时调试用户界面被自动显示。不发起调试会话。Module1(模块1)未在执行。当开发者在该代码内导航时(例如,使用光标),设计时调试用户界面显示关于与光标所在的点相关联的编译器对象的信息。设计时调试用户界面188中所显示的信息可包括对编译器111固有的类型和由编译器111创建的对象的信息以表示与源代码的描述相关联的成员的类型、由编译器111创建的数据结构和对象、以及该编译器正在其中执行的IDE相关联的数据结构和对象的信息。
例如,设计时调试用户界面188显示调用声明节点CallStatementNode(调用声明节点)190,即该编译器对控制台writeline(写行)方法调用(Console.WriteLine(“fff”))行187的表示。CallStatementNode190表示描述源代码186中的行(Console.WriteLine(“fff”))行187的对象。通过查看设计时调试用户界面188,可确定CallStatementNode190的值(Console.WriteLine(System.Collections.Object))192,如同能确定CallStatmentNode190的类型:(.VisualBasic.Syntax.CallStatement)194。设计时调试用户界面188显示关于CallStatementNode190的孩子的信息。CallStatementNode190的孩子之一是要调用的方法。要调用的方法由属性QualifiedNode196表示,其指向表示该方法的对象。QualifiedNode(合格节点)196所指向的对象的值是Console.WriteLine198。QualifiedNode196的类型是编译器111内的类型之一:.VisualBasic.Syntax.QualifiedNode。从而设计时调试用户界面188显示树形结构,该树形结构表示源代码编辑器中所显示的代码(例如,源代码186)的句法树。该树的根节点是表示整行代码的调用声明节点。树本身包括表示所调用的方法的子树、该方法的自变量等等。设计时调试用户界面188中显示的项目中的每一个本身可通过选择该项目以展开来被检查。
图2示出根据此处所公开的主题的各方面的执行设计时调试的方法200的示例。在第二程序的上下文内执行的第一程序的在设计时期间在交互式开发下的源代码与基于与第二程序的实例相关联的数据结构和对象的调试信息基本同时地显示。设计时调试引擎,诸如上面参考图1b、1e和1g描述的设计时调试引擎,监视作为由设计时编辑器(诸如编辑器109)接收的用户输入的结果而生成的编辑器事件。设计时调试引擎还监视作为上面描述的设计时调试用户界面中的用户输入的结果而生成的事件。源代码编辑器内的用户输入可包括软件扩展的开发中和编辑中的源代码。
当设计时调试引擎检测到编辑事件280时,设计时调试引擎请求应用或编译器(诸如上面描述的编译器111)刷新它对与第二程序相关联的数据结构和对象的视图282。响应于从编译器接收到更新后的信息284,设计时调试引擎显示设计时调试信息286,如上面参考图1g所述的。当设计时调试引擎检测到与设计时调试用户界面的用户交互280时,该设计时调试引擎请求编译器(如上面描述的编译器111)可请求与第二程序相关联的数据结构和对象的不同视图。响应于从编译器接收到更新后的信息284,设计时调试引擎显示设计时调试信息286,如上面参考图1g所述的。按照与运行时调试用户界面的行为相类似的方式,该设计时调试引擎还可监视与设计时调试用户界面的用户交互并对其进行响应、修改该编辑器中的源代码的显示。例如,响应于接收到选择设计时调试用户界面中的节点的用户输入,该编辑器中所显示的源代码中的与该节点相对应的片段可在该编辑器中被突出显示。当用户在设计时监视窗口中键入表达式时,此表达式的结果可反映在该应用本身中,例如,在源编辑器中。
合适计算环境的示例
为了提供有关本文所公开的主题的各个方面的上下文,图3以及以下讨论旨在提供其中可以实现各实施例的合适计算环境510的简要概括描述。尽管本文所公开的主题是在诸如程序模块等由一个或多个计算机或其它计算设备执行的计算机可执行指令的通用上下文中描述的,但本领域技术人员将认识到,本文所公开的主题的各部分还能够结合其它程序模块和/或硬件和软件的组合来实现。通常,程序模块包括执行特定任务或实现特定数据类型的例程、程序、对象、物理人为产物、数据结构等。通常,程序模块的功能可在各个实施例中按需进行组合或分布。计算环境510只是合适的操作环境的一个示例,并且不旨在对此处所公开的主题的使用范围或功能提出任何限制。
参考图3,描述了计算机512形式的用于软件开发的计算设备。计算机512可包括处理单元514、系统存储器516和系统总线518。处理单元514可以是各种可用处理器中的任何一种。也可以使用双微处理器及其他多处理器体系结构作为处理单元514。系统存储器516可包括易失性存储器520和非易失性存储器522。非易失性存储器522可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)或闪存。易失性存储器520可包括可充当外部高速缓冲存储器的随机存取存储器(RAM)。系统总线518将包括系统存储器516的系统物理人为产物耦合到处理单元514。系统总线518可以是几种类型的总线结构中的任何一种,包括存储器总线、存储控制器、外围总线、外部总线或局部总线,并且可以使用各种可用总线体系结构中的任一种。
计算机512通常包括各种计算机可读介质,诸如易失性和非易失性介质、可移动和不可移动介质。计算机存储介质可以通过用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术来实现。计算机可读存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CDROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机512访问的任一其它介质。
将理解,图3描述了可充当用户与计算机资源之间的媒介的软件。该软件可以包括可存储在盘存储524上的操作系统528,该操作系统可控制并分配计算机系统512的资源。盘存储524可以是通过诸如接口526的不可移动存储器接口连接到系统总线518的硬盘驱动器。系统应用530利用由操作系统528通过存储在系统存储器516中或者存储在盘存储524上的程序模块532和程序数据534对资源的管理。可以理解,计算机可用各种操作系统或操作系统的组合来实现。
用户可通过输入设备536向计算机512输入命令或信息。输入设备536包括但不限于定点设备,诸如鼠标、跟踪球、指示笔、触摸垫、键盘、话筒等。这些及其他输入设备通过系统总线518经由接口端口538连接到处理单元514。接口端口538可表示串行端口、并行端口、通用串行总线(USB)等。输出设备540可与输入设备使用相同类型的端口。提供输出适配器542以举例说明存在像监视器、扬声器、以及打印机的需要特定适配器的一些输出设备540。输出适配器542包括但不限于,在输出设备540和系统总线518之间提供连接的视频卡和声卡。其他设备和/或设备或系统,诸如远程计算机544,可提供输入和输出两种能力。
计算机512可以使用到诸如远程计算机544之类的一个或多个远程计算机的逻辑连接来在联网环境中操作。远程计算机544可以是个人计算机、服务器、路由器、网络PC、对等设备或其它常见的网络节点,并且通常包括许多或所有以上相对于计算机512所描述的元件,尽管在图4中仅示出了存储器存储设备546。远程计算机544可经由通信连接550逻辑地连接。网络接口548涵盖诸如局域网(LAN)和广域网(WAN)这样的通信网络,但也可包括其他网络。通信连接550是指用来将网络接口548连接到总线518的硬件/软件。连接550可以在计算机512内或外并且包括诸如调制解调器(电话、电缆、DSL和无线)和ISDN适配器、以太网卡等内和外技术。
可以理解,所示网络连接仅是示例,并且可以使用在计算机之间建立通信链路的其它手段。本领域的普通技术人员可以理解,计算机512或其它客户机设备可作为计算机网络的一部分来部署。在这一点上,本文所公开的主题涉及具有任意数量的存储器或存储单元以及在任意数量的存储单元或卷上发生的任意数量的应用程序和进程的任何计算机系统。本文所公开的主题的各方面可应用于具有部署在网络环境中的具有远程或本地存储的服务器计算机和客户计算机的环境。本文所公开的主题的各方面也可应用于具有编程语言功能、解释和执行能力的独立计算设备。
图4示出集成开发环境(IDE)600和通用语言运行时环境602。IDE600可允许用户(例如,开发者、程序员、设计者、编码者等)在计算机系统中设计、编码、编译、测试、运行、编辑、调试或构建程序、程序集、网站、web应用和web服务。软件程序可以包括在一个或多个源代码语言(例如,VisualBasic、Visual J#、C++、C#、J#、Java Script、APL、COBOL、Pascal、Eiffel、Haskell、ML、Oberon、Perl、Python、Scheme、Smalltalk等等)中创建的源代码(组件610)。IDE600可提供本机代码开发环境,或者可提供在虚拟机上运行的托管代码开发,或者可提供其组合。IDE600可提供使用.NET框架的托管代码开发环境。可使用语言专用源编译器620从源代码组件610和本机代码组件611创建中间语言组件650,并且在执行应用时使用中间语言编译器660(例如,即时(JIT)编译器)从中间语言组件650创建本机代码组件611(例如,机器可执行指令)。即,当IL应用被执行时,其在被执行的同时被编译成适合正在其上执行它的平台的合适机器语言,藉此使代码能跨若干平台便携。替代地,在其他实施例中,程序可被编译成适合其目标平台的本机代码机器语言(未示出)。
用户可根据已知软件编程技术以及与特定源语言相关联的特定逻辑和句法规则经由IDE600中的用户界面640和源代码编辑器651来创建和/或编辑源代码组件。此后,源代码组件610可经由源编译器620被编译,藉此可创建该程序的中间语言表示,诸如汇编630。汇编630可包括中间语言组件650和元数据642。应用设计可以能够在部署前被验证。
本文所述的各种技术可结合硬件或软件,或在适当时以其组合来实现。由此,本文所公开的方法和装置或其特定方面或部分可采取包含在诸如软盘、CD-ROM、硬盘驱动器或任何其它机器可读存储介质等有形介质中的程序代码(即,指令)的形式,其中当程序代码被加载到诸如计算机等机器内并由其执行时,该机器成为用于实现本文所公开的主题的各方面的装置。在程序代码在可编程计算机上执行的情况下,计算设备通常将包括处理器、该处理器可读的存储介质(包括易失性和非易失性的存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备。可例如通过使用数据处理API等来利用域专用编程模型各方面的创建和/或实现的一个或多个程序可用高级过程编程语言或面向对象的编程语言来实现以与计算机系统通信。然而,如果需要,该程序可以用汇编语言或机器语言来实现。在任何情形中,语言可以是编译语言或解释语言,且与硬件实现相结合。
虽然已结合附图描述了本文所公开的主题,但是应理解,可作出修改以按不同方式执行相同功能。

Claims (15)

1.一种用于设计时调试的系统,包括:
软件开发计算机的处理器;
耦合到所述处理器的存储器;
加载到所述存储器中的设计时调试模块,所述设计时调试模块在第一程序的设计时期间基本同时地自动显示:
设计时源代码编辑器中的所述第一程序的源代码,其中所述第一程序在第二程序的上下文内执行;以及
设计时调试用户界面中的运行时调试信息,所述运行时调试信息基于与所述第二程序的实例相关联的数据结构或对象,而不执行所述第一程序。
2.如权利要求1所述的系统,其特征在于,还包括所述设计时源代码编辑器,所述设计时源代码编辑器基于操纵所述第一程序的所述源代码的用户输入来生成设计时编辑器事件并将所述设计时编辑器事件发送到所述设计时调试模块。
3.如权利要求1所述的系统,其特征在于,响应于检测到操纵所述设计时调试用户界面中所显示的所述运行时调试信息的用户输入,所述设计时调试模块修改所述设计时源代码编辑器中的所述第一程序的所述源代码的外观或修改所述设计时调试用户界面中所显示的调试信息的内容。
4.如权利要求1所述的系统,其特征在于,所述设计时调试用户界面包括编译器监视窗口、数据工具提示或表达式评估器。
5.如权利要求1所述的系统,其特征在于,所述设计时调试用户界面的内容响应于所述设计时源代码编辑器中的光标位置而改变。
6.一种用于设计时调试的方法,包括:
在对可扩展应用的扩展的设计时期间基本同时地显示:
在软件开发计算机上执行的设计时编辑器中的所述扩展的源代码,其中所述扩展在所述可扩展应用的上下文内执行,以及
设计时调试用户界面中的基于与第二程序的实例相关联的数据结构和对象的调试信息(286)。
7.如权利要求6所述的方法,其特征在于,还包括:
在所述扩展的设计时期间接收设计时编辑器事件,其中所述设计时编辑器事件包括响应于操纵所述扩展的所述源代码的用户输入而生成的事件。
8.如权利要求7所述的方法,其特征在于,还包括:
响应于接收到所述设计时编辑器事件,发送对关于与所述可扩展应用的所述实例相关联的数据结构或对象的信息的请求。
9.如权利要求6所述的方法,其特征在于,还包括:
基于与所述可扩展应用的所述实例相关联的所述数据结构和对象、响应于检测到操纵所述调试信息的用户输入而修改所述扩展的所述源代码的外观。
10.如权利要求6所述的方法,其特征在于,还包括:
响应于操纵所述扩展的所述源代码的用户输入,或者响应于操纵所述设计时调试用户界面中的所述调试信息的用户输入,基于与所述可扩展应用的所述实例相关联的所述数据结构和对象,修改调试信息。
11.一种用于设计时调试的方法,包括:
基于与第一程序相关联的编译器和集成设计环境数据结构在设计时调试用户界面中显示运行时调试信息,同时在第二程序的设计时期间显示所述第二程序的源代码,所述第二程序包括扩展软件,其中所述第一程序在所述第二程序的上下文内执行。
12.如权利要求11所述的方法,其特征在于,进一步包括:
基于编译器对象和集成设计环境对象在所述设计时调试用户界面中显示运行时调试信息。
13.如权利要求11所述的方法,其特征在于,进一步包括:
响应于所述设计时调试用户界面中的用户输入而改变所述第二程序的所述源代码的显示的外观或内容。
14.如权利要求11所述的方法,其特征在于,进一步包括:
响应于所述设计时调试用户界面中的用户输入而改变所述设计时调试用户界面的显示的内容,或响应于所述第二程序的所述源代码中的用户输入而改变所述设计时调试用户界面的显示的内容。
15.如权利要求11所述的方法,其特征在于,进一步包括:
显示运行时调试信息而不发起运行时调试会话,在所述设计时调试用户界面中显示所述运行时调试信息,所述设计时调试用户界面包括监视窗口、数据工具提示或表达式评估器。
CN201080058092.9A 2009-12-23 2010-11-18 设计时调试 Active CN102667730B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/645,887 US8621435B2 (en) 2009-12-23 2009-12-23 Time debugging
US12/645,887 2009-12-23
PCT/US2010/057267 WO2011087569A2 (en) 2009-12-23 2010-11-18 Design time debugging

Publications (2)

Publication Number Publication Date
CN102667730A CN102667730A (zh) 2012-09-12
CN102667730B true CN102667730B (zh) 2015-05-06

Family

ID=44152981

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201080058092.9A Active CN102667730B (zh) 2009-12-23 2010-11-18 设计时调试

Country Status (4)

Country Link
US (1) US8621435B2 (zh)
CN (1) CN102667730B (zh)
HK (1) HK1173800A1 (zh)
WO (1) WO2011087569A2 (zh)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8904356B2 (en) 2010-10-20 2014-12-02 International Business Machines Corporation Collaborative software debugging in a distributed system with multi-member variable expansion
US9009673B2 (en) * 2010-10-21 2015-04-14 International Business Machines Corporation Collaborative software debugging in a distributed system with collaborative step over operation
US8972945B2 (en) 2010-10-21 2015-03-03 International Business Machines Corporation Collaborative software debugging in a distributed system with client-specific access control
US8671393B2 (en) 2010-10-21 2014-03-11 International Business Machines Corporation Collaborative software debugging in a distributed system with client-specific dynamic breakpoints
US8850397B2 (en) 2010-11-10 2014-09-30 International Business Machines Corporation Collaborative software debugging in a distributed system with client-specific display of local variables
US9411709B2 (en) 2010-11-10 2016-08-09 International Business Machines Corporation Collaborative software debugging in a distributed system with client-specific event alerts
US8990775B2 (en) 2010-11-10 2015-03-24 International Business Machines Corporation Collaborative software debugging in a distributed system with dynamically displayed chat sessions
US8806438B2 (en) 2011-04-20 2014-08-12 International Business Machines Corporation Collaborative software debugging in a distributed system with variable-specific messages
US8656360B2 (en) 2011-04-20 2014-02-18 International Business Machines Corporation Collaborative software debugging in a distributed system with execution resumption on consensus
US20120272218A1 (en) * 2011-04-20 2012-10-25 International Business Machines Corporation Collaborative Software Debugging In A Distributed System With Stacked Run-To-Cursor Commands
US8739127B2 (en) 2011-04-20 2014-05-27 International Business Machines Corporation Collaborative software debugging in a distributed system with symbol locking
US9104795B2 (en) * 2011-06-28 2015-08-11 International Business Machines Corporation Integrating compiler warnings into a debug session
US8756577B2 (en) 2011-06-28 2014-06-17 International Business Machines Corporation Collaborative software debugging in a distributed system with private debug sessions
US20130091444A1 (en) * 2011-10-11 2013-04-11 Microsoft Corporation Automatic rendering of interactive user interface elements
US9015680B1 (en) * 2012-02-24 2015-04-21 Google Inc. Differential analysis of translation of software for the detection of flaws
KR20140039786A (ko) * 2012-09-25 2014-04-02 에스케이플래닛 주식회사 디버깅 메시지 연동을 위한 시스템 및 방법
US8930923B2 (en) 2012-12-20 2015-01-06 International Business Machines Corporation Generating debugging extension source code utilizing debugging information
US9367429B2 (en) * 2012-12-21 2016-06-14 Microsoft Technology Licensing, Llc Diagnostics of declarative source elements
US9189208B2 (en) * 2013-03-14 2015-11-17 Microsoft Technology Licensing, Llc Inline display and preview of related information for elements in a document
US9639330B2 (en) 2013-05-14 2017-05-02 Microsoft Technology Licensing, Llc Programming interface
US9483295B2 (en) * 2014-03-31 2016-11-01 International Business Machines Corporation Transparent dynamic code optimization
US9870205B1 (en) 2014-12-29 2018-01-16 Palantir Technologies Inc. Storing logical units of program code generated using a dynamic programming notebook user interface
JP2017054380A (ja) * 2015-09-10 2017-03-16 株式会社東芝 プログラム情報生成システム、方法、及びプログラム
US10169192B2 (en) 2015-11-11 2019-01-01 International Business Machines Corporation Automatic collection and presentation of runtime data semantics
US9747189B2 (en) 2015-11-12 2017-08-29 International Business Machines Corporation Breakpoint for predicted tuple processing time in a streaming environment
US9703673B1 (en) * 2016-01-08 2017-07-11 International Business Machines Corporation Stack pattern breakpoint in COBOL
US10169201B2 (en) * 2017-01-07 2019-01-01 International Business Machines Corporation Debug management in a distributed batch data processing environment
CN106815149B (zh) * 2017-01-13 2020-05-22 上海市共进通信技术有限公司 基于智能网关平台进行软件开发的调试系统及方法
JP2019153265A (ja) * 2018-03-05 2019-09-12 キヤノンマーケティングジャパン株式会社 情報処理装置、その処理方法及びプログラム
CN109547430B (zh) * 2018-11-16 2021-02-12 上海朔羡网络科技有限公司 一种开发服务网关系统及开发服务网关

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0703532A2 (en) * 1994-09-22 1996-03-27 Sun Microsystems, Inc. Embedded program flow information for object code manipulation
JP2003058392A (ja) * 2001-08-09 2003-02-28 Fujitsu Ltd ソフトウェア開発環境プログラム、その記録媒体、プログラムデバッグ装置及びプログラムデバッグ方法
CN101344855A (zh) * 2007-07-13 2009-01-14 上海宇梦通信科技有限公司 一种基于编译的跟踪代码中特定对象的控制方法及装置

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7546577B2 (en) 1999-12-06 2009-06-09 Axiomatic Design Software, Inc. Method and apparatus for producing software
US7516441B2 (en) 2001-06-04 2009-04-07 Microsoft Corporation Method and system for program editing and debugging in a common language runtime environment
US6964036B2 (en) 2002-05-21 2005-11-08 International Business Machines Corporation Descriptive variables while debugging
FR2841379B1 (fr) * 2002-06-25 2005-07-15 Commissariat Energie Atomique Tube micro-onde a accord mecanique de frequence
US7448024B2 (en) 2002-12-12 2008-11-04 Bea Systems, Inc. System and method for software application development in a portal environment
US7814463B2 (en) * 2003-05-16 2010-10-12 Oracle International Corporation User interface debugger for software applications
US7559050B2 (en) 2003-06-30 2009-07-07 Microsoft Corporation Generating software development tools via target architecture specification
US8281242B2 (en) 2003-07-30 2012-10-02 National Instruments Corporation Editable data tooltips
JP4822817B2 (ja) 2005-11-22 2011-11-24 パナソニック株式会社 コンパイルシステム
US7721250B2 (en) 2006-04-12 2010-05-18 International Business Machines Corporation System and method for interactive and integrated software development process and phases

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0703532A2 (en) * 1994-09-22 1996-03-27 Sun Microsystems, Inc. Embedded program flow information for object code manipulation
JP2003058392A (ja) * 2001-08-09 2003-02-28 Fujitsu Ltd ソフトウェア開発環境プログラム、その記録媒体、プログラムデバッグ装置及びプログラムデバッグ方法
CN101344855A (zh) * 2007-07-13 2009-01-14 上海宇梦通信科技有限公司 一种基于编译的跟踪代码中特定对象的控制方法及装置

Also Published As

Publication number Publication date
WO2011087569A2 (en) 2011-07-21
US20110154295A1 (en) 2011-06-23
CN102667730A (zh) 2012-09-12
US8621435B2 (en) 2013-12-31
HK1173800A1 (zh) 2013-05-24
WO2011087569A3 (en) 2011-11-24

Similar Documents

Publication Publication Date Title
CN102667730B (zh) 设计时调试
US20180024911A1 (en) Software code debugger for quick detection of error root causes
CN102222012B (zh) 针对外部数据源的静态类型检查
US7526681B2 (en) Software testing framework
CN102222039B (zh) 使用dsl来调用api以测试软件
US8584079B2 (en) Quality on submit process
US8434068B2 (en) Development system
CN101739333B (zh) 应用程序的调试方法、调试工具及调试装置
US8166347B2 (en) Automatic testing for dynamic applications
US10489274B2 (en) Using emulation to disassociate verification from stimulus in functional test
CN110554965B (zh) 自动化模糊测试方法及相关设备、计算机可读存储介质
US8201143B2 (en) Dynamic mating of a modified user interface with pre-modified user interface code library
US7500149B2 (en) Generating finite state machines for software systems with asynchronous callbacks
US20110154287A1 (en) Visual Generation of Mobile Applications Based on Data Models
CN102207903A (zh) 用于单元测试的自动重定向方法调用
CN106649084A (zh) 函数调用信息的获取方法及装置、测试设备
US9715440B2 (en) Test scope determination based on code change(s)
US7322026B2 (en) Scoring assertions
US8543975B2 (en) Behavior-first event programming model
JP2018532169A (ja) 失敗したテストスクリプトについてのデバッグ情報を生成、収集、格納、およびロードするための方法および装置
US9026997B2 (en) Systems and methods for executing object-oriented programming code invoking pre-existing objects
Arlt et al. Trends in model-based gui testing
Jiang et al. A systematic study on factors impacting gui traversal-based test case generation techniques for android applications
Yip et al. Graphical user interfaces validation: a problem analysis and a strategy to solution
Turner et al. Model-based testing of interactive systems using interaction sequences

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

Country of ref document: HK

C14 Grant of patent or utility model
GR01 Patent grant
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
TR01 Transfer of patent right

Effective date of registration: 20150729

Address after: Washington State

Patentee after: Micro soft technique license Co., Ltd

Address before: Washington State

Patentee before: Microsoft Corp.

REG Reference to a national code

Ref country code: HK

Ref legal event code: GR

Ref document number: 1173800

Country of ref document: HK