状态转变的诊断的制作方法_4

文档序号:9553227阅读:来源:国知局
工作。线程 池工作经由CoreDispatcher. RunAsync来调度要在用户界面(UI)线程上完成的工作, CoreDispatcher. RunAsync因为继承自微软公司Windows演不框架或Windows商店应用中 的DependencyObject的Dispatcher属性而是可用的。
[0080] 代码评论中指示的第二点和第三点将在分开的线程上。具体来说,点2将在线程 池线程上,而点3将在UI线程上。第一点的线程依赖于被略去的代码,但出于示例的目的, 该代码在UI线程上。作业与外部因果关系工作项有关,因此点3的因果关系链连接回到点 2,进而回头指向点1,尽管点1和3与点2在不同的线程上。
[0081] 多个线程在确定用于调试的相关信息方面呈现额外的困难。单线程化执行环境 JavaScript中的突出问题是缺少相关栈信息。在与多线程化执行环境有关的调试场景(诸 如传统托管桌面应用)中,相关栈信息可能是可用但难以定位的。在一示例中,托管应用 的主UI线程通过创建若干线程、将它们与回调和同步对象相关联来调度三个异步操作。执 行冻结。在检查之际,执行在本示例中工作被调度在其上的UI线程上在诸如WaitHandle. WaitAll (events)的方法上被停止。传递至这一方法的一个或多个事件尚未用信号通知。 可能在调试程序中存在可查看的数十个线程,但它们中的哪一些参与相关的逻辑执行序列 而哪一些没有参与可能是不清楚的。通过使用由这一应用生成的信息,IDE可以过滤掉与 关联于所选线程的执行图不相关的任何线程。此外,IDE可以维护关于关联于已经完成的 当前'等待'的线程操作的历史信息。
[0082] 例如,以下的代码发起三个线程,这三个线程一旦启动将会调用三个不同的回调。 出于说明的目的,回调已经被标记以描述针对每一个回调而假定的行为;一个回调挂起,一 个回调立即完成,而一个回调抛出异常(意味着线程将死)。如果以在WaitHandle. WaitAll 上设置的中断点来运行这一代码,则调试程序将示出所有可能的线程。对于这一执行链,两 个相关线程将保留在存储器中:调用WaitAll的线程以及已经挂起的线程。具有完全不同 结果的另外两个线程离开,即已经成功的线程和提出未经处理的异常的线程。所公开的方 法允许用户将整个操作作为单个逻辑执行单元来跟踪。
[0083] 在以下示例中,发起线程发起以下并且正在这些操作的联合上进行等待。启动 的HangCallback线程仍然在进程中,启动的CompleteWork线程已经成功终止,而启动的 ThrowException线程出错终止。
[0084]
[0085] 以下示例示出了 C#5. 0中介绍的异步编码模式的简单使用,它利用了 'async(异 步)'和'await (等待)'关键词来协助异步代码的协调和执行。该代码示例示出了上述信 息缺口(例如丢失的相关调用栈细节)。

[0088] 在以下示例中,定义可以适用于任意代码位置的自定义属性。该自定义属性使得 这一方法以在运行时产生一组恰适的状态转变的方式来有效地被包装。隐含的代码可以在 编译时被生成并且被发出至汇编或者相关代码可以在运行时被注入。附加代码可以根据条 件来发出。例如,广播可能仅针对调试构建或者在执行作为调试会话的一部分被发起的情 况下发生。在其他示例中,除了自定义属性,还采用其他合适形式的表达,诸如新的语言关 键词,或者现有语言关键词的编译行为的改变。一些诊断状态可能被自动提供(例如,贯穿 整体的标识符、可能活跃的父标识符、线程标识符、调用栈、或与执行点相关联的时间戳)。 还可提供与具体的元数据应用相关联的其他任意数据。这一示例有效地描述了用于应用也 可经由对API的直接调用而变得显式的模式的通用注释方案。
[0089] [BroadcastTransition(customData = 〃xxx〃)]
[0090] void CompleteAsynchronousOperation()
[0091] {
[0092] II...
[0093] }
[0094] 以下示例示出了在元数据/关键词办法被用来调用功能的情况下的示例代码模 式以及示例代码运行时或编辑器发出/执行。其他合适的状态转变也是可能的。
[0095]
[0096] 其他问题可能来自连接到一个或多个后端服务的应用。当审阅从客户端应用和服 务器两者收集的遥测日志时,能够理解操作的端到端因果关系以及客户端步骤如何与服务 器步骤相关。以下的代码示例是围绕使用XHR为基础的,并且被用来提供信息以便管理执 行图。API阐述了提供标识符以准许在操作中将节点链接在一起。在这一示例中,API名称 表示操作标识符,例如'creation (创建)'、'completion (完成)'。当被调用时,API能够 访问也可被记录的栈位置信息。该示例描述中提及这些API的声明出于说明的目的变得显 式,而在其他示例中,这些声明可能被推送至运行时/框架API中。尽管在该示例中API是 直接暴露的,但还构想了其他示例。

[0099] 可以用多种方式来输出诊断信息。一个示例涉及从全部都是异步操作的从文件夹 获得文件、打开文件、以及从流中进行读取的过程中输出诊断信息。该逻辑包括下载具有 WinRT SyndicationClient类的RSS馈源,读取并写入具有WinRT Storage类的本地文件, 以及经由XHR来访问应用的后端(未示出)。以下表格示出了开发者在中断点处可能咨询 的示例诊断输出。
[0100] 名称 语言 匿名函数[default.js]行30 脚本 通知成功[函数代码]行76 脚本 执行通知[函数代码]行134 脚本 执行完成[函数代码]行32 脚本 已完成[函数代码]行.289 脚本 I InputStream. Read Async 木机 匿名函数[default.js]行20 脚本 通知成功[函数代码]行76 脚本 执行通知[函数代码]行134 脚本 执行完成[函数代码]行32 脚本
[0101] 已完成[函数代码]彳抒2B9 脚本 StorageFiie.OpenAsync 木机 匿名函数[default·』s]行脚本 通知成功[函数代码]行76 脚本 执行通知[函数代码]行134 脚本 执行完成[函数代码]行32 脚本 已完成[函数代码]行289 脚本 StorageFolder.GetFileA.sync 本机 进程_文件[default,js]行Π 脚本 文件进程按钮事件 本机
[0102] 前五个帧在栈上。其余的链帧在它们被执行时被记入日志,以使得可以显示完整 的链。
[0103] 尽管此处说明并描述了具体实施例,但本领域技术人员可以理解,可用各种替换 和/或等价实现来替换所示出并描述的具体实施例而不背离本发明的范围。本申请旨在覆 盖在此讨论的具体实施例的任何改变或变型。因此,本发明旨在仅受权利要求及其等价物 的限制。
【主权项】
1. 一种用于诊断计算机可读指令的方法,所述方法包括: 在所述计算机可读指令的运行时期间将逻辑操作内的执行单元的状态转变记入日 志; 将所述逻辑操作的诊断信息与所述状态转变相关联;以及 提供所述状态转变和相关联的诊断信息以供在所述计算机可读指令中的所选点处进 行检索。2. 如权利要求1所述的方法,其特征在于,所述记入日志包括记入到数据结构中。3. 如权利要求1所述的方法,其特征在于,所述记入日志包括通过发布事件或调用注 册以供通知的回调来广播所述状态转变。4. 如权利要求3所述的方法,其特征在于,广播所述状态转变响应于接收到指示所述 信息应当被广播的与代码位置相关联的元数据来进行。5. 如权利要求1所述的方法,其特征在于,所述记入日志包括用状态转变信息来注释 运行时对象。6. 如权利要求1所述的方法,其特征在于,包括将状态转变信息添加到被构建的对象 或被实例化的代码。7. 如权利要求1所述的方法,其特征在于,所述状态转变包括发起执行单元。8. 如权利要求7所述的方法,其特征在于,所述诊断信息包括用于在所述逻辑操作的 生存期期间标识所述逻辑操作的标识符。9. 如权利要求1所述的方法,其特征在于,所述诊断信息包括与所述状态转变相对应 的调用栈。10. 如权利要求9所述的方法,其特征在于,所述调用栈的数据被包括在崩溃转储中。11. 如权利要求1所述的方法,其特征在于,所述逻辑操作是异步操作。12. 如权利要求11所述的方法,其特征在于,所述执行单元是同步工作项。13. 如权利要求1所述的方法,其特征在于,包括从存储器检索与所述状态转变相关联 的诊断信息。14. 如权利要求1所述的方法,其特征在于,包括在执行所述计算机可读指令的同时检 索与所述状态转变相关联的诊断信息。15. 如权利要求1所述的方法,其特征在于,包括响应于所述计算机可读指令的执行由 于异常或中断点而被停止来检索与所述状态转变相关联的诊断信息。
【专利摘要】公开了一种用于诊断与控制转移有关的计算机可读指令的方法。在计算机可读指令的运行时期间将逻辑操作内的执行单元的状态转变记入日志。逻辑操作的诊断信息与状态转变相关联。提供状态转变和相关联的诊断信息以供在计算机可读指令中的所选点处进行检索。
【IPC分类】G06F11/36, G06F11/07
【公开号】CN105308578
【申请号】CN201480026890
【发明人】M·C·范宁, F·G·T·I·安德鲁, D·J·莫斯利, S·卡尔维特, A·R·斯特兰德, T·莱斯, J·T·费希尔, R·A·帕韦泽, T·C·沃尔, G·米斯凯利, H·L·皮尔森三世, C·艾德蒙兹, E·H·奥米亚, K·V·纳迪希, F·J·翁, Z·高, A·斯塔修克
【申请人】微软技术许可有限责任公司
【公开日】2016年2月3日
【申请日】2014年3月10日
【公告号】EP2972881A1, US20140282427, WO2014159147A1
当前第4页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1