[发明专利]用于调试本机代码的方法和系统有效
申请号: | 201480043987.3 | 申请日: | 2014-06-03 |
公开(公告)号: | CN105683924B | 公开(公告)日: | 2019-03-19 |
发明(设计)人: | M·科尔陶切夫;N·坎德沃尔;A·甘地 | 申请(专利权)人: | 微软技术许可有限责任公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 上海专利商标事务所有限公司 31100 | 代理人: | 胡利鸣 |
地址: | 美国华*** | 国省代码: | 美国;US |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 通过 模式 执行 转变为 解释 调试 代码 | ||
双模式调试器可调试本机代码或经解释的代码。在各模式之间进行转变可通过经定义的跳出条件来触发。程序可通过附加调试器并在调试器下将该程序编译为本机代码来被调试。在该程序中经定义的点处,调试可从本机模式转变到经解释的模式。对本机代码的调试可停止,当前状态可被捕捉,并且解释器可被实例化。解释器栈可被创建并可用所捕捉的当前状态来填充。涉及执行控制的调试操作:暂停执行,继续执行,步入、步出或步跃通过代码片段等,可在经解释的模式中发生,该经解释的模式通常更容易实现。涉及对变量的检查和修改的调试操作可在本机模式中发生。
技术领域
本发明涉及计算机技术,更具体地,涉及用于调试本机代码的方法和系统。
背景技术
编译器能通过将源代码编译成可被特定处理器执行的代码来产生可执行代码。这种类型的因处理器而异的代码被称为“本机代码”,即能被特定类型的处理器执行但不能被任意类型的处理器执行的机器指令。另一类型的编译器可接收源代码并产生不是因处理器而异的中间代码或虚拟机字节代码。中间代码通常由中间语言编译器(例如,即时(JIT)编译器)接收,并就在程序执行之前被编译为本机代码。中间代码不是因平台而异的。
解释器读取源代码或中间代码并逐语句地来执行代码而无需将代码转换成本机代码。典型地,对代码进行解释慢于执行本机代码。对代码进行解释通常慢于将中间代码JIT编译为本机代码并执行本机代码。
对经解释的代码的调试器的实现通常没有对本机代码的调试器的实现那么复杂。然而,对于本机代码的调试器的响应时间通常快于对经解释的代码的调试器的响应时间。调试器通常通过以下向用户提供控制程序的执行的能力:步入或步出函数、步跃函数、暂停和恢复执行、检查变量的当前值或栈位置等。
发明内容
如本文中描述的双模式调试器可调试表示程序的本机代码。响应于在被调试的程序中检测到定义的调试跳出(bailout)条件,调试器可停止调试表示程序的本机代码并且可转变为调试表示程序的对应的经解释的代码。在本机模式中,调试器可调试表示程序的本机代码。提供对程序变量的当前值和/或栈信息的检查和/或修改的调试操作可在本机模式中执行。在本机模式调试中,每当变量被保存到寄存器内(例如,当变量在程序中被定义时),该值也可被保存到函数的栈位置。被调试的函数的变量可被存储在栈中的为被调试的程序保留的特定本地化区域中。栈的该同一区域可在编译为本机代码期间被使用以供溢出(即,当存在比计算设备所具有的寄存器更多的活动变量时,变量可从寄存器“溢出”到存储器)。栈位置可被调试器使用来获得和改变变量的值。
响应于检测到跳出条件,对表示程序的本机代码的调试可停止。解释器可接收表示程序的经解释的代码,该接收到的经解释的代码对应于被调试的本机代码,并且解释器可恢复对该程序的、在经解释的模式中运行的经解释的代码的调试。例如,控制被调试的程序的执行的调试操作可在经解释的模式中运行。执行控制操作可通过异步中断、步进、中断点和/或在异常操作上的中断来实现。解释器模式调试可被用于调试最顶层的函数(其变量值位于栈的最顶层帧中的函数),同时使用本机模式来调试程序的其它部分。
调试器可在经定义的跳出点从在本机模式中调试转变为在经解释的模式中调试。与调试器相关联的跳出引擎可接收跳出记录,该跳出记录包括在调试器下执行的本机代码的当前状态。跳出引擎可实例化解释器的实例,创建解释器的该实例的解释器栈帧并可用来自跳出记录的值来填充为解释器的该实例创建的解释器栈帧。对程序的调试可在该程序的类似的对应的经解释的代码上恢复。调试跳出点是程序中的在其处本机模式调试可转变为经解释的模式调试的位置,如果某些跳出条件被满足的话。可定义针对程序的调试跳出点,诸如在函数的开始处、循环的回边(back edge)处、当函数返回时、当对助手函数或库的调用返回时或当遇到调试器语句时。当在调试会话中遇到调试跳出点时,运行时调试标志的状态以及栈帧的栈深度校验可被用于确定是否满足调试跳出条件。如果满足调试跳出条件,则与在调试器下执行的本机代码相对应的代码可被发送到解释器并且调试可在对应的经解释的代码上继续。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于微软技术许可有限责任公司,未经微软技术许可有限责任公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201480043987.3/2.html,转载请声明来源钻瓜专利网。