内容简介
随着.NET Core 开源和跨平台的特性逐渐被广大开发者熟知和接受,有越来越多的.NET 应用从Windows 平台向Linux 平台进行迁移,有越来越多的开发者在Linux 或者macOS 操作系统上开发.NET 应用。同时,这也给之前只熟悉在Windows 平台上开发.NET 应用的开发者带来了一系列挑战。怎样在Linux 和macOS操作系统上有效地使用工具对.NET Core 应用程序进行调试,找出程序中隐藏的代码错误和内存中的问题成为保障应用程序在Linux 和macOS 上平稳运行的重要课题。本书从.NET Core概念、.NET Core 相关工具、调试器选择、调试命令介绍和多线程、内存调试实践等多个环节对.NET Core在Linux、macOS和Windows 三个操作系统上如何进行调试做了详尽的介绍。内容包括.NET Core基础知识、.NET Core 的编译、.NET Core 命令行工具、调试环境的配置、调试器的基本命令、.NET 基本调试命令、多线程、async和await、内存和垃圾收集等,分9章全面地阐述了.NET Core 跨平台调试技术。
作者简介
李争 微软(中国)有限公司开发者体验与平台合作事业部资深技术顾问。专注于微软公有云平台Azure的解决方案和架构设计、Azure应用的实施,以及Azure上的开源技术等工作。曾在微软企业服务部作为原厂技术支持工程师工作多年,承担企业开发者代码调试和技术支持、Web应用前端后端代码调优,以及IIS 的问题诊断、调优、培训等工作。具有丰富的企业客户临场解决严重系统问题的经验。拥有四十多门微软认证证书,涵盖了几乎全部微软开发相关技术,同时也是一位具有十多年授课经验的微软认证讲师(MCT)。 著有《微软互联网信息服务(IIS)实践》《微软开源跨平台移动开发实践》畅销图书。
编辑推荐
本书系统论述了.NET Core 的相关概念、编译方法、命令行工具使用方法、调试环境搭建,调试器基本使用方法、.NET Core 调试扩展基本使用方法、.NET Core 多线程应用程序调试、以及.NET Core 内存管理垃圾收集器等相关知识。全书论述了如下主题:
.NET Core 你需要知道的;
.NET Core 的编译;
.NET Core 命令行工具;
调试环境的配置;
调试器的基本命令;
.NET 基本调试命令;
多线程调试;
async 和await;
内存和垃圾收集。
前言
前言
不知不觉,.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月
目录
丛书序Ⅰ
推荐序Ⅲ
前言Ⅴ
赞誉Ⅸ
第1章.NET Core基础知识
1.1.NET Core到底是什么
1.1.1从软件许可协议说开源
1.1.2构成.NET Core的重要组件
1.2.NET Standard又是什么
1.3.NET Core的一些重要工具
1.4常见问题解答
第2章.NET Core的编译
2.1.NET Core源代码在Linux操作系统上的编译
2.1.1获取.NET Core源代码
2.1.2安装编译源代码必要的工具
2.1.3在CentOS上手工编译LLVM、Clang和LLDB
2.1.4在Linux上编译.NET Core源代码
2.2.NET Core源代码在Windows操作系统上的编译
2.2.1下载和安装Visual Studio
2.2.2安装其他必备软件
2.2.3在Windows系统上执行.NET Core编译
2.3.NET Core源代码在macOS操作系统上的编译
第3章.NET Core命令行工具
3.1.NET Core CLI的安装
3.2创建.NET Core项目
3.3.NET Core项目的迁移
3.4.NET Core项目的构建
3.5.NET Core项目的发布
3.6对.NET Core项目进行管理
3.6.1dotnet sln命令介绍
3.6.2项目之间的引用管理
3.6.3项目的包管理
3.6.4项目引用NuGet包的恢复
3.7.NET Core应用的执行
3.8将.NET Core项目发布成NuGet包
3.8.1dotnet pack命令介绍
3.8.2dotnet nuget push命令介绍
3.8.3dotnet nuget locals命令介绍
3.8.4dotnet nuget delete命令介绍
3.9dotnet相关命令的使用
3.9.1创建解决方案和项目
3.9.2设置项目的引用
3.9.3添加测试工程
第4章调试环境的配置
4.1调试环境设置概述
4.2Linux操作系统调试环境设置
4.2.1在Linux上设置ulimit
4.2.2在Linux操作系统上部署调试器
4.2.3在Linux操作系统上抓取内存转储文件
4.3在macOS操作系统上部署调试器
4.4在Windows操作系统上部署调试器
4.4.1Windows上安装Windbg
4.4.2在Windows上抓取内存转储
第5章调试器的基本命令
5.1使用LLDB进行调试
5.1.1LLDB调试器简介
5.1.2命令行参数
5.1.3一段用于演示的代码
5.1.4LLDB的启动和退出
5.1.5设置断点
5.1.6单步调试指令
5.1.7查看调用堆栈
5.1.8线程切换
5.1.9寄存器调试指令
5.1.10查看内存数据
5.2Windbg调试器和基本指令
5.2.1Windbg简介
5.2.2Windbg的启动和退出
5.2.3Windbg设置断点
5.2.4Windbg查看堆栈调用
5.2.5Windbg线程相关指令
5.2.6Windbg寄存器相关指令
5.2.7Windbg查看内存数据
第6章.NET基本调试命令
6.1.NET调试扩展概览
6.2.NET数据结构的基本知识
6.2.1对象在内存中的形态
6.2.2MethodTable和EEClass
6.2.3MethodDesc
6.3.NET调试扩展命令
6.3.1代码和堆栈调试命令
6.3.2CLR数据结构相关调试命令
6.3.3内存对象分析相关命令
6.4那些所谓的调试套路
第7章多线程
7.1多线程基础
7.1.1线程的基本概念
7.1.2.NET Core多线程同步对象
7.2一个简单的多线程程序调试
7.2.1MassiveThreads程序
7.2.2LLDB调试MassiveThreads
7.2.3Windbg调试MassiveThreads
7.2.4MassiveThreads调试总结
7.3程序死锁的调试
7.3.1DBDeadlockHang应用程序
7.3.2使用LLDB调试死锁
7.3.3使用Windbg调试死锁
7.3.4死锁调试总结
第8章async和await
8.1基于任务的异步编程模式
8.2如何写好一个TAP异步方法
8.2.1函数的命名和声明
8.2.2异步方法中的代码
8.2.3函数中的异常处理
8.2.4异步方法执行过程中的终止
8.2.5异步任务执行进度的通知
8.3async/await是什么
8.4async/await调试
8.4.1使用LLDB在Linux上调试异步方法
8.4.2在Visual Studio 2017上调试异步方法
第9章内存和垃圾收集
9.1.NET Core内存管理工作原理
9.1.1从一行简单的代码看内存申请
9.1.2.NET Core内存管理概览
9.1.3托管堆内存的分代管理
9.1.4Finalizer队列
9.2内存泄漏调试
9.2.1如何诊断内存泄漏
9.2.2Linux的内存泄漏调试
9.2.3Windows下的内存泄漏调试
9.3Finalizer队列调试
后记
短评
书还可以,是不是太薄了啊
2018-10-15 07:14:20
还可以,不错的东东。有需要再买。
2018-10-13 09:06:32
1.书实际很薄,和商品的照片差别极大,拿到手上感觉货不对版
2..net core的书本来就少,国内原创也不容易。本该给个高分鼓励,可是内容过于简单,介绍命令占了相当大的篇幅。给个三星
2018-10-14 00:31:21
还没看,同事推荐的,应该会很不错
2018-10-13 07:50:55
性价比不高哦,定价偏贵
2018-10-13 09:07:25
好书,粗看一下内容非常适合想深入了解的人
2018-10-12 14:20:59
学习新的语言
2018-09-25 14:34:33
此用户未填写评价内容
2018-10-17 02:04:28
此用户未填写评价内容
2018-10-12 22:20:03
此用户未填写评价内容
2018-10-13 12:06:50