安卓开发从源码看后端技术——搭建环境与断点调试

简介: 今天就让我们开启源码共读的篇章吧,希望这不同的眼界探索可以在这截然不同的领域会有所收获,为自身技术带来启发。

前言

源码阅读其实在工作中也是经常的事,但我毕竟是安卓开发,后端技术我真不是很了解,不过既然掘金提供了这么一个学习的机会,那我自然不会放过,今天就让我们开启源码共读的篇章吧,希望这不同的眼界探索可以在这截然不同的领域会有所收获,为自身技术带来启发。

正篇

本章是根据源码共读活动提供的小册学习任务学习收获而得,内容是有关Netty的,总共七块任务以及一个额外任务,本篇是完成第一个任务。

事先申明,本人从未接触过相关内容,如果在分析过程中有问题,望各位积极指正!


网络异常,图片无法展示
|

导入项目与准备工作

根据文章给出的git克隆命令:

git clone https://github.com/arthur-zhang/netty-study.git

我使用其URL地址(github.com/arthur-zhan… )在GitHub Desktop软件上获取了相应项目库


网络异常,图片无法展示
|


后面发现家中电脑中没有安装IDEA,只有Android Studio,所以还需要安装IDEA,直接官网安装社区版免费的(Download IntelliJ IDEA: The Capable & Ergonomic Java IDE by JetBrains)就可以。


网络异常,图片无法展示
|


安装好IDEA后我们打开拉到本地的项目:


网络异常,图片无法展示
|


作者很贴心的为我们分好了任务结构以及附带README.md文件方便查看任务目标,我一般选择project files(项目文件)形式的目录,我安装的IDEA默认安装了简体中文插件,有点不适应,但官方推荐就安了,安装好要重启一遍才能显示中文版


网络异常,图片无法展示
|

网络异常,图片无法展示
|


接着我们可以看到一行要求导入netty的建议在你打开MyServer.java文件时,我们确定后等待完成即可


网络异常,图片无法展示
|


全部完成我们就能进入源码阅读任务阶段了

断点调试

第一个任务是进行断点调试,这在工作中也经常使用,一般出现日志缺少或需要知道某一结构的具体运行情况时,我们通过在相应位置断点,就可以查看运行时这个区域的相应情形,甚至可以模拟数据来分析相应情况,这在我之前的文章中也提到,虽然我是使用Android Studio的,但AS也是IDEA的魔改,所以都差不多。

但本任务中是使用断点看调用堆栈,据我了解,调用堆栈可以一句一句溯源该语句运行的逻辑;


网络异常,图片无法展示
|


我们可以在MyServer文件中Ctrl+F查询“bind”(Windows系统中),然后定位到该使用语句,在该语句左侧如上图红框处点击鼠标打断点,红色圆代表该处有断点

运行查看

但netty需要服务端和客户端,这里demo是Netty echo server的,所以可以如下操作:

服务端在netty依赖添加好后运行MyServer文件即可


网络异常,图片无法展示
|


如果依赖添加中途关掉了,下次也可以自己在maven文件处右击鼠标选meavn添加好:


网络异常,图片无法展示
|
网络异常,图片无法展示
|


客户端方面,我们在windows系统上先在控制面版上打开Telnet客户端功能,接着直接Win+R,然后cmd,输入命令

telnet localhost 8888

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|


下面nc方法未成功,且作者电脑运行IDEA中突然抽风一次,自动重启了而且重启商标画面变红,有点后怕,暂时建议读者如果没有试过就不要试试,或者等评论区大佬有正确方法再尝试

客户端也可以用nc(netcat)方式,Windows系统需要先下载(netcat 1.11 for Win32/Win64 (eternallybored.org)


网络异常,图片无法展示
|

网络异常,图片无法展示
|


会触发病毒提醒,需要运行在设备上,然后执行操作,再重新下载,解压文件


网络异常,图片无法展示
|


将nc.exe 复制到C:\Windows\System32的文件夹下

作者nc方式未成功,目前原因未解决

命令类似

nc -l -p 8888

网络异常,图片无法展示
|

调试断点,分析结果

我们在main()方法出点击绿色三角形然后选择调试(debug):


网络异常,图片无法展示
|


调试完成后结果如下:


网络异常,图片无法展示
|


可以把光标对到bind代码处,然后Ctrl+单击鼠标可以跳到源码处,如果没有下载,会有提示:


网络异常,图片无法展示
|


至此我成功发现自己没找到任务要求bind的正确位置,但方法同理,我们看看要求在哪个地方断点:


网络异常,图片无法展示
|


原来是ServerSocketChannelImpl类,我们全局搜索一下,Ctrl+Shift+R,再选择最后一个范围,可以查看所有含该关键词的代码:


网络异常,图片无法展示
|


在这个类的第8个bind关键词搜索到我们任务需要的地方,再打断点 这次再调试,成功,我们找到了任务所需要的调试任务栈:


网络异常,图片无法展示
|

backlog参数分析

接下来我们看看打印的backlog参数,


网络异常,图片无法展示
|


可以看到默认为0 然后我们在源码中可以定位到unixBind和netBind方法


网络异常,图片无法展示
|

网络异常,图片无法展示
|


发现该参数小于1时会在Net.listen(...,...)方法中第二个参数转为值50。 到这里看字面意思是网络监听文件描述器,有点懵,去查了一下网上的博客,有如下解释:

backlog影响的accept队列大小

客户端把数据放到accept队列,JVM再从accept队列取。

如果accept队列太小,JVM取数据不够快,那么accept队列就会溢出 不知道靠不靠谱,又看了一下listen方法是native方法:


网络异常,图片无法展示
|


而且四处使用都一样的逻辑:


网络异常,图片无法展示
|


上述的解释有点靠谱,暂时分析到此处。

总结

这次因为包含安装和环境搭建过程,所以总用时较长,阅读源码千万不能钻牛角尖,我们可以在不清楚的地方多查查搜索引擎,看看大神博客,结合起来,才能收获更多,断点的方式也能更好的回溯我们的方法调用过程,在开发维护的时候还是很方便的,源码阅读第一次使用,在文中没有展现出来,我们其实可以从栈底部到顶部依次去看到如何跳到bind方法的:


网络异常,图片无法展示
|
如上图,我们从main方法开始向上一行行点击就能找到运行的跳转逻辑,最终到达断点处bind方法。

除此以外,肯定也有很多实用其他方法,等待我们去发现,也希望掘友们能够提出自己的使用方法,集思广益,才能更利于技术发展!

相关文章
|
16天前
|
存储 缓存 负载均衡
后端开发中的性能优化策略
本文将探讨几种常见的后端性能优化策略,包括代码层面的优化、数据库查询优化、缓存机制的应用以及负载均衡的实现。通过这些方法,开发者可以显著提升系统的响应速度和处理能力,从而提供更好的用户体验。
44 4
|
20天前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
40 19
|
7天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
35 3
|
20天前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
45 14
|
21天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
在数字时代,掌握安卓应用开发技能是进入IT行业的关键。本文将引导读者从零基础开始,逐步深入安卓开发的世界,通过实际案例和代码示例,展示如何构建自己的第一个安卓应用。我们将探讨基本概念、开发工具设置、用户界面设计、数据处理以及发布应用的全过程。无论你是编程新手还是有一定基础的开发者,这篇文章都将为你提供宝贵的知识和技能,帮助你在安卓开发的道路上迈出坚实的步伐。
31 5
|
19天前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
|
21天前
|
XML 搜索推荐 前端开发
安卓开发中的自定义视图:打造个性化UI组件
在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
23天前
|
存储 前端开发 Java
深入理解后端开发:从基础到高级
本文将带你走进后端开发的神秘世界,从基础概念到高级应用,一步步揭示后端开发的全貌。我们将通过代码示例,让你更好地理解和掌握后端开发的核心技能。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的信息和启示。
|
21天前
|
运维 监控 Java
后端开发中的微服务架构实践与挑战####
在数字化转型加速的今天,微服务架构凭借其高度的灵活性、可扩展性和可维护性,成为众多企业后端系统构建的首选方案。本文深入探讨了微服务架构的核心概念、实施步骤、关键技术考量以及面临的主要挑战,旨在为开发者提供一份实用的实践指南。通过案例分析,揭示微服务在实际项目中的应用效果,并针对常见问题提出解决策略,帮助读者更好地理解和应对微服务架构带来的复杂性与机遇。 ####
|
20天前
|
搜索推荐 前端开发 测试技术
打造个性化安卓应用:从设计到开发的全面指南
在这个数字时代,拥有一个定制的移动应用不仅是一种趋势,更是个人或企业品牌的重要延伸。本文将引导你通过一系列简单易懂的步骤,从构思你的应用理念开始,直至实现一个功能齐全的安卓应用。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你提供必要的工具和知识,帮助你将创意转化为现实。