c#.net程序高级调试 -...
TRANSCRIPT
C#.NET程序高级调试
2014/06/18 IT中心 陈进学
大龙网(中国)有限公司 | 硅谷·新加坡·香港·中国 海外平台 www.osell.com 国内招商 www.18985.com 全球示范店 www.dinodirect.com
调试基本原理介绍
VS内置调试器实践
更高级别调试器介绍
微软的变化和.NET的重大改进
主要议题
调试器(工具)
源码
符号
程序
调试元素
调试步骤
PDB为何物?
PE
003400D5 push
003825F3 mov
000340E3 call
-- --
-- --
-- --
003400FA ret
PDB
003400D5 12行
003825F3 12行
000340E3 14行
-- --
-- --
-- --
003400FA 32行
源代码
12行 int a=5
13行 a=5
14行 a.ToString()
-- --
-- --
-- --
32行 return a
PDB构造
DEMO
查看堆栈信息(窗口和IntelliTrace)
跟踪(F10、F11和SHIFT+F11)
运行实例或附加进程(远程)(F5)
断点(F9)
基本步骤
条件断点
调试窗口
引发异常
远程调试
IntelliTrace
内存转储
VS内置调试器
DEMO
探索.NET框架源码的奥妙
设置VS调试
DEMO
未能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。
这样的错误您遇到过吗?
子目录 bin private base GAC
程序集是如何被找到的?
DEMO
当程序很慢,CPU或内存的使用率急剧上升时,怎么办?
CPU
内存
硬盘
BUG
算法
数据结构
影响性能的主要因素
性能监视器(强大的计数器分析、变化趋势分析)
VS内置性能分析工具(便捷智能、IDE集成、托管分析)
第三方调试工具(windbg、windows平台最强调试器)
工欲善其事,必先利其器
随便举三个角度的例子
同步块表
同步块索引 拥有者所在线程 拥有者对象地址
1 001051B8 003D0078
2 013A51C8 0032007B
-- --
-- --
-- --
8 0019E017 790FD8C4
同步块索引(2) 类型句柄 方法表 EECLASS 对象实例
同步块索引
DEMO
windows内置性能监视器支持多种计数器:perfmon.exe
微软强大的用户态和内核态调试工具:Debugging Tools for Windows
微软官方发布的性能分析工具(可分析启动过程):windows performance toolkit
强大的进程管理器分析比任务管理更加详细的信息:Process Explorer
用图表的方式分析CLR运行时堆栈信息:CLR Profiler
基于.NET的内存分析工具:.NET Memory Profiler
更细节地分析CPU统计、GC统计和JIT编译统计:PerfMonitor
visual studio内置性能分析工具:强大的IDE集成和友好的界面
重在分析堆的使用情况可支持保存和加载堆镜像:PerfView
其实,这些工具也很有用
微软的变化
针对开源态度的变化,从不公开发表言论到部分开源
众多产品开始集成WindowsAzure云计算平台
对跨平台的支持越来越好(unity3D、Xamarin 和MONO)
网络、硬件和云计算基础设施的发展,WEB富媒体应用越加重要。
微软开放子公司
DLR
同进程多版本CLR
BigInteger
命名可选参数
等价类型
契约式设计
并行计算
MEF
OWIN(Katana)
vNext
.NET Native
.NET的重大改进
全新的编译器
《计算机组成原理》 《CPU自制入门》 《汇编语言》 《windows环境下32位汇编语言程序设计》 《软件调试:Software Debugging》
好书推荐
www.xcode.me
Thanks