加入收藏 | 设为首页 | 会员中心 | 我要投稿 桂林站长网 (https://www.0773zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 评论 > 正文

阅读一份源代码

发布时间:2021-05-04 13:45:30 所属栏目:评论 来源:互联网
导读:求,为了调试跟踪Nginx的行为,我经常把worker数量设置为1个,这样调试的时候就知道待跟踪的是哪个进程了。 总而言之,跑起来之后的调试效率能提升很多,而在跑起来的前提之下又要尽量精简环境。 调试手段 调试手段,大体分为以下两种: 加调试语句。为了做

求,为了调试跟踪Nginx的行为,我经常把worker数量设置为1个,这样调试的时候就知道待跟踪的是哪个进程了。

总而言之,跑起来之后的调试效率能提升很多,而在跑起来的前提之下又要尽量精简环境。

调试手段

调试手段,大体分为以下两种:

  • 加调试语句。为了做到这一点,你需要先了解项目如何加调试日志,可能需要修改项目的日志级别支持输出一些在调试级别的日志,等等。
  • 断点调试。并不是所有项目代码,跑起来之后都自带调试信息能够断点调试的。所以在自己的调试环境里需要先确定这一点。比如一些C相关的项目,基本都是”./configure & make”来编译,但是makefile中的编译flags使用了O2之类的优化选项,此时需要自己先手动修改成”-O0 -g”,即编译生成的二进制中不优化且带上调试信息。

总之,在能够搭建自己的调试环境之后,还需要想办法确定一下如何加上调试日志以及断点调试。

使用顺手的工具

好的工具会让你事半功倍,这一点应该很多人都同意。

我阅读Go代码的时候,喜欢使用IDEA,这个IDE工具可以***的做到以下几点:

符号的定位、跳转、查找符号被引用的地方。

左边能够展开一个源码文件中的所有符号。

反之,很多人推崇的VSCode,我几次尝试使用用来阅读Go和C类代码,都觉得不够顺手,查找符号能力不行、也没有地方可以看到一个文件中出现的符号。

CC++类的代码,在尝试各种工具之后,还是使用Vim+Ctags+Cscope来写C、C++代码。

情景分析

假如有了前面的基础,已经能够让项目顺利在自己的调试环境跑起来了,那么就可以对项目代码进行情景分析了。

所谓的“情景分析”,我的理解就是自己构造一些情景,然后通过加断点、调试语句等分析在这些场景下的行为。

以我自己为例,在写《Lua设计与实现》时,讲解到Lua虚拟机指令的解释和执行过程中,需要针对每个指令做分析,此时用的就是情景分析的方法。我会模拟出来使用该指令的Lua脚本代码,然后在程序里断点调试这些场景下的行为。

我惯用的做法,是在某个重要的入口函数上面加上断点,然后构造触发场景的调试代码,当代码在断点处停下,通过查看堆栈、变量值等等来观察代码的行为。

情景分析的好处在于:不会在一个项目中大海捞针似的查找,而是能够把问题缩小到一个范围内展开来理解。

(编辑:桂林站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读