Redian新闻
>
提高调试能力的一些方法 | Linux 中国

提高调试能力的一些方法 | Linux 中国

科技
 
导读:一篇论文(《建立一个调试教学的框架》)对我们有效调试所需的不同种类的知识/技能进行了分类       
本文字数:1815,阅读时长大约:3分钟

你们好!我一直在编写一本关于调试的杂志(这是 目录的初稿🔗 twitter.com)。

作为其中的一部分,我认为阅读一些关于调试的学术论文可能会很有趣,上周 Greg Wilson🔗 third-bit.com 给我发了一些关于调试学术研究的论文。

其中一篇论文(《建立一个调试教学的框架[付费墙]🔗 dl.acm.org》)对我们有效调试所需的不同种类的知识/技能进行了分类,我非常喜欢。它来自另一篇关于故障排除的更一般性的论文:《学会排错:一个新的基于理论的设计架构🔗 www.researchgate.net》。

我认为这个分类对于思考如何更好地进行调试是一个非常有用的结构,所以我把论文中的五个类别重新规划为你可以采取的行动,以提高调试的效率。

以下是这些行动:

1、学习代码库

要调试一些代码,你需要了解你正在使用的代码库。

这似乎有点显而易见(当然,不了解代码的工作原理,你就无法调试代码!)

这种学习随着时间的推移会很自然地发生,而且实际上调试也是 学习 一个新的代码库如何工作的最好方法之一—— 看到一些代码是如何崩溃的,有助于你了解它是如何工作的。

该论文将此称为“系统知识”。

2、学习系统

论文中提到,你需要了解编程语言,但我认为不止于此 —— 为了修复 bug,往往你需要学习很多更广泛的环境,而不仅仅是语言。

举个例子,如果你是后端 Web 开发者,你可能需要的一些“系统”知识包括:

◈ HTTP 缓存如何工作
◈ CORS
◈ 数据库事务是如何工作的

我发现我经常需要更有意识地去学习像这样的系统性的东西 —— 我需要真正花时间去查找和阅读它们。

该论文将此称为“领域知识”。

3、学习你的工具

现在有很多工具,例如:

◈ 调试器(GDB 等)
◈ 浏览器开发工具
◈ 剖析器(profiler)
◈ strace / ltrace
◈ tcpdump / wireshark
◈ 核心转储
◈ 甚至像错误信息这样的基本东西(如何正确阅读它们)

我在这个博客上写了很多关于调试工具的文章,并且肯定学习这些工具给我带来了巨大的变化。

该论文将此称为“处理性知识”。

4、学习策略

这是最模糊的一类,在如何高效调试的过程中,我们都有很多策略和启发式方法。比如说:

◈ 写一个单元测试
◈ 写一个小的独立程序来重现这个错误
◈ 找到一个能工作的版本的代码,看看有什么变化
◈ 打印出无数的东西
◈ 增加额外的日志记录
◈ 休息一下
◈ 向朋友解释这个错误,然后在中途发现问题所在
◈ 查看 GitHub 上的问题,看看是否有匹配的问题

在写这本杂志的时候,我一直在思考这个类别,但我想让这篇文章简短,所以我不会在这里多说。

该论文将此称为“战略知识”。

5、获得经验

最后一个类别是“经验”。这篇论文对此有一个非常有趣的评论:

他们的研究结果并没有显示出新手和专家所采用的策略有什么明显的区别。专家只是形成了更多正确的假设,并且在寻找故障方面更有效率。作者怀疑这个结果是由于新手和专家之间的编程经验不同造成的。

这真的引起了我的共鸣 —— 我遇到过很多第一次遇到时非常令人沮丧和困难的 bug,而在第五次、第十次或第二十次时就非常简单了。

对我来说,这也是最直接的知识类别之一 —— 你需要做的就是调查一百万个 bug,反正这就是我们作为程序员的全部生活 : ) 。这需要很长的时间,但我觉得它发生得很自然。

本文将此称为“经验知识”。

就这样吧!

我打算把这篇文章写得很短,我只是非常喜欢这个分类,想把它分享出来。


via: https://jvns.ca/blog/2022/08/30/a-way-to-categorize-debugging-skills/

作者:Julia Evans 选题:lkxed 译者:aftermath0703 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出


LCTT 译者 :aftermath0703
🌟🌟
翻译: 2.0 篇
|
贡献: 6 天
2022-08-25
2022-08-31
https://linux.cn/lctt/aftermath0703
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
如何在 Ubuntu/Linux 和 Windows 之间共享文件夹 | Linux 中国用 nftwatch 监控你的 Linux 防火墙 | Linux 中国有了扩展,GNOME Web 正逐渐成为 Linux 桌面上一个有吸引力的选择 | Linux 中国如何在 Manjaro 和其他 Arch Linux 衍生品上安装 Discord 客户端 | Linux 中国如何编写 C 程序在 Linux 上创建音乐播放列表 | Linux 中国一条鱼的水煮 ~~*自贡跳水鱼*~~麻辣鲜香Linux 下的 Docker 入门教程 | Linux 中国手把手教你使用 GNU 调试器 | Linux 中国在 Linux 上使用 Rhythbox 听音乐 | Linux 中国又有 Linux 开发者加入微软,这次是 systemd 的创建者 | Linux 中国如何在 Arch Linux 中安装深度桌面(DDE) | Linux 中国诺基亚勒令一个开源 Linux 手机项目 “NOTKIA” 改名字 | Linux 中国检查 Linux 磁盘使用情况 | Linux 中国在 Linux 中找到你的路由器的 IP 地址(默认网关) | Linux 中国一场比红军爬雪山过草地还要艰险的行军在 Linux 上学习 C 语言的五种方式 | Linux 中国如何从 Windows 上用 SSH 连接到 Linux | Linux 中国Linux 上静态链接库工作原理 | Linux 中国在 Linux 中隐藏文件和文件夹的那些事 | Linux 中国ZT. 地下党的危险: 1948年,金柯潜伏我党内部策划暗杀领导人,最后为啥被化解了呢?在 VirtualBox 安装 Arch Linux 的新手操作指南 | Linux 中国Tuxedo 已对所有用户开放基于 Ubuntu 的 TUXEDO OS | Linux 中国星际战机:配备 4K 10 位 IPS 显示屏的 Linux 笔记本电脑即将问世 | Linux 中国修复 Ubuntu Linux 中 “Command ‘python’ not found” 的错误 | Linux 中国关于 Linux 和 Git 的创造者 Linus Torvalds 的 20 件趣事 | Linux 中国Kuro:非官方的微软 To-Do Linux 桌面客户端 | Linux 中国纳税人的神圣与幼稚在 Linux 上截屏的 3 种方法 | Linux 中国初级:如何在 Arch Linux 中安装 Yay AUR 助手 | Linux 中国用 ranger 在 Linux 终端管理你的文件 | Linux 中国现世姻缘 (一)如何在 Linux 上动态链接模块库 | Linux 中国Rosalía 登意大利版《VOGUE》封面!Fedora Linux 37 即将正式支持树莓派 4 | Linux 中国Linux inxi 命令的 3 种使用方法 | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。