CN105164648B - 使用仅我的代码的JavaScript调试方法和系统 - Google Patents

使用仅我的代码的JavaScript调试方法和系统 Download PDF

Info

Publication number
CN105164648B
CN105164648B CN201480015943.XA CN201480015943A CN105164648B CN 105164648 B CN105164648 B CN 105164648B CN 201480015943 A CN201480015943 A CN 201480015943A CN 105164648 B CN105164648 B CN 105164648B
Authority
CN
China
Prior art keywords
code
document
user
debugger
mistake
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
CN201480015943.XA
Other languages
English (en)
Other versions
CN105164648A (zh
Inventor
R·A·帕韦泽
A·R·斯特兰德
T·S·莱斯
G·B·米斯凯利
N·坎德沃尔
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 CN105164648A publication Critical patent/CN105164648A/zh
Application granted granted Critical
Publication of CN105164648B publication Critical patent/CN105164648B/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/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/362Software debugging

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明延及单步执行通过调试器中的JavaScript代码而不会到达库或开源代码中的错误的方法、系统和计算机程序产品。调试器接收将JavaScript代码的一个或多个片段指定为库代码的用户输入。然后,调试器可以对JavaScript代码执行调试操作。调试操作包括用于单步执行通过JavaScript代码以标识仅在JavaScript代码的用户生成的片段中的错误的单步执行操作,其中用户生成的片段对应于未被指定为库代码的代码。

Description

使用仅我的代码的JavaScript调试方法和系统
背景
各种库和插件数组可用于JavaScript,这允许较容易地开发基于 JavaScript的应用。由于这些库已被调试和优化,因此JavaScript开发者将通常假定库本身不必被调试。此外,这些工具中的许多被压缩和缩小,从而使得底层代码不清楚并且变得对开发者不可读,这阻止JavaScript开发者进一步修改这些第三方库。JavaScript开发者代码中的错误会造成这些库内的错误,库内的这些错误在开发者不能或不想要修改库代码的情况下,会在调试代码时引起混淆。相反,开发者可能更有兴趣标识他或她自己的代码中的错误。
概述
提供本概述是为了以精简的形式介绍将在以下详细描述中进一步描述的一些概念。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。
调试器允许JavaScript开发者将第三方库视为黑盒,以使那些库中的错误不能向开发者标识。相反,JavaScript开发者能快速针对执行问题标识出他们自身的代码如何发生错误。
脚本主机标识输入对于调试是否重要,即代码是开发者的代码还是第三方代码。基于这些输入,脚本调试器自动排除或跳过(step over)不重要的输入。
为了提供高效的JavaScript调试体验,调试监视器提供一种新型的单步执行机制,该单步执行机制在此被称为“单步执行至(step to)文档边界”。使用其他常用的单步执行机制(例如,跳入(step into)、跳过(step out)、跳出(step out))会要么丢失重要输入,要么在远程调试期间太过啰嗦 (chatty)。
附图简述
为了进一步阐明本发明的各实施例的以上和其他优点和特征,将参考附图来呈现本发明的各实施例的更具体的描述。可以理解,这些附图只描绘本发明的典型实施例,因此将不被认为是对其范围的限制。本发明将通过使用附图用附加特征和细节来描述和解释,附图中:
图1解说根据一示例实施例的用于调试器工具或集成开发环境应用的用户界面。
图2解说用于选择用仅我的代码(just-my-code)特征进行调试时的开发者偏好的用户界面。
图3是根据一个实施例的用于评估如何处理调试器中的中断触发异常的过程的流程图。
图4是示出根据一个实施例的用于处理调试器的单步执行行为的过程的流程图。
图5示出加注释的已编译文档,该已编译文档具有指示哪些部分是开发者代码及哪些部分是库代码的注释。
图6示出其中源图被用于标识已编译文档内的文档边界的一实施例。
图7示出用于使用仅我的代码特征进行JavaScript调试的合适的计算和联网环境的示例。
详细描述
图1示出根据一示例实施例的用于调试器工具或集成开发环境(IDE) 应用的用户界面100。用户界面100允许开发者选择用于调试的代码并且标识代码由开发者创建(即,“我的代码”)还是来自外部来源。
代码窗101示出所选源文件的代码行,所述源文件为诸如JavaScript 文档。源文档窗102示出可用于调试的文件。开发者可以使用定点设备或使用菜单命令来选择源文件之一,所述定点设备为诸如鼠标或触摸垫。这些文件可以是开发者所写的代码,诸如代码窗101中示出的application.js 示例代码。开发者正在使用的、但非开发者创建的库、插件及其他外部文件也可以在窗102中示出。例如,开发者可以获得具有现有特征的代码的开源文档并且在新应用中使用该开源文档,而不是重新创建该现有特征。
开发者可以在源文档窗102中选择文件并且打开代码指定窗103,诸如通过用鼠标“右击”或使用菜单命令来在源文档窗102中选择文件并且打开代码指定窗103。开发者可以通过选择适当的选项来将所选代码指定为库文件或指定为开发者的自身代码(即,“我的代码”)。文件指定由调试器工具或IDE用来确定是到达该文件代码中的错误还是显示该错误。
用户界面100也向开发者提供其他配置选项,诸如为调试器工具设定观看(watch)104、断点105或事件的能力。开发者也可以查看调用栈107 以找到所选代码。
图2图示用于选择用仅我的代码(just-my-code)特征进行调试时的开发者偏好的用户界面200。开发者可以选择使用复选框201或其他特征来限制对被指定为“我的代码”的文件的调试。开发者可以在窗202中为调试器工具或IDE指定URI以供在标识库代码时使用。开发者可以使用My Code URI(我的代码URI)窗203来指定应被调试器视为“我的代码”的文件。
用户界面200允许用户特别地选择将被视为库文件(202)或将被标记为“我的代码”(203)的文档和文件。未被特别指定为为库文件或被指定为“我的代码”的文件可以通过通配符匹配或试探法如此标记。例如,特定的文件库library.js被特别指定为库文件,通过使用通配符*.min.js,每个已经是缩小脚本的JavaScript也被视为是库文件并且会选择使其退出“我的代码”。
在对其用户脚本代码的调试期间,开发者通常插入断点,在断点处,开发者可以检查测试环境以确定它是否如所期望的那样运作。在断点处,开发者可以检查变量,单步执行到不同的函数而无需执行在此之间的代码,编辑代码并且继续执行、回顾异常处理、等等。当调试器碰到调试程序应用中的断点时,调试程序冻结,直到开发者重启执行。然而,开发者可能不想要中止库或开源代码内的应用,因为该库或开源代码可能已经被调试,并且因此可能不是调试程序应用中的错误的原因。相反,开发者想要看到错误的大概原因,该原因可能落在开发者自身代码(“我的代码”)内。
使用Just My Code(仅我的代码)特征的开发者将自动跳过该库和开源代码,而不是要求开发者手动地导航至他或她自身的造成错误的代码。当调试器工具遇到通常会触发中止的异常时,调试器评估源文件是否构成“我的代码”。如果它不构成“我的代码”,则调试器会扫描执行栈以得到该执行栈上与“我的代码”URI相匹配的最近文档。一旦调试器找到“我的代码”文档,它就会在调试器中突出显示相关行(102)。如果没找到“我的代码”文档,则可以示出其中发生异常的文档,或任选地该异常可以完全被忽视。所有其他调试器特征都将以典型方式表现。调试器一般将不会示出库或开源文件的源代码;然而,开发者也可以通过例如导航调用栈来选择检查“非我的代码”文件(107)。
图3是根据一实施例的用于评估如何处理调试器中的中断触发异常的过程的流程图。该过程图解如何处理例如第一机会异常或用户未处理的异常。在步骤301中,在调试器中发生异常。在步骤302中,调试器确定异常发生所处的代码是否已被指定为“我的代码”。如果当前代码已被指定为“我的代码”,则在步骤303中,调试器显示脚本中表示错误发生所处的当前调用上下文的行。
如果当前代码在步骤302中尚未被指定为“我的代码”,则在步骤304 中调试器自动地在调用栈中向下导航一层。在步骤305中调试器评估调用栈是否已被用尽。如果调用栈尚未被用尽,则过程返回至步骤302,在步骤 302,调试器评估调用栈的该层是否已被指定为“我的代码”并且如上所述地继续。
如果在步骤305中调用栈被用尽,则该过程移至步骤306且调试器返回至调用栈的顶部。在步骤307,调试器还评估用户是否有兴趣回顾外部代码中的错误。用户可以在针对所有外部错误的配置设置中或者在逐错误的基础上指出这一点,诸如通过响应于弹出式用户界面查询。如果用户想要回顾外部错误,则该过程接着移至步骤303,在步骤303,调试器在脚本中表示调用栈顶部的上下文的行处显示异常辅助。否则,用户可以在步骤307 任选地忽视该异常。如果异常被忽视,则该过程移至步骤308且正常执行继续。
为了提供高效的JavaScript调试体验,调试器工具提供一种新型的单步执行机制:“单步执行到文档边界”。过程调试管理器(PDM)调解脚本引擎的调试器与用户界面之间的关系。PDM解译用户输入并将它们转换成脚本引擎的底层单步执行行为。
常用的用于调试的单步执行模式有“跳入/下一步”、“跳过”以及“跳出”,它们标识当前编程语言的范围与预期功能行为的关系。对于JavaScript,它是面向文档的编程语言,脚本可以来自许多不同的文件,但对这些文件没有编译。(诸)用户界面100、200可用于指示JavaScript文档中的代码是“我的代码”、库代码还是某一其他指定。为了为JavaScript有效地支持“我的代码”的调试,引入了新的单步执行行为。如果开发者想要“跳入”到函数调用中,且该函数调用存在于未被标记为“我的代码”的文档中,在先的调试器会要求开发者发出“跳出”命令。如果开发者正在进行远程调试,这会在网络上变得非常“啰唆”并且可花费很长时间来执行。
通过使用“单步执行到文档边界”命令,PDM告知脚本引擎继续运行,直到它离开当前文档。该特征可由调试器自动触发,以使它对于开发者透明。该功能也可存在于另一个方向;如果用户选择“跳出”函数调用,调用函数可能还不是“我的代码”,则此时用户应当到达调用栈中在当前正执行的函数下面的第一个“我的代码”文档指令。如果此时不存在“我的代码”文档,执行应当正常继续。这有隐藏开发者未曾创建并且在调试期间不在意的代码的效果。
本发明的各实施例在调试入口和出口事件时标注所有函数体,以指示文档边界,这告知调试器脚本何时将转变文档。
图4是图示根据一实施例的用于处理调试器的单步执行行为的过程的流程图。该过程可以被添加至现有调试器以支持Step to Document Boundary (单步执行到文档边界)功能。在步骤401中,开发者在用户界面层做手势以跳入或跳出(即,任何单步执行动作)。在步骤402中,PDM指示脚本引擎执行相应的动作。在步骤403中,调试器评估开发者已“跳入”的目标代码是否是下一代码语句中的“我的代码”。如果目标代码是“我的代码”,则在步骤404中,用户界面在下一暂停指示之处示出调试事件和该代码。
如果目标代码不是“我的代码”(例如,如果脚本引擎跳入到库代码),则在步骤405中,PDM指示脚本引擎跳出到下一文档边界――即,“单步执行到文档边界”。在步骤405中,脚本引擎在运行模式,直到它检测到文档边界事件。在步骤406中,该过程确定脚本执行是否受调试器支配。如果脚本执行未受支配,则在步骤407中,脚本继续正常执行。如果脚本执行受支配,则该过程返回至步骤403,且如上所述针对下一文档继续。
因此,对于每个调试事件,调试器将确定是要在它到达“我的代码”时暂停,还是在它要到达尚未被标记为“我的代码”的库代码或其他代码时单步执行通过各文档并继续正常执行。
在其他实施例中,文档层可能不是有用的粒度。例如,开发者可以在部署应用之前,将他们的全部JavaScript文件编译至单个文件中。此时,文档层并不是足以在“我的代码”和库代码之间区分的足够精细的粒度层。更具体而言,如果应用被编译至单个文档中,则该文档仅可完全被标记为“我的代码”或“非我的代码”。
为补偿该情形,开发者可以向源文档添加标注或代码层注释以指示文档边界发生于何处。这会允许开发者标注代码的哪些部分为“我的代码”且哪些部分为“非我的代码”。
图5示出已标注已编译文档,该文档具有指示哪些部分是“我的代码”及哪些部分是“非我的代码”的注释。例如,源文档501-504可由开发者编译至一个文档505中。文档501和504是开发者生成的脚本,而文档502 和503是库代码、开源文档或开发者不想要调试的其他脚本。注释被添加至已编译文档以指示“我的代码”在何处开始506以及库代码在何处开始 507。附加的注释508可以指示每一片段在何处结束。
当调试已编译文件505时,调试器查找注释506-508以标识文档边界。例如,当库代码中发生错误时,调试器查找关于何时实现单步执行至文档边界功能的结束库代码注释508。
图6示出其中源图被用于标识已编译文档内的文档边界和内容的另一实施例。源图提供了将组合且缩小的文件605映射回未构建状态601-604 的方式。此外,源图提供了将组合的文件映射回到编译成JavaScript的其他语言的方式,所述其他语言为诸如TypeScript、CoffeeScript或Dart。源图606在JavaScript被构建用于生产时生成。原始的JavaScript文件601-604 被缩小并组合至生产文件605中。源图606保持关于原始文件601-604的信息。当开发者查询JavaScript 605中的特定行和列号时,调试器可以在源图606中进行查找以确定原始位置。调试器工具可以自动地解析源图606并使其看上去好像它正在运行未缩小的和未组合的文件601-604。源图606信息可用于为单步执行到文档边界功能确定文档边界。
图7解说了其上可以实现图1-6的示例的适当的计算和联网环境700 的示例。计算系统环境700只是合适的计算环境的一个示例,而非意在暗示对本发明的使用或功能性范围有任何限制。本发明可用众多其他通用或专用计算系统环境或配置来操作。适用于本发明的公知计算系统、环境、和/或配置的示例包括但不限于:个人计算机、服务器计算机、手持式或膝上型设备、平板设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、微型计算机、大型计算机、包括任何以上系统或设备的分布式计算环境等等。
本发明可在诸如程序模块等由计算机执行的计算机可执行指令的通用上下文中描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。本发明也可被实践在分布式计算环境中,分布式计算环境中任务是由通过通信网络链接的远程处理设备执行的。在分布式计算环境中,程序模块可以位于包括存储器存储设备在内的本地和/或远程计算机存储介质中。
参考图7,用于实现本发明的各个方面的示例性系统可以包括计算机 700形式的通用计算设备。组件可包括但不限于诸如处理单元701之类的各种硬件组件、诸如系统存储器之类的数据存储702、以及将包括数据存储 702在内的各种系统组件耦合到处理单元701的系统总线703。系统总线703 可以是若干类型的总线结构中的任一种,包括存储器总线或存储器控制器、外围总线和使用各种总线体系结构中的任一种的局部总线。作为示例而非限制,这样的体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强型ISA(EISA)总线、视频电子技术标准协会(VESA) 局部总线和外围部件互连(PCI)总线(也称为夹层(Mezzanine)总线)。
处理单元701可以运行开发者和调试工具,诸如IDE、JavaScript编辑器或浏览器,以用于实现本发明的在此处描述的各方面。
计算机700通常包括各种计算机可读介质704。计算机可读介质704 可以是能由计算机700访问的任何可用介质,并同时包含易失性和非易失性介质以及可移动、不可移动介质,但不包括传播信号。作为示例而非限制,计算机可读介质704可包括计算机存储介质和通信介质。计算机存储介质包括以存储诸如计算机可读的指令、数据结构、程序模块或其他数据之类的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不仅限于,RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁带盒、磁带、磁盘存储或其他磁存储设备,或可以用来存储所需信息并可以被计算机700访问的任何其他介质。通信介质通常以诸如载波或其他传输机制之类的已调制数据信号来体现计算机可读指令、数据结构、程序模块或其他数据,并且包括任何信息传送介质。术语“已调制数据信号”是指使得以在信号中编码信息的方式来设置或改变其一个或多个特性的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、RF、红外及其他无线介质之类的无线介质。上面各项中的任何项的组合也包括在计算机可读介质的范围内。计算机可读介质可被实现为计算机程序产品,诸如存储在计算机存储介质上的软件。
数据存储或系统存储器702包括诸如只读存储器(ROM)和/或随机存取存储器(RAM)之类的易失性和/或非易失性存储器形式的计算机存储介质。基本输入/输出系统(BIOS)包含有助于诸如启动时在计算机700中元件之间传递信息的基本例程,它通常被存储在ROM中。RAM通常包含处理单元701可立即访问和/或当前正在操作的数据和/或程序模块。作为示例而非限制性,数据存储702保存操作系统、应用程序、其他程序模块、和程序数据。
数据存储702还可以包括其它可移动/不可移动、易失性/非易失性计算机存储介质。仅作为示例,数据存储702可以是对不可移动、非易失性磁介质进行读写的硬盘驱动器,对可移动、非易失性磁盘进行读写的磁盘驱动器,以及对诸如CD ROM或其它光学介质等可移动、非易失性光盘进行读写的光盘驱动器。可在示例性操作环境中使用的其它可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于,磁带盒、闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等。上文所描述的并且在图7 中所显示的驱动器以及它们的关联的计算机存储介质,为计算机700提供对计算机可读取的指令、数据结构、程序模块及其他数据的存储。
数据存储702和计算机可读介质704可以保持用于开发和调试 JavaScript应用(诸如IDE、JavaScript编辑器或浏览器)的软件应用。此外,数据存储702和计算机可读介质704可以保持JavaScript文件,诸如开发者生成的代码(即,“我的代码”)和库、开源、第三方及其他代码(即,“非我的代码”)。也可以存储用其他编程语言的文件,所述其他编程语言为诸如TypeScript、CoffeeScript或Dart。
用户可通过用户界面705或诸如平板、电子数字化仪、话筒、键盘和/ 或定点设备(通常指的是鼠标、跟踪球或触摸垫)等其它输入设备输入命令和信息。其他输入设备可以包括操纵杆、游戏垫、圆盘式卫星天线、扫描仪等等。另外,语音输入、使用手或手指的手势输入、或其它自然用户界面(NUI)也可与适当的输入设备(诸如话筒、相机、平板、触摸垫、手套、或其它传感器)一起使用。这些及其他输入设备常常通过耦合到系统总线703的用户输入接口705连接到处理单元701,但是,也可以通过其他接口和总线结构,如并行端口、游戏端口、通用串行总线(USB)端口来进行连接。用户界面705可以向开发者提供用于将JavaScript代码的各区段标识为“我的代码”或“非我的代码”的工具。
监视器706或其他类型的显示设备也通过诸如视频接口之类的接口连接至系统总线703。监视器706也可以与触摸屏面板等集成。注意到监视器和/或触摸屏面板可以在物理上耦合至其中包括计算设备700的外壳,诸如在平板型个人计算机中。此外,诸如计算设备700等计算机还可以包括其他外围输出设备,诸如扬声器和打印机,它们可以通过输出外围接口等连接。
计算机700可使用至一个或多个远程设备(诸如远程计算机)的逻辑连接707在网络化或云计算环境中操作。远程计算机可以是个人计算机、服务器、路由器、网络PC、对等设备或其它常见的网络节点,并且一般包括上面关于计算机700所述的许多或全部元件。图7中所描述的逻辑连接包括一个或多个局域网(LAN)和一个或多个广域网(WAN),但是,也可以包括其他网络。此类联网环境在办公室、企业范围的计算机网络、内联网和因特网中是常见的。
当在联网或云计算环境中使用时,计算机700可通过网络接口或适配器707连接至公共或私有网络。在一些实施例中,使用调制解调器或用于在网络上建立通信的其它装置。调制解调器可以是内置或外置的,它经由网络接口707或其它适当的机制连接至系统总线703。诸如包括接口和天线的无线联网组件可通过诸如接入点或对等计算机之类的合适的设备耦合到网络。在联网环境中,相关于计算机700所示的程序模块或其部分可被存储在远程存储器存储设备中。可以理解,所示的网络连接是示例性的,也可以使用在计算机之间建立通信链路的其他手段。
网络接口707也可用于向远程计算机或终端上运行的软件或代码提供存取,以使使用系统700的开发者可以对远程设备上运行的代码进行调试。
尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。相反,上述具体特征和动作是作为实现权利要求的示例形式公开的。

Claims (9)

1.一种计算机实现的方法,包括:
对一个或多个JavaScript脚本语言代码段执行调试操作,所述调试操作包括被配置成单步执行通过所述代码以标识所述代码中的用户生成的片段中的错误的单步执行操作,其中所述用户生成的片段与用户生成的源文件相关联且库代码与库代码源文件相关联;以及
确定错误是否由用户生成的代码段生成,以及
如果所述错误被确定为是由库代码生成的,则扫描执行栈以寻找最近用户生成的代码段,从而跳出到下一文档边界;
其中所述单步执行操作由调试器执行,所述单步执行操作由脚本引擎执行下一代码语句,以及如果所执行的语句是库代码,则指示所述脚本引擎单步执行到文档边界;
其中在全部JavaScript文件被编译至单个文档中的情况下,所述单个文档包括指示文档边界发生于何处的标注或代码层注释,从而允许通过所述标注或代码层注释来标识文档边界。
2.如权利要求1所述的计算机实现的方法,其特征在于,还包括:
响应于用户生成的代码段中的错误,在调试器用户界面上标识触发所述错误的所述用户生成的代码段的语句。
3.如权利要求1所述的计算机实现的方法,其特征在于,所述代码的一个或多个片段是依据要被调试的代码的源代码中的注释来标识的分开的文档。
4.如权利要求1所述的计算机实现的方法,其特征在于,所述代码的一个或多个片段是依据源图来标识的分开的文档,所述分开的文档是用一个或多个编程语言编写。
5.如权利要求3所述的计算机实现的方法,其特征在于,还包括:
在文档边界处,若执行受所述调试器支配则继续正常执行。
6.如权利要求3所述的计算机实现的方法,其特征在于,还包括:
在文档边界处,若执行不受所述调试器支配,则确定符合所述文档边界后面的语句是否是用户生成的代码;以及
如果所述语句是用户生成的代码,则在调试器用户界面上标识该语句。
7.如权利要求3所述的计算机实现的方法,其特征在于,还包括:
在文档边界处,若执行不受所述调试器支配,则确定符合所述文档边界后面的语句是否是库代码;以及
如果所述语句是库代码,则单步执行至下一文档边界。
8.一种计算机系统,所述计算机系统包括:
处理器;以及
耦合到所述处理器的存储器,所述存储器上存储有程序指令,所述程序指令在由所述处理器执行时使得所述计算机系统:
单步执行通过一个或多个JavaScript脚本语言代码段以标识所述代码中的错误;
确定所标识的错误是否由用户生成的代码段生成,其中所述用户生成的代码段与用户生成的源文件相关联,且库代码与库代码源文件相关联;
如果所述错误被确定为是由用户生成的代码段生成的,则在所述用户生成的代码段处暂停,以及
如果所述错误被确定为是由用户生成的代码段以外的代码生成的,则扫描执行栈以寻找最近用户生成的代码段,从而跳出到下一文档边界;
其中所述单步执行操作由调试器执行,所述单步执行操作由脚本引擎执行下一代码语句,以及如果所执行的语句是库代码,则指示所述脚本引擎单步执行到文档边界;
其中在全部JavaScript文件被编译至单个文档中的情况下,所述单个文档包括指示文档边界发生于何处的标注或代码层注释,从而允许通过所述标注或代码层注释来标识文档边界。
9.如权利要求8所述的计算机系统,其特征在于,所述存储器存储附加计算机可读指令,所述计算机可读指令在由所述处理器执行时使得所述系统:
在调试器用户界面上标识触发所述错误的用户生成的代码段的语句。
CN201480015943.XA 2013-03-15 2014-03-13 使用仅我的代码的JavaScript调试方法和系统 Active CN105164648B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/831,801 US10664384B2 (en) 2013-03-15 2013-03-15 Javascript debugging using just my code
US13/831,801 2013-03-15
PCT/US2014/025198 WO2014151201A1 (en) 2013-03-15 2014-03-13 Javascript debugging using just my code

Publications (2)

Publication Number Publication Date
CN105164648A CN105164648A (zh) 2015-12-16
CN105164648B true CN105164648B (zh) 2019-09-03

Family

ID=50628934

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480015943.XA Active CN105164648B (zh) 2013-03-15 2014-03-13 使用仅我的代码的JavaScript调试方法和系统

Country Status (6)

Country Link
US (1) US10664384B2 (zh)
EP (1) EP2972882B1 (zh)
JP (1) JP6543609B2 (zh)
KR (1) KR102184436B1 (zh)
CN (1) CN105164648B (zh)
WO (1) WO2014151201A1 (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8997049B1 (en) * 2010-05-21 2015-03-31 Cadence Design Systems, Inc. Method and system for debugging of compiled code using an interpreter
US9977661B2 (en) * 2013-06-28 2018-05-22 Tencent Technology (Shenzhen) Company Limited Method and system for generating a user interface
US10003499B2 (en) * 2015-09-09 2018-06-19 International Business Machines Corporation Client-configured server class tracing to a configurable threshold
US10289536B2 (en) * 2016-08-31 2019-05-14 Synopsys, Inc. Distinguishing public and private code in testing environments
US10162731B2 (en) 2017-01-23 2018-12-25 International Business Machines Corporation Conditional breakpoint on call stack during debugging at runtime
US20180210713A1 (en) * 2017-01-24 2018-07-26 Salesforce.Com, Inc. Methods and systems for using cross repositories
US11392482B2 (en) 2019-01-03 2022-07-19 Microsoft Technology Licensing, Llc Data breakpoints on certain kinds of functions
US11983094B2 (en) 2019-12-05 2024-05-14 Microsoft Technology Licensing, Llc Software diagnostic context selection and use
US11748460B2 (en) * 2020-04-27 2023-09-05 Imperva, Inc. Procedural code generation for challenge code
CN113031932B (zh) * 2021-03-11 2023-10-20 腾讯科技(深圳)有限公司 项目开发方法、装置、电子设备及存储介质
CN114625660A (zh) * 2022-03-22 2022-06-14 阿里巴巴(中国)有限公司 调试方法及装置

Family Cites Families (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5819093A (en) * 1995-03-03 1998-10-06 Sun Microsystems, Inc. System and method for a distributed debugger for debugging distributed application programs
US6065035A (en) * 1996-06-13 2000-05-16 Microsoft Corporation Method and system for procedure boundary detection
US6052780A (en) * 1996-09-12 2000-04-18 Open Security Solutions, Llc Computer system and process for accessing an encrypted and self-decrypting digital information product while restricting access to decrypted digital information
CA2205096C (en) * 1997-05-09 2001-10-09 Ibm Canada Limited-Ibm Canada Limitee A system for remote debugging of client/server applications
US6061518A (en) 1997-11-25 2000-05-09 International Business Machines Corporation Data processing system and method for debugging a JavaScript program
US7353163B2 (en) * 1999-04-27 2008-04-01 Transitive Limited Exception handling method and apparatus for use in program code conversion
US7165243B1 (en) * 1999-06-25 2007-01-16 Sun Microsystems, Inc. Multi-lingual tag extension mechanism
US6539464B1 (en) * 2000-04-08 2003-03-25 Radoslav Nenkov Getov Memory allocator for multithread environment
JP4295912B2 (ja) 2000-12-25 2009-07-15 株式会社東芝 デバッグシステム
US7055140B2 (en) 2002-05-01 2006-05-30 Seiko Epson Corporation Software breakpoints implementation via specially named function
JP2004013190A (ja) * 2002-06-03 2004-01-15 Matsushita Electric Ind Co Ltd ソフトウエア開発環境、シミュレータ及び記録媒体
US7213123B2 (en) 2002-10-24 2007-05-01 International Business Machines Corporation Method and apparatus for mapping debugging information when debugging integrated executables in a heterogeneous architecture
US7650592B2 (en) * 2003-03-01 2010-01-19 Bea Systems, Inc. Systems and methods for multi-view debugging environment
US7401323B2 (en) * 2003-04-21 2008-07-15 Microsoft Corporation Just-My-Code debugging
US7685570B2 (en) * 2003-06-09 2010-03-23 Microsoft Corporation Error/exception helper
US7730460B1 (en) 2004-06-18 2010-06-01 Apple Inc. Code execution visualization using software fingerprinting
US8302020B2 (en) 2004-06-25 2012-10-30 Apple Inc. Widget authoring and editing environment
US7984220B2 (en) * 2004-09-02 2011-07-19 International Business Machines Corporation Exception tracking
US7882492B2 (en) * 2004-09-17 2011-02-01 Oracle America, Inc. Intelligent computer program debugger, and system and method for implementing the same
US7698692B1 (en) * 2005-11-10 2010-04-13 Sun Microsystems, Inc. Preparing a binary file for future instrumentation
US8087002B2 (en) 2006-04-04 2011-12-27 Tibco Software Inc. Method and system for providing a visual debugger for an interpreted statistical language
US20070250810A1 (en) * 2006-04-20 2007-10-25 Tittizer Abigail A Systems and methods for managing data associated with computer code
US8225286B2 (en) 2006-05-23 2012-07-17 Microsoft Corporation Debugging interpreted input
US8429613B2 (en) 2006-10-31 2013-04-23 Microsoft Corporation Stepping and application state viewing between points
US8196107B2 (en) 2008-06-19 2012-06-05 Microsoft Corporation Simulating stepping through interpreted code
US9632909B2 (en) 2008-12-16 2017-04-25 Microsoft Technology Licensing, Llc Transforming user script code for debugging
US8595702B2 (en) 2009-03-13 2013-11-26 Microsoft Corporation Simultaneously displaying multiple call stacks in an interactive debugger
CN102053906A (zh) 2009-10-30 2011-05-11 国际商业机器公司 用于收集程序运行时信息的系统和方法
US8640104B2 (en) 2009-12-08 2014-01-28 International Business Machines Corporation Computer method and apparatus for debugging in a dynamic computer language
US9262137B2 (en) 2010-05-27 2016-02-16 Salesforce.Com, Inc. Adding directives for versions of javascript files directly into source code in a multi-tenant database environment
US8910148B2 (en) * 2010-07-29 2014-12-09 International Business Machines Corporation Packaging an application with plurality of libraries
US8397218B2 (en) 2010-10-19 2013-03-12 International Business Machines Corporation Step granularity selection in a software debugger
US8495590B2 (en) * 2011-06-10 2013-07-23 International Business Machines Corporation User-specific software debugging
US20130055205A1 (en) * 2011-08-23 2013-02-28 Semmle Limited Filtering source code analysis results
US9135147B2 (en) 2012-04-26 2015-09-15 International Business Machines Corporation Automated testing of applications with scripting code
US8914776B2 (en) 2012-05-17 2014-12-16 Microsoft Corporation Assisting development tools through inserted code statements
US9436452B2 (en) * 2012-11-12 2016-09-06 Keysight Technologies, Inc. Method for enforcing language subsets
US20140201709A1 (en) 2013-01-15 2014-07-17 Martin Carl Euerle JavaScript™ Deployment Build Tool for software code that uses an object literal to define meta data and system code.
US9052980B2 (en) * 2013-02-20 2015-06-09 Bmc Software, Inc. Exception based quality assessment
US20140013306A1 (en) 2013-04-20 2014-01-09 Concurix Corporation Computer Load Generator Marketplace
US9424163B2 (en) 2014-01-15 2016-08-23 Microsoft Technology Licensing, Llc Exception and debugging behaviors for JavaScript debugging using just my code
US9239774B2 (en) 2014-01-15 2016-01-19 Microsoft Technology Licensing, Llc Classification of JavaScript code for debugging using just my code
CN104375940A (zh) 2014-11-28 2015-02-25 浪潮电子信息产业股份有限公司 一种对javaScript文件的调试方法

Also Published As

Publication number Publication date
US10664384B2 (en) 2020-05-26
EP2972882B1 (en) 2019-12-04
KR20150132161A (ko) 2015-11-25
US20140282417A1 (en) 2014-09-18
JP6543609B2 (ja) 2019-07-10
EP2972882A1 (en) 2016-01-20
KR102184436B1 (ko) 2020-11-30
CN105164648A (zh) 2015-12-16
WO2014151201A1 (en) 2014-09-25
JP2016511497A (ja) 2016-04-14

Similar Documents

Publication Publication Date Title
CN105164648B (zh) 使用仅我的代码的JavaScript调试方法和系统
US11934301B2 (en) System and method for automated software testing
WO2021098148A1 (zh) 一种软件编译方法、装置及电子设备和存储介质
US20220108107A1 (en) Method and system for extraction of table data from documents for robotic process automation
US8694967B2 (en) User interface inventory
US8862940B2 (en) Integrated fuzzing
US20200034281A1 (en) System and method for automated intelligent mobile application testing
US10409564B2 (en) Recording and playback of development sessions
US9239774B2 (en) Classification of JavaScript code for debugging using just my code
Miles Start here! learn the kinect api
US9037913B2 (en) Dynamic event generation for user interface control
US9223647B2 (en) Automatic classification adjustment of recorded actions for automation script
CN105745626A (zh) 基于进程快照的诊断生产应用
CN107220172A (zh) 通过模型驱动技术进行自动用户界面(ui)测试的方法和系统
US20220032457A1 (en) Robotic Process Automation with Resilient Playback of Recordings
CN105144117A (zh) 对调用堆栈和上下文数据的自动相关和分析
EP3195115A1 (en) Code development tool with multi-context intelligent assistance
KR20080043345A (ko) 선언적으로 정의되는 컨트롤 액션
WO2021061185A1 (en) Test automation of application
Sayagh et al. Multi-layer software configuration: Empirical study on wordpress
Zhao et al. Avgust: Automating usage-based test generation from videos of app executions
US8201151B2 (en) Method and system for providing post-mortem service level debugging
WO2022159528A2 (en) Robotic process automation with resilient playback of recordings
CN116737234A (zh) 代码迁移方法、系统、计算设备及存储介质
Kohvakka Automation tools in software development and production

Legal Events

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