《Effective Debugging: 66 Specific Ways to Debug Software and Systems》阅读笔记

Keywords: 调试, gdb, Linux, memory dump, 汇编代码, 字节码
【Z-Library】

阅读提示词

询问书本

请问,您听说过“Effective Debugging:软件和系统调试的66个有效方法”这本书吗?
请问,您听说过“Effective Debugging: 66 Specific Ways to Debug Software and Systems”这本书吗?

段落翻译

我是一名来自中国的高中生,我正在阅读这本书,其中写到:
"""
xxxxxxxxxx
"""
请问,这段文字对应的中文是什么呀?
我在继续阅读这本书,它写到:
"""
xxxxxxxxxx
"""
请问,这段文字对应的中文是什么呀?
我在继续阅读这本书,它继续写到:
"""
Are the routine’s side effects the expected ones? Has any other data touched by the suspect code been corrupted or set to an incorrect value? This is especially important for algorithms that maintain their own housekeeping information within the data structures they traverse.
"""
请问,这段文字对应的中文是什么呀?

常见术语

routine:例程

3:确保前置条件(Preconditions)与后置条件都能够得到满足

5:在能够正常运作的系统与发生故障的系统之间寻找差别

Keywords: 对比调试法

41:添加日志语句

41.1 将有意义的调试输出保留到条件语句中

在这里插入图片描述

47:将可疑代码改用另外一种编程语言来写

48:改善可疑代码的可读性与结构

要点

  • 如何优化switch语句
  • 使用状态模式优化switch语句

48.1 代码重构

重复的代码(duplicated code)可能会引入bug,因为如果你只对其中的几份代码做了改进与修复,而没有更新其他的副本,那么未更新的那些代码就有可能出现问题。我们应该把这些重复的代码全都放到一个常用的例程、类或模板里面,这样只需要在一个地方做出修改,就可以在整个程序中见效。

49:要清除bug的根源,而不仅仅消除其症状

❏由于这种权宜的“修复”方案把症状给掩盖起来了,因此bug的根源就会变得更难查找。比如,当程序发生崩溃时,你本来可以据此去寻找bug的根源(参见第55条),但你却选择了用临时代码来绕过这个bug。
由此可见,只掩盖bug症状而不清除其根源的做法,是一种看似轻松但实际上很费事的举动,它会令你的程序背负技术债务(technical debt)。

这里也说明了第一性原理的重要性;

52:对项目进行配置,令程序能够以固定的方式构建和执行

❏对哈希表或图(map)进行遍历后所得到的列表,其元素顺序可能会有所不同。某些编程语言为了防止算法复杂度攻击,每次都会采用不同的方式来为对象进行哈希,这会导致每次遍历容器时所看到的元素顺序有所区别。要想解决这个问题,我们可以对遍历之后所产生的列表进行排序。对于Perl和Python语言来说,也可以分别通过设置PERL_HASH_SEEDPYTHONHASHSEED环境变量来解决。

53:对调试所用程序库及构建代码时所应执行的检查进行配置

Keywords: C++, 内存泄漏, AddressSanitizer

57:对系统和进程所执行的操作进行性能评测

Keywords: 虚拟内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值