.Net多线程编程—使用Visual Studio 2012进行调试
1 相关概念
1)栈帧
C语言中,每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地址和局部变量。
栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。
2)单步执行与单步函数执行
单步执行又被称为逐语句执行,单步函数执行又被称为逐过程执行。单步函数执行不会进入函数体。
3)主线程不会显示在Parallel Tasks 窗口中,因为主线程不是任务。但它会显示在显示线程的窗口中。
2 Parallel Tasks 窗口
打开窗口:
断点调试情况下,按F5或点击“启动调试”,如下图所示
在上步基础上,点击“调试”——>“窗口”:
在上步基础上,点击“任务”:
在上步基础上,右键单击任务窗口,调出菜单,可以调出为每一个任务分配的线程:
说明:
1)下图显示没有任务可显示,这是因为,将断点打到图示位置,还没有执行任务。
2)在Parallel Tasks 窗口中,双击一个任务,可显示所选任务将要运行的下一条语句。
3)任务还没有分配时,Parallel Tasks 窗口中没有任何信息显示,下图状态中按F10逐过程执行,会出现一条信息,如下图所示:
接着,继续按F10,会出现第二条信息,如下图所示:
上面两幅图中Parallel Tasks 窗口左侧的黄色箭头指示当前任务。
4)只关注一个任务
为了能够在有多个任务并行执行的时候,专注观察一个任务的执行情况,可使用“冻结线程”功能。
如下图所示,Parallel Tasks 窗口中有5个任务,其中1个已分配,4个在执行。
在上图中,右键,调出菜单,选择
,结果一次入下面两幅图:
上图中蓝色的暂停标识表示被冻结的任务。
值得注意的是:我们的程序中有五个任务,然而这里显示四个任务在运行,还有一个已分配,那么它是没有被冻结的,所以还不能够实现专注调试一个任务的目的,待到这个任务运行时,将其冻结后,才可专注调试一个任务。
下图是只有一个活动的任务。
再者:F10为逐过程运行,F11为逐句运行,调试时请使用F11,逐句调试更易发现问题。
5)切换到任务
在Parallel Tasks 窗口,右键点击调出菜单,选择“切换到任务”,可以定位到那个任务对应的匿名方法
3 Threads窗口
断点调试状态下,按F5或点击“启动调试”,然后点击“调试”——>“窗口”——>“线程”:
说明:
1)双击Threads窗口中相应的行可以看到将要执行下一行语句或线程的当前行,如下图所示:
2)Threads窗口不一定会将所有任务都显示出来。
如下图,所示将断点打在第13行,只能看到主线程被加载,其他的任务都没有显示出来。
多加几个断点,如下图所示:
按F5,如下图所示:
双击上图中某一条,注意窗口信息的变化。
4 Call Stack窗口
断点调试状态下,按F5或点击“启动调试”,然后点击“调试”——>“窗口”——>“调用堆栈”
在上图Call Stack窗口中,右键单击,调出菜单。
5 Parallel Stack窗口
断点调试状态下,按F5或点击“启动调试”,然后点击“调试”——>“窗口”——>“并行堆栈”
Parallel Stack窗口的左上角 可以切换显示线程和任务,切换到任务,显示如下:
说明:
1)节点之间的箭头表示任务或线程整体的调用路径,蓝色高亮箭头表示当前任务或线程的路径。
2)同时调出Parallel Stack和Parallel Task窗口,Parallel Stack设置如下图:
双击Parallel Task中的一条任务,可匹配到Parallel Stack中的任务。
将Parallel Stack切换到线程视图,蓝色的为对应部分。
点击红框中的图表,可得下面的视图
6 实战运用
检测死锁
具体程序代码见易错点分析那部分。
按F5,然后“调试”——>“全部中断”,可得下面的结果,从图中可以看出两个任务状态都为“死锁”,双击每一条,可定位到相应的任务。
-----------------------------------------------------------------------------------------
转载与引用请注明出处。
时间仓促,水平有限,如有不当之处,欢迎指正。
.Net多线程编程—使用Visual Studio 2012进行调试的更多相关文章
- 使用Visual Studio 2012远程调试Windows Azure网站
登录Windows Azure门户,点击"所有项目"中的网站名称. 点击"配置". 在"远程调试"选项中选择"打开",在 ...
- Visual Studio 2012远程调试中遇到的问题
有的时候开发环境没问题的代码在生产环境中会某些开发环境无法重现的问题,或者需要对生产环境代码进行远程调试该怎么办? Vs已经提供给开发者远程调试的工具 下面简单讲讲该怎么用,前期准备:1.本地登录账户 ...
- 解决 Visual Studio 2012 有时不能调试的问题
有时候发现 Visual Studio 2012 不能调试,有时候又能调试.感觉很烦,今天找到了一个解决办法,我也不知道为什么这样能解决. 问题: 解决:1. 找到 Properties ,双击 2. ...
- 在Visual Studio 2012中使用VMSDK开发领域特定语言(一)
前言 本专题主要介绍在Visual Studio 2012中使用Visualization & Modeling SDK进行领域特定语言(DSL)的开发,包括两个部分的内容.在第一部分中,将对 ...
- Visual Studio 2012 应用软件开发新方式
微软正式发布Visual Studio 2012 应用软件开发新方式 2012-09-13 09:54 51CTO.com 我要评论(0) 字号:T | T “现在,开发者将有更好的机会开发与云服务连 ...
- 在Visual Studio 2012中使用VMSDK开发领域特定语言1
在Visual Studio 2012中使用VMSDK开发领域特定语言(一) 前言 本专题主要介绍在Visual Studio 2012中使用Visualization & Modelin ...
- Visual Studio 2012编译的程序无法在XP下运行的解决办法【转】
最近看到一篇<Windows编程革命简史>,想到以前刚开始用VS2012的时候,编译的程序在其他人那无法运行,一查才知道是VS2012本身不支持XP.当然现在微软早已在VS2012 Upd ...
- C# 关键字 Visual Studio 2012
C# 关键字 Visual Studio 2012 其他版本 关键字是对编译器具有特殊意义的预定义保留标识符. 它们不能在程序中用作标识符,除非它们有一个 @ 前缀. 例如,@if 是有效的标识符,但 ...
- 如何在Visual Studio 2012中发布Web应用程序时自动混淆Javascript
同Java..NET实现的应用程序类似,Javascript编写的应用程序也面临一个同样的问题:源代码的保护.尽管对大多数Javascript应用公开源代码不算是很严重的问题,但是对于某些开发者来说, ...
随机推荐
- apache、nginx、iis 全球分布
从下图(2012年8月份的数据)来看,来自俄罗斯的Nginx服务器,主要使用区域也集中在俄罗斯及周边国家.微软的IIS,在中国使用最多,占其总份额的57.6%,其他国家如埃及.沙特阿拉伯等国家也基本使 ...
- [iOS Animation]-CALayer 专用图层
专用图层 复杂的组织都是专门化的 Catharine R. Stimpson 到目前为止,我们已经探讨过CALayer类了,同时我们也了解到了一些非常有用的绘图和动画功能.但是Core Animati ...
- RPC(Remote Procedure Call Protocol)——远程过程调用协议
RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在 ...
- HDU 5652 India and China Origins
二分答案+验证,注意一开始就不连通的话输出0 #include<cstdio> #include<cstring> #include<cmath> #include ...
- Salesforce开发者学习笔记之二:Salesforce开发平台应用场景
Salesforce作为一个全方位的CRM系统可以应用于企业中的各个不同部门以取代手工的,耗时的以及低效的业务流程,例如 基于报表的数据管理和分析 基于电子邮件的协同合作 本地的文件共享 各种手工操作 ...
- hadoop重新启动之后Datanode无法启动的问题
每次将hadoop重新启动之后我们查看进程就会发现,namenode成功启动,然而datanode却不能重新启动,格式化以后也不行,百思不得其解,最后在终于在厦门大学的一篇博客里面找到了解决的方法,我 ...
- objective-c之各种数值
各种数值 NSArray和NSDictionary都只能存储对象,不能存储任何基本类型的数据,如int,float,struct.因此我们可以用对象来封装基本的数值. NSNumber Cocoa提供 ...
- LearningDocker--Chapter3--Building images
This chapter is quite different from the earlier ones, and it is in this chapter to clearly describe ...
- Beautiful Soup 定位指南
Reference: http://blog.csdn.net/abclixu123/article/details/38502993 网页中有用的信息通常存在于网页中的文本或各种不同标签的属性值,为 ...
- Unity中使用多构造函数
如果要实例化的类只有一个构造函数, 则使用方法很简单使用方法如下: 1 2 3 4 5 6 7 using (IUnityContainer container = new UnityContaine ...