c#.net程序高级调试 -...

29
C#.NET程序高级调试 2014/06/18 IT中心 陈进学 大龙网(中国)有限公司 | 硅谷·新加坡·香港·中国 海外平台 www.osell.com 国内招商 www.18985.com 全球示范店 www.dinodirect.com

Upload: lamtram

Post on 25-Apr-2018

294 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

C#.NET程序高级调试

2014/06/18 IT中心 陈进学

大龙网(中国)有限公司 | 硅谷·新加坡·香港·中国 海外平台 www.osell.com 国内招商 www.18985.com 全球示范店 www.dinodirect.com

Page 2: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

调试基本原理介绍

VS内置调试器实践

更高级别调试器介绍

微软的变化和.NET的重大改进

主要议题

Page 3: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

调试器(工具)

源码

符号

程序

调试元素

Page 4: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

调试步骤

Page 5: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

PDB为何物?

Page 6: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

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构造

Page 7: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

DEMO

Page 8: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

查看堆栈信息(窗口和IntelliTrace)

跟踪(F10、F11和SHIFT+F11)

运行实例或附加进程(远程)(F5)

断点(F9)

基本步骤

Page 9: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

条件断点

调试窗口

引发异常

远程调试

IntelliTrace

内存转储

VS内置调试器

Page 10: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

DEMO

Page 11: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

探索.NET框架源码的奥妙

Page 12: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

设置VS调试

Page 13: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

DEMO

Page 14: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

未能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。

这样的错误您遇到过吗?

Page 15: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

子目录 bin private base GAC

程序集是如何被找到的?

Page 16: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

DEMO

Page 17: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

当程序很慢,CPU或内存的使用率急剧上升时,怎么办?

Page 18: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

CPU

内存

硬盘

BUG

算法

数据结构

影响性能的主要因素

Page 19: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

性能监视器(强大的计数器分析、变化趋势分析)

VS内置性能分析工具(便捷智能、IDE集成、托管分析)

第三方调试工具(windbg、windows平台最强调试器)

工欲善其事,必先利其器

Page 20: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

随便举三个角度的例子

Page 21: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

同步块表

同步块索引 拥有者所在线程 拥有者对象地址

1 001051B8 003D0078

2 013A51C8 0032007B

-- --

-- --

-- --

8 0019E017 790FD8C4

同步块索引(2) 类型句柄 方法表 EECLASS 对象实例

同步块索引

Page 22: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

DEMO

Page 23: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

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

其实,这些工具也很有用

Page 24: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

微软的变化

针对开源态度的变化,从不公开发表言论到部分开源

众多产品开始集成WindowsAzure云计算平台

对跨平台的支持越来越好(unity3D、Xamarin 和MONO)

网络、硬件和云计算基础设施的发展,WEB富媒体应用越加重要。

Page 25: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

微软开放子公司

Page 26: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

DLR

同进程多版本CLR

BigInteger

命名可选参数

等价类型

契约式设计

并行计算

MEF

OWIN(Katana)

vNext

.NET Native

.NET的重大改进

全新的编译器

Page 27: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

《计算机组成原理》 《CPU自制入门》 《汇编语言》 《windows环境下32位汇编语言程序设计》 《软件调试:Software Debugging》

好书推荐

Page 28: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

www.xcode.me

Page 29: C#.NET程序高级调试 - 零度-分享编程之美œª能加载文件或程序集XXX或它的一个依赖项,系统找不到指定的文件。 这样的错误您遇到过吗?GAC

Thanks