[发明专利]用于异步程序的调用栈有效
| 申请号: | 201480009167.2 | 申请日: | 2014-02-10 |
| 公开(公告)号: | CN105074672B | 公开(公告)日: | 2017-11-24 |
| 发明(设计)人: | L·维斯奇克;E·费夫森 | 申请(专利权)人: | 微软技术许可有限责任公司 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F9/44 |
| 代理公司: | 上海专利商标事务所有限公司31100 | 代理人: | 杨丽 |
| 地址: | 美国华*** | 国省代码: | 暂无信息 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 用于 异步 程序 调用 | ||
背景
在调试程序或者在分析崩溃转储时,开发者想要知道程序在其执行中处于何处。这一问题对于使用传统调用栈的传统同步程序而言是易于理解和解决的。然而,许多程序员正转向异步(async)编程。在异步编程中,异步调用栈不会准确地提供关于程序在何处以及程序是如何抵达该处的信息。
调试工具或报错工具可以标识方法调用中的哪个序列导致了代码执行中的给定位置(“根本原因”)以及那些方法调用在何处。在传统的同步程序中,存在用于获得同步调用栈的各种方法,这提供了一种告知同步代码将在何处返回以及按照什么顺序返回的方式。传统的同步调用栈是有用的,因为“代码将在何处返回”通常接近“代码在何处被调用”并且因为返回顺序通常与调用顺序相反。相应地,传统的同步调用栈对于用户(诸如开发者)在分析代码时想要知道什么而言是良好的代理。然而,在异步程序中,传统同步调用栈的使用对于用户想要知道什么而言不再是良好的代理,因为它们通常不会显示程序内的根本原因,诸如启动一长期运行的任务的方法。
发明内容
提供本概述是为了以精简的形式介绍将在以下详细描述中进一步描述的一些概念。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。
本发明的各实施例提供了用于获得各种语言和库上的异步调用栈的技术。异步调用栈可以作为对传统同步调用栈的替换方案被显示给开发者。异步调用栈被用来标识程序在其执行中处于何处。用于获得异步调用栈的这些技术适用于基于承诺(promise)的异步库,诸如WinJS.Promise、PPLTask(PPL任务)和.NET Task(.NET任务)。异步调用栈技术还将用于跨语言的异步调用栈。
对于具有“await(等待)”运算符(或callcc、或迭代器方法、或用于具体化代码块内的当前位置的其他技术)的语言,则可以获得更高的保真度。
在开发者机器上,调试工具可以连接到被调试程序并且分析异步调用栈。调试工具还可连接到崩溃转储并且分析异步调用栈。在用户机器上,报错工具执行异步调用栈分析以便用附加信息来准备崩溃转储。在每一框架上用以下信息来创建“异步框架”列表:作为这一异步框架的逻辑父的异步框架列表以及该异步框架的程序计数器(C++或.Net中)或者方法名和行号(Javascript中)。另外,在作业创建时收集的可任选的栈轨迹和/或可任选的局部变量闭包(诸如(.NET)指向堆中的状态机对象的指针或者(C++/JS/.Net)指向委托闭包的指针或者(.NET/C++)指向EBP/ESP的指针)可被包括在异步框架中。
在一个实施例中,异步调用栈使用以下步骤来生成。
首先,标识尚未完成的所有线程和所有待决任务。可任选地,还标识在要被调度的窗口队列中的所有待决延续委托和/或在因语言而异的队列中的所有待决委托。
第二,标识给定线程是否被延续回调方法调用,并且如果是,则找到对应的任务/承诺。
第三,给定一任务/承诺,标识逻辑父任务/承诺。可任选地,给定.NET中的“委托”(C++中的“λ(lambda)”或“闭包”、Javascript中的“函数对象”等),标识逻辑父任务/承诺。给定一任务/承诺,标识被同步地阻塞在其上的线程。
第四,给定一任务/承诺,标识对应的行号。可任选地,还标识局部变量闭包,和/或还在任务/承诺创建时检索同步调用栈。
附图简述
为了进一步阐明本发明的各实施例的以上和其他优点和特征,将参考附图来呈现本发明的各实施例的更具体的描述。可以理解,这些附图只描绘本发明的典型实施例,因此将不被认为是对其范围的限制。本发明将通过使用附图用附加特征和细节来描述和解释,附图中:
图1解说了以一异步方法开始并且包括各种异步方法的一程序。
图2解说了当在C中发生异常时可用的调用栈。
图3解说了在一个实施例中开发者想要看到的调用栈信息的类型。
图4解说了当在C中抛出异常时的堆和调用栈。
图5示出了在代码的一个实施例中函数已经返回之后的堆。
图6解说了一个实施例的步骤。
图7是在击中断点时可以向用户显示的异步调用栈。
图8是用于为异步程序生成异步调用栈的方法或过程的流程图。
图9解说了根据一个实施例的合适的计算和联网环境的一示例。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于微软技术许可有限责任公司,未经微软技术许可有限责任公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201480009167.2/2.html,转载请声明来源钻瓜专利网。





