惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
Jina AI
Jina AI
月光博客
月光博客
博客园 - Franky
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
有赞技术团队
有赞技术团队
V
V2EX
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
Apple Machine Learning Research
Apple Machine Learning Research
腾讯CDC
D
DataBreaches.Net
Hugging Face - Blog
Hugging Face - Blog
Martin Fowler
Martin Fowler
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
WordPress大学
WordPress大学
C
Check Point Blog
Microsoft Azure Blog
Microsoft Azure Blog
Microsoft Security Blog
Microsoft Security Blog

jdhao's digital space

Conversion between base64 and OpenCV or PIL Image 腾讯云对象存储博客图床开启 CDN 加速(不需要购买额外域名) Search and Replace in Multiple Files in Vim/Neovim Change Table Column Width in LaTeX Image or Table Side by Side in LaTeX LaTeX 并排显示图像或表格 Firenvim: Neovim inside Your Browser Content inside HTML tags missing in Latest Hugo? Creating Markdown Front Matter with Ultisnips Labelme JSON 标注格式转 voc XML 格式 Nifty Nvim Techniques That Make My Life Easier -- Series 6 macOS 下如何为视频制作字幕 Running Command Asynchronously inside Neovim Resolving Merge Conflict after Git Stash Pop Pylint: command not found? A Hands-on Experience with Neovim's Built-in LSP Support How to Convert PDF to Images with Imagemagick 互联网上常用缩略语集锦 File Backup in Neovim Converting PDF Pages to Images with Poppler Nifty Nvim Techniques That Make My Life Easier -- Series 5 Neovim Configuration for System-wide Use How to sort a list of tuple or list in Python -- lambda or itemgetter? Building A Vim Statusline from Scratch 人类第一颗原子弹爆炸始末 Distributed Training in PyTorch with Horovod Learning Expect Programming Essential Knowledge about SSH Nifty LaTeX Techniques -- Series 1 更改 Adsense 邮寄地址,重新寄送 PIN
如何找到技术问题根源?
2020-07-05 · via jdhao's digital space

在实际编程中,我们总会遇到各种各样的代码运行问题,如何快速发现问题的根源需要一些系统的方法,构造一个最小的能够复现错误的环境至关重要,也就是所谓的 MWE,minimal working example。

为什么 MWE 很重要?因为通过构造MWE,我们能不断缩小问题的范围,定位问题的根源,而不是表面的现象,例如代码在 Linux 上运行错误,我们不能把代码错误归结为操作系统原因,这个范围太庞大,无助于解决问题。另外,通过构造 MWE,在这个过程中,我们可能靠自己就能解决问题,即使解决不了问题,在 stackoverflow 或者 github 上提供 MWE,也更有可能得到别人的回复。

如果是一个很大的项目,有时候很难找到具体出错位置,可以根据报错的信息,在代码中加入 log 打印,这样可以大致锁定出错的位置。

锁定出错的位置以后,需要新建一个 toy 项目,这个项目应该用最少的,最简单的代码来尝试复现问题,代码越简单,越容易找到问题的本质。通常我们还需要引用一些库或者安装一些程序,要保持这些引用或者安装在最小的程度,足够复现问题即可。

一旦确定了表面问题,可以试着把出现问题的代码注释,或者换一种写法,看问题是否还会出现,进一步确定问题根源。另外,有的时候,可能是代码和库的版本配合问题,对于 Python,用的哪个版本的 Python 影响比较大,可以尝试更换版本,观察问题是否仍然存在。通常确定问题根源的过程需要反复尝试,才能最终确定 bug 的根源。

通过不断缩小问题范围,通常能很快定位到问题根源,看似“浪费”了很多时间来复现 bug,综合算起来还是节省了时间,避免大量无头苍蝇式的尝试。