前言
不知不觉,.NET Core已经开源三年多了。在这三年多的时间里,我作为一个亲历者,经历了.NET Core从1.0到2.0的涅槃。这几年,也是我个人转型为一名微软技术布道师(Evangelist)的重要时期。
作为一名24年前第一次接触计算机就使用微软产品的我来说,微软这三年带来的变化对我的影响真是太大了!开源和云计算除了让微软的股价翻了两番以外,也让我走上了学习和了解开源世界的道路。开源为我打开了世界的另一扇门,让我了解到传统企业软件以外的广阔世界。开源真的彻底改变了我的思维。以前,写一个客户端应用,我会直接打开Visual Studio;现在,我会考虑清楚用哪种技术才能同时支持Windows、Linux和macOS三个操作系统平台,再去动手开发。你能想象吗?这本书的全部内容就是我在一台苹果笔记本上创作的,书稿的版本管理是通过Git和Visual Studio Online来实现的。
当然,作为一名Windows平台的开发者,向开源世界转型也并不是轻松的。为此,我专门买了一台Macbook Pro。在工作和业余时间强迫自己去适应它,去熟悉开源世界的那些常用工具,在开发过程中体会Visual Studio Code的轻便快捷。在这个过程中也积累了一些经验,我的这本书就是我在开源世界工作经验的一部分总结。
.NET Core作为.NET Framework的一个开源世界的变体,与.NET Framework既有千丝万缕的联系,又有很大的区别。一方面.NET Core的大部分代码都来自.NET Framework,另一方面.NET Core还要处理好.NET Framework不曾面对的跨平台、自包含等新问题的挑战。在使用.NET Core开发的过程中,我发现有很多的待解决问题。于是,我决定用我的这本书将它们总结出来分享给广大.NET开发者,让他们在使用.NET Core开发应用程序时少走一些弯路。
这本书集成了我在微软作为开发方向原厂支持工程师(PFE)时的应用程序调试和调优的经验,同时也融合了我在Linux平台上的使用经验。通过本书,我将向大家介绍如何在Linux的各个发行版本以及Windows上利用调试器对.NET Core应用程序进行调试的技术和技巧。因为.NET Core要想在生产环境上大规模地使用,必须有强大的应用程序调试技术作为保证,以便快速定位问题和解决问题。
通过长达一年时间的写作和对.NET Core问题状态的追踪和分析,现在我真的认为是时候把应用程序迁移到.NET Core上了!
本书包含哪些内容
本书系统论述了.NET Core的相关概念、编译方法、命令行工具使用方法、调试环境搭建、调试器基本使用方法、.NET Core调试扩展基本使用方法、.NET Core多线程应用程序调试,以及.NET Core内存管理垃圾收集器等相关知识。本书全面详尽地阐述了.NET Core源代码获取、编译、调试的全方位技术,你需要知道的.NET Core技术、.NET Core的编译、.NET Core命令行工具的使用、调试环境的配置、调试器的基本命令、.NET调试基本命令、多线程、async和await、内存和垃圾收集等内容。
如何高效地阅读本书
本书从读者角度出发,章节由浅入深,从.NET Core常见问题讲起,直到最后综合运用各种工具对.NET Core应用程序高级排错。因此,建议读者从头至尾顺序阅读。如果读者具有丰富的Linux使用经验,也可以忽略其中一些简单的章节。
本书适合哪些读者
本书适合使用.NET Core技术进行应用程序开发的相关开发人员,也适合于希望深入了解和学习.NET Core平台的读者。
致谢
首先,我要感谢我的家人和我可爱的女儿。因为我在写书稿时严重占用了和她们在一起休闲的时间。其次,要感谢我敬爱的老板崔宏禹老师,以及认真负责的责任编辑盛东亮,这是我们合作的第三本书了。最后我还要感谢我心里爱着的那个人,你是我创作的原动力。由于作者水平有限,.NET Core跨平台相关知识涉及广泛,书中难免存在疏漏和不妥之处,敬请广大读者批评指正。
书中样例代码
为了详尽描述调试的整个过程,突出一些要调试的现象,书中涉及了许多.NET Core代码工程。这些代码都是使用Visual Studio Code针对.NET Core 2.0进行编写,源代码下载地址:
https://github.com/micli/netcoredebugging
以上源代码都可以在.NET Core 2.0环境的支持下,运行在Windows、Linux和macOS操作系统上。
书中特殊约定
为了直观,书中与操作系统相关的命令都通过操作系统对应的商标来标识,代表这些命令在对应的操作系统下测试通过。因Linux发行版本众多,不同发行版本的Linux部分命令可能略有差异。因作者精力有限,仅能覆盖CentOS/Red Hat和Debian/Ubuntu等最流行的两组发行版本,望读者见谅。
(1)代表Debian 8.0或者Ubuntu操作系统;
(2)代表CentOS 7.0或者Red Hat操作系统;
(3)代表Windows 8.1、10、Server 2008/2012/2016系列操作系统;
(4)代表macOS Sierra系列操作系统。
在书中配有大量的Shell命令、C#代码和调试器指令以及为了说明调试输出的图片。书中的命令是指用户与操作系统Shell之间交互时输入的命令;代码是指经过编译,可以运行在.NET Core 2.0上的C#语言源代码;调试是指调试者与Windbg或者LLDB调试器之间交互时输入的调试指令。请读者在阅读时加以区分。
编著者
2018年8月